Skip to content

Commit

Permalink
update training models, serializers, views and urls
Browse files Browse the repository at this point in the history
  • Loading branch information
Evgeniy-Golodnykh committed Jun 15, 2024
1 parent d8037ed commit ee74f4b
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 26 deletions.
8 changes: 7 additions & 1 deletion blackfox/api/serializers.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
from django.contrib.auth import get_user_model
from rest_framework import serializers

from training.models import FoodDiary, Project
from training.models import BodyStatsDiary, FoodDiary, Project

User = get_user_model()


class BodyStatsDiarySerializer(serializers.ModelSerializer):
class Meta:
model = BodyStatsDiary
exclude = ['id']


class FoodDiarySerializer(serializers.ModelSerializer):
class Meta:
model = FoodDiary
Expand Down
7 changes: 5 additions & 2 deletions blackfox/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@
TokenObtainPairView, TokenRefreshView,
)

from api.views import FoodDiaryViewSet, ProjectViewSet
from api.views import BodyStatsDiaryViewSet, FoodDiaryViewSet, ProjectViewSet

router = DefaultRouter()
router.register('fitness_diary', FoodDiaryViewSet, basename='food_diary')
router.register(
'bodystats_diary', BodyStatsDiaryViewSet, basename='bodystats_diary'
)
router.register('food_diary', FoodDiaryViewSet, basename='food_diary')
router.register('project', ProjectViewSet, basename='project')

urlpatterns = [
Expand Down
17 changes: 15 additions & 2 deletions blackfox/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,21 @@
from rest_framework.permissions import IsAuthenticatedOrReadOnly

from api.permissions import IsAdmin, IsCoach
from api.serializers import FoodDiarySerializer, ProjectSerializer
from training.models import FoodDiary, Project
from api.serializers import (
BodyStatsDiarySerializer, FoodDiarySerializer, ProjectSerializer,
)
from training.models import BodyStatsDiary, FoodDiary, Project


class BodyStatsDiaryViewSet(viewsets.ModelViewSet):
permission_classes = [IsAuthenticatedOrReadOnly]
serializer_class = BodyStatsDiarySerializer
queryset = BodyStatsDiary.objects.all()
filter_backends = [filters.SearchFilter]
search_fields = ['user', 'date']

def perform_create(self, serializer):
serializer.save(user=self.request.user)


class FoodDiaryViewSet(viewsets.ModelViewSet):
Expand Down
3 changes: 2 additions & 1 deletion blackfox/training/admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from django.contrib import admin

from training.models import FoodDiary, Project
from training.models import BodyStatsDiary, FoodDiary, Project

admin.site.register(BodyStatsDiary)
admin.site.register(FoodDiary)
admin.site.register(Project)
123 changes: 103 additions & 20 deletions blackfox/training/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,66 +5,149 @@
User = get_user_model()


class FoodDiary(models.Model):
"""FoodDiary model for FatSecret data"""
class BodyStatsDiary(models.Model):
user = models.ForeignKey(
User,
on_delete=models.CASCADE,
verbose_name='спортсмен',
related_name='bodystats_diary',
)
date = models.DateField(
verbose_name='дата питания',
db_index=True,
)
abdominal = models.FloatField(
verbose_name='живот',
validators=[MinValueValidator(30), MaxValueValidator(250)],
blank=True,
null=True,
)
chest = models.FloatField(
verbose_name='грудь',
validators=[MinValueValidator(30), MaxValueValidator(250)],
blank=True,
null=True,
)
hips = models.FloatField(
verbose_name='бедра',
validators=[MinValueValidator(30), MaxValueValidator(250)],
blank=True,
null=True,
)
neck = models.FloatField(
verbose_name='шея',
validators=[MinValueValidator(20), MaxValueValidator(100)],
blank=True,
null=True,
)
waist = models.FloatField(
verbose_name='талия',
validators=[MinValueValidator(30), MaxValueValidator(250)],
blank=True,
null=True,
)
weight = models.FloatField(
verbose_name='вес',
validators=[MinValueValidator(30), MaxValueValidator(250)],
blank=True,
null=True,
)

class Meta:
ordering = ['-date']
constraints = [
models.UniqueConstraint(
fields=('user', 'date'),
name='unique_bodystats_diary'
)
]

def __str__(self):
return f'Дневник параметров {self.user.username} за {self.date} г.'


class FoodDiary(models.Model):
user = models.ForeignKey(
User,
on_delete=models.CASCADE,
verbose_name='спортсмен',
related_name='diet',
related_name='food_diary',
)
date = models.DateField(
verbose_name='дата питания',
db_index=True
db_index=True,
)
calories_actual = models.PositiveIntegerField(
verbose_name='калории факт',
validators=[MinValueValidator(0), MaxValueValidator(10_000)]
validators=[MinValueValidator(0), MaxValueValidator(10_000)],
blank=True,
null=True,
)
calories_target = models.PositiveIntegerField(
verbose_name='калории план',
validators=[MinValueValidator(0), MaxValueValidator(10_000)]
validators=[MinValueValidator(0), MaxValueValidator(10_000)],
blank=True,
null=True,
)
carbohydrate_actual = models.FloatField(
verbose_name='углеводы факт',
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
validators=[MinValueValidator(0), MaxValueValidator(1_000)],
blank=True,
null=True,
)
carbohydrate_target = models.FloatField(
verbose_name='углеводы план',
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
validators=[MinValueValidator(0), MaxValueValidator(1_000)],
blank=True,
null=True,
)
fat_actual = models.FloatField(
verbose_name='жиры факт',
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
validators=[MinValueValidator(0), MaxValueValidator(1_000)],
blank=True,
null=True,
)
fat_target = models.FloatField(
verbose_name='жиры план',
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
validators=[MinValueValidator(0), MaxValueValidator(1_000)],
blank=True,
null=True,
)
fiber_actual = models.FloatField(
verbose_name='пищевые волокна факт',
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
validators=[MinValueValidator(0), MaxValueValidator(1_000)],
blank=True,
null=True,
)
fiber_target = models.FloatField(
verbose_name='пищевые волокна план',
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
validators=[MinValueValidator(0), MaxValueValidator(1_000)],
blank=True,
null=True,
)
protein_actual = models.FloatField(
verbose_name='белки факт',
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
validators=[MinValueValidator(0), MaxValueValidator(1_000)],
blank=True,
null=True,
)
protein_target = models.FloatField(
verbose_name='белки план',
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
validators=[MinValueValidator(0), MaxValueValidator(1_000)],
blank=True,
null=True,
)
sugar_actual = models.FloatField(
verbose_name='сахар факт',
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
validators=[MinValueValidator(0), MaxValueValidator(1_000)],
blank=True,
null=True,
)
sugar_target = models.FloatField(
verbose_name='сахар план',
validators=[MinValueValidator(0), MaxValueValidator(1_000)]
validators=[MinValueValidator(0), MaxValueValidator(1_000)],
blank=True,
null=True,
)

class Meta:
Expand Down Expand Up @@ -95,19 +178,19 @@ class Project(models.Model):
)
start_date = models.DateField(
verbose_name='начало проекта',
db_index=True
db_index=True,
)
deadline = models.DateField(
verbose_name='окончание проекта',
db_index=True
db_index=True,
)
target_weight = models.FloatField(
verbose_name='целевой вес',
validators=[MinValueValidator(30), MaxValueValidator(250)]
validators=[MinValueValidator(30), MaxValueValidator(250)],
)
is_closed = models.BooleanField(
verbose_name='проект закрыт',
default=False
default=False,
)

class Meta:
Expand Down

0 comments on commit ee74f4b

Please sign in to comment.