Private
Public Access
1
0

Merge branch 'release/v15.28'

This commit is contained in:
Sander Roosendaal
2021-01-30 15:14:10 +01:00
5 changed files with 93 additions and 4 deletions

View File

@@ -2292,6 +2292,7 @@ class PlannedSession(models.Model):
if self.sessionvalue <= 0:
self.sessionvalue = 1
manager = self.manager
if self.sessiontype not in ['race','indoorrace']:
if not can_add_session(self.manager):

View File

@@ -27,6 +27,16 @@ class IsOwnerOrNot(permissions.BasePermission):
r = Rower.objects.get(user=request.user)
return (obj.user == r)
class IsRowerOrNot(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
r = Rower.objects.get(user=request.user)
return (r in obj.rower.all())
class IsPlanOrHigher(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
r = Rower.objects.get(user=request.user)
return r not in ['basic','pro','freecoach']
class IsCompetitorOrNot(permissions.BasePermission):
def has_object_permission(self, request, view, obj):

View File

@@ -10,7 +10,7 @@ from rest_framework import serializers
from rowers.models import (
Workout,Rower,FavoriteChart,VirtualRaceResult,
VirtualRace,GeoCourse,StandardCollection, CourseStandard,
GeoCourse, GeoPolygon, GeoPoint,
GeoCourse, GeoPolygon, GeoPoint,PlannedSession,
)
from django.core.exceptions import PermissionDenied
@@ -31,8 +31,11 @@ class RowerSerializer(serializers.HyperlinkedModelSerializer):
'at',
'tr',
'an',
'hrzones',
'ftp',
'hrftp',
'sex',
'defaulttimezone',
)
class FavoriteChartSerializer(serializers.ModelSerializer):
@@ -127,6 +130,34 @@ class VirtualRaceSerializer(serializers.ModelSerializer):
'coursestandards',
)
class PlannedSessionSerializer(serializers.ModelSerializer):
class Meta:
model = VirtualRace
fields = (
'id',
'name',
'comment',
'startdate',
'enddate',
'preferreddate',
'sessiontype',
'sessionvalue',
'sessionunit',
'sessionmode',
'course',
)
def create(self, validated_data):
if self.context['request'].user.is_authenticated:
r = Rower.objects.get(user=self.context['request'].user)
else:
raise PermissionDenied("Not allowed")
ps = PlannedSession.objects.create(manager=r.user,**validated_data)
ps.rower.add(r)
ps.save()
return ps
class EntrySerializer(serializers.ModelSerializer):
entrycategory = CourseStandardSerializer(read_only=True)
race = VirtualRaceSerializer(read_only=True)
@@ -172,7 +203,6 @@ class WorkoutSerializer(serializers.ModelSerializer):
)
def create(self, validated_data):
print(validated_data)
if self.context['request'].user.is_authenticated:
r = Rower.objects.get(user=self.context['request'].user)
else:

View File

@@ -208,6 +208,32 @@
</td>
</tr>
<tr>
<td>Planned Session</td>
<td><a href="/rowers/api/plannedsessions/">/rowers/api/plannedsessions/</a>
<br>
<a href="/rowers/api/plannedsessions/1">/rowers/api/plannedsessions/{id}</a></td>
<td>GET, POST, DELETE</td>
<td>
<pre>{
"id": 17,
"name": "Test Session",
"comment": "",
"startdate": "2021-01-25",
"enddate": "2021-01-31",
"preferreddate": "2021-01-29",
"sessiontype": "session",
"sessionvalue": 60,
"sessionunit": "min",
"sessionmode": "time",
"manager": 1,
"course": null
}
</pre>
</td>
</tr>
<tr>
<td>Challenge</td>
<td><a href="/rowers/api/challenges/">/rowers/api/challenges/</a>

View File

@@ -11,7 +11,7 @@ from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
from rowers.models import (
Workout,Rower,FavoriteChart,VirtualRaceResult,
VirtualRace,StandardCollection,CourseStandard,GeoCourse,
VirtualRace,StandardCollection,CourseStandard,GeoCourse,PlannedSession,
)
from rest_framework import routers, serializers, viewsets,permissions
@@ -24,7 +24,8 @@ from django.utils.decorators import method_decorator
from rowers.permissions import (
IsOwnerOrNot,IsOwnerOrReadOnly,
IsCompetitorOrNot,
IsCompetitorOrNot,IsRowerOrNot,
IsPlanOrHigher,
)
from rowers.serializers import (
WorkoutSerializer,
@@ -38,6 +39,7 @@ from rowers.serializers import (
GeoCourseSerializer,
GeoPolygonSerializer,
GeoPointSerializer,
PlannedSessionSerializer,
)
from oauth2_provider.views import (
@@ -49,6 +51,25 @@ from oauth2_provider.views.base import (
RevokeTokenView
)
class PlannedSessionViewSet(viewsets.ModelViewSet):
model = PlannedSession
serializer_class = PlannedSessionSerializer
def get_queryset(self):
try:
r = Rower.objects.get(user=self.request.user)
if r.rowerplan not in ['basic','pro']:
return PlannedSession.objects.filter(rower=r).order_by("-preferreddate")
else:
return []
except TypeError:
return []
permission_classes = (
IsRowerOrNot,
IsPlanOrHigher,
)
class WorkoutViewSet(viewsets.ModelViewSet):
model = Workout
#queryset = Workout.objects.all().order_by("-date", "-starttime")
@@ -175,6 +196,7 @@ class StrokeDataViewSet(viewsets.ModelViewSet):
# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'api/workouts',WorkoutViewSet, 'workout')
router.register(r'api/plannedsessions',PlannedSessionViewSet,'plannedsession')
router.register(r'api/me',RowerViewSet, 'rower')
router.register(r'api/charts',FavoriteChartViewSet, 'charts')
router.register(r'api/entries',EntryViewSet,'entries')