Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions src/Contexts/Mooc/Courses/application/CourseCreator.ts
Original file line number Diff line number Diff line change
@@ -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<void> {
const course = new Course(id, name, duration);
async run(request: CreateCourseRequest): Promise<void> {
const course = new Course(request.id, request.name, request.duration);

return this.repository.save(course);
}
Expand Down
5 changes: 5 additions & 0 deletions src/Contexts/Mooc/Courses/application/CreateCourseRequest.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export type CreateCourseRequest = {
id: string;
name: string;
duration: string;
};
2 changes: 1 addition & 1 deletion src/Contexts/Mooc/Courses/domain/Course.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export default class Course {
export class Course {
readonly id: string;
readonly name: string;
readonly duration: string;
Expand Down
6 changes: 3 additions & 3 deletions src/Contexts/Mooc/Courses/domain/CourseAlreadyExists.ts
Original file line number Diff line number Diff line change
@@ -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`);
}
}
4 changes: 2 additions & 2 deletions src/Contexts/Mooc/Courses/domain/CourseRepository.ts
Original file line number Diff line number Diff line change
@@ -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<void>;

search(id: string): Promise<Nullable<Course>>;
Expand Down
Original file line number Diff line number Diff line change
@@ -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<void> {
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<Nullable<Course>> {
Expand Down
4 changes: 2 additions & 2 deletions src/apps/mooc_backend/controllers/Controller.ts
Original file line number Diff line number Diff line change
@@ -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<void>;
}
18 changes: 8 additions & 10 deletions src/apps/mooc_backend/controllers/CoursePutController.ts
Original file line number Diff line number Diff line change
@@ -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) {}
Expand All @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion src/apps/mooc_backend/controllers/StatusGetController.ts
Original file line number Diff line number Diff line change
@@ -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) {
Expand Down
8 changes: 4 additions & 4 deletions tests/Contexts/Mooc/Courses/application/CourseCreator.test.ts
Original file line number Diff line number Diff line change
@@ -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 () => {
Expand All @@ -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);
});
Expand Down
Original file line number Diff line number Diff line change
@@ -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', () => {
Expand Down