make it possible to filter quests

This commit is contained in:
Laura Klünder 2024-12-26 01:26:24 +01:00
parent 9c58d73036
commit 81448d592d

View file

@ -1,5 +1,5 @@
import json import json
from typing import Annotated, Union from typing import Annotated, Union, Optional
from celery import chain from celery import chain
from django.core.serializers.json import DjangoJSONEncoder from django.core.serializers.json import DjangoJSONEncoder
@ -399,11 +399,29 @@ Quests
""" """
class QuestsFilter(BaseSchema):
quest_type: Optional[str] = APIField(
None,
title="only show these quest types",
description="multiple quest types can be comma-separated"
)
level: Optional[PositiveInt] = APIField(
None,
title="only show quests for this level",
)
@map_api_router.get('/quests/', summary="get open quests", @map_api_router.get('/quests/', summary="get open quests",
response={200: list[QuestSchema], **auth_responses}) response={200: list[QuestSchema], **auth_responses})
@api_etag(permissions=True, quests=True) @api_etag(permissions=True, quests=True)
def list_quests(request): def list_quests(request, filters: Query[QuestsFilter]):
return get_all_quests_for_request(request) quests = get_all_quests_for_request(request)
quest_types = frozenset(filters.quest_type.split(',')) if filters.quest_type else ()
if quest_types:
quests = [quest for quest in quests if quest.quest_type in quest_types]
if filters.level:
quests = [quest for quest in quests if quest.level_id == filters.level]
return quests
""" """