Skip to content
Extraits de code Groupes Projets
Valider 138fba5a rédigé par Brieuc Dubois's avatar Brieuc Dubois
Parcourir les fichiers

Fix #82: backend part

parent b1de2f5b
Branches dev
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -49,3 +49,12 @@ def get_task_status_session(db: Session, session_id: int) -> models.TaskStatus |
.order_by(models.TaskStatus.created_at.desc())
.first()
)
def get_task_status_completed(db: Session, student_id: int) -> list[models.TaskStatus]:
return (
db.query(models.TaskStatus)
.filter(models.TaskStatus.student_id == student_id)
.filter(models.TaskStatus.status == "finish")
.all()
)
......@@ -67,6 +67,21 @@ def get_task_status_session(
return task_status
@taskRouter.get(
"/status/completed/students/{student_id}", response_model=list[schemas.TaskStatus]
)
def get_task_status_completed(
student_id: int,
db: Session = Depends(get_db),
):
task_status = crud.get_task_status_completed(db, student_id)
if task_status is None:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND, detail="Task status not found"
)
return task_status
@taskRouter.get("/{task_id}", response_model=schemas.Task)
def get_task(
task_id: int,
......
......@@ -97,3 +97,12 @@ export async function getTaskStatusFromSessionAPI(
if (!response.ok) return null;
return await response.json();
}
export async function getTaskStatusCompletedFromStudentAPI(
fetch: fetchType,
student_id: number
): Promise<any> {
const response = await fetch(`/api/tasks/status/completed/students/${student_id}`);
if (!response.ok) return null;
return await response.json();
}
......@@ -9,7 +9,7 @@
let { data }: { data: PageData } = $props();
let user = data.user!;
let { session, jwt, tasks } = data;
let { session, jwt, tasks, completedTasks } = data;
let { onlineUsers } = session;
let level = $state('all');
......@@ -70,6 +70,8 @@
toastAlert($t('tasks.statusFail'));
return;
}
completedTasks.push(currentTask);
taskInProgress = false;
currentTask = null;
toastSuccess($t('tasks.taskFinished'));
......@@ -134,7 +136,12 @@
{#if level === 'all' || l === level}
<optgroup label={l}>
{#each tasks.filter((task: Task) => task.level === l) as task (task.id)}
<option value={task}>{task.shortTitle}</option>
<option value={task}>
{#if completedTasks.includes(task)}
{/if}
{task.shortTitle}
</option>
{/each}
</optgroup>
{/if}
......
import { getSessionAPI } from '$lib/api/sessions';
import { getTasksAPI, getTaskStatusFromSessionAPI } from '$lib/api/tasks';
import {
getTasksAPI,
getTaskStatusCompletedFromStudentAPI,
getTaskStatusFromSessionAPI
} from '$lib/api/tasks';
import Session from '$lib/types/session';
import Task, { TaskStatus } from '$lib/types/tasks';
import { error, type Load } from '@sveltejs/kit';
......@@ -38,5 +42,20 @@ export const load: Load = async ({ params, fetch, data }) => {
}
}
return { session, jwt, tasks, currentTask };
let completedTasks: Task[] = [];
if (session.student) {
const completedTasksStatusRaw = await getTaskStatusCompletedFromStudentAPI(
fetch,
session.student.id
);
if (completedTasksStatusRaw) {
const completedTasksStatus = TaskStatus.parseAll(completedTasksStatusRaw);
completedTasks = completedTasksStatus
.map((taskStatus) => tasks.find((task) => task.id === taskStatus.task_id))
.filter((task) => task !== undefined) as Task[];
}
}
return { session, jwt, tasks, currentTask, completedTasks };
};
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter