Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

πŸ”€ :: 178 - μ •λ³΄κΈ°μž… λΆ€λΆ„ λ¦¬νŒ©ν† λ§ 및 500 ν•΄κ²° #179

Merged
merged 7 commits into from
Aug 18, 2023
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
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@ package team.msg.sms.domain.certificate.service

import team.msg.sms.domain.certificate.model.Certificate
import team.msg.sms.domain.student.model.Student
import team.msg.sms.domain.user.model.User

interface CommandCertificateService {
fun saveAll(certificate: List<Certificate>, student: Student, user: User): List<Certificate>
fun saveAll(certificate: List<Certificate>): List<Certificate>
fun deleteAllByStudent(student: Student)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,13 @@ import team.msg.sms.domain.certificate.model.Certificate
import team.msg.sms.domain.certificate.service.CommandCertificateService
import team.msg.sms.domain.certificate.spi.CertificatePort
import team.msg.sms.domain.student.model.Student
import team.msg.sms.domain.user.model.User

@Service
class CommandCertificateServiceImpl(
private val certificatePort: CertificatePort
) : CommandCertificateService {
override fun saveAll(certificate: List<Certificate>, student: Student, user: User): List<Certificate> =
certificatePort.saveAll(certificate, student, user)
override fun saveAll(certificate: List<Certificate>): List<Certificate> =
certificatePort.saveAll(certificate)

override fun deleteAllByStudent(student: Student) =
certificatePort.deleteAllByStudent(student)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@ package team.msg.sms.domain.certificate.spi

import team.msg.sms.domain.certificate.model.Certificate
import team.msg.sms.domain.student.model.Student
import team.msg.sms.domain.user.model.User

interface CommandCertificatePort {
fun saveAll(certificate: List<Certificate>, student: Student, user: User): List<Certificate>
fun saveAll(certificate: List<Certificate>): List<Certificate>
fun deleteAllByStudent(student: Student)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ import team.msg.sms.domain.student.model.Student
import team.msg.sms.domain.user.model.User

interface CommandLanguageCertificateService {
fun saveAll(languageCertificate: List<LanguageCertificate>, student: Student, user: User): List<LanguageCertificate>
fun saveAll(languageCertificate: List<LanguageCertificate>): List<LanguageCertificate>
fun deleteAllByStudent(student: Student)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,15 @@ import team.msg.sms.domain.languagecertificate.model.LanguageCertificate
import team.msg.sms.domain.languagecertificate.service.CommandLanguageCertificateService
import team.msg.sms.domain.languagecertificate.spi.LanguageCertificatePort
import team.msg.sms.domain.student.model.Student
import team.msg.sms.domain.user.model.User

@Service
class CommandLanguageCertificateServiceImpl(
val languageCertificatePort: LanguageCertificatePort
) : CommandLanguageCertificateService {
override fun saveAll(
languageCertificate: List<LanguageCertificate>,
student: Student,
user: User
): List<LanguageCertificate> =
languageCertificatePort.saveAll(languageCertificate, student, user)
languageCertificatePort.saveAll(languageCertificate)

override fun deleteAllByStudent(student: Student) =
languageCertificatePort.deleteAllByStudent(student)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@ package team.msg.sms.domain.languagecertificate.spi

import team.msg.sms.domain.languagecertificate.model.LanguageCertificate
import team.msg.sms.domain.student.model.Student
import team.msg.sms.domain.user.model.User

interface CommandLanguageCertificatePort {
fun saveAll(region: List<LanguageCertificate>, student: Student, user: User): List<LanguageCertificate>
fun saveAll(languageCertificates: List<LanguageCertificate>): List<LanguageCertificate>
fun deleteAllByStudent(student: Student)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ import team.msg.sms.common.annotation.Service
@Service
class PrizeService(
commandPrizeService: CommandPrizeService,
getPrizeService: GetPrizeService
getPrizeService: GetPrizeService
) : CommandPrizeService by commandPrizeService,
GetPrizeService by getPrizeService
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@ package team.msg.sms.domain.region.service

import team.msg.sms.domain.region.model.Region
import team.msg.sms.domain.student.model.Student
import team.msg.sms.domain.user.model.User

interface CommandRegionService {
fun saveAll(region: List<Region>, student: Student, user: User): List<Region>
fun saveAll(region: List<Region>): List<Region>
fun deleteAllByStudent(student: Student)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,13 @@ import team.msg.sms.domain.region.model.Region
import team.msg.sms.domain.region.service.CommandRegionService
import team.msg.sms.domain.region.spi.RegionPort
import team.msg.sms.domain.student.model.Student
import team.msg.sms.domain.user.model.User

@Service
class CommandRegionServiceImpl(
private val regionPort: RegionPort
) : CommandRegionService {
override fun saveAll(region: List<Region>, student: Student, user: User): List<Region> =
regionPort.saveAll(region, student, user)
override fun saveAll(region: List<Region>): List<Region> =
regionPort.saveAll(region)

override fun deleteAllByStudent(student: Student) =
regionPort.deleteAllByStudent(student)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ import team.msg.sms.domain.student.model.Student
import team.msg.sms.domain.user.model.User

interface CommandRegionPort {
fun saveAll(region: List<Region>, student: Student, user: User): List<Region>
fun saveAll(region: List<Region>): List<Region>
fun deleteAllByStudent(student: Student)
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,37 +72,50 @@ class SignUpUseCase(
signUpData.projects.forEach {
val project = projectService.save(project = toProjectModel(it, studentId = student.id))
projectTechStackValid(techStacks, it.techStacks, project.id)
projectLinkService.saveAll(it.links.map { linkRequestData ->
toProjectLinkModel(projectLink = linkRequestData, projectId = project.id)
})
imageService.saveAll(it.previewImages.map { url ->
toImageModel(url = url, projectId = project.id)
})
saveAllIfNotEmpty(
it.links,
{ projectLink -> toProjectLinkModel(projectLink = projectLink, projectId = project.id) },
projectLinkService::saveAll
)
saveAllIfNotEmpty(
it.previewImages,
{ previewImage -> toImageModel(url = previewImage, projectId = project.id) },
imageService::saveAll
)
}

regionService.saveAll(signUpData.region.map { toRegionModel(it, studentId = student.id) }, student, user)
saveAllIfNotEmpty(
signUpData.region,
{ toRegionModel(region = it, studentId = student.id) },
regionService::saveAll
)

languageCertificateService.saveAll(signUpData.languageCertificate.map {
toLanguageCertificate(
languageCertificate = it,
studentId = student.id
)
}, student, user)
saveAllIfNotEmpty(
signUpData.languageCertificate,
{ toLanguageCertificate(languageCertificate = it, studentId = student.id) },
languageCertificateService::saveAll
)

certificateService.saveAll(
signUpData.certificate.map { toCertificate(certificate = it, studentId = student.id) },
student,
user
saveAllIfNotEmpty(
signUpData.certificate,
{ toCertificate(certificate = it, studentId = student.id) },
certificateService::saveAll
)

prizeService.saveAll(
signUpData.prizes
.map {
toPrizeModel(prize = it, studentId = student.id)
}
saveAllIfNotEmpty(
signUpData.prizes,
{ toPrizeModel(prize = it, studentId = student.id) },
prizeService::saveAll
)
}

private fun <T, R> saveAllIfNotEmpty(dataList: List<T>, transform: (T) -> R, saveFunction: (List<R>) -> Unit) {
dataList
.takeIf { it.isNotEmpty() }
?.map { transform(it) }
?.let { saveFunction(it) }
}

private fun toImageModel(url: String, projectId: Long): Image =
Image(
id = 0,
Expand Down Expand Up @@ -202,7 +215,11 @@ class SignUpUseCase(
studentId = studentId
)

private fun projectTechStackValid(stack: MutableList<TechStack>, projectTechStacks: List<String>, projectId: Long) {
private fun projectTechStackValid(
stack: MutableList<TechStack>,
projectTechStacks: List<String>,
projectId: Long
) {
for (stackItem in projectTechStacks) {
val techStackData = stack.find { it.stack == stackItem }
if (techStackData == null) {
Expand All @@ -218,15 +235,20 @@ class SignUpUseCase(
}
}

private fun studentTechStackValid(stack: MutableList<TechStack>, studentTechStacks: List<String>, studentId: UUID) {
private fun studentTechStackValid(
stack: MutableList<TechStack>,
studentTechStacks: List<String>,
studentId: UUID
) {
for (stackItem in studentTechStacks) {
val techStackData = stack.find { it.stack == stackItem }
if (techStackData == null) {
val techStack = techStackService.save(toStackModel(stackItem))
stack.add(0, techStack)
studentTechStackService.save(toStudentTechStackModel(studentId, techStack.id))
} else {
val techStack = techStackService.save(techStack = techStackData.copy(count = techStackData.count + 1))
val techStack =
techStackService.save(techStack = techStackData.copy(count = techStackData.count + 1))
stack.add(0, techStack)
studentTechStackService.save(toStudentTechStackModel(studentId, techStack.id))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,24 @@ import team.msg.sms.domain.certificate.model.Certificate
import team.msg.sms.domain.certificate.spi.CertificatePort
import team.msg.sms.domain.student.exception.StudentNotFoundException
import team.msg.sms.domain.student.model.Student
import team.msg.sms.domain.user.model.User
import team.msg.sms.persistence.certificate.mapper.toDomain
import team.msg.sms.persistence.certificate.mapper.toEntity
import team.msg.sms.persistence.certificate.repository.CertificateJpaRepository
import team.msg.sms.persistence.student.mapper.toEntity
import team.msg.sms.persistence.student.repository.StudentJpaRepository
import team.msg.sms.persistence.user.mapper.toEntity
import java.util.*

@Component
class CertificatePersistenceAdapter(
private val certificateJpaRepository: CertificateJpaRepository,
private val studentJpaRepository: StudentJpaRepository
) : CertificatePort {
override fun saveAll(certificate: List<Certificate>, student: Student, user: User): List<Certificate> =
certificateJpaRepository.saveAll(certificate.map { it.toEntity(student.toEntity(user.toEntity())) })
override fun saveAll(certificate: List<Certificate>): List<Certificate> {
val student = studentJpaRepository.findByIdOrNull(certificate.first().studentId)
?: throw StudentNotFoundException
return certificateJpaRepository.saveAll(certificate
.map { it.toEntity(student = student) })
.map { it.toDomain() }
}

override fun deleteAllByStudent(student: Student) {
val student = studentJpaRepository.findByIdOrNull(student.id)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class ImagePersistenceAdapter(
private val projectJpaRepository: ProjectJpaRepository
) : ImagePort {
override fun saveAll(images: List<Image>) {
val project = projectJpaRepository.findByIdOrNull(images[0].projectId)
val project = projectJpaRepository.findByIdOrNull(images.first().projectId)
?: throw ProjectNotFoundException
imageJpaRepository.saveAll(images
.map {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,24 @@ import team.msg.sms.domain.languagecertificate.model.LanguageCertificate
import team.msg.sms.domain.languagecertificate.spi.LanguageCertificatePort
import team.msg.sms.domain.student.exception.StudentNotFoundException
import team.msg.sms.domain.student.model.Student
import team.msg.sms.domain.user.model.User
import team.msg.sms.persistence.languagecertificate.mapper.toDomain
import team.msg.sms.persistence.languagecertificate.mapper.toEntity
import team.msg.sms.persistence.languagecertificate.repository.LanguageCertificateJpaRepository
import team.msg.sms.persistence.student.mapper.toEntity
import team.msg.sms.persistence.student.repository.StudentJpaRepository
import team.msg.sms.persistence.user.mapper.toEntity
import java.util.*

@Component
class LanguageCertificatePersistenceAdapter(
private val languageCertificateJpaRepository: LanguageCertificateJpaRepository,
private val studentJpaRepository: StudentJpaRepository
) : LanguageCertificatePort {
override fun saveAll(region: List<LanguageCertificate>, student: Student, user: User): List<LanguageCertificate> =
languageCertificateJpaRepository.saveAll(region.map { it.toEntity(student.toEntity(user.toEntity())) })
override fun saveAll(languageCertificates: List<LanguageCertificate>): List<LanguageCertificate> {
val student = studentJpaRepository.findByIdOrNull(languageCertificates.first().studentId)
?: throw StudentNotFoundException
return languageCertificateJpaRepository.saveAll(languageCertificates
.map { it.toEntity(student) })
.map { it.toDomain() }
}

override fun deleteAllByStudent(student: Student) {
val student = studentJpaRepository.findByIdOrNull(student.id)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class PrizePersistenceAdapter(
private val studentJpaRepository: StudentJpaRepository
) : PrizePort {
override fun saveAll(prizes: List<Prize>) {
val student = studentJpaRepository.findByIdOrNull(prizes[0].studentId)
val student = studentJpaRepository.findByIdOrNull(prizes.first().studentId)
?: throw StudentNotFoundException
prizeJpaRepository.saveAll(
prizes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class ProjectLinkPersistenceAdapter(
val projectJpaRepository: ProjectJpaRepository
) : ProjectLinkPort {
override fun saveAll(projectLinks: List<ProjectLink>) {
val project = projectJpaRepository.findByIdOrNull(projectLinks[0].projectId)
val project = projectJpaRepository.findByIdOrNull(projectLinks.first().projectId)
?: throw ProjectNotFoundException
projectLinkJpaRepository.saveAll(
projectLinks
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,24 @@ import team.msg.sms.domain.region.model.Region
import team.msg.sms.domain.region.spi.RegionPort
import team.msg.sms.domain.student.exception.StudentNotFoundException
import team.msg.sms.domain.student.model.Student
import team.msg.sms.domain.user.model.User
import team.msg.sms.persistence.region.mapper.toDomain
import team.msg.sms.persistence.region.mapper.toEntity
import team.msg.sms.persistence.region.repository.RegionJpaRepository
import team.msg.sms.persistence.student.mapper.toEntity
import team.msg.sms.persistence.student.repository.StudentJpaRepository
import team.msg.sms.persistence.user.mapper.toEntity
import java.util.*

@Component
class RegionPersistenceAdapter(
private val regionJpaRepository: RegionJpaRepository,
private val studentJpaRepository: StudentJpaRepository
) : RegionPort {
override fun saveAll(region: List<Region>, student: Student, user: User): List<Region> =
regionJpaRepository.saveAll(region.map { it.toEntity(student.toEntity(user.toEntity())) }).map { it.toDomain() }
override fun saveAll(regions: List<Region>): List<Region> {
val student = studentJpaRepository.findByIdOrNull(regions.first().studentId)
?: throw StudentNotFoundException
return regionJpaRepository.saveAll(regions
.map { it.toEntity(student) })
.map { it.toDomain() }
}

override fun deleteAllByStudent(student: Student) {
val student = studentJpaRepository.findByIdOrNull(student.id)
Expand Down