ttvdrops/kick/schemas.py
Joakim Helleśen d762081bd5
All checks were successful
Deploy to Server / deploy (push) Successful in 10s
Add support for Kick
2026-03-15 04:19:03 +01:00

126 lines
2.6 KiB
Python

from datetime import datetime # noqa: TC003
from pydantic import BaseModel
from pydantic import Field
class KickUserSchema(BaseModel):
"""Schema for the user nested inside a Kick channel."""
id: int
username: str
profile_picture: str = ""
model_config = {
"extra": "forbid",
"populate_by_name": True,
}
class KickChannelSchema(BaseModel):
"""Schema for a Kick channel participating in a drop campaign."""
id: int
slug: str = ""
description: str = ""
banner_picture_url: str = ""
user: KickUserSchema
model_config = {
"extra": "forbid",
"populate_by_name": True,
}
class KickCategorySchema(BaseModel):
"""Schema for a Kick category (game)."""
id: int
name: str
slug: str = ""
image_url: str = ""
model_config = {
"extra": "forbid",
"populate_by_name": True,
}
class KickOrganizationSchema(BaseModel):
"""Schema for a Kick organization that owns drop campaigns."""
id: str
name: str
logo_url: str = ""
url: str = ""
restricted: bool = False
email_notification: bool = False
model_config = {
"extra": "forbid",
"populate_by_name": True,
}
class KickRewardSchema(BaseModel):
"""Schema for a reward earned from a Kick drop campaign."""
id: str
name: str
image_url: str = ""
required_units: int
category_id: int
organization_id: str
model_config = {
"extra": "forbid",
"populate_by_name": True,
}
class KickRuleSchema(BaseModel):
"""Schema for the rule attached to a drop campaign."""
id: int
name: str
model_config = {
"extra": "forbid",
"populate_by_name": True,
}
class KickDropCampaignSchema(BaseModel):
"""Schema for a Kick drop campaign."""
id: str
name: str
status: str = ""
starts_at: datetime | None = None
ends_at: datetime | None = None
created_at: datetime | None = None
updated_at: datetime | None = None
connect_url: str = ""
url: str = ""
category: KickCategorySchema
organization: KickOrganizationSchema
channels: list[KickChannelSchema] = Field(default_factory=list)
rewards: list[KickRewardSchema] = Field(default_factory=list)
rule: KickRuleSchema
model_config = {
"extra": "forbid",
"populate_by_name": True,
}
class KickDropsResponseSchema(BaseModel):
"""Schema for the top-level response from the Kick drops API."""
data: list[KickDropCampaignSchema]
message: str = ""
model_config = {
"extra": "forbid",
"populate_by_name": True,
}