1+ import { NextFunction , Request , Response } from 'express'
2+
3+ import { GenericResponse , NotFound } from '../../utils/apiResponse.utils'
4+
5+ import AttendanceService from './attendance.service'
6+ import { AttendanceRequest } from 'devu-shared-modules'
7+ import { serialize } from './attendance.serializer'
8+ import AttendanceSubmissionService from './attendanceSubmission.service'
9+ import { serialize as submissionSerialize } from './attendanceSubmission.serializer'
10+
11+ export async function getSessionById ( req : Request , res : Response , next : NextFunction ) {
12+ try {
13+ const id = parseInt ( req . params . id )
14+ if ( isNaN ( id ) ) {
15+ return res . status ( 400 ) . json ( new GenericResponse ( 'Invalid ID parameter.' ) )
16+ }
17+
18+ const session = await AttendanceService . getSessionById ( id )
19+
20+ if ( ! session ) {
21+ return res . status ( 404 ) . json ( NotFound )
22+ }
23+
24+ res . status ( 200 ) . json ( serialize ( session ) )
25+ } catch ( err ) {
26+ next ( err )
27+ }
28+ }
29+
30+
31+ export async function getAllSubmissions ( req : Request , res : Response , next : NextFunction ) {
32+ try {
33+ const id = parseInt ( req . params . id )
34+
35+ const session = await AttendanceService . getSessionById ( id )
36+ if ( ! session ) {
37+ return res . status ( 404 ) . json ( NotFound )
38+ }
39+
40+ const submissions = await AttendanceSubmissionService . getAllSubmissionsSessionId ( session . id )
41+ res . status ( 200 ) . json ( submissions . map ( submissionSerialize ) )
42+ } catch ( err ) {
43+ next ( err )
44+ }
45+ }
46+
47+ export async function getSessionsByCourse ( req : Request , res : Response , next : NextFunction ) {
48+ try {
49+ const courseId = parseInt ( req . params . courseId )
50+ if ( isNaN ( courseId ) ) {
51+ return res . status ( 400 ) . json ( new GenericResponse ( 'Invalid course ID parameter.' ) )
52+ }
53+
54+ const sessions = await AttendanceService . getSessionsByCourse ( courseId )
55+
56+ res . status ( 200 ) . json ( sessions . map ( serialize ) )
57+ } catch ( err ) {
58+ next ( err )
59+ }
60+ }
61+
62+ export async function createSession ( req : Request , res : Response , next : NextFunction ) {
63+ try {
64+ const sessionInput = < AttendanceRequest > {
65+ timeLimitSeconds : req . body . timeLimitSeconds ! ,
66+ maxTries : req . body . maxTries ! ,
67+ courseId : parseInt ( req . params . courseId ) ,
68+ }
69+ const createdByUserId = req . currentUser ! . userId ! as number
70+
71+ const newSessionResponse = await AttendanceService . create ( sessionInput , createdByUserId )
72+
73+ res . status ( 201 ) . json ( newSessionResponse )
74+ } catch ( err ) {
75+ next ( err )
76+ }
77+ }
78+
79+ export async function submitAttendance ( req : Request , res : Response , next : NextFunction ) {
80+ try {
81+ const sessionId = parseInt ( req . params . sessionId )
82+ const { attendanceCode } = req . body
83+
84+ const studentUserId = req . currentUser ! . userId ! as number
85+
86+ const submissionResult = await AttendanceService . submitCode ( sessionId , studentUserId , attendanceCode )
87+
88+ res . status ( 200 ) . json ( submissionResult )
89+ } catch ( err ) {
90+ next ( err )
91+ }
92+ }
93+
94+
95+ export async function deleteSession ( req : Request , res : Response , next : NextFunction ) {
96+ try {
97+ const id = parseInt ( req . params . id )
98+ const results = await AttendanceService . deleteSession ( id )
99+
100+ if ( ! results . affected || results . affected === 0 ) {
101+ return res . status ( 404 ) . json ( NotFound )
102+ }
103+
104+ res . status ( 204 ) . send ( )
105+ } catch ( err ) {
106+ next ( err )
107+ }
108+ }
109+
110+ export default {
111+ getSessionById,
112+ getSessionsByCourse,
113+ createSession,
114+ submitAttendance,
115+ deleteSession,
116+ getAllSubmissions
117+ }
0 commit comments