just-paja/improtresk-web

View on GitHub
src/api.js

Summary

Maintainability
C
1 day
Test Coverage
import qsm from 'query-string-manipulator'
import fetch from 'isomorphic-fetch'

import { idFromSlug } from './routeTable'

const apiFetch = (url, { apiSource, headers = {}, ...params }) =>
  fetch(`${apiSource}/${url}`, {
    headers: {
      'Content-Type': 'application/json; charset=utf-8',
      ...headers
    },
    ...params
  })

const apiFetchAuthorized = (url, { auth, ...params }) =>
  apiFetch(url, {
    ...params,
    headers: {
      Authorization: `Bearer ${auth.access_token}`,
      ...params.headers
    }
  })

export const fetchArchivedYear = ({ year, ...params }) =>
  apiFetch(`years/${idFromSlug(year)}/`, params)

export const fetchAccomodation = ({ year, ...params }) =>
  apiFetch(`years/${year}/accomodation/`, params)

export const fetchCapacity = ({ year, ...params }) =>
  apiFetch(`years/${year}/capacity/`, params)

export const fetchRules = ({ year, ...params }) =>
  apiFetch(`years/${year}/rules/latest/`, params)

export const fetchLectorRoles = params => apiFetch('lectorRoles/', params)

export const fetchLectors = params => apiFetch('lectors/', params)

export const fetchMeals = ({ year, ...params }) =>
  apiFetch(`years/${year}/meals/`, params)

export const fetchNews = params => apiFetch('news/', params)

export const fetchNewsDetail = ({ newsId, ...params }) =>
  apiFetch(`news/${idFromSlug(newsId)}/`, params)

export const fetchPerformers = ({ year, ...params }) =>
  apiFetch(`years/${year}/performers/`, params)

export const fetchPerformerDetail = ({ performer, year, ...params }) =>
  apiFetch(`years/${year}/performers/${idFromSlug(performer)}/`, params)

export const fetchTeams = params => apiFetch('teams/', params)

export const fetchText = ({ lang, category, ...params }) =>
  apiFetch(qsm('texts/', {
    set: { lang, category }
  }), params)

export const fetchTips = params => apiFetch('traveling-tips/', params)

export const fetchYears = params => apiFetch('years/', params)

export const fetchScheduleEvents = ({ year, ...params }) =>
  apiFetch(`years/${year}/schedule/`, params)

export const fetchWorkshopDetail = ({ workshop, year, ...params }) =>
  apiFetch(`years/${year}/workshops/${idFromSlug(workshop)}/`, params)

export const fetchLocations = ({ year, ...params }) =>
  apiFetch(`years/${year}/locations/`, params)

export const fetchWorkshopDifficulties = ({ ...params }) =>
  apiFetch('workshopDifficulties/', params)

export const fetchWorkshops = ({ year, ...params }) =>
  apiFetch(`years/${year}/workshops/`, params)

export const pollVote = ({ survey, formData, ...params }) =>
  apiFetch(`polls/${survey}/vote/`, {
    ...params,
    method: 'POST',
    body: JSON.stringify(formData)
  })

export const signup = ({ formData, ...params }) => apiFetch('register/', {
  ...params,
  method: 'POST',
  body: JSON.stringify(formData)
})

export const resetPassword = ({ formData, ...params }) => apiFetch('password-reset/', {
  ...params,
  method: 'POST',
  body: JSON.stringify(formData)
})

export const changePassword = ({ formData, ...params }) =>
  apiFetchAuthorized('password-change/', {
    ...params,
    method: 'POST',
    body: JSON.stringify(formData)
  })

export const newPassword = ({ formData, ...params }) => apiFetch('password-create/', {
  ...params,
  method: 'POST',
  body: JSON.stringify(formData)
})

export const orderCreate = ({ formData, ...params }) =>
  apiFetchAuthorized('orders/', {
    ...params,
    method: 'POST',
    body: JSON.stringify(formData)
  })

export const orderCancel = ({ order, ...params }) =>
  apiFetchAuthorized(`orders/${order}/`, {
    ...params,
    method: 'DELETE'
  })

export const orderConfirm = ({ order, ...params }) =>
  apiFetchAuthorized(`orders/${order}/?confirm`, {
    ...params,
    method: 'GET'
  })

export const orderChangeWorkshop = ({ formData, order, ...params }) =>
  apiFetchAuthorized(`orders/${order}/`, {
    ...params,
    body: JSON.stringify(formData),
    method: 'PATCH'
  })

export const orderChangeFood = ({ formData, order, ...params }) =>
  apiFetchAuthorized(`ordersFood/${order}/`, {
    ...params,
    body: JSON.stringify(formData),
    method: 'PATCH'
  })

export const login = ({ formData, ...params }) =>
  fetch(`${window.location.protocol}//${window.location.host}/frontend/login`, {
    body: JSON.stringify(formData),
    method: 'POST',
    headers: {
      'Content-Type': 'application/json; charset=utf-8'
    },
    ...params
  })

export const logout = ({ auth, ...params }) =>
  fetch(`${window.location.protocol}//${window.location.host}/frontend/logout`, {
    body: JSON.stringify({ token: auth.access_token }),
    method: 'POST',
    headers: {
      'Content-Type': 'application/json; charset=utf-8'
    },
    ...params
  })

export const fetchParticipant = params => apiFetchAuthorized('user/', params)

export const participantEdit = ({ formData, ...params }) => apiFetchAuthorized('user/', {
  ...params,
  body: JSON.stringify(formData),
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json; charset=utf-8'
  }
})

export const fetchParticipantOrders = params => apiFetchAuthorized('orders/', params)

export const updateParticipantLastAction = () => {}

export const fetchMarker = ({ address, ...params }) => fetch(
  'https://maps.googleapis.com/maps/api/geocode/' +
  `json?address=${address}&key=AIzaSyABnfkdNP9H-wCCshO_ZRYxvGoCEozHxzg`,
  params
)

export const roomListFetch = ({ orderId, ...params }) => apiFetchAuthorized(
  `orders/${orderId}/rooms/`,
  params
)

export const roomJoin = ({ roomId, ...params }) => apiFetchAuthorized(
  `rooms/${roomId}/join/`,
  { method: 'PUT', ...params }
)

export const roomLeave = ({ roomId, ...params }) => apiFetchAuthorized(
  `rooms/${roomId}/leave/`,
  { method: 'PUT', ...params }
)