mirror of https://github.com/snachodog/mybuddy.git
165 lines
5.1 KiB
Python
165 lines
5.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
from django.shortcuts import get_object_or_404
|
|
|
|
from rest_framework import viewsets, views
|
|
from rest_framework.decorators import action
|
|
from rest_framework.response import Response
|
|
from rest_framework.schemas.openapi import AutoSchema
|
|
|
|
from core import models
|
|
from babybuddy import models as babybuddy_models
|
|
|
|
from . import serializers, filters
|
|
|
|
|
|
class BMIViewSet(viewsets.ModelViewSet):
|
|
queryset = models.BMI.objects.all()
|
|
serializer_class = serializers.BMISerializer
|
|
filterset_fields = ("child", "date")
|
|
ordering_fields = ("child", "date")
|
|
ordering = "-date"
|
|
|
|
def get_view_name(self):
|
|
"""
|
|
Gets the view name without changing the case of the model verbose name.
|
|
"""
|
|
name = models.BMI._meta.verbose_name
|
|
if self.suffix:
|
|
name += " " + self.suffix
|
|
return name
|
|
|
|
|
|
class ChildViewSet(viewsets.ModelViewSet):
|
|
queryset = models.Child.objects.all()
|
|
serializer_class = serializers.ChildSerializer
|
|
lookup_field = "slug"
|
|
filterset_fields = ("id", "first_name", "last_name", "slug", "birth_date")
|
|
ordering_fields = ("birth_date", "first_name", "last_name", "slug")
|
|
ordering = "-birth_date"
|
|
|
|
|
|
class DiaperChangeViewSet(viewsets.ModelViewSet):
|
|
queryset = models.DiaperChange.objects.all()
|
|
serializer_class = serializers.DiaperChangeSerializer
|
|
filterset_class = filters.DiaperChangeFilter
|
|
ordering_fields = ("amount", "time")
|
|
ordering = "-time"
|
|
|
|
|
|
class FeedingViewSet(viewsets.ModelViewSet):
|
|
queryset = models.Feeding.objects.all()
|
|
serializer_class = serializers.FeedingSerializer
|
|
filterset_class = filters.FeedingFilter
|
|
ordering_fields = ("amount", "duration", "end", "start")
|
|
ordering = "-end"
|
|
|
|
|
|
class HeadCircumferenceViewSet(viewsets.ModelViewSet):
|
|
queryset = models.HeadCircumference.objects.all()
|
|
serializer_class = serializers.HeadCircumferenceSerializer
|
|
filterset_fields = ("child", "date")
|
|
ordering_fields = ("date", "head_circumference")
|
|
ordering = "-date"
|
|
|
|
|
|
class HeightViewSet(viewsets.ModelViewSet):
|
|
queryset = models.Height.objects.all()
|
|
serializer_class = serializers.HeightSerializer
|
|
filterset_fields = ("child", "date")
|
|
ordering_fields = ("date", "height")
|
|
ordering = "-date"
|
|
|
|
|
|
class NoteViewSet(viewsets.ModelViewSet):
|
|
queryset = models.Note.objects.all()
|
|
serializer_class = serializers.NoteSerializer
|
|
filterset_class = filters.NoteFilter
|
|
ordering_fields = "time"
|
|
ordering = "-time"
|
|
|
|
|
|
class PumpingViewSet(viewsets.ModelViewSet):
|
|
queryset = models.Pumping.objects.all()
|
|
serializer_class = serializers.PumpingSerializer
|
|
filterset_class = filters.PumpingFilter
|
|
ordering_fields = ("amount", "time")
|
|
ordering = "-time"
|
|
|
|
|
|
class SleepViewSet(viewsets.ModelViewSet):
|
|
queryset = models.Sleep.objects.all()
|
|
serializer_class = serializers.SleepSerializer
|
|
filterset_class = filters.SleepFilter
|
|
ordering_fields = ("duration", "end", "start")
|
|
ordering = "-end"
|
|
|
|
|
|
class TagViewSet(viewsets.ModelViewSet):
|
|
queryset = models.Tag.objects.all()
|
|
serializer_class = serializers.TagSerializer
|
|
lookup_field = "slug"
|
|
filterset_fields = ("last_used", "name")
|
|
ordering_fields = ("last_used", "name", "slug")
|
|
ordering = "name"
|
|
|
|
|
|
class TemperatureViewSet(viewsets.ModelViewSet):
|
|
queryset = models.Temperature.objects.all()
|
|
serializer_class = serializers.TemperatureSerializer
|
|
filterset_class = filters.TemperatureFilter
|
|
ordering_fields = ("temperature", "time")
|
|
ordering = "-time"
|
|
|
|
|
|
class TimerViewSet(viewsets.ModelViewSet):
|
|
queryset = models.Timer.objects.all()
|
|
serializer_class = serializers.TimerSerializer
|
|
filterset_class = filters.TimerFilter
|
|
ordering_fields = ("duration", "end", "start")
|
|
ordering = "-start"
|
|
|
|
@action(detail=True, methods=["patch"])
|
|
def stop(self, request, pk=None):
|
|
timer = self.get_object()
|
|
timer.stop()
|
|
return Response(self.serializer_class(timer).data)
|
|
|
|
@action(detail=True, methods=["patch"])
|
|
def restart(self, request, pk=None):
|
|
timer = self.get_object()
|
|
timer.restart()
|
|
return Response(self.serializer_class(timer).data)
|
|
|
|
|
|
class TummyTimeViewSet(viewsets.ModelViewSet):
|
|
queryset = models.TummyTime.objects.all()
|
|
serializer_class = serializers.TummyTimeSerializer
|
|
filterset_class = filters.TummyTimeFilter
|
|
ordering_fields = ("duration", "end", "start")
|
|
ordering = "-start"
|
|
|
|
|
|
class WeightViewSet(viewsets.ModelViewSet):
|
|
queryset = models.Weight.objects.all()
|
|
serializer_class = serializers.WeightSerializer
|
|
filterset_fields = ("child", "date")
|
|
ordering_fields = ("date", "weight")
|
|
ordering = "-date"
|
|
|
|
|
|
class ProfileView(views.APIView):
|
|
schema = AutoSchema(operation_id_base="CurrentProfile")
|
|
|
|
action = "get"
|
|
basename = "profile"
|
|
|
|
queryset = babybuddy_models.Settings.objects.all()
|
|
serializer_class = serializers.ProfileSerializer
|
|
|
|
def get(self, request):
|
|
settings = get_object_or_404(
|
|
babybuddy_models.Settings.objects, user=request.user
|
|
)
|
|
serializer = self.serializer_class(settings)
|
|
return Response(serializer.data)
|