This commit is contained in:
Trey t
2023-07-27 19:07:35 -05:00
parent 6d68c59ac3
commit 67372cc8ab
9 changed files with 84 additions and 8 deletions

View File

@@ -12,10 +12,17 @@ from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import authentication_classes from rest_framework.decorators import authentication_classes
from rest_framework.decorators import permission_classes from rest_framework.decorators import permission_classes
from django.core.cache import cache
# Create your views here. # Create your views here.
@api_view(['GET']) @api_view(['GET'])
def all_equipment(request): def all_equipment(request):
if 'all_equipment' in cache:
data = cache.get('all_equipment')
return Response(data=data, status=status.HTTP_200_OK)
users = Equipment.objects.all() users = Equipment.objects.all()
serializer = EquipmentSerializer(users, many=True) serializer = EquipmentSerializer(users, many=True)
return Response(data=serializer.data, status=status.HTTP_200_OK) data = serializer.data
cache.set('all_equipment', data)
return Response(data=data, status=status.HTTP_200_OK)

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.2.2 on 2023-07-26 22:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('exercise', '0007_exercise_estimated_rep_duration'),
]
operations = [
migrations.AddField(
model_name='exercise',
name='video_override',
field=models.CharField(blank=True, max_length=255, null=True),
),
]

View File

@@ -22,6 +22,7 @@ class Exercise(models.Model):
muscle_groups = models.CharField(null=True, blank=True, max_length=255) muscle_groups = models.CharField(null=True, blank=True, max_length=255)
synonyms = models.CharField(null=True, blank=True, max_length=255) synonyms = models.CharField(null=True, blank=True, max_length=255)
estimated_rep_duration = models.FloatField(null=True, blank=True, max_length=255) estimated_rep_duration = models.FloatField(null=True, blank=True, max_length=255)
video_override = models.CharField(null=True, blank=True, max_length=255)
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
@@ -30,7 +31,10 @@ class Exercise(models.Model):
return self.name + " --------- " + self.description return self.name + " --------- " + self.description
def video_url(self): def video_url(self):
return "exercise_videos/" + self.name.replace(" ", "_") + ".mp4" if self.video_override is not None and len(self.video_override) > 0:
return "exercise_videos/" + self.video_override
else:
return "exercise_videos/" + self.name.replace(" ", "_") + ".mp4"
def audio_url(self): def audio_url(self):
return "exercise_audio/" + self.name.replace(" ", "_") + ".m4a" return "exercise_audio/" + self.name.replace(" ", "_") + ".m4a"

View File

@@ -12,10 +12,17 @@ from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import authentication_classes from rest_framework.decorators import authentication_classes
from rest_framework.decorators import permission_classes from rest_framework.decorators import permission_classes
from django.core.cache import cache
# Create your views here. # Create your views here.
@api_view(['GET']) @api_view(['GET'])
def all_exercises(request): def all_exercises(request):
if 'all_exercises' in cache:
data = cache.get('all_exercises')
return Response(data=data, status=status.HTTP_200_OK)
users = Exercise.objects.all() users = Exercise.objects.all()
serializer = ExerciseSerializer(users, many=True) serializer = ExerciseSerializer(users, many=True)
return Response(data=serializer.data, status=status.HTTP_200_OK) data = serializer.data
cache.set('all_exercises', data)
return Response(data=data, status=status.HTTP_200_OK)

View File

@@ -12,10 +12,17 @@ from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import authentication_classes from rest_framework.decorators import authentication_classes
from rest_framework.decorators import permission_classes from rest_framework.decorators import permission_classes
from django.core.cache import cache
# Create your views here. # Create your views here.
@api_view(['GET']) @api_view(['GET'])
def all_muscles(request): def all_muscles(request):
if 'all_muscles' in cache:
data = cache.get('all_muscles')
return Response(data=data, status=status.HTTP_200_OK)
users = Muscle.objects.all() users = Muscle.objects.all()
serializer = MuscleSerializer(users, many=True) serializer = MuscleSerializer(users, many=True)
return Response(data=serializer.data, status=status.HTTP_200_OK) data = serializer.data
cache.set('all_muscles', data)
return Response(data=data, status=status.HTTP_200_OK)

View File

