Add user catch submission and moderation workflow
This commit is contained in:
+57
-1
@@ -3,7 +3,7 @@ from __future__ import annotations
|
||||
from datetime import datetime
|
||||
from uuid import UUID
|
||||
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
||||
|
||||
|
||||
class FishOut(BaseModel):
|
||||
@@ -98,3 +98,59 @@ class ImportRunOut(BaseModel):
|
||||
rows_created: int
|
||||
rows_updated: int
|
||||
error_summary: str | None
|
||||
|
||||
|
||||
class CatchReportCreate(BaseModel):
|
||||
fish_slug: str
|
||||
waterbody_slug: str
|
||||
x: int = Field(ge=-10_000, le=10_000)
|
||||
y: int = Field(ge=-10_000, le=10_000)
|
||||
weight_g: int = Field(gt=0, le=3_000_000)
|
||||
bait_name: str | None = Field(default=None, max_length=200)
|
||||
fishing_method: str | None = Field(default=None, max_length=50)
|
||||
rig_type: str | None = Field(default=None, max_length=100)
|
||||
retrieve_method: str | None = Field(default=None, max_length=100)
|
||||
retrieve_speed: int | None = Field(default=None, ge=0, le=100)
|
||||
caught_at: datetime | None = None
|
||||
player_name: str | None = Field(default=None, max_length=100)
|
||||
source_url: str | None = Field(default=None, max_length=1000)
|
||||
comment: str | None = Field(default=None, max_length=1000)
|
||||
website: str = Field(default="", max_length=200)
|
||||
|
||||
@field_validator("fish_slug", "waterbody_slug")
|
||||
@classmethod
|
||||
def nonempty_slug(cls, value: str) -> str:
|
||||
value = value.strip()
|
||||
if not value:
|
||||
raise ValueError("must not be empty")
|
||||
return value
|
||||
|
||||
|
||||
class CatchReportCreated(BaseModel):
|
||||
id: UUID
|
||||
moderation_status: str
|
||||
|
||||
|
||||
class AdminCatchReportOut(BaseModel):
|
||||
id: UUID
|
||||
fish: str
|
||||
waterbody: str
|
||||
coordinates: str
|
||||
weight_g: int
|
||||
bait: str | None
|
||||
player_name: str | None
|
||||
reported_at: datetime
|
||||
moderation_status: str
|
||||
comment: str | None
|
||||
|
||||
|
||||
class ModerationUpdate(BaseModel):
|
||||
status: str
|
||||
reason: str | None = Field(default=None, max_length=1000)
|
||||
|
||||
@field_validator("status")
|
||||
@classmethod
|
||||
def known_status(cls, value: str) -> str:
|
||||
if value not in {"approved", "rejected", "pending"}:
|
||||
raise ValueError("unknown moderation status")
|
||||
return value
|
||||
|
||||
Reference in New Issue
Block a user