mission today
This commit is contained in:
parent
e99c109053
commit
5428cee51f
@ -134,3 +134,40 @@ class MissionLogDetailSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
def get_status_display(self, obj):
|
def get_status_display(self, obj):
|
||||||
return obj.get_status_display()
|
return obj.get_status_display()
|
||||||
|
|
||||||
|
class MissionWithLogSerializer(serializers.ModelSerializer):
|
||||||
|
category_display = serializers.SerializerMethodField()
|
||||||
|
task_display = serializers.SerializerMethodField()
|
||||||
|
status_display = serializers.SerializerMethodField()
|
||||||
|
log_status = serializers.CharField(read_only=True)
|
||||||
|
log_completed_at = serializers.DateTimeField(read_only=True)
|
||||||
|
log_claimed_at = serializers.DateTimeField(read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.Mission
|
||||||
|
fields = [
|
||||||
|
'id',
|
||||||
|
'name',
|
||||||
|
'description',
|
||||||
|
'featured_image',
|
||||||
|
'coin',
|
||||||
|
'point',
|
||||||
|
'category',
|
||||||
|
'task',
|
||||||
|
'status',
|
||||||
|
'date_time_from_valid',
|
||||||
|
'date_time_to_valid',
|
||||||
|
'category_display',
|
||||||
|
'task_display',
|
||||||
|
'status_display',
|
||||||
|
'log_status', 'log_completed_at', 'log_claimed_at'
|
||||||
|
]
|
||||||
|
|
||||||
|
def get_category_display(self, obj):
|
||||||
|
return obj.get_category_display()
|
||||||
|
|
||||||
|
def get_task_display(self, obj):
|
||||||
|
return obj.get_task_display()
|
||||||
|
|
||||||
|
def get_status_display(self, obj):
|
||||||
|
return obj.get_status_display()
|
||||||
@ -5,6 +5,8 @@ urlpatterns = [
|
|||||||
path('missions/', views.MissionList.as_view()),
|
path('missions/', views.MissionList.as_view()),
|
||||||
path('missions/<int:pk>/', views.MissionDetail.as_view()),
|
path('missions/<int:pk>/', views.MissionDetail.as_view()),
|
||||||
|
|
||||||
|
path('missions/today/', views.TodayMissionListView.as_view()),
|
||||||
|
|
||||||
path('categories/', views.MissionCategoryChoices.as_view()),
|
path('categories/', views.MissionCategoryChoices.as_view()),
|
||||||
path('tasks/', views.MissionTaskChoices.as_view()),
|
path('tasks/', views.MissionTaskChoices.as_view()),
|
||||||
path('statuses/', views.MissionStatusChoices.as_view()),
|
path('statuses/', views.MissionStatusChoices.as_view()),
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework import generics, filters, views
|
from rest_framework import generics, filters, views
|
||||||
from django_filters.rest_framework import DjangoFilterBackend, FilterSet, CharFilter, ChoiceFilter
|
from django_filters.rest_framework import DjangoFilterBackend, FilterSet, CharFilter, ChoiceFilter
|
||||||
|
from django.db.models import OuterRef, Subquery
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
from mission import models, serializers
|
from mission import models, serializers
|
||||||
|
|
||||||
@ -80,3 +82,28 @@ class MissionLogDetail(generics.RetrieveUpdateDestroyAPIView):
|
|||||||
return serializers.MissionLogDetailSerializer
|
return serializers.MissionLogDetailSerializer
|
||||||
|
|
||||||
return serializer_class
|
return serializer_class
|
||||||
|
|
||||||
|
class TodayMissionListView(views.APIView):
|
||||||
|
def get(self, request):
|
||||||
|
user_id = request.user.id
|
||||||
|
now = timezone.now()
|
||||||
|
|
||||||
|
missions = models.Mission.objects.filter(
|
||||||
|
status='published',
|
||||||
|
date_time_from_valid__lte=now,
|
||||||
|
date_time_to_valid__gte=now
|
||||||
|
)
|
||||||
|
|
||||||
|
mission_log_subquery = models.MissionLog.objects.filter(
|
||||||
|
mission=OuterRef('pk'),
|
||||||
|
user_id=user_id
|
||||||
|
)
|
||||||
|
|
||||||
|
missions = missions.annotate(
|
||||||
|
log_status=Subquery(mission_log_subquery.values('status')[:1]),
|
||||||
|
log_completed_at=Subquery(mission_log_subquery.values('completed_at')[:1]),
|
||||||
|
log_claimed_at=Subquery(mission_log_subquery.values('claimed_at')[:1]),
|
||||||
|
)
|
||||||
|
|
||||||
|
serializer = serializers.MissionWithLogSerializer(missions, many=True)
|
||||||
|
return Response(serializer.data)
|
||||||
Loading…
Reference in New Issue
Block a user