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