WIP
This commit is contained in:
125
twitch_app/api.py
Normal file
125
twitch_app/api.py
Normal file
@ -0,0 +1,125 @@
|
||||
import datetime
|
||||
|
||||
from django.db.models.manager import BaseManager
|
||||
from django.http import HttpRequest
|
||||
from ninja import Router, Schema
|
||||
|
||||
from .models import (
|
||||
DropBenefit,
|
||||
DropCampaign,
|
||||
Game,
|
||||
Organization,
|
||||
TimeBasedDrop,
|
||||
)
|
||||
|
||||
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, # noqa: ARG001
|
||||
) -> BaseManager[Organization]:
|
||||
"""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_benefits
|
||||
@router.get("/drop_benefits", response=list[DropBenefitSchema])
|
||||
def get_drop_benefits(request: HttpRequest) -> BaseManager[DropBenefit]: # noqa: ARG001
|
||||
"""Get all drop benefits."""
|
||||
return DropBenefit.objects.all()
|
||||
|
||||
|
||||
# http://localhost:8000/api/twitch/drop_campaigns
|
||||
@router.get("/drop_campaigns", response=list[DropCampaignSchema])
|
||||
def get_drop_campaigns(
|
||||
request: HttpRequest, # noqa: ARG001
|
||||
) -> BaseManager[DropCampaign]:
|
||||
"""Get all drop campaigns."""
|
||||
return DropCampaign.objects.all()
|
||||
|
||||
|
||||
# http://localhost:8000/api/twitch/time_based_drops
|
||||
@router.get("/time_based_drops", response=list[TimeBasedDropSchema])
|
||||
def get_time_based_drops(
|
||||
request: HttpRequest, # noqa: ARG001
|
||||
) -> BaseManager[TimeBasedDrop]:
|
||||
"""Get all time-based drops."""
|
||||
return TimeBasedDrop.objects.all()
|
Reference in New Issue
Block a user