-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmodels.py
More file actions
146 lines (90 loc) · 3.14 KB
/
models.py
File metadata and controls
146 lines (90 loc) · 3.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
from enum import Enum
from typing import Optional
from pydantic import BaseModel
class User(BaseModel):
"""A model respresenting a user for a codejam."""
user_id: int
is_leader: bool
class Config:
"""Sets ORM mode to true so that pydantic will validate the objects returned by SQLAlchemy."""
orm_mode = True
class Team(BaseModel):
"""A model representing a team for a codejam."""
name: str
users: list[User]
discord_role_id: Optional[int] = None
discord_channel_id: Optional[int] = None
class CodeJam(BaseModel):
"""A model representing a codejam."""
name: str
teams: list[Team]
ongoing: bool = False
class InfractionType(str, Enum):
"""An enumeration of codejam infraction types."""
note = "note"
ban = "ban"
warning = "warning"
class Infraction(BaseModel):
"""A model representing an infraction."""
user_id: int
jam_id: int
reason: str
infraction_type: InfractionType
class Winner(BaseModel):
"""A model representing a codejam winner."""
user_id: int
first_place: bool
class Config:
"""Sets ORM mode to true so that pydantic will validate the objects returned by SQLAlchemy."""
orm_mode = True
class WinnerResponse(Winner):
"""Response model representing a codejam winner."""
jam_id: int
class TeamResponse(Team):
"""Response model representing a team."""
id: int
jam_id: int
class Config:
"""Sets ORM mode to true so that pydantic will validate the objects returned by SQLAlchemy."""
orm_mode = True
class InfractionResponse(Infraction):
"""Reponse model representing an infraction."""
id: int
class Config:
"""Sets ORM mode to true so that pydantic will validate the objects returned by SQLAlchemy."""
orm_mode = True
class ParticipationHistory(BaseModel):
"""A model representing the participathon history of a user in a codejam."""
jam_id: int
top_10: bool
first_place: bool
team_id: int
is_leader: bool
infractions: list[InfractionResponse]
class Config:
"""Sets ORM mode to true so that pydantic will validate the objects returned by SQLAlchemy."""
orm_mode = True
class UserResponse(BaseModel):
"""Response model representing a user."""
id: int
participation_history: list[ParticipationHistory]
class Config:
"""Sets ORM mode to true so that pydantic will validate the objects returned by SQLAlchemy."""
orm_mode = True
class CodeJamResponse(CodeJam):
"""Response model representing a code jam."""
id: int
teams: list[TeamResponse]
infractions: list[InfractionResponse]
winners: list[Winner]
class Config:
"""Sets ORM mode to true so that pydantic will validate the objects returned by SQLAlchemy."""
orm_mode = True
class UserTeamResponse(BaseModel):
"""Response model representing user and team relationship."""
user_id: int
team: TeamResponse
is_leader: bool
class Config:
"""Sets ORM mode to true so that pydantic will validate the objects returned by SQLAlchemy."""
orm_mode = True