quest control

This commit is contained in:
Gwendolyn 2024-12-26 02:28:38 +01:00
parent 7057919fd3
commit 2c871781a1
4 changed files with 429 additions and 363 deletions

View file

@ -415,10 +415,9 @@ class QuestsFilter(BaseSchema):
response={200: list[QuestSchema], **auth_responses})
@api_etag(permissions=True, quests=True)
def list_quests(request, filters: Query[QuestsFilter]):
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]
quest_types = filters.quest_type.split(',') if filters.quest_type else None
quests = get_all_quests_for_request(request, quest_types)
if filters.level:
quests = [quest for quest in quests if quest.level_id == filters.level]
return quests

View file

@ -123,9 +123,16 @@ class QuestSchema(BaseSchema):
point: PointSchema
def get_all_quests_for_request(request) -> list[QuestSchema]:
return list(chain(*(
quest.cached_get_all_for_request(request)
for key, quest in quest_types.items()
if request.user.is_superuser or key in request.user_permissions.quests
)))
def get_all_quests_for_request(request, requested_quest_types: Optional[list[str]]) -> list[QuestSchema]:
if requested_quest_types is None:
return list(chain(*(
quest.cached_get_all_for_request(request)
for key, quest in quest_types.items()
if request.user.is_superuser or key in request.user_permissions.quests
)))
else:
return list(chain(*(
quest.cached_get_all_for_request(request)
for key, quest in quest_types.items()
if key in requested_quest_types and (request.user.is_superuser or key in request.user_permissions.quests)
)))