init commit

init commit
This commit is contained in:
Trey t
2023-06-11 20:09:22 -05:00
commit a2fd663255
946 changed files with 38811 additions and 0 deletions

0
workout/__init__.py Normal file
View File

25
workout/admin.py Normal file
View File

@@ -0,0 +1,25 @@
from django.contrib import admin
from .models import *
from exercise.models import Exercise
# Register your models here.
class WorkoutExerciseInline(admin.StackedInline):
model = WorkoutExercise
ordering = ("pk",)
extra = 0
@admin.register(Workout)
class WorkoutAdmin(admin.ModelAdmin):
list_display = ("name", "description", "user", "created_at", "updated_at")
inlines = [
WorkoutExerciseInline,
]
@admin.register(WorkoutExercise)
class WorkoutExerciseAdmin(admin.ModelAdmin):
list_display = ("workout", "exercise", "weight", "reps", "created_at", "updated_at")
@admin.register(CompletedWorkout)
class CompletedWorkoutAdmin(admin.ModelAdmin):
list_display = ("registered_user", "workout", "difficulty", "created_at",)

6
workout/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class WorkoutConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'workout'

View File

@@ -0,0 +1,51 @@
# Generated by Django 4.2.2 on 2023-06-11 22:00
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('registered_user', '0002_remove_registereduser_phone_number'),
('exercise', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Workout',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('name', models.CharField(blank=True, max_length=255, null=True)),
('description', models.CharField(blank=True, max_length=255, null=True)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='registered_user.registereduser')),
],
),
migrations.CreateModel(
name='WorkoutExercise',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('weight', models.IntegerField(blank=True, max_length=4, null=True)),
('reps', models.IntegerField(blank=True, max_length=4, null=True)),
('exercise', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='workout_exercise_exercise', to='exercise.exercise')),
('workout', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='workout_exercise_workout', to='workout.workout')),
],
),
migrations.CreateModel(
name='CompletedWorkout',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('difficulty', models.PositiveSmallIntegerField(choices=[(1, 'easy'), (2, 'moderate'), (3, 'average'), (4, 'hard'), (5, 'death')])),
('registered_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='completed_workout_user', to='registered_user.registereduser')),
('workout', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='completed_workout_workout', to='workout.workout')),
],
),
]

View File

64
workout/models.py Normal file
View File

@@ -0,0 +1,64 @@
from django.db import models
from exercise.models import *
from registered_user.models import RegisteredUser
WORKOUT_LEVEL = (
(1, "easy"),
(2, "moderate"),
(3, "average"),
(4, "hard"),
(5, "death"),
)
# Create your models here.
class Workout(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
name = models.CharField(null=True, blank=True, max_length=255)
description = models.CharField(null=True, blank=True, max_length=255)
user = models.ForeignKey(
RegisteredUser,
on_delete=models.CASCADE
)
def __str__(self):
return self.name + " : " + self.description + " | by: " + self.user.nick_name
class WorkoutExercise(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
workout = models.ForeignKey(
Workout,
on_delete=models.CASCADE,
related_name='workout_exercise_workout'
)
exercise = models.ForeignKey(
Exercise,
on_delete=models.CASCADE,
related_name='workout_exercise_exercise'
)
weight = models.IntegerField(null=True, blank=True, max_length=4)
reps = models.IntegerField(null=True, blank=True, max_length=4)
def __str__(self):
return self.workout.name + " : " + self.exercise.name
class CompletedWorkout(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
registered_user = models.ForeignKey(
RegisteredUser,
on_delete=models.CASCADE,
related_name='completed_workout_user'
)
workout = models.ForeignKey(
Workout,
on_delete=models.CASCADE,
related_name='completed_workout_workout'
)
difficulty = models.PositiveSmallIntegerField(
choices=WORKOUT_LEVEL
)
def __str__(self):
return self.registered_user.first_name + " : " + self.registered_user.last_name + " : " + self.workout.name + " : " + str(self.difficulty)

45
workout/serializers.py Normal file
View File

@@ -0,0 +1,45 @@
from rest_framework import serializers
from .models import *
# from module.serializers import SlimModuleSerializer
class WorkoutExerciseSerializer(serializers.ModelSerializer):
# module = SlimModuleSerializer(read_only=True)
class Meta:
model = WorkoutExercise
fields = ('workout', 'module','weight','reps')
class CompleteWorkoutSerializer(serializers.ModelSerializer):
class Meta:
model = CompletedWorkout
exclude = ['registered_user']
def create(self, validated_data):
registered_user_id = self.context.get("registered_user")
registered_user = RegisteredUser.objects.get(id=registered_user_id)
completed_workout = CompletedWorkout.objects.create(
registered_user=registered_user,
workout=validated_data['workout'],
difficulty=validated_data['difficulty']
)
completed_workout.save()
return completed_workout
class WorkoutSerializer(serializers.ModelSerializer):
exercise = WorkoutExerciseSerializer(source='workout_exercise_workout', many=True)
class Meta:
model = Workout
fields = '__all__'
class WorkoutDetailSerializer(serializers.ModelSerializer):
class Meta:
model = Workout
fields = '__all__'
class GetCompleteWorkoutSerializer(serializers.ModelSerializer):
workout = WorkoutSerializer(many=False, read_only=True)
class Meta:
model = CompletedWorkout
exclude = ['registered_user']

3
workout/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

10
workout/urls.py Normal file
View File

@@ -0,0 +1,10 @@
from django.urls import path
from . import views
urlpatterns = [
path('all/', views.all_workouts, name='all workouts'),
path('<workout_id>/details/', views.workout_details, name='single workout details'),
path('complete/', views.complete_workout, name='user complete workout'),
path('completed/', views.workouts_completed_by_logged_in_user, name='user completed workouts')
]

50
workout/views.py Normal file
View File

@@ -0,0 +1,50 @@
from .models import *
from .serializers import *
from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from django.contrib.auth.models import User
from django.contrib.auth import authenticate
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import authentication_classes
from rest_framework.decorators import permission_classes
import json
@api_view(['GET'])
def all_workouts(request):
users = Workout.objects.all()
serializer = WorkoutSerializer(users, many=True)
return Response(data=serializer.data, status=status.HTTP_200_OK)
@api_view(['GET'])
def workout_details(request, workout_id):
users = Workout.objects.get(pk=workout_id)
serializer = WorkoutDetailSerializer(users, many=False)
return Response(data=serializer.data, status=status.HTTP_200_OK)
@api_view(['POST'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def complete_workout(request):
registered_user = RegisteredUser.objects.get(user=request.user)
serializer = CompleteWorkoutSerializer(data=request.data, context = {"registered_user":registered_user.pk})
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
@api_view(['GET'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def workouts_completed_by_logged_in_user(request):
registered_user = RegisteredUser.objects.get(user=request.user)
workouts = CompletedWorkout.objects.filter(registered_user=registered_user)
serializer = GetCompleteWorkoutSerializer(workouts, many=True)
return Response(serializer.data, status=status.HTTP_201_CREATED)