services.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import axios, { AxiosPromise } from 'axios';
  2. import { DBPlanner, DBDayPlan, WeekPlan, Weekday, Meal, DayPlan } from 'types/planner';
  3. //@ts-ignore
  4. const PLANNER: string = process.env.REACT_APP_API_PLANNER;
  5. const toDBPlan = (weekplan: WeekPlan) => {
  6. const planner = Object.keys(weekplan).map((weekday) => weekplan[weekday as Weekday]);
  7. const mkPlan = (day: DayPlan, meal: Meal): Array<DBDayPlan> => {
  8. const dish = day[meal];
  9. return dish ? [{
  10. week: day.date.week(),
  11. recipe: dish._id,
  12. meal: meal,
  13. date: day.date.format()
  14. }] : []
  15. }
  16. return planner.reduce((acc, day)=> {
  17. return [
  18. ...acc,
  19. ...mkPlan(day, 'lunch'),
  20. ...mkPlan(day, 'dinner')
  21. ]
  22. }, [] as Array<DBDayPlan>)
  23. }
  24. export const getPlanner = (week: number): Promise<DBPlanner> =>
  25. axios.get(`${PLANNER}/week/${week}/compact`)
  26. .then(response => response.data)
  27. export const savePlanner = (weekPlan: WeekPlan): Promise<Array<DBDayPlan>> => {
  28. return axios.post(`${PLANNER}/`, toDBPlan(weekPlan))
  29. .then(response => response.data)
  30. }
  31. export default {
  32. getPlanner,
  33. savePlanner
  34. }