import datetime from django.db.models.manager import BaseManager from django.http import HttpRequest from ninja import Router, Schema from .models import ( Drop, DropCampaign, Game, Organization, ) router = Router( tags=["twitch"], ) class OrganizationSchema(Schema): id: str | None = None name: str | None = None added_at: datetime.datetime | None = None modified_at: datetime.datetime | None = None class ChannelSchema(Schema): id: str display_name: str | None = None name: str | None = None added_at: datetime.datetime | None = None modified_at: datetime.datetime | None = None class GameSchema(Schema): id: str slug: str | None = None twitch_url: str | None = None display_name: str | None = None added_at: datetime.datetime | None = None modified_at: datetime.datetime | None = None class DropBenefitSchema(Schema): id: str created_at: datetime.datetime | None = None entitlement_limit: int | None = None image_asset_url: str | None = None is_ios_available: bool | None = None name: str | None = None owner_organization: OrganizationSchema game: GameSchema added_at: datetime.datetime | None = None modified_at: datetime.datetime | None = None class TimeBasedDropSchema(Schema): id: str required_subs: int | None = None end_at: datetime.datetime | None = None name: str | None = None required_minutes_watched: int | None = None start_at: datetime.datetime | None = None benefits: list[DropBenefitSchema] added_at: datetime.datetime | None = None modified_at: datetime.datetime | None = None class DropCampaignSchema(Schema): id: str account_link_url: str | None = None description: str | None = None details_url: str | None = None end_at: datetime.datetime | None = None image_url: str | None = None name: str | None = None start_at: datetime.datetime | None = None status: str | None = None game: GameSchema | None = None owner: OrganizationSchema | None = None channels: list[ChannelSchema] | None = None time_based_drops: list[TimeBasedDropSchema] | None = None added_at: datetime.datetime | None = None modified_at: datetime.datetime | None = None # http://localhost:8000/api/twitch/organizations @router.get("/organizations", response=list[OrganizationSchema]) def get_organizations(request: HttpRequest) -> BaseManager[Organization]: # noqa: ARG001 """Get all organizations.""" return Organization.objects.all() # http://localhost:8000/api/twitch/games @router.get("/games", response=list[GameSchema]) def get_games(request: HttpRequest) -> BaseManager[Game]: # noqa: ARG001 """Get all games.""" return Game.objects.all() # http://localhost:8000/api/twitch/drop_campaigns @router.get("/drop_campaigns", response=list[DropCampaignSchema]) def get_drop_campaigns(request: HttpRequest) -> BaseManager[DropCampaign]: # noqa: ARG001 """Get all drop campaigns.""" return DropCampaign.objects.all() # http://localhost:8000/api/twitch/drops @router.get("/drops", response=list[TimeBasedDropSchema]) def get_drops(request: HttpRequest) -> BaseManager[Drop]: # noqa: ARG001 """Get all time-based drops.""" return Drop.objects.all()