Skip to content

Commit 14cef35

Browse files
committed
wip: get current officers done
1 parent 2ae6aea commit 14cef35

File tree

3 files changed

+28
-11
lines changed

3 files changed

+28
-11
lines changed

src/officers/models.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ class BaseOfficerModel(BaseModel):
1111
position: OfficerPositionEnum
1212
start_date: datetime
1313
end_date: str | None = None
14-
csss_email: str
1514

1615
class PublicOfficerResponse(BaseOfficerModel):
1716
"""
@@ -22,6 +21,7 @@ class PublicOfficerResponse(BaseOfficerModel):
2221
discord_name: str | None = None
2322
discord_nickname: int | None = None
2423
biography: str | None = None
24+
csss_email: str
2525

2626
class PrivateOfficerResponse(PublicOfficerResponse):
2727
"""
@@ -32,10 +32,17 @@ class PrivateOfficerResponse(PublicOfficerResponse):
3232
github_username: str | None = None
3333
google_drive_email: str | None = None
3434

35-
class OfficerTermParams(BaseModel):
35+
class OfficerTermCreate(BaseOfficerModel):
3636
"""
37-
Create a new officer term
37+
Create a new Officer term
3838
"""
3939
computing_id: str
40-
position: OfficerPositionEnum
41-
start_date: str
40+
41+
class OfficerTermUpdate(BaseModel):
42+
"""
43+
Update an Officer Term
44+
"""
45+
legal_name: str | None = None
46+
position: OfficerPositionEnum | None = None
47+
start_date: datetime | None = None
48+
end_date: datetime | None = None

src/officers/tables.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
Integer,
99
String,
1010
Text,
11+
UniqueConstraint,
1112
)
1213
from sqlalchemy.orm import Mapped, mapped_column
1314

@@ -50,6 +51,8 @@ class OfficerTerm(Base):
5051
biography: Mapped[str] = mapped_column(Text, nullable=True)
5152
photo_url: Mapped[str] = mapped_column(Text, nullable=True) # some urls get big, best to let it be a string
5253

54+
__table_args__ = (UniqueConstraint("computing_id", "position", "start_date"),) # This needs a comma to work
55+
5356
def serializable_dict(self) -> dict:
5457
return {
5558
"id": self.id,

src/officers/urls.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ async def _has_officer_private_info_access(
4646
operation_id="get_current_officers"
4747
)
4848
async def current_officers(
49-
# the request headers
5049
request: Request,
5150
db_session: database.DBSession,
5251
):
@@ -62,7 +61,9 @@ async def current_officers(
6261

6362
@router.get(
6463
"/all",
65-
description="Information for all execs from all exec terms"
64+
description="Information for all execs from all exec terms",
65+
response_model=list[PrivateOfficerResponse] | list[PublicOfficerResponse],
66+
operation_id="get_all_officers"
6667
)
6768
async def all_officers(
6869
request: Request,
@@ -78,10 +79,16 @@ async def all_officers(
7879
raise HTTPException(status_code=401, detail="only website admins can view all executive terms that have not started yet")
7980

8081
all_officers = await officers.crud.all_officers(db_session, has_private_access, include_future_terms)
81-
return JSONResponse([
82-
officer_data.serializable_dict()
83-
for officer_data in all_officers
84-
])
82+
if has_private_access:
83+
return JSONResponse([
84+
PrivateOfficerResponse.model_validate(officer_data)
85+
for officer_data in all_officers
86+
])
87+
else:
88+
return JSONResponse([
89+
PublicOfficerResponse.model_validate(officer_data)
90+
for officer_data in all_officers
91+
])
8592

8693
@router.get(
8794
"/terms/{computing_id}",

0 commit comments

Comments
 (0)