Skip to content

Commit

Permalink
Feat(Module, Enrollment, Route): Mark module as completed route
Browse files Browse the repository at this point in the history
  • Loading branch information
Artur-Poffo committed Feb 23, 2024
1 parent 02e8ae0 commit 51a59d0
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 1 deletion.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@
### Enrollments
- [x] POST /courses/:courseId/enroll - Enroll to course
- [x] POST /enrollments/:enrollmentId/modules/:moduleId/complete - Mark module as completed
- [ ] POST /enrollments/:enrollmentId/classes/:classId/complete - Mark class as completed
- [x] POST /enrollments/:enrollmentId/classes/:classId/complete - Mark class as completed
- [ ] POST /enrollments/:enrollmentId/complete - Mark enrollment as completed
- [x] GET /courses/:courseId/students/:studentId/enrollments - Get enrollment of a student on a course
- [x] DELETE /enrollments/:enrollmentId - Cancel enrollment
Expand Down
41 changes: 41 additions & 0 deletions src/infra/http/controllers/mark-module-as-completed.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { NotAllowedError } from '@/core/errors/errors/not-allowed-error'
import { ResourceNotFoundError } from '@/core/errors/errors/resource-not-found-error'
import { AllClassesInTheModuleMustBeMarkedAsCompleted } from '@/domain/course-management/application/use-cases/errors/all-classes-in-the-module-must-be-marked-as-completed'
import { makeMarkModuleAsCompletedUseCase } from '@/infra/use-cases/factories/make-mark-module-as-completed-use-case'
import { type FastifyReply, type FastifyRequest } from 'fastify'
import { z } from 'zod'

const markModuleAsCompletedParamsSchema = z.object({
enrollmentId: z.string().uuid(),
moduleId: z.string().uuid()
})

export async function markModuleAsCompletedController(request: FastifyRequest, reply: FastifyReply) {
const { enrollmentId, moduleId } = markModuleAsCompletedParamsSchema.parse(request.params)
const { sub: studentId } = request.user

const markModuleAsCompletedUseCase = makeMarkModuleAsCompletedUseCase()

const result = await markModuleAsCompletedUseCase.exec({
enrollmentId,
moduleId,
studentId
})

if (result.isLeft()) {
const error = result.value

switch (error.constructor) {
case ResourceNotFoundError:
return await reply.status(404).send({ message: error.message })
case NotAllowedError:
return await reply.status(401).send({ message: error.message })
case AllClassesInTheModuleMustBeMarkedAsCompleted:
return await reply.status(403).send({ message: error.message })
default:
return await reply.status(500).send({ message: error.message })
}
}

return await reply.status(201).send()
}
2 changes: 2 additions & 0 deletions src/infra/http/routes/enrollment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { cancelEnrollmentController } from '../controllers/cancel-enrollment'
import { enrollToCourseController } from '../controllers/enroll-to-course'
import { getEnrollmentDetailsController } from '../controllers/get-enrollment-details'
import { markClassAsCompletedController } from '../controllers/mark-class-as-completed'
import { markModuleAsCompletedController } from '../controllers/mark-module-as-completed'
import { verifyJwt } from '../middlewares/verify-jwt'
import { verifyUserRole } from '../middlewares/verify-user-role'

Expand All @@ -11,6 +12,7 @@ export async function enrollmentRoutes(app: FastifyInstance) {

app.post('/courses/:courseId/enroll', { onRequest: [verifyJwt, verifyUserRole('STUDENT')] }, enrollToCourseController)
app.post('/enrollments/:enrollmentId/classes/:classId', { onRequest: [verifyJwt, verifyUserRole('STUDENT')] }, markClassAsCompletedController)
app.post('/enrollments/:enrollmentId/modules/:moduleId', { onRequest: [verifyJwt, verifyUserRole('STUDENT')] }, markModuleAsCompletedController)

app.delete('/enrollments/:enrollmentId', { onRequest: [verifyJwt, verifyUserRole('STUDENT')] }, cancelEnrollmentController)
}

0 comments on commit 51a59d0

Please sign in to comment.