Skip to content

Commit

Permalink
Merge pull request #28 from Artur-Poffo/feat-implement-mappers-factories
Browse files Browse the repository at this point in the history
Feat(Mappers): Add mappers factories
  • Loading branch information
Artur-Poffo committed Feb 17, 2024
2 parents 82aa278 + c8ce76d commit 4a2ce26
Show file tree
Hide file tree
Showing 12 changed files with 193 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { InMemoryImagesRepository } from '../../../../../../test/repositories/in-memory-images-repository'
import { PrismaStudentCertificatesRepository } from '../../repositories/prisma-student-certificates-repository'
import { CertificateMapper } from '../certificate-mapper'

export function makeCertificateMapper() {
const inMemoryImagesRepository = new InMemoryImagesRepository()
const prismaStudentCertificatesRepository = new PrismaStudentCertificatesRepository()

const certificateMapper = new CertificateMapper(
inMemoryImagesRepository,
prismaStudentCertificatesRepository
)

return certificateMapper
}
12 changes: 12 additions & 0 deletions src/infra/database/prisma/mappers/factories/make-class-mapper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { ClassMapper } from '../class-mapper'
import { PrismaEvaluationsRepository } from './../../repositories/prisma-evaluations-repository'

export function makeClassMapper() {
const prismaEvaluationsRepository = new PrismaEvaluationsRepository()

const classMapper = new ClassMapper(
prismaEvaluationsRepository
)

return classMapper
}
28 changes: 28 additions & 0 deletions src/infra/database/prisma/mappers/factories/make-course-mapper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { PrismaCourseTagsRepository } from '../../repositories/prisma-course-tags-repository'
import { PrismaEnrollmentsRepository } from '../../repositories/prisma-enrollments-repository'
import { PrismaCertificatesRepository } from './../../repositories/prisma-certificates-repository'
import { PrismaModulesRepository } from './../../repositories/prisma-modules-repository'
import { CourseMapper } from './../course-mapper'
import { makeCertificateMapper } from './make-certificate-mapper'
import { makeEnrollmentMapper } from './make-enrollment-mapper'
import { makeModuleMapper } from './make-module-mapper'

