From 5d1a5b4ecced2d6b97ffddafb47a0af5f362c48b Mon Sep 17 00:00:00 2001 From: Brieuc Dubois <git@bhasher.com> Date: Thu, 19 Jun 2025 09:35:46 +0200 Subject: [PATCH] Fix #183 --- backend/app/crud/__init__.py | 9 +++++++++ backend/app/main.py | 8 ++++++++ frontend/src/lib/api/users.ts | 7 +++++++ frontend/src/routes/+layout.server.ts | 9 +-------- frontend/src/routes/register/[[studyId]]/+page.ts | 8 +++++--- 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/backend/app/crud/__init__.py b/backend/app/crud/__init__.py index b8a8c2a8..3f0308ff 100644 --- a/backend/app/crud/__init__.py +++ b/backend/app/crud/__init__.py @@ -35,6 +35,15 @@ def get_users(db: Session, skip: int = 0): return db.query(models.User).offset(skip).all() +def get_tutors_by_study(db: Session, study_id: int): + return ( + db.query(models.User) + .filter(models.User.type == models.UserType.TUTOR.value) + .filter(models.User.studies.any(models.Study.id == study_id)) + .all() + ) + + def create_user(db: Session, user: schemas.UserCreate) -> models.User: password = Hasher.get_password_hash(user.password) nickname = user.nickname if user.nickname else user.email.split("@")[0] diff --git a/backend/app/main.py b/backend/app/main.py index fec8ab0a..0480a4c4 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -189,6 +189,14 @@ def read_users( return crud.get_users(db, skip=skip) +@usersRouter.get("/tutors/study/{study_id}", response_model=list[schemas.User]) +def get_tutors_by_study( + study_id: int, + db: Session = Depends(get_db), +): + return crud.get_tutors_by_study(db, study_id) + + @usersRouter.delete("/{user_id}", status_code=status.HTTP_204_NO_CONTENT) def delete_user( user_id: int, diff --git a/frontend/src/lib/api/users.ts b/frontend/src/lib/api/users.ts index 8e64df18..4778fbe9 100644 --- a/frontend/src/lib/api/users.ts +++ b/frontend/src/lib/api/users.ts @@ -7,6 +7,13 @@ export async function getUsersAPI(fetch: fetchType): Promise<any[]> { return await response.json(); } +export async function getTutorsByStudyAPI(fetch: fetchType, study_id: number): Promise<any[]> { + const response = await fetch(`/api/users/tutors/study/${study_id}`); + if (!response.ok) return []; + + return await response.json(); +} + export async function getUserAPI(fetch: fetchType, user_id: number): Promise<any | null> { const response = await fetch(`/api/users/${user_id}`); if (!response.ok) return null; diff --git a/frontend/src/routes/+layout.server.ts b/frontend/src/routes/+layout.server.ts index a1671e66..fd3dfa06 100644 --- a/frontend/src/routes/+layout.server.ts +++ b/frontend/src/routes/+layout.server.ts @@ -1,13 +1,6 @@ import { type ServerLoad, redirect } from '@sveltejs/kit'; -const publicly_allowed = [ - '/login', - '/register', - '/tests', - '/surveys', - '/tutor/register', - '/studies' -]; +const publicly_allowed = ['/login', '/register', '/studies']; const isPublic = (path: string) => { for (const allowed of publicly_allowed) { diff --git a/frontend/src/routes/register/[[studyId]]/+page.ts b/frontend/src/routes/register/[[studyId]]/+page.ts index b8209365..73f9d298 100644 --- a/frontend/src/routes/register/[[studyId]]/+page.ts +++ b/frontend/src/routes/register/[[studyId]]/+page.ts @@ -1,5 +1,5 @@ import { getStudiesAPI, getStudyAPI } from '$lib/api/studies'; -import { getUsersAPI } from '$lib/api/users'; +import { getUsersAPI, getTutorsByStudyAPI } from '$lib/api/users'; import Study from '$lib/types/study'; import type { Load } from '@sveltejs/kit'; @@ -23,8 +23,10 @@ export const load: Load = async ({ parent, fetch, params, url }) => { const studies = Study.parseAll(await getStudiesAPI(fetch)); - const users = await getUsersAPI(fetch); - const tutors = users.filter((user) => user.type === 1); + let tutors: any[] = []; + if (study && study.id) { + tutors = await getTutorsByStudyAPI(fetch, study.id); + } let role = 'learner'; if (url.searchParams.has('role')) { -- GitLab