Private
Public Access
1
0
Files
rowsandall/rowers/serializers.py
Sander Roosendaal fcc38dde08 adding name
2020-07-18 11:44:39 +02:00

247 lines
7.2 KiB
Python

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
# Serializers. Defines which fields from an object get to the JSON object
# Also optionally define POST, PATCH methods (create, update)
from rest_framework import serializers
from rowers.models import (
Workout,Rower,FavoriteChart,VirtualRaceResult,
VirtualRace,GeoCourse,StandardCollection, CourseStandard,
)
import datetime
# Serializers define the API representation.
class RowerSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Rower
fields = (
'id',
'weightcategory',
'max',
'rest',
'ut2',
'ut1',
'at',
'tr',
'an',
'ftp',
'sex',
)
class FavoriteChartSerializer(serializers.ModelSerializer):
class Meta:
model = FavoriteChart
fields = (
'id',
'xparam',
'yparam1',
'yparam2',
'plottype',
'workouttype',
'reststrokes',
'user'
)
class CourseStandardSerializer(serializers.ModelSerializer):
class Meta:
model = CourseStandard
fields = (
'id',
'name',
'coursedistance',
'coursetime',
'agemin',
'agemax',
'boatclass',
'boattype',
'sex',
'weightclass',
'adaptiveclass',
'skillclass',
'standardcollection',
)
class StandardCollectionSerializer(serializers.ModelSerializer):
standards = CourseStandardSerializer(many=True,read_only=True)
class Meta:
model = StandardCollection
fields = (
'id',
'notes',
'active',
'standards'
)
class EntrySerializer(serializers.ModelSerializer):
entrycategory = CourseStandardSerializer(read_only=True)
class Meta:
model = VirtualRaceResult
fields = (
'id',
'teamname',
'adaptiveclass',
'skillclass',
'race',
'distance',
'duration',
'points',
'boattype',
'sex',
'age',
'entrycategory',
)
class VirtualRaceSerializer(serializers.ModelSerializer):
coursestandards = StandardCollectionSerializer(read_only=True)
class Meta:
model = VirtualRace
fields = (
'id',
'name',
'registration_closure',
'evaluation_closure',
'start_time',
'end_time',
'country',
'timezone',
'contact_phone',
'contact_email',
'coursestandards',
)
class EntrySerializer(serializers.ModelSerializer):
entrycategory = CourseStandardSerializer(read_only=True)
race = VirtualRaceSerializer(read_only=True)
class Meta:
model = VirtualRaceResult
fields = (
'id',
'teamname',
'adaptiveclass',
'skillclass',
'race',
'distance',
'duration',
'points',
'boattype',
'sex',
'age',
'entrycategory',
)
class WorkoutSerializer(serializers.ModelSerializer):
class Meta:
model = Workout
fields = (
'id',
'name',
'date',
'workouttype',
'starttime',
'distance',
'duration',
'averagehr',
'maxhr',
'notes',
'summary',
'boattype',
'timezone',
'forceunit',
'inboard',
'oarlength',
'privacy',
'rankingpiece'
)
def create(self, validated_data):
r = Rower.objects.get(user=self.context['request'].user)
d = validated_data['date']
t = validated_data['starttime']
rowdatetime = datetime.datetime(d.year,
d.month,
d.day,
t.hour,
t.minute,
t.second)
w = Workout(user=r,
name=validated_data['name'],
date=validated_data['date'],
workouttype=validated_data['workouttype'],
duration=validated_data['duration'],
distance=validated_data['distance'],
weightcategory=r.weightcategory,
adaptiveclass=r.adaptiveclass,
starttime=validated_data['starttime'],
csvfilename='',
notes=validated_data['notes'],
uploadedtoc2=0,
summary=validated_data['summary'],
averagehr=validated_data['averagehr'],
maxhr=validated_data['maxhr'],
startdatetime=rowdatetime,
timezone=validated_data['timezone'],
forceunit=validated_data['forceunit'],
inboard=validated_data['inboard'],
oarlength=validated_data['oarlength'],
privacy=validated_data['privacy'],
rankingpiece=validated_data['rankingpiece'],)
w.save()
return w
def update(self, instance, validated_data):
d = validated_data['date']
t = validated_data['starttime']
rowdatetime = datetime.datetime(d.year,
d.month,
d.day,
t.hour,
t.minute,
t.second)
instance.name=validated_data['name']
instance.date=validated_data['date']
instance.workouttype=validated_data['workouttype']
instance.duration=validated_data['duration']
instance.distance=validated_data['distance']
instance.starttime=validated_data['starttime']
instance.notes=validated_data['notes']
instance.summary=validated_data['summary']
instance.averagehr=validated_data['averagehr']
instance.maxhr=validated_data['maxhr']
instance.startdatetime=rowdatetime
instance.timezone=validated_data['timezone']
instance.forceunit=validated_data['forceunit']
instance.inboard=validated_data['inboard']
instance.oarlength=validated_data['oarlength']
instance.privacy=validated_data['privacy']
instance.rankingpiece=validated_data['rankingpiece']
instance.save()
return instance
# This is just a fake one for URL registration purposes
class StrokeDataSerializer(serializers.Serializer):
workoutid = serializers.IntegerField
strokedata = serializers.JSONField
def create(self, workoutid, strokedata):
"""
Create and enter a new set of stroke data into the DB
"""
# do something
return 1