Skip to content

Commit 2889cae

Browse files
committed
add site user data struct
1 parent e2566f4 commit 2889cae

File tree

3 files changed

+40
-18
lines changed

3 files changed

+40
-18
lines changed

src/auth/crud.py

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import logging
22
from datetime import datetime, timedelta
3-
from typing import Optional
43

54
import sqlalchemy
65
from sqlalchemy.ext.asyncio import AsyncSession
76

87
from auth.tables import SiteUser, UserSession
8+
from auth.types import SiteUserData
99

1010

1111
async def create_user_session(db_session: AsyncSession, session_id: str, computing_id: str):
@@ -54,6 +54,7 @@ async def create_user_session(db_session: AsyncSession, session_id: str, computi
5454
)
5555
db_session.add(new_user_session)
5656

57+
5758
async def remove_user_session(db_session: AsyncSession, session_id: str) -> dict:
5859
query = sqlalchemy.select(UserSession).where(UserSession.session_id == session_id)
5960
user_session = await db_session.scalars(query)
@@ -76,7 +77,7 @@ async def task_clean_expired_user_sessions(db_session: AsyncSession):
7677

7778

7879
# get the site user given a session ID; returns None when session is invalid
79-
async def get_site_user(db_session: AsyncSession, session_id: str) -> None | dict:
80+
async def get_site_user(db_session: AsyncSession, session_id: str) -> None | SiteUserData:
8081
query = (
8182
sqlalchemy
8283
.select(UserSession)
@@ -95,16 +96,20 @@ async def get_site_user(db_session: AsyncSession, session_id: str) -> None | dic
9596
if user is None:
9697
return None
9798

98-
return {
99-
"computing_id": user_session.computing_id,
100-
"first_logged_in": user.first_logged_in.isoformat(),
101-
"last_logged_in": user.last_logged_in.isoformat(),
102-
"profile_picture_url": user.profile_picture_url
103-
}
99+
return SiteUserData(
100+
user_session.computing_id,
101+
user.first_logged_in.isoformat(),
102+
user.last_logged_in.isoformat(),
103+
user.profile_picture_url
104+
)
104105

105106

106107
# update the optional user info for a given site user (e.g., display name, profile picture, ...)
107-
async def update_site_user(db_session: AsyncSession, session_id: str, profile_picture_url: str) -> None | dict:
108+
async def update_site_user(
109+
db_session: AsyncSession,
110+
session_id: str,
111+
profile_picture_url: str
112+
) -> None | SiteUserData:
108113
query = (
109114
sqlalchemy
110115
.select(UserSession)
@@ -118,16 +123,16 @@ async def update_site_user(db_session: AsyncSession, session_id: str, profile_pi
118123
sqlalchemy
119124
.update(SiteUser)
120125
.where(SiteUser.computing_id == user_session.computing_id)
121-
.values(profile_picture_url=profile_picture_url)
126+
.values(profile_picture_url = profile_picture_url)
122127
.returning(SiteUser) # returns all columns of SiteUser
123128
)
124129
user = await db_session.scalar(query)
125130
if user is None:
126131
return None
127132

128-
return {
129-
"computing_id": user_session.computing_id,
130-
"first_logged_in": user.first_logged_in.isoformat(),
131-
"last_logged_in": user.last_logged_in.isoformat(),
132-
"profile_picture_url": user.profile_picture_url
133-
}
133+
return SiteUserData(
134+
user_session.computing_id,
135+
user.first_logged_in.isoformat(),
136+
user.last_logged_in.isoformat(),
137+
user.profile_picture_url
138+
)

src/auth/types.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from dataclasses import dataclass
2+
3+
4+
@dataclass
5+
class SiteUserData:
6+
computing_id: str
7+
first_logged_in: str
8+
last_logged_in: str
9+
profile_picture_url: None | str
10+
11+
def serializable_dict(self):
12+
return {
13+
"computing_id": self.computing_id,
14+
"first_logged_in": self.first_logged_in,
15+
"last_logged_in": self.last_logged_in,
16+
"profile_picture_url": self.profile_picture_url
17+
}

src/auth/urls.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ async def get_user(
111111
if user_info is None:
112112
raise HTTPException(status_code=401, detail="Could not find user with session_id, please log in")
113113

114-
return JSONResponse(user_info)
114+
return JSONResponse(user_info.serializable_dict())
115115

116116

117117
@router.patch(
@@ -134,4 +134,4 @@ async def update_user(
134134
if user_info is None:
135135
raise HTTPException(status_code=401, detail="Could not find user with session_id, please log in")
136136

137-
return JSONResponse(user_info)
137+
return JSONResponse(user_info.serializable_dict())

0 commit comments

Comments
 (0)