This commit is contained in:
Trey t
2023-06-12 21:50:13 -05:00
parent 7fdbaaa6f5
commit 3da41c3352
33 changed files with 223 additions and 75 deletions

2
.gitignore vendored
View File

@@ -3,7 +3,7 @@
*.pot *.pot
*.pyc *.pyc
__pycache__ __pycache__
db.sqlite3 #db.sqlite3
media media
# Backup files # # Backup files #

BIN
db.sqlite3 Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -5,4 +5,8 @@ from .models import *
# Register your models here. # Register your models here.
@admin.register(Equipment) @admin.register(Equipment)
class EquipmentAdmin(ImportExportModelAdmin): class EquipmentAdmin(ImportExportModelAdmin):
list_display = ("name", "is_weight", "category",) list_display = ("name", "is_weight", "category",)
@admin.register(WorkoutEquipment)
class WorkoutEquipmentAdmin(ImportExportModelAdmin):
list_display = ("equipment", "exercise",)

View File

@@ -0,0 +1,25 @@
# Generated by Django 4.2.2 on 2023-06-13 02:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('exercise', '0002_alter_exercise_options'),
('equipment', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='WorkoutEquipment',
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)),
('equipment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='workout_exercise_workout', to='equipment.equipment')),
('exercise', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='workout_exercise_workout', to='exercise.exercise')),
],
),
]

View File

@@ -1,4 +1,5 @@
from django.db import models from django.db import models
from exercise.models import Exercise
# Create your models here. # Create your models here.
class Equipment(models.Model): class Equipment(models.Model):
@@ -9,4 +10,21 @@ class Equipment(models.Model):
name = models.CharField(null=True, blank=True, max_length=64) name = models.CharField(null=True, blank=True, max_length=64)
def __str__(self): def __str__(self):
return self.category + " : " + self.name return self.category + " : " + self.name
class WorkoutEquipment(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
exercise = models.ForeignKey(
Exercise,
on_delete=models.CASCADE,
related_name='workout_exercise_workout'
)
equipment = models.ForeignKey(
Equipment,
on_delete=models.CASCADE,
related_name='workout_exercise_workout'
)
def __str__(self):
return self.exercise.name + " : " + self.equipment.name

View File

@@ -1,9 +1,22 @@
from rest_framework import serializers from rest_framework import serializers
from .models import * from .models import *
from muscle.models import ExerciseMuscle
from equipment.models import WorkoutEquipment
from muscle.serializers import ExerciseMuscleSerializer
class ExerciseSerializer(serializers.ModelSerializer): class ExerciseSerializer(serializers.ModelSerializer):
muscles = serializers.SerializerMethodField()
equipment = serializers.SerializerMethodField()
return_video_url = serializers.ReadOnlyField() return_video_url = serializers.ReadOnlyField()
class Meta: class Meta:
model = Exercise model = Exercise
fields = '__all__' fields = '__all__'
def get_muscles(self, obj):
objs = ExerciseMuscle.objects.filter(exercise=obj).values_list('muscle__name', flat=True)
return objs
def get_equipment(self, obj):
objs = WorkoutEquipment.objects.filter(exercise=obj).values_list('equipment__name', flat=True)
return objs

View File

@@ -4,7 +4,6 @@ from .serializers import *
from django.shortcuts import render from django.shortcuts import render
from rest_framework.decorators import api_view from rest_framework.decorators import api_view
from rest_framework.decorators import api_view
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import status from rest_framework import status
from django.contrib.auth.models import User from django.contrib.auth.models import User

12
muscle/admin.py Normal file
View File

@@ -0,0 +1,12 @@
from django.contrib import admin
from import_export.admin import ImportExportModelAdmin
from .models import *
# Register your models here.
@admin.register(Muscle)
class MuscleAdmin(ImportExportModelAdmin):
list_display = ("name",)
@admin.register(ExerciseMuscle)
class ExerciseMuscleAdmin(ImportExportModelAdmin):
list_display = ("exercise", "muscle",)

View File

@@ -1,6 +1,6 @@
from django.apps import AppConfig from django.apps import AppConfig
class MuscleGroupConfig(AppConfig): class MuscleConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField' default_auto_field = 'django.db.models.BigAutoField'
name = 'muscle_group' name = 'muscle'

View File

@@ -0,0 +1,23 @@
# Generated by Django 4.2.2 on 2023-06-13 01:51
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Muscle',
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=64, null=True)),
],
),
]

View File

@@ -0,0 +1,25 @@
# Generated by Django 4.2.2 on 2023-06-13 02:37
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('exercise', '0002_alter_exercise_options'),
('muscle', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='ExerciseMuscle',
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)),
('exercise', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='exercise_muscle_exercise', to='exercise.exercise')),
('muscle', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='exercise_muscle_muscle', to='muscle.muscle')),
],
),
]

View File

