Created auto meal plan api endpoint.

This commit is contained in:
AquaticLava
2023-06-21 19:31:49 -06:00
parent ee5c7d0ef4
commit ee38d93e3b
3 changed files with 68 additions and 1 deletions

View File

@@ -1,7 +1,9 @@
import datetime
import io
import json
import mimetypes
import pathlib
import random
import re
import threading
import traceback
@@ -25,6 +27,7 @@ from django.core.files import File
from django.db.models import Case, Count, Exists, OuterRef, ProtectedError, Q, Subquery, Value, When, Avg, Max
from django.db.models.fields.related import ForeignObjectRel
from django.db.models.functions import Coalesce, Lower
from django.db.models.signals import post_save
from django.http import FileResponse, HttpResponse, JsonResponse
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
@@ -94,7 +97,8 @@ from cookbook.serializer import (AutomationSerializer, BookmarkletImportListSeri
SyncLogSerializer, SyncSerializer, UnitSerializer,
UserFileSerializer, UserSerializer, UserPreferenceSerializer,
UserSpaceSerializer, ViewLogSerializer, AccessTokenSerializer, FoodSimpleSerializer,
RecipeExportSerializer, UnitConversionSerializer, PropertyTypeSerializer, PropertySerializer)
RecipeExportSerializer, UnitConversionSerializer, PropertyTypeSerializer,
PropertySerializer, AutoMealPlanSerializer)
from cookbook.views.import_export import get_integration
from recipes import settings
@@ -661,6 +665,57 @@ class MealPlanViewSet(viewsets.ModelViewSet):
return queryset
class AutoPlanViewSet(viewsets.ViewSet):
def create(self, request):
serializer = AutoMealPlanSerializer(data=request.data)
if serializer.is_valid():
keywords = serializer.validated_data['keywords']
start_date = serializer.validated_data['start_date']
end_date = serializer.validated_data['end_date']
meal_type = MealType.objects.get(pk=serializer.validated_data['meal_type_id'])
servings = serializer.validated_data['servings']
days = (end_date - start_date).days + 1
recipes = Recipe.objects.all()
meal_plans = list()
for keyword in keywords:
recipes = recipes.filter(keywords__name=keyword['name'])
recipes = recipes.order_by('?')[:days]
recipes = list(recipes)
for i in range(0, days):
day = start_date + datetime.timedelta(i)
recipe = random.choice(recipes)
args = {'recipe': recipe, 'servings': servings, 'title': recipe.name,
'created_by': request.user,
'meal_type': meal_type,
'note': '', 'date': day, 'space': request.space}
m = MealPlan(**args)
meal_plans.append(m)
MealPlan.objects.bulk_create(meal_plans)
for m in meal_plans:
if request.data.get('addshopping', False) and request.data.get('recipe', None):
SLR = RecipeShoppingEditor(user=request.user, space=request.space)
SLR.create(mealplan=m, servings=servings)
else:
post_save.send(
sender=m.__class__,
instance=m,
created=True,
update_fields=None,
)
return Response(serializer.data)
return Response(serializer.errors, 400)
class MealTypeViewSet(viewsets.ModelViewSet):
"""
returns list of meal types created by the