mission today
This commit is contained in:
parent
e99c109053
commit
5428cee51f
@ -132,5 +132,42 @@ class MissionLogDetailSerializer(serializers.ModelSerializer):
|
||||
|
||||
return data
|
||||
|
||||
def get_status_display(self, obj):
|
||||
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/<int:pk>/', views.MissionDetail.as_view()),
|
||||
|
||||
path('missions/today/', views.TodayMissionListView.as_view()),
|
||||
|
||||
path('categories/', views.MissionCategoryChoices.as_view()),
|
||||
path('tasks/', views.MissionTaskChoices.as_view()),
|
||||
path('statuses/', views.MissionStatusChoices.as_view()),
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import generics, filters, views
|
||||
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
|
||||
|
||||
@ -79,4 +81,29 @@ class MissionLogDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
if self.request.method in ['GET']:
|
||||
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