Jelajahi Sumber

Improve validation for new planner

Tatiana Inama 7 tahun lalu
induk
melakukan
de1e6bfac9

+ 3 - 8
ktchn/src/planner/controller.ts

@@ -15,7 +15,7 @@ const mkWeekQuery = (week: string) => ({
 
 const validatePlan = (mbPlan: any) => mbPlan.date && mbPlan.week && mbPlan.recipe && mbPlan.meal;
 
-const validPlan = (mbPlan: any) => {
+const validPlan = (mbPlan: any): Promise<Plan> => {
   if (mbPlan.date && mbPlan.week && mbPlan.recipe && mbPlan.meal) {
     return Promise.resolve({
       ...mbPlan,
@@ -113,14 +113,9 @@ const savePlan: Controller<void, PlanDB> = db => req => prevResult => {
 const saveManyPlans: Controller<void, PlanDB[]> = db => req => prev => {
   const mbPlanner = req.body;
   if (mbPlanner.filter) {
-    const valid = mbPlanner.filter(validatePlan);
-    if (valid.length) {
-      return db.insertMany(valid)
-    } else {
-      return Promise.reject('Data did not have required fields: date, week, meal, ')
-    }
+    return Promise.all(mbPlanner.map(validPlan) as Plan[]).then(db.insertMany)
   } else {
-    return Promise.reject('Invalid type: body content must be a Plan Array')
+    return Promise.reject('Invalid type: body content must be a Plan Array. Use /day/ endpoint instead')
   }
 
 }

+ 3 - 0
recipes/src/containers/Planner/index.tsx

@@ -67,6 +67,9 @@ class PlannerContainer extends Component<PlannerContainerProps, PlannerContainer
               <Button outlined raised onClick={() => this.changeMode('edit')}>Edit</Button>
               ) : (
               <Button outlined raised onClick={() => {
+                console.log('====================================');
+                console.log(this.props.planner);
+                console.log('====================================');
                 this.props.save(this.props.planner)
                 this.changeMode('view')
               }}>Save</Button>

+ 1 - 0
recipes/src/containers/Planner/reducers.ts

@@ -3,6 +3,7 @@ import { PlannerState, DBPlanner, WeekPlan, Weekday, RecipePlan } from 'types/pl
 import { getWeekNumber, mkWeekDay } from 'services/time';
 import { Reducer } from 'redux';
 import { merge, uniqBy } from 'ramda';
+import moment from 'moment';
 
 const initialState: PlannerState = {
   mode: 'view',

+ 5 - 2
recipes/src/containers/Planner/services.ts

@@ -1,5 +1,6 @@
 import axios, { AxiosPromise } from 'axios';
 import { DBPlanner, DBDayPlan, WeekPlan, Weekday, Meal, DayPlan } from 'types/planner';
+import moment from 'moment';
 
 //@ts-ignore
 const PLANNER: string = process.env.REACT_APP_API_PLANNER;
@@ -7,12 +8,14 @@ const PLANNER: string = process.env.REACT_APP_API_PLANNER;
 const toDBPlan = (weekplan: WeekPlan) => {
   const planner = Object.keys(weekplan).map((weekday) => weekplan[weekday as Weekday]);
   const mkPlan = (day: DayPlan, meal: Meal): Array<DBDayPlan> => {
+    console.log(day);
     const dish = day[meal];
+    const date = moment(day.date);
     return dish ? [{
-      week: day.date.week(),
+      week: date.week(),
       recipe: dish._id,
       meal: meal,
-      date: day.date.format()
+      date: date.format()
     }] : []
   } 
   return planner.reduce((acc, day)=> {