Files
Eventment/app/api/index.js
2019-08-08 20:55:19 -04:00

96 lines
2.4 KiB
JavaScript

import {
constructUrl,
formatPostData,
parseQueryParams,
request,
unwrapJson,
validateResponse,
} from './helpers.js';
import { API_URL } from '../constants/constants.js';
const DefaultRequestOptions = {};
export const API_ENDPOINTS = {
// Events and Items
GET_EVENTS: '/events',
// GET_ITEMS: '/items?eventId=:event_id',
GET_ITEMS: '/items',
// Auction Interactions
// GET_STATUS: '/auction/:event_id',
GET_STATUS: '/auction',
PLACE_BID: '/bids',
PURCHASE_ITEM: '/sales',
// User/Profile
USER_SIGNUP: '/signup',
USER_PROFILE: '/users/:user_id',
VALIDATE_SIGNUP_EMAIL: '/signup/validate/email',
VALIDATE_SIGNUP_NOM: '/signup/validate/nom',
// Services
APPLE_SIGNUP: '/auth/apple/login',
APPLE_LINK: '/auth/apple/link',
FACEBOOK_SIGNUP: '/auth/facebook/login',
FACEBOOK_LINK: '/auth/facebook/link',
GOOGLE_SIGNUP: '/auth/google/login',
GOOGLE_LINK: '/auth/google/link',
};
const cacheBuster = () => {
const timestamp = String(Date.now());
return `?buster=${timestamp}`;
};
export const getEndpointUrl = (endpoint) => {
if (!API_ENDPOINTS[endpoint]) {
throw new Error('Invalid API endpoint specified');
}
return `${API_URL}${API_ENDPOINTS[endpoint]}`; //`${cacheBuster()}`;
};
export const requestGet = (path, queryParams = [], requestOptions = {}) => {
const params = parseQueryParams(queryParams);
if (params === null) {
throw new Error('Invalid queryParams');
}
return request(constructUrl(path, params), {
...DefaultRequestOptions,
...requestOptions,
})
.then(validateResponse)
.then(unwrapJson);
};
export const requestPost = (options) => {
const {
path,
body = {},
queryParams = [],
requestOptions = {},
isFormattedPostData = false,
} = options;
const params = parseQueryParams(queryParams || []);
if (params === null) {
throw new Error('invalid queryParams');
}
// Additional formatting happens in `formatPostData()`
// like handling what jQuery calls `traditional` form data
return request(constructUrl(path, params), {
...DefaultRequestOptions,
...requestOptions,
method: 'POST',
body: isFormattedPostData ? body : formatPostData(body),
})
.then(validateResponse)
.then(unwrapJson);
};