export function makeCourseMapper() {
const certificateMapper = makeCertificateMapper()
const enrollmentMapper = makeEnrollmentMapper()
const moduleMapper = makeModuleMapper()

const prismaCertificatesRepository = new PrismaCertificatesRepository(certificateMapper)
const prismaCourseTagsRepository = new PrismaCourseTagsRepository()
const prismaEnrollmentsRepository = new PrismaEnrollmentsRepository(enrollmentMapper)
const prismaModulesRepository = new PrismaModulesRepository(moduleMapper)

const courseMapper = new CourseMapper(
prismaCertificatesRepository,
prismaCourseTagsRepository,
prismaEnrollmentsRepository,
prismaModulesRepository
)

return courseMapper
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { EnrollmentMapper } from '../enrollment-mapeer'
import { PrismaEnrollmentCompleteItemsRepository } from './../../repositories/prisma-enrollment-completed-items-repository'

export function makeEnrollmentMapper() {
const prismaEnrollmentCompleteItemsRepository = new PrismaEnrollmentCompleteItemsRepository()

const enrollmentMapper = new EnrollmentMapper(
prismaEnrollmentCompleteItemsRepository
)

return enrollmentMapper
}
15 changes: 15 additions & 0 deletions src/infra/database/prisma/mappers/factories/make-file-mapper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { FileMapper } from '../file-mapper'
import { PrismaVideosRepository } from './../../repositories/prisma-videos-repository'
import { type VideoMapper } from './../video-mapper'

export function makeFileMapper(videoMapper: VideoMapper) {
const prismaVideosRepository = new PrismaVideosRepository(
videoMapper
)

const fileMapper = new FileMapper(
prismaVideosRepository
)

return fileMapper
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { PrismaCoursesRepository } from './../../repositories/prisma-courses-repository'
import { InstructorMapper } from './../instructor-mapper'
import { makeCourseMapper } from './make-course-mapper'

export function makeInstructorMapper() {
const courseMapper = makeCourseMapper()

const prismaCoursesRepository = new PrismaCoursesRepository(
courseMapper
)

const instructorMapper = new InstructorMapper(
prismaCoursesRepository
)

return instructorMapper
}
17 changes: 17 additions & 0 deletions src/infra/database/prisma/mappers/factories/make-module-mapper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { PrismaClassesRepository } from '../../repositories/prisma-classes-repository'
import { ModuleMapper } from './../module-mapper'
import { makeClassMapper } from './make-class-mapper'

export function makeModuleMapper() {
const classMapper = makeClassMapper()

const prismaClassesRepository = new PrismaClassesRepository(
classMapper
)

const moduleMapper = new ModuleMapper(
prismaClassesRepository
)

return moduleMapper
}
21 changes: 21 additions & 0 deletions src/infra/database/prisma/mappers/factories/make-student-mapper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { PrismaEnrollmentsRepository } from '../../repositories/prisma-enrollments-repository'
import { PrismaEvaluationsRepository } from '../../repositories/prisma-evaluations-repository'
import { PrismaStudentCertificatesRepository } from '../../repositories/prisma-student-certificates-repository'
import { StudentMapper } from './../student-mapper'
import { makeEnrollmentMapper } from './make-enrollment-mapper'

export function makeStudentMapper() {
const enrollmentMapper = makeEnrollmentMapper()

const prismaEvaluationsRepository = new PrismaEvaluationsRepository()
const prismaEnrollmentsRepository = new PrismaEnrollmentsRepository(enrollmentMapper)
const prismaStudentCertificatesRepository = new PrismaStudentCertificatesRepository()

const studentMapper = new StudentMapper(
prismaEnrollmentsRepository,
prismaEvaluationsRepository,
prismaStudentCertificatesRepository
)

return studentMapper
}
12 changes: 12 additions & 0 deletions src/infra/database/prisma/mappers/factories/make-tag-mapper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { PrismaCourseTagsRepository } from '../../repositories/prisma-course-tags-repository'
import { TagMapper } from '../tag-mapper'

export function makeTagMapper() {
const prismaCourseTagRepository = new PrismaCourseTagsRepository()

const tagMapper = new TagMapper(
prismaCourseTagRepository
)

return tagMapper
}
28 changes: 28 additions & 0 deletions src/infra/database/prisma/mappers/factories/make-user-mapper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { PrismaCoursesRepository } from '../../repositories/prisma-courses-repository'
import { PrismaEnrollmentsRepository } from '../../repositories/prisma-enrollments-repository'
import { PrismaEvaluationsRepository } from '../../repositories/prisma-evaluations-repository'
import { PrismaStudentCertificatesRepository } from '../../repositories/prisma-student-certificates-repository'
import { UserMapper } from './../user-mapper'
import { makeCourseMapper } from './make-course-mapper'
import { makeEnrollmentMapper } from './make-enrollment-mapper'

export function makeUserMapper() {
const enrollmentMapper = makeEnrollmentMapper()
const courseMapper = makeCourseMapper()

const prismaCoursesRepository = new PrismaCoursesRepository(
courseMapper
)
const prismaEvaluationsRepository = new PrismaEvaluationsRepository()
const prismaEnrollmentsRepository = new PrismaEnrollmentsRepository(enrollmentMapper)
const prismaStudentCertificatesRepository = new PrismaStudentCertificatesRepository()

const userMapper = new UserMapper(
prismaCoursesRepository,
prismaEnrollmentsRepository,
prismaEvaluationsRepository,
prismaStudentCertificatesRepository
)

return userMapper
}
15 changes: 15 additions & 0 deletions src/infra/database/prisma/mappers/factories/make-video-mapper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { PrismaFilesRepository } from '../../repositories/prisma-files-repository'
import { type FileMapper } from '../file-mapper'
import { VideoMapper } from './../video-mapper'

export function makeVideoMapper(fileMapper: FileMapper) {
const prismaFilesRepository = new PrismaFilesRepository(
fileMapper
)

const videoMapper = new VideoMapper(
prismaFilesRepository
)

return videoMapper
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
import { DomainEvents } from '@/core/events/domain-events'
import { type VideosRepository } from '@/domain/course-management/application/repositories/videos-repository'
import { type Video } from '@/domain/course-management/enterprise/entities/video'
import { type OnVideoUploaded } from '@/domain/storage/application/subscribers/on-video-uploaded'
import { prisma } from '..'
import { type VideoMapper } from '../mappers/video-mapper'

export class PrismaVideosRepository implements VideosRepository {
constructor(
private readonly videoMapper: VideoMapper,
private readonly onVideoUploaded: OnVideoUploaded // setup subscriptions for domain events
private readonly videoMapper: VideoMapper
) {}

async findById(id: string): Promise<Video | null> {
Expand Down

0 comments on commit 4a2ce26

Please sign in to comment.