@@ -13,6 +13,7 @@ Django==4.2.2
django-debug-toolbar==4.1.0 django-debug-toolbar==4.1.0
django-import-export==3.2.0 django-import-export==3.2.0
django-push-notifications==3.0.0 django-push-notifications==3.0.0
django-redis==5.3.0
djangorestframework==3.14.0 djangorestframework==3.14.0
et-xmlfile==1.1.0 et-xmlfile==1.1.0
gevent==22.10.1 gevent==22.10.1

View File

@@ -58,6 +58,16 @@ MIDDLEWARE = [
ROOT_URLCONF = 'werkout_api.urls' ROOT_URLCONF = 'werkout_api.urls'
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://redis:6379/",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient"
},
}
}
TEMPLATES = [ TEMPLATES = [
{ {
'BACKEND': 'django.template.backends.django.DjangoTemplates', 'BACKEND': 'django.template.backends.django.DjangoTemplates',

View File

@@ -6,7 +6,7 @@ from muscle.models import ExerciseMuscle
from equipment.models import WorkoutEquipment from equipment.models import WorkoutEquipment
from video.models import Video from video.models import Video
from video.serializers import VideoSerializer from video.serializers import VideoSerializer
from superset.serializers import SupersetSerializer from superset.serializers import SupersetSerializer, SupersetExerciseSerializer
from superset.models import Superset, SupersetExercise from superset.models import Superset, SupersetExercise
class WorkoutExerciseSerializer(serializers.ModelSerializer): class WorkoutExerciseSerializer(serializers.ModelSerializer):
@@ -79,12 +79,23 @@ class WorkoutDetailSerializer(serializers.ModelSerializer):
male_videos = serializers.SerializerMethodField() male_videos = serializers.SerializerMethodField()
female_videos = serializers.SerializerMethodField() female_videos = serializers.SerializerMethodField()
both_videos = serializers.SerializerMethodField() both_videos = serializers.SerializerMethodField()
all_superset_exercise = serializers.SerializerMethodField()
class Meta: class Meta:
model = Workout model = Workout
fields = ('id', 'name', 'description', 'supersets', 'registered_user', 'male_videos', 'female_videos', 'both_videos', 'estimated_time', ) fields = ('id', 'name', 'description', 'supersets', 'registered_user', 'male_videos', 'female_videos', 'both_videos', 'estimated_time', 'all_superset_exercise', )
depth = 1 depth = 1
def get_all_superset_exercise(self, obj):
all_superset_exercise = []
supersets = Superset.objects.filter(workout=obj).order_by('order')
for superset in supersets:
supersetExercises = SupersetExercise.objects.filter(superset=superset).order_by('order')
for x in range(0, superset.rounds):
all_superset_exercise += supersetExercises
data = SupersetExerciseSerializer(all_superset_exercise, many=True).data
return data
def get_supersets(self, obj): def get_supersets(self, obj):
objs = Superset.objects.filter(workout=obj).order_by('order') objs = Superset.objects.filter(workout=obj).order_by('order')
data = SupersetSerializer(objs, many=True).data data = SupersetSerializer(objs, many=True).data

View File

@@ -16,13 +16,20 @@ from django.shortcuts import get_object_or_404
from datetime import datetime from datetime import datetime
import json import json
import os import os
from django.core.cache import cache
@api_view(['GET']) @api_view(['GET'])
def all_workouts(request): def all_workouts(request):
if 'all_workouts' in cache:
data = cache.get('all_workouts')
return Response(data=data, status=status.HTTP_200_OK)
users = Workout.objects.all() users = Workout.objects.all()
serializer = WorkoutSerializer(users, many=True) serializer = WorkoutSerializer(users, many=True)
return Response(data=serializer.data, status=status.HTTP_200_OK) data = serializer.data
cache.set('all_workouts', data)
return Response(data=data, status=status.HTTP_200_OK)
@api_view(['GET']) @api_view(['GET'])
@@ -121,6 +128,8 @@ def add_workout(request):
workout.estimated_time = workout_total_time workout.estimated_time = workout_total_time
workout.save() workout.save()
cache.delete('all_workouts')
return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_500_INTERNAL_SERVER_ERROR) return Response(serializer.errors, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
@@ -230,4 +239,6 @@ def add_from_files(request):
workout_obj.estimated_time = workout_total_time workout_obj.estimated_time = workout_total_time
workout_obj.save() workout_obj.save()
cache.delete('all_workouts')
return Response(status=status.HTTP_200_OK) return Response(status=status.HTTP_200_OK)