Skip to content

Commit

Permalink
Feat(CourseTag, Course, Route): Fetch course tags route
Browse files Browse the repository at this point in the history
  • Loading branch information
Artur-Poffo committed Feb 23, 2024
1 parent 092c5a7 commit 8169f69
Show file tree
Hide file tree
Showing 12 changed files with 58 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { InvalidMimeTypeError } from '@/core/errors/errors/invalid-mime-type-error'
import { InMemoryFilesRepository } from '../../../../../test/repositories/in-memory-files-repository'
import { FakeUploader } from '../../../../../test/storage/fake-uploader'
import { InvalidMimeTypeError } from './errors/invalid-mime-type-error'
import { UploadFileUseCase } from './upload-file'

let inMemoryFilesRepository: InMemoryFilesRepository
Expand Down
2 changes: 1 addition & 1 deletion src/infra/http/controllers/delete-class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { type FastifyReply, type FastifyRequest } from 'fastify'
import { z } from 'zod'

const deleteClassParamsSchema = z.object({
classId: z.string()
classId: z.string().uuid()
})

export async function deleteClassController(request: FastifyRequest, reply: FastifyReply) {
Expand Down
2 changes: 1 addition & 1 deletion src/infra/http/controllers/delete-course.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { type FastifyReply, type FastifyRequest } from 'fastify'
import { z } from 'zod'

const deleteCourseParamsSchema = z.object({
courseId: z.string()
courseId: z.string().uuid()
})

export async function deleteCourseController(request: FastifyRequest, reply: FastifyReply) {
Expand Down
2 changes: 1 addition & 1 deletion src/infra/http/controllers/delete-module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { type FastifyReply, type FastifyRequest } from 'fastify'
import { z } from 'zod'

const deleteModuleParamsSchema = z.object({
moduleId: z.string()
moduleId: z.string().uuid()
})

export async function deleteModuleController(request: FastifyRequest, reply: FastifyReply) {
Expand Down
2 changes: 1 addition & 1 deletion src/infra/http/controllers/edit-class-details.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const editClassDetailsBodySchema = z.object({
})

const editClassDetailsParamsSchema = z.object({
classId: z.string()
classId: z.string().uuid()
})

export async function editClassDetailsController(request: FastifyRequest, reply: FastifyReply) {
Expand Down
2 changes: 1 addition & 1 deletion src/infra/http/controllers/edit-course-details.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const editCourseDetailsBodySchema = z.object({
})

const editCourseDetailsParamsSchema = z.object({
courseId: z.string()
courseId: z.string().uuid()
})

export async function editCourseDetailsController(request: FastifyRequest, reply: FastifyReply) {
Expand Down
2 changes: 1 addition & 1 deletion src/infra/http/controllers/edit-module-details.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const editModuleDetailsBodySchema = z.object({
})

const editModuleDetailsParamsSchema = z.object({
moduleId: z.string()
moduleId: z.string().uuid()
})

export async function editModuleDetailsController(request: FastifyRequest, reply: FastifyReply) {
Expand Down
2 changes: 1 addition & 1 deletion src/infra/http/controllers/fetch-course-classes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { z } from 'zod'
import { ClassPresenter } from '../presenters/class-presenter'

const fetchCourseClassesParamsSchema = z.object({
courseId: z.string()
courseId: z.string().uuid()
})

export async function fetchCourseClassesController(request: FastifyRequest, reply: FastifyReply) {
Expand Down
2 changes: 1 addition & 1 deletion src/infra/http/controllers/fetch-course-modules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { z } from 'zod'
import { ModulePresenter } from '../presenters/module-presenter'

const fetchCourseModulesParamsSchema = z.object({
courseId: z.string()
courseId: z.string().uuid()
})

export async function fetchCourseModulesController(request: FastifyRequest, reply: FastifyReply) {
Expand Down
45 changes: 45 additions & 0 deletions src/infra/http/controllers/fetch-course-tags.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { ResourceNotFoundError } from '@/core/errors/errors/resource-not-found-error'
import { type Tag } from '@/domain/course-management/enterprise/entities/tag'
import { makeTagMapper } from '@/infra/database/prisma/mappers/factories/make-tag-mapper'
import { makeFetchCourseTagsUseCase } from '@/infra/use-cases/factories/make-fetch-course-tags-use-case'
import { type FastifyReply, type FastifyRequest } from 'fastify'
import { z } from 'zod'
import { TagPresenter } from '../presenters/tag-presenter'

const fetchCourseTagsParamsSchema = z.object({
courseId: z.string().uuid()
})

export async function fetchCourseTagsController(request: FastifyRequest, reply: FastifyReply) {
const { courseId } = fetchCourseTagsParamsSchema.parse(request.params)

const fetchCourseTagsUseCase = makeFetchCourseTagsUseCase()

const result = await fetchCourseTagsUseCase.exec({
courseId
})

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

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

const tagMapper = makeTagMapper()
const { tags } = result.value

const infraTags = await Promise.all(
tags.map(async (tag: Tag) => {
return await tagMapper.toPrisma(tag)
})
)

return await reply.status(200).send({
tags: infraTags.map(infraTag => TagPresenter.toHTTP(infraTag))
})
}
2 changes: 1 addition & 1 deletion src/infra/http/controllers/fetch-module-classes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { z } from 'zod'
import { ClassPresenter } from '../presenters/class-presenter'

const fetchModuleClassesParamsSchema = z.object({
moduleId: z.string()
moduleId: z.string().uuid()
})

export async function fetchModuleClassesController(request: FastifyRequest, reply: FastifyReply) {
Expand Down
3 changes: 3 additions & 0 deletions src/infra/http/routes/course-tag.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import { type FastifyInstance } from 'fastify'
import { attachTagsToCourseController } from '../controllers/attach-tags-to-course'
import { fetchCourseTagsController } from '../controllers/fetch-course-tags'
import { removeTagFromCourseController } from '../controllers/remove-tag-from-course'
import { verifyJwt } from '../middlewares/verify-jwt'
import { verifyUserRole } from '../middlewares/verify-user-role'

export async function courseTagRoutes(app: FastifyInstance) {
app.get('/courses/:courseId/tags', fetchCourseTagsController)

app.post('/courses/:courseId/tags', { onRequest: [verifyJwt, verifyUserRole('INSTRUCTOR')] }, attachTagsToCourseController)

app.delete('/courses/:courseId/tags/:tagId', { onRequest: [verifyJwt, verifyUserRole('INSTRUCTOR')] }, removeTagFromCourseController)
Expand Down

0 comments on commit 8169f69

Please sign in to comment.