mirror of
https://github.com/workhardbekind/workout-challenge.git
synced 2026-07-04 09:23:32 -04:00
57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
from rest_framework import serializers
|
|
from custom_user.models import CustomUser
|
|
from .models import Competition, ActivityGoal, Team, Points
|
|
|
|
|
|
class CompetitionSerializer(serializers.ModelSerializer):
|
|
owner = serializers.PrimaryKeyRelatedField(
|
|
queryset=CustomUser.objects.all(),
|
|
required=False
|
|
)
|
|
user_info = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Competition
|
|
fields = ['id', 'owner', 'user', 'user_info', 'name', 'start_date', 'start_date_fmt', 'start_date_epoch', 'end_date', 'end_date_fmt', 'end_date_epoch', 'has_teams', 'organizer_assigns_teams', 'join_code']
|
|
read_only_fields = ['join_code', 'user', 'user_info']
|
|
|
|
def get_user_info(self, obj):
|
|
# Assuming `obj.user` is a ManyToMany or related manager
|
|
users = obj.user.all().order_by('username') if hasattr(obj.user, 'all') else [obj.user]
|
|
return [{'id': u.id, 'username': u.username} for u in users]
|
|
|
|
|
|
class TeamSerializer(serializers.ModelSerializer):
|
|
user_info = serializers.SerializerMethodField()
|
|
my = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Team
|
|
fields = ['id', 'name', 'competition', 'user', 'user_info', 'my']
|
|
read_only_fields = ['user', 'user_info', 'my']
|
|
|
|
def get_user_info(self, obj):
|
|
# Assuming `obj.user` is a ManyToMany or related manager
|
|
users = obj.user.all().order_by('username') if hasattr(obj.user, 'all') else [obj.user]
|
|
return [{'id': u.id, 'username': u.username} for u in users]
|
|
|
|
def get_my(self, obj):
|
|
# if it is the user's team
|
|
request = self.context.get('request')
|
|
if request and hasattr(request, "user"):
|
|
return obj.user.filter(id=request.user.id).exists()
|
|
return False
|
|
|
|
|
|
class ActivityGoalSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ActivityGoal
|
|
fields = '__all__'
|
|
read_only_fields = []
|
|
|
|
|
|
class PointsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Points
|
|
fields = ['id', 'goal', 'award', 'workout', 'points_raw', 'points_capped']
|
|
read_only_fields = []
|