Skip to content

Commit 30c57a7

Browse files
authored
Merge pull request #129 from odavibatista/merge/main/refactor/project-architecture
`[MAIN][REFACTOR]` - Atualização da arquitetura do projeto
2 parents d8a65bf + 4b859e2 commit 30c57a7

File tree

120 files changed

+436
-397
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

120 files changed

+436
-397
lines changed

package-lock.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"zod": "^3.23.8"
5353
},
5454
"devDependencies": {
55+
"@faker-js/faker": "^8.4.1",
5556
"@nestjs/cli": "^10.0.0",
5657
"@nestjs/schematics": "^10.0.0",
5758
"@nestjs/testing": "^10.0.0",

src/app/app.module.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
22
import { DatabaseModule } from '../database/database.module';
3-
import { UserModule } from '../modules/user/user.module';
4-
import { UserScoreModule } from '../modules/user-score/user-score.module';
5-
import { CourseModule } from '../modules/course/course.module';
6-
import { UserActivitiesAnsweredModule } from '../modules/user-activities-answered/user-activities-answered.module';
7-
import { UserCoursesConcludedModule } from '../modules/user-courses-concluded/user-courses-concluded.module';
8-
import { ActivityModule } from '../modules/activity/activity.module';
3+
import { UserModule } from '../modules/user/infra/modules/user.module';
4+
import { UserScoreModule } from '../modules/user-score/infra/modules/user-score.module';
5+
import { CourseModule } from '../modules/course/infra/modules/course.module';
6+
import { UserActivitiesAnsweredModule } from '../modules/user-activities-answered/infra/modules/user-activities-answered.module';
7+
import { UserCoursesConcludedModule } from '../modules/user-courses-concluded/infra/modules/user-courses-concluded.module';
8+
import { ActivityModule } from '../modules/activity/infra/modules/activity.module';
99

1010
@Module({
1111
imports: [

src/modules/Main.seeder.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { DataSource } from 'typeorm';
22
import { Seeder, SeederFactoryManager, runSeeder } from 'typeorm-extension';
3-
import CourseSeeder from './course/seeders/course.seeder';
4-
import ActivitySeeder from './activity/seeders/activity.seeder';
5-
import UserSeeder from './user/seeders/user.seeder';
6-
import UserScoreSeeder from './user-score/seeders/user-score.seeder';
3+
import CourseSeeder from './course/infra/db/seeders/course.seeder';
4+
import ActivitySeeder from './activity/infra/db/seeders/activity.seeder';
5+
import UserSeeder from './user/infra/db/seeders/user.seeder';
6+
import UserScoreSeeder from './user-score/infra/db/seeders/user-score.seeder';
77

88
export class MainSeeder implements Seeder {
99
async run(
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { FindOptionsOrder } from "typeorm";
2+
import { Activity } from "../../../infra/db/entity/activity.entity";
3+
import { FindActivitiesCollectionResponseDTO } from "../requests/FindActivitiesCollection.request.dto";
4+
5+
export interface ActivityRepositoryInterface {
6+
findById(id: number): Promise<Activity | null>;
7+
8+
findByCourseId(
9+
course_id: number,
10+
order?: FindOptionsOrder<Activity>,
11+
): Promise<Activity[]>;
12+
13+
countByCourseId(course_id: number): Promise<number>;
14+
15+
softDeleteById(id: number): Promise<true>;
16+
17+
bringActivitiesCollection(
18+
activity_ids: number[],
19+
order?: FindOptionsOrder<Activity>,
20+
): Promise<FindActivitiesCollectionResponseDTO>;
21+
}

src/modules/activity/dto/activity.dto.spec.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/modules/activity/dto/activity.dto.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/modules/activity/entity/activity.entity.ts renamed to src/modules/activity/infra/db/entity/activity.entity.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { Course } from '../../../modules/course/entity/course.entity';
2-
import { User } from '../../../modules/user/entity/user.entity';
1+
import { Course } from '../../../../course/infra/db/entity/course.entity';
2+
import { User } from '../../../../user/infra/db/entity/user.entity';
33
import {
44
Column,
55
CreateDateColumn,

src/modules/activity/repository/activity.repository.spec.ts renamed to src/modules/activity/infra/db/repositories/activity.repository.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Test, TestingModule } from '@nestjs/testing';
22
import { DataSource } from 'typeorm';
33
import { ActivityRepository } from './activity.repository';
4-
import { Activity } from '../entity/activity.entity';
4+
import { Activity } from '../infra/db/entity/activity.entity';
55

66
describe('Activity Repository Test Suites', () => {
77
let activityRepository: ActivityRepository;

src/modules/activity/repository/activity.repository.ts renamed to src/modules/activity/infra/db/repositories/activity.repository.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Injectable } from '@nestjs/common';
22
import { DataSource, FindOptionsOrder, In, Repository } from 'typeorm';
33
import { Activity } from '../entity/activity.entity';
4-
import { FindActivitiesCollectionResponseDTO } from '../domain/requests/FindActivitiesCollection.request.dto';
4+
import { FindActivitiesCollectionResponseDTO } from '../../../domain/dtos/requests/FindActivitiesCollection.request.dto';
55

66
@Injectable()
77
export class ActivityRepository extends Repository<Activity> {

src/modules/activity/controller/activity.controller.ts renamed to src/modules/activity/infra/http/controllers/activity.controller.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,24 @@ import {
1010
Req,
1111
Res,
1212
} from '@nestjs/common';
13-
import { ActivityService } from '../services/activity.service';
13+
import { ActivityService } from '../../services/activity.service';
1414
import { ApiBearerAuth, ApiResponse, ApiTags } from '@nestjs/swagger';
1515
import {
1616
CreateActivityRequestDTO,
1717
CreateActivityResponseDTO,
18-
} from '../domain/requests/CreateActivity.request.dto';
19-
import { NotAuthenticatedException } from '../../../shared/domain/errors/NotAuthenticated.exception';
20-
import { CourseNotFoundException } from '../../course/domain/errors/CourseNotFound.exception';
21-
import { CommonException } from '../../../shared/domain/errors/Common.exception';
18+
} from '../../../domain/dtos/requests/CreateActivity.request.dto';
19+
import { NotAuthenticatedException } from '../../../../../shared/domain/errors/NotAuthenticated.exception';
20+
import { CourseNotFoundException } from '../../../../course/domain/dtos/errors/CourseNotFound.exception';
21+
import { CommonException } from '../../../../../shared/domain/errors/Common.exception';
2222
import { Request, Response } from 'express';
23-
import { AllExceptionsFilterDTO } from '../../../shared/domain/dtos/errors/AllException.filter.dto';
24-
import { NoPermisionException } from '../../../shared/domain/errors/NoPermission.exception';
23+
import { AllExceptionsFilterDTO } from '../../../../../shared/domain/dtos/errors/AllException.filter.dto';
24+
import { NoPermisionException } from '../../../../../shared/domain/errors/NoPermission.exception';
2525
import {
2626
EditActivityRequestDTO,
2727
EditActivityResponseDTO,
28-
} from '../domain/requests/EditActivity.request.dto';
29-
import { ActivityNotFoundException } from '../domain/errors/ActivityNotFound.exception';
30-
import { GetActivityResponseDTO } from '../domain/requests/GetActivity.request.dto';
28+
} from '../../../domain/dtos/requests/EditActivity.request.dto';
29+
import { ActivityNotFoundException } from '../../../domain/dtos/errors/ActivityNotFound.exception';
30+
import { GetActivityResponseDTO } from '../../../domain/dtos/requests/GetActivity.request.dto';
3131

3232
@Controller('activity')
3333
@ApiTags('Atividades do Curso')

src/modules/activity/activity.module.ts renamed to src/modules/activity/infra/modules/activity.module.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ import {
44
NestModule,
55
RequestMethod,
66
} from '@nestjs/common';
7-
import { ActivityService } from './services/activity.service';
8-
import { ActivityController } from './controller/activity.controller';
9-
import { DatabaseModule } from '../../database/database.module';
7+
import { ActivityService } from '../services/activity.service';
8+
import { ActivityController } from '../http/controllers/activity.controller';
9+
import { DatabaseModule } from '../../../../database/database.module';
1010
import { TypeOrmModule } from '@nestjs/typeorm';
11-
import { Course } from '../course/entity/course.entity';
12-
import { User } from '../user/entity/user.entity';
13-
import { ActivityRepository } from './repository/activity.repository';
14-
import { CourseRepository } from '../course/repository/course.repository';
15-
import { AuthenticationMiddleware } from '../user/middlewares/auth.middleware';
16-
import { JWTProvider } from '../user/providers/jwt.provider';
11+
import { Course } from '../../../course/infra/db/entity/course.entity';
12+
import { User } from '../../../user/infra/db/entity/user.entity';
13+
import { ActivityRepository } from '../db/repositories/activity.repository';
14+
import { CourseRepository } from '../../../course/infra/db/repositories/course.repository';
15+
import { AuthenticationMiddleware } from '../../../user/infra/http/middlewares/auth.middleware';
16+
import { JWTProvider } from '../../../user/infra/providers/jwt.provider';
1717

1818
@Module({
1919
imports: [DatabaseModule, TypeOrmModule.forFeature([User, Course])],

src/modules/activity/services/activity.service.spec.ts renamed to src/modules/activity/infra/services/activity.service.spec.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
import { Test, TestingModule } from '@nestjs/testing';
22
import { ActivityService } from './activity.service';
3-
import { DatabaseModule } from '../../../database/database.module';
3+
import { DatabaseModule } from '../../../../database/database.module';
44
import { TypeOrmModule } from '@nestjs/typeorm';
5-
import { Activity } from '../entity/activity.entity';
6-
import { UserCourseConcluded } from '../../user-courses-concluded/entity/user-courses-concluded.entity';
5+
import { Activity } from '../db/entity/activity.entity';
6+
import { UserCourseConcluded } from '../../../user-courses-concluded/entity/user-courses-concluded.entity';
77
import { User } from '../../user/entity/user.entity';
8-
import { CourseService } from '../../course/services/course.service';
9-
import { CourseRepository } from '../../course/repository/course.repository';
10-
import { ActivityRepository } from '../repository/activity.repository';
11-
import { UserCourseConcludedRepository } from '../../user-courses-concluded/repository/user-courses-concluded.repository';
12-
import { UserActivityAnsweredRepository } from '../../user-activities-answered/repository/user-activities-answered.repository';
8+
import { CourseService } from '../../../course/infra/services/course.service';
9+
import { CourseRepository } from '../../course/repositories/course.repository';
10+
import { ActivityRepository } from '../repositories/activity.repository';
11+
import { UserCourseConcludedRepository } from '../../../user-courses-concluded/repositories/user-courses-concluded.repository';
12+
import { UserActivityAnsweredRepository } from '../../../user-activities-answered/repositories/user-activities-answered.repository';
1313
import { JWTProvider } from '../../user/providers/jwt.provider';
14-
import { CourseNotFoundException } from '../../course/domain/errors/CourseNotFound.exception';
15-
import { UnprocessableDataException } from '../../../shared/domain/errors/UnprocessableData.exception';
16-
import { ActivityNotFoundException } from '../domain/errors/ActivityNotFound.exception';
17-
import { UserRepository } from '../../user/repository/user.repository';
18-
import { TestHelper } from '../../../../test/helpers/dbInstanceHelper';
14+
import { CourseNotFoundException } from '../../../course/domain/dtos/errors/CourseNotFound.exception';
15+
import { UnprocessableDataException } from '../../../../shared/domain/errors/UnprocessableData.exception';
16+
import { ActivityNotFoundException } from '../../domain/dtos/errors/ActivityNotFound.exception';
17+
import { UserRepository } from '../../user/repositories/user.repository';
18+
import { TestHelper } from '../../../../../test/helpers/dbInstanceHelper';
1919

2020
describe('Activity Service Tests Suite', () => {
2121
let activityService: ActivityService;

src/modules/activity/services/activity.service.ts renamed to src/modules/activity/infra/services/activity.service.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import { Injectable } from '@nestjs/common';
2-
import { ActivityRepository } from '../repository/activity.repository';
3-
import { Activity } from '../entity/activity.entity';
4-
import { CourseNotFoundException } from '../../course/domain/errors/CourseNotFound.exception';
5-
import { CourseRepository } from '../../course/repository/course.repository';
2+
import { ActivityRepository } from '../db/repositories/activity.repository';
3+
import { Activity } from '../db/entity/activity.entity';
4+
import { CourseNotFoundException } from '../../../course/domain/dtos/errors/CourseNotFound.exception';
5+
import { CourseRepository } from '../../../course/infra/db/repositories/course.repository';
66
import {
77
CreateActivityRequestDTO,
88
CreateActivityResponseDTO,
9-
} from '../domain/requests/CreateActivity.request.dto';
9+
} from '../../domain/dtos/requests/CreateActivity.request.dto';
1010
import {
1111
EditActivityRequestDTO,
1212
EditActivityResponseDTO,
13-
} from '../domain/requests/EditActivity.request.dto';
14-
import { ActivityNotFoundException } from '../domain/errors/ActivityNotFound.exception';
15-
import { UnprocessableDataException } from '../../../shared/domain/errors/UnprocessableData.exception';
13+
} from '../../domain/dtos/requests/EditActivity.request.dto';
14+
import { ActivityNotFoundException } from '../../domain/dtos/errors/ActivityNotFound.exception';
15+
import { UnprocessableDataException } from '../../../../shared/domain/errors/UnprocessableData.exception';
1616

1717
@Injectable()
1818
export class ActivityService {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { FindOptionsOrder } from "typeorm";
2+
import { Course } from "../../../infra/db/entity/course.entity";
3+
import { FindMultipleCoursesResponseDTO } from "../requests/FindMultipleCourses.request.dto";
4+
5+
export interface CourseRepositoryInterface {
6+
findById(id: number): Promise<Course | null>;
7+
8+
findByName(course_name: string, id?: number): Promise<Course | null>;
9+
10+
countById(id: number): Promise<number>;
11+
12+
softDeleteById(id: number): Promise<true>;
13+
14+
bringCoursesCollection(
15+
course_ids: number[],
16+
order?: FindOptionsOrder<Course>,
17+
): Promise<FindMultipleCoursesResponseDTO>;
18+
}

src/modules/course/dto/course.dto.spec.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/modules/course/dto/course.dto.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/modules/course/entity/course.entity.ts renamed to src/modules/course/infra/db/entity/course.entity.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { User } from '../../../modules/user/entity/user.entity';
1+
import { User } from "../../../../user/infra/db/entity/user.entity";
22
import {
33
Column,
44
CreateDateColumn,

src/modules/course/repository/course.repository.ts renamed to src/modules/course/infra/db/repositories/course.repository.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import { Injectable } from '@nestjs/common';
22
import { DataSource, FindOptionsOrder, In, Repository } from 'typeorm';
33
import { Course } from '../entity/course.entity';
4-
import { FindMultipleCoursesResponseDTO } from '../domain/requests/FindMultipleCourses.request.dto';
4+
import { FindMultipleCoursesResponseDTO } from '../../../domain/dtos/requests/FindMultipleCourses.request.dto';
5+
import { CourseRepositoryInterface } from '../../../domain/dtos/repositories/course.repository';
56

67
@Injectable()
7-
export class CourseRepository extends Repository<Course> {
8+
export class CourseRepository extends Repository<Course> implements CourseRepositoryInterface {
89
constructor(private dataSource: DataSource) {
910
super(Course, dataSource.createEntityManager());
1011
}

src/modules/course/controller/course.controller.ts renamed to src/modules/course/infra/http/controllers/course.controller.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,28 @@ import {
1111
Req,
1212
Res,
1313
} from '@nestjs/common';
14-
import { CourseService } from '../services/course.service';
14+
import { CourseService } from '../../services/course.service';
1515
import {
1616
FindCoursesResponseDTO,
1717
FindIndividualCourseResponseDTO,
18-
} from '../domain/requests/FindCourses.request.dto';
18+
} from '../../../domain/dtos/requests/FindCourses.request.dto';
1919
import { ApiBearerAuth, ApiResponse, ApiTags } from '@nestjs/swagger';
20-
import { NotAuthenticatedException } from '../../../shared/domain/errors/NotAuthenticated.exception';
21-
import { AllExceptionsFilterDTO } from '../../../shared/domain/dtos/errors/AllException.filter.dto';
22-
import { CommonException } from '../../../shared/domain/errors/Common.exception';
20+
import { NotAuthenticatedException } from '../../../../../shared/domain/errors/NotAuthenticated.exception';
21+
import { AllExceptionsFilterDTO } from '../../../../../shared/domain/dtos/errors/AllException.filter.dto';
22+
import { CommonException } from '../../../../../shared/domain/errors/Common.exception';
2323
import { Request, Response } from 'express';
24-
import { CourseNotFoundException } from '../domain/errors/CourseNotFound.exception';
25-
import { PaginationDto } from '../../../shared/domain/dtos/providers/Pagination.dto';
24+
import { CourseNotFoundException } from '../../../domain/dtos/errors/CourseNotFound.exception';
25+
import { PaginationDto } from '../../../../../shared/domain/dtos/providers/Pagination.dto';
2626
import {
2727
CreateCourseRequestDTO,
2828
CreateCourseResponseDTO,
29-
} from '../domain/requests/CreateCourse.request.dto';
30-
import { NoPermisionException } from '../../../shared/domain/errors/NoPermission.exception';
29+
} from '../../../domain/dtos/requests/CreateCourse.request.dto';
30+
import { NoPermisionException } from '../../../../../shared/domain/errors/NoPermission.exception';
3131
import {
3232
EditCourseRequestDTO,
3333
EditCourseResponseDTO,
34-
} from '../domain/requests/EditCourse.request.dto';
35-
import { UnprocessableDataException } from '../../../shared/domain/errors/UnprocessableData.exception';
34+
} from '../../../domain/dtos/requests/EditCourse.request.dto';
35+
import { UnprocessableDataException } from '../../../../../shared/domain/errors/UnprocessableData.exception';
3636

3737
@Controller('courses')
3838
@ApiTags('Cursos')

src/modules/course/course.module.ts renamed to src/modules/course/infra/modules/course.module.ts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,20 @@ import {
77
import {
88
ConjunctCoursesController,
99
IndividualCoursesController,
10-
} from './controller/course.controller';
11-
import { CourseService } from './services/course.service';
12-
import { DatabaseModule } from '../../database/database.module';
10+
} from '../http/controllers/course.controller';
11+
import { CourseService } from '../services/course.service';
12+
import { DatabaseModule } from '../../../../database/database.module';
1313
import { TypeOrmModule } from '@nestjs/typeorm';
14-
import { Activity } from '../activity/entity/activity.entity';
15-
import { User } from '../user/entity/user.entity';
16-
import { UserCourseConcludedRepository } from '../user-courses-concluded/repository/user-courses-concluded.repository';
17-
import { CourseRepository } from './repository/course.repository';
18-
import { ActivityRepository } from '../activity/repository/activity.repository';
19-
import { AuthenticationMiddleware } from '../user/middlewares/auth.middleware';
20-
import { UserCourseConcluded } from '../user-courses-concluded/entity/user-courses-concluded.entity';
21-
import { JWTProvider } from '../user/providers/jwt.provider';
22-
import { UserActivityAnsweredRepository } from '../user-activities-answered/repository/user-activities-answered.repository';
23-
import { UserRepository } from '../user/repository/user.repository';
14+
import { Activity } from '../../../activity/infra/db/entity/activity.entity';
15+
import { User } from '../../../user/infra/db/entity/user.entity';
16+
import { UserCourseConcludedRepository } from '../../../user-courses-concluded/infra/db/repositories/user-courses-concluded.repository';
17+
import { CourseRepository } from '../db/repositories/course.repository';
18+
import { ActivityRepository } from '../../../activity/infra/db/repositories/activity.repository';
19+
import { AuthenticationMiddleware } from '../../../user/infra/http/middlewares/auth.middleware';
20+
import { UserCourseConcluded } from '../../../user-courses-concluded/infra/db/entity/user-courses-concluded.entity';
21+
import { JWTProvider } from '../../../user/infra/providers/jwt.provider';
22+
import { UserActivityAnsweredRepository } from '../../../user-activities-answered/infra/db/repositories/user-activities-answered.repository';
23+
import { UserRepository } from '../../../user/infra/db/repositories/user.repository';
2424

2525
@Module({
2626
imports: [

0 commit comments

Comments
 (0)