@@ -2,27 +2,27 @@ from django.db import models
from exercise.models import Exercise from exercise.models import Exercise
# Create your models here. # Create your models here.
class MuscleGroup(models.Model): class Muscle(models.Model):
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True) updated_at = models.DateTimeField(auto_now=True)
name = models.CharField(null=True, blank=True, max_length=64) name = models.CharField(null=True, blank=True, max_length=64)
def __str__(self): def __str__(self):
return self.name.name return self.name
class ExerciseMuscleGroup(models.Model): class ExerciseMuscle(models.Model):
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True) updated_at = models.DateTimeField(auto_now=True)
exercise = models.ForeignKey( exercise = models.ForeignKey(
Exercise, Exercise,
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='exercise_muscle_group_exercise' related_name='exercise_muscle_exercise'
) )
muscle_group = models.ForeignKey( muscle = models.ForeignKey(
MuscleGroup, Muscle,
on_delete=models.CASCADE, on_delete=models.CASCADE,
related_name='exercise_muscle_group_muscle_group' related_name='exercise_muscle_muscle'
) )
def __str__(self): def __str__(self):
return self.exercise.name + " : " + self.muscle_group.name return self.exercise.name + " : " + self.muscle.name

7
muscle/serializers.py Normal file
View File

@@ -0,0 +1,7 @@
from rest_framework import serializers
from .models import ExerciseMuscle
class ExerciseMuscleSerializer(serializers.ModelSerializer):
class Meta:
model = ExerciseMuscle
fields = '__all__'

View File

@@ -1,11 +0,0 @@
from django.contrib import admin
from .models import *
# Register your models here.
@admin.register(MuscleGroup)
class MuscleGroupAdmin(admin.ModelAdmin):
list_display = ("name",)
@admin.register(ExerciseMuscleGroup)
class ExerciseMuscleGroupAdmin(admin.ModelAdmin):
list_display = ("exercise", "muscle_group",)

View File

@@ -1,35 +0,0 @@
# 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 = [
('exercise', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='MuscleGroup',
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=64, null=True)),
],
),
migrations.CreateModel(
name='ExerciseMuscleGroup',
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)),
('exercise', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='exercise_muscle_group_exercise', to='exercise.exercise')),
('muscle_group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='exercise_muscle_group_muscle_group', to='muscle_group.musclegroup')),
],
),
]

View File

@@ -1,7 +0,0 @@
from rest_framework import serializers
from models import *
class MuscleGroup(serializers.ModelSerializer):
class Meta:
model = MuscleGroup
fields = '__all__'

0
scripts/__init__.py Normal file
View File

3
scripts/admin.py Normal file
View File

@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

6
scripts/apps.py Normal file
View File

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

View File

3
scripts/models.py Normal file
View File

@@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

3
scripts/tests.py Normal file
View File

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

8
scripts/urls.py Normal file
View File

@@ -0,0 +1,8 @@
from django.urls import path
from . import views
urlpatterns = [
# path('sync_equipment/', views.sync_equipment, name='sync_equipment'),
path('sync_muscle_groups/', views.sync_equipment, name='sync_equipment'),
]

42
scripts/views.py Normal file
View File

@@ -0,0 +1,42 @@
from django.shortcuts import render
from exercise.models import Exercise
from muscle.models import Muscle, ExerciseMuscle
from equipment.models import Equipment, WorkoutEquipment
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
# Create your views here.
@api_view(['GET'])
def sync_equipment(request):
all_exercise = Exercise.objects.all()
for exercise in all_exercise:
all_equipment = exercise.equipment_required.split(',')
for equipment in all_equipment:
if len(equipment) > 0:
try:
equipment_obj = Equipment.objects.get(name=equipment)
WorkoutEquipment.objects.create(exercise=exercise, equipment=equipment_obj).save()
except Equipment.DoesNotExist:
pass
return Response(status=status.HTTP_200_OK)
@api_view(['GET'])
def sync_equipment(request):
all_exercise = Exercise.objects.all()
for exercise in all_exercise:
all_muscle_groups = exercise.muscle_groups.split(',')
for muscle_group in all_muscle_groups:
if len(muscle_group) > 0:
try:
print(muscle_group)
muscle_obj = Muscle.objects.get(name=muscle_group)
print(muscle_obj)
ExerciseMuscle.objects.create(exercise=exercise, muscle=muscle_obj).save()
except MuscleGroup.DoesNotExist:
pass
return Response(status=status.HTTP_200_OK)

14
todo
View File

@@ -1,6 +1,14 @@
split equipment_required form exercises into their own model <!-- split equipment_required form exercises into their own model -->
split muscle_groups form exercises into their own model <!-- split muscle_groups form exercises into their own model -->
registration registration
login login
re-set password re-set password
workouts grouped by creator nsfw breaks
dokku - https://dokku.com
mabye:
workouts grouped by creator (maybe do this client side)

View File

@@ -45,9 +45,10 @@ INSTALLED_APPS = [
'equipment', 'equipment',
'exercise', 'exercise',
'muscle_group',
'registered_user', 'registered_user',
'workout' 'workout',
'muscle',
'scripts'
] ]
MIDDLEWARE = [ MIDDLEWARE = [

View File

@@ -8,6 +8,7 @@ urlpatterns = [
path('workout/', include('workout.urls')), path('workout/', include('workout.urls')),
path('exercise/', include('exercise.urls')), path('exercise/', include('exercise.urls')),
path('scripts/', include('scripts.urls')),
] ]

View File

@@ -27,7 +27,7 @@ class CompleteWorkoutSerializer(serializers.ModelSerializer):
return completed_workout return completed_workout
class WorkoutSerializer(serializers.ModelSerializer): class WorkoutSerializer(serializers.ModelSerializer):
exercise = WorkoutExerciseSerializer(source='workout_exercise_workout', many=True) # exercise = WorkoutExerciseSerializer(source='workout_exercise_workout', many=True)
class Meta: class Meta:
model = Workout model = Workout