UNPKG

wbu-design-system

Version:

WhereBy.Design is the nascent design system for WhereBy.Us

150 lines (128 loc) 3.71 kB
import axios from 'axios'; import dayjs from 'dayjs'; import { cloneDeep, isNumber } from 'lodash'; import AuthService from './authService'; const eventModel = { brand: '', description: '', endDate: '', endTime: '', id: null, isCurated: false, isSponsored: false, isPartnerEvent: false, neighborhood: '', startDate: '', startTime: '', }; export default { name: 'EventService', async createEvent(event) { try { const properlyFormattedEvent = await this.properlyFormatEventDates(event); const url = 'https://events.whereby.us/api/v1/events'; const token = AuthService.getWhereByPassportToken(); const { data: newEventId } = await axios({ method: 'post', url, data: properlyFormattedEvent, headers: { Authorization: `Bearer ${token}`, }, }); if (!isNumber(newEventId)) { throw new Error('Could not create event'); } return newEventId; } catch (error) { return error; } }, /** * @param event * @returns {Promise<*>} */ async curateEvent(event) { try { const eventClone = cloneDeep(event); eventClone.isCurated = !eventClone.isCurated; eventClone.isPartnerEvent = false; eventClone.isSponsored = false; await this.updateEvent(eventClone); return eventClone; } catch (error) { throw new Error('Could not curate this event'); } }, filterEventsByPhraseInDescription(phrase, events) { return events.filter(event => event.description.toLowerCase().indexOf(phrase.toLowerCase()) > -1); }, getEmptyEvent() { return cloneDeep(eventModel); }, async getUpcomingEvents() { try { const { data: events } = await axios.get('https://events.whereby.us/api/v1/events'); return events; } catch (error) { return []; } }, /** * When we mark an event as partnered, we have to also un-curate it and - * just for good measure - un-sponsor it. * * @param event * @returns {Promise<*>} */ async markEventAsPartnerEvent(event) { try { const eventClone = cloneDeep(event); eventClone.isCurated = false; eventClone.isPartnerEvent = !eventClone.isPartnerEvent; eventClone.isSponsored = false; await this.updateEvent(eventClone); return eventClone; } catch (error) { throw new Error('Could not mark the event as a partner event'); } }, properlyFormatEventDates(event) { return new Promise((resolve) => { event.endDate = event.endDate ? dayjs(event.endDate).format('YYYY-MM-DD') : ''; // eslint-disable-line event.startDate = event.startDate ? dayjs(event.startDate).format('YYYY-MM-DD') : ''; // eslint-disable-line resolve(event); }); }, async trashEvent(event) { try { const eventClone = cloneDeep(event); eventClone.isTrashed = !eventClone.isTrashed; await this.updateEvent(eventClone); return true; } catch (error) { throw new Error('Could not delete this event'); } }, async updateEvent(event) { try { const properlyFormattedEvent = await this.properlyFormatEventDates(event); const url = `https://events.whereby.us/api/v1/events/${event.id}`; const token = AuthService.getWhereByPassportToken(); const { data: didEventUpdate } = await axios({ method: 'post', url, data: properlyFormattedEvent, headers: { Authorization: `Bearer ${token}`, }, }); if (!didEventUpdate) { throw new Error('Could not update event'); } return true; } catch (error) { return error; } }, };