WIP
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -3,7 +3,7 @@
|
||||
*.pot
|
||||
*.pyc
|
||||
__pycache__
|
||||
db.sqlite3
|
||||
#db.sqlite3
|
||||
media
|
||||
|
||||
# Backup files #
|
||||
|
||||
BIN
db.sqlite3
Normal file
BIN
db.sqlite3
Normal file
Binary file not shown.
BIN
db_bk.sqlite3
BIN
db_bk.sqlite3
Binary file not shown.
@@ -6,3 +6,7 @@ from .models import *
|
||||
@admin.register(Equipment)
|
||||
class EquipmentAdmin(ImportExportModelAdmin):
|
||||
list_display = ("name", "is_weight", "category",)
|
||||
|
||||
@admin.register(WorkoutEquipment)
|
||||
class WorkoutEquipmentAdmin(ImportExportModelAdmin):
|
||||
list_display = ("equipment", "exercise",)
|
||||
25
equipment/migrations/0002_workoutequipment.py
Normal file
25
equipment/migrations/0002_workoutequipment.py
Normal 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')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -1,4 +1,5 @@
|
||||
from django.db import models
|
||||
from exercise.models import Exercise
|
||||
|
||||
# Create your models here.
|
||||
class Equipment(models.Model):
|
||||
@@ -10,3 +11,20 @@ class Equipment(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
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
|
||||
@@ -1,9 +1,22 @@
|
||||
from rest_framework import serializers
|
||||
from .models import *
|
||||
from muscle.models import ExerciseMuscle
|
||||
from equipment.models import WorkoutEquipment
|
||||
from muscle.serializers import ExerciseMuscleSerializer
|
||||
|
||||
class ExerciseSerializer(serializers.ModelSerializer):
|
||||
muscles = serializers.SerializerMethodField()
|
||||
equipment = serializers.SerializerMethodField()
|
||||
return_video_url = serializers.ReadOnlyField()
|
||||
|
||||
class Meta:
|
||||
model = Exercise
|
||||
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
|
||||
@@ -4,7 +4,6 @@ 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
|
||||
|
||||
12
muscle/admin.py
Normal file
12
muscle/admin.py
Normal 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",)
|
||||
@@ -1,6 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class MuscleGroupConfig(AppConfig):
|
||||
class MuscleConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'muscle_group'
|
||||
name = 'muscle'
|
||||
23
muscle/migrations/0001_initial.py
Normal file
23
muscle/migrations/0001_initial.py
Normal 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)),
|
||||
],
|
||||
),
|
||||
]
|
||||
25
muscle/migrations/0002_exercisemuscle.py
Normal file
25
muscle/migrations/0002_exercisemuscle.py
Normal 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')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -2,27 +2,27 @@ from django.db import models
|
||||
from exercise.models import Exercise
|
||||
|
||||
# Create your models here.
|
||||
class MuscleGroup(models.Model):
|
||||
class Muscle(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=64)
|
||||
|
||||
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)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
exercise = models.ForeignKey(
|
||||
Exercise,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='exercise_muscle_group_exercise'
|
||||
related_name='exercise_muscle_exercise'
|
||||
)
|
||||
muscle_group = models.ForeignKey(
|
||||
MuscleGroup,
|
||||
muscle = models.ForeignKey(
|
||||
Muscle,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='exercise_muscle_group_muscle_group'
|
||||
related_name='exercise_muscle_muscle'
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.exercise.name + " : " + self.muscle_group.name
|
||||
return self.exercise.name + " : " + self.muscle.name
|
||||
7
muscle/serializers.py
Normal file
7
muscle/serializers.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from rest_framework import serializers
|
||||
from .models import ExerciseMuscle
|
||||
|
||||
class ExerciseMuscleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ExerciseMuscle
|
||||
fields = '__all__'
|
||||
@@ -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",)
|
||||
@@ -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')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -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
0
scripts/__init__.py
Normal file
3
scripts/admin.py
Normal file
3
scripts/admin.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
6
scripts/apps.py
Normal file
6
scripts/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class ScriptsConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'scripts'
|
||||
0
scripts/migrations/__init__.py
Normal file
0
scripts/migrations/__init__.py
Normal file
3
scripts/models.py
Normal file
3
scripts/models.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
3
scripts/tests.py
Normal file
3
scripts/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
8
scripts/urls.py
Normal file
8
scripts/urls.py
Normal 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
42
scripts/views.py
Normal 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
14
todo
@@ -1,6 +1,14 @@
|
||||
split equipment_required form exercises into their own model
|
||||
split muscle_groups form exercises into their own model
|
||||
<!-- split equipment_required form exercises into their own model -->
|
||||
<!-- split muscle_groups form exercises into their own model -->
|
||||
registration
|
||||
login
|
||||
re-set password
|
||||
workouts grouped by creator
|
||||
nsfw breaks
|
||||
|
||||
|
||||
dokku - https://dokku.com
|
||||
|
||||
|
||||
|
||||
mabye:
|
||||
workouts grouped by creator (maybe do this client side)
|
||||
|
||||
@@ -45,9 +45,10 @@ INSTALLED_APPS = [
|
||||
|
||||
'equipment',
|
||||
'exercise',
|
||||
'muscle_group',
|
||||
'registered_user',
|
||||
'workout'
|
||||
'workout',
|
||||
'muscle',
|
||||
'scripts'
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
||||
@@ -8,6 +8,7 @@ urlpatterns = [
|
||||
|
||||
path('workout/', include('workout.urls')),
|
||||
path('exercise/', include('exercise.urls')),
|
||||
path('scripts/', include('scripts.urls')),
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ class CompleteWorkoutSerializer(serializers.ModelSerializer):
|
||||
return completed_workout
|
||||
|
||||
class WorkoutSerializer(serializers.ModelSerializer):
|
||||
exercise = WorkoutExerciseSerializer(source='workout_exercise_workout', many=True)
|
||||
# exercise = WorkoutExerciseSerializer(source='workout_exercise_workout', many=True)
|
||||
|
||||
class Meta:
|
||||
model = Workout
|
||||
|
||||
Reference in New Issue
Block a user