52 lines
1.1 KiB
Python
52 lines
1.1 KiB
Python
from datetime import datetime
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class VoteCreate(BaseModel):
|
|
title: str
|
|
description: str | None = None
|
|
vote_type: str = "single" # single | multiple
|
|
is_anonymous: bool = False
|
|
max_choices: int = 1
|
|
deadline: datetime | None = None
|
|
options: list[str] # option text list, min 2
|
|
|
|
|
|
class VoteUpdate(BaseModel):
|
|
title: str | None = None
|
|
description: str | None = None
|
|
status: str | None = None # to close a vote
|
|
|
|
|
|
class VoteSubmit(BaseModel):
|
|
option_ids: list[int] # selected option IDs
|
|
|
|
|
|
class VoteOptionOut(BaseModel):
|
|
id: int
|
|
content: str
|
|
sort_order: int
|
|
vote_count: int
|
|
voter_names: list[str] | None = None # None if anonymous
|
|
|
|
|
|
class VoteOut(BaseModel):
|
|
id: int
|
|
class_id: int
|
|
creator_id: int
|
|
creator_name: str
|
|
title: str
|
|
description: str | None
|
|
vote_type: str
|
|
is_anonymous: bool
|
|
max_choices: int
|
|
deadline: datetime | None
|
|
status: str
|
|
total_voters: int
|
|
has_voted: bool
|
|
my_option_ids: list[int] | None = None
|
|
options: list[VoteOptionOut]
|
|
created_at: datetime
|
|
updated_at: datetime
|