diff --git a/src/Contexts/Mooc/Courses/application/CourseCreator.ts b/src/Contexts/Mooc/Courses/application/CourseCreator.ts index 65170f3..14b0699 100644 --- a/src/Contexts/Mooc/Courses/application/CourseCreator.ts +++ b/src/Contexts/Mooc/Courses/application/CourseCreator.ts @@ -1,15 +1,16 @@ -import CourseRepository from '../domain/CourseRepository'; -import Course from '../domain/Course'; +import { CourseRepository } from '../domain/CourseRepository'; +import { Course } from '../domain/Course'; +import { CreateCourseRequest } from './CreateCourseRequest'; -export default class CourseCreator { +export class CourseCreator { private repository: CourseRepository; constructor(repository: CourseRepository) { this.repository = repository; } - async run(id: string, name: string, duration: string): Promise { - const course = new Course(id, name, duration); + async run(request: CreateCourseRequest): Promise { + const course = new Course(request.id, request.name, request.duration); return this.repository.save(course); } diff --git a/src/Contexts/Mooc/Courses/application/CreateCourseRequest.ts b/src/Contexts/Mooc/Courses/application/CreateCourseRequest.ts new file mode 100644 index 0000000..dcae7a6 --- /dev/null +++ b/src/Contexts/Mooc/Courses/application/CreateCourseRequest.ts @@ -0,0 +1,5 @@ +export type CreateCourseRequest = { + id: string; + name: string; + duration: string; +}; diff --git a/src/Contexts/Mooc/Courses/domain/Course.ts b/src/Contexts/Mooc/Courses/domain/Course.ts index 2111d70..27b8a2b 100644 --- a/src/Contexts/Mooc/Courses/domain/Course.ts +++ b/src/Contexts/Mooc/Courses/domain/Course.ts @@ -1,4 +1,4 @@ -export default class Course { +export class Course { readonly id: string; readonly name: string; readonly duration: string; diff --git a/src/Contexts/Mooc/Courses/domain/CourseAlreadyExists.ts b/src/Contexts/Mooc/Courses/domain/CourseAlreadyExists.ts index df773ee..999f868 100644 --- a/src/Contexts/Mooc/Courses/domain/CourseAlreadyExists.ts +++ b/src/Contexts/Mooc/Courses/domain/CourseAlreadyExists.ts @@ -1,5 +1,5 @@ -export default class CourseAlreadyExists extends Error { - constructor(courseId: string) { - super(`Course ${courseId} already exists`); +export class CourseAlreadyExists extends Error { + constructor(id: string) { + super(`Course ${id} already exists`); } } diff --git a/src/Contexts/Mooc/Courses/domain/CourseRepository.ts b/src/Contexts/Mooc/Courses/domain/CourseRepository.ts index b0d574d..479bc0d 100644 --- a/src/Contexts/Mooc/Courses/domain/CourseRepository.ts +++ b/src/Contexts/Mooc/Courses/domain/CourseRepository.ts @@ -1,7 +1,7 @@ -import Course from './Course'; import { Nullable } from '../../../Shared/domain/Nullable'; +import { Course } from './Course'; -export default interface CourseRepository { +export interface CourseRepository { save(course: Course): Promise; search(id: string): Promise>; diff --git a/src/Contexts/Mooc/Courses/infrastructure/FileCourseRepository.ts b/src/Contexts/Mooc/Courses/infrastructure/FileCourseRepository.ts index 2b86743..997a6a5 100644 --- a/src/Contexts/Mooc/Courses/infrastructure/FileCourseRepository.ts +++ b/src/Contexts/Mooc/Courses/infrastructure/FileCourseRepository.ts @@ -1,17 +1,17 @@ -import CourseRepository from '../domain/CourseRepository'; -import Course from '../domain/Course'; +import { CourseRepository } from '../domain/CourseRepository'; +import { Course } from '../domain/Course'; import fs from 'fs'; import BSON from 'bson'; import { Nullable } from '../../../Shared/domain/Nullable'; -export default class FileCourseRepository implements CourseRepository { +export class FileCourseRepository implements CourseRepository { private FILE_PATH = `${__dirname}/courses`; async save(course: Course): Promise { const filePath = this.filePath(course.id); const data = BSON.serialize(course); - return fs.writeFileSync(filePath, data); + return fs.writeFileSync(filePath, data); } async search(id: string): Promise> { diff --git a/src/apps/mooc_backend/controllers/Controller.ts b/src/apps/mooc_backend/controllers/Controller.ts index 4969747..70f0d2a 100644 --- a/src/apps/mooc_backend/controllers/Controller.ts +++ b/src/apps/mooc_backend/controllers/Controller.ts @@ -1,5 +1,5 @@ -import {Request, Response} from 'express'; +import { Request, Response } from 'express'; -export default interface Controller { +export interface Controller { run(req: Request, res: Response): Promise; } diff --git a/src/apps/mooc_backend/controllers/CoursePutController.ts b/src/apps/mooc_backend/controllers/CoursePutController.ts index b4ec571..4b1724e 100644 --- a/src/apps/mooc_backend/controllers/CoursePutController.ts +++ b/src/apps/mooc_backend/controllers/CoursePutController.ts @@ -1,8 +1,8 @@ import { Request, Response } from 'express'; -import CourseCreator from '../../../Contexts/Mooc/Courses/application/CourseCreator'; +import { CourseCreator } from '../../../Contexts/Mooc/Courses/application/CourseCreator'; import httpStatus from 'http-status'; -import Controller from './Controller'; -import CourseAlreadyExists from '../../../Contexts/Mooc/Courses/domain/CourseAlreadyExists'; +import { Controller } from './Controller'; +import { CourseAlreadyExists } from '../../../Contexts/Mooc/Courses/domain/CourseAlreadyExists'; export class CoursePutController implements Controller { constructor(private courseCreator: CourseCreator) {} @@ -13,15 +13,13 @@ export class CoursePutController implements Controller { const duration: string = req.body.duration; try { - await this.courseCreator.run(id, name, duration); - } catch (e) { - - if (e instanceof CourseAlreadyExists) { - res.status(httpStatus.BAD_REQUEST).send(e.message); + await this.courseCreator.run({ id, name, duration }); + } catch (error) { + if (error instanceof CourseAlreadyExists) { + res.status(httpStatus.BAD_REQUEST).send(error.message); } else { - res.status(httpStatus.INTERNAL_SERVER_ERROR).json(e); + res.status(httpStatus.INTERNAL_SERVER_ERROR).json(error); } - } res.status(httpStatus.CREATED).send(); diff --git a/src/apps/mooc_backend/controllers/StatusGetController.ts b/src/apps/mooc_backend/controllers/StatusGetController.ts index 62e219a..81c659f 100644 --- a/src/apps/mooc_backend/controllers/StatusGetController.ts +++ b/src/apps/mooc_backend/controllers/StatusGetController.ts @@ -1,6 +1,6 @@ import { Request, Response } from 'express'; import httpStatus from 'http-status'; -import Controller from './Controller'; +import { Controller } from './Controller'; export default class StatusGetController implements Controller { async run(req: Request, res: Response) { diff --git a/tests/Contexts/Mooc/Courses/application/CourseCreator.test.ts b/tests/Contexts/Mooc/Courses/application/CourseCreator.test.ts index 90e3f5b..dfb772c 100644 --- a/tests/Contexts/Mooc/Courses/application/CourseCreator.test.ts +++ b/tests/Contexts/Mooc/Courses/application/CourseCreator.test.ts @@ -1,6 +1,6 @@ -import Course from '../../../../../src/Contexts/Mooc/Courses/domain/Course'; -import CourseCreator from '../../../../../src/Contexts/Mooc/Courses/application/CourseCreator'; -import CourseRepository from '../../../../../src/Contexts/Mooc/Courses/domain/CourseRepository'; +import { Course } from '../../../../../src/Contexts/Mooc/Courses/domain/Course'; +import { CourseCreator } from '../../../../../src/Contexts/Mooc/Courses/application/CourseCreator'; +import { CourseRepository } from '../../../../../src/Contexts/Mooc/Courses/domain/CourseRepository'; describe('Course Creator', () => { it('should create a valid course', async () => { @@ -18,7 +18,7 @@ describe('Course Creator', () => { const course = new Course(id, name, duration); - await createCourse.run(id, name, duration); + await createCourse.run({ id, name, duration }); expect(save).toHaveBeenCalledWith(course); }); diff --git a/tests/Contexts/Mooc/Courses/infrastructure/FileCourseRepository.test.ts b/tests/Contexts/Mooc/Courses/infrastructure/FileCourseRepository.test.ts index fcca667..c43d860 100644 --- a/tests/Contexts/Mooc/Courses/infrastructure/FileCourseRepository.test.ts +++ b/tests/Contexts/Mooc/Courses/infrastructure/FileCourseRepository.test.ts @@ -1,5 +1,5 @@ -import FileCourseRepository from '../../../../../src/Contexts/Mooc/Courses/infrastructure/FileCourseRepository'; -import Course from '../../../../../src/Contexts/Mooc/Courses/domain/Course'; +import { FileCourseRepository } from '../../../../../src/Contexts/Mooc/Courses/infrastructure/FileCourseRepository'; +import { Course } from '../../../../../src/Contexts/Mooc/Courses/domain/Course'; describe('Save Course', () => { it('should have a course', () => {