Skip to content

Commit

Permalink
Merge pull request #179 from GSM-MSG/refac/sign_up_error
Browse files Browse the repository at this point in the history
🔀 :: 178 - 정보기입 부분 리팩토링 및 500 해결
  • Loading branch information
Huuuunee committed Aug 18, 2023
2 parents 34b9739 + 4443c29 commit b118592
Show file tree
Hide file tree
Showing 17 changed files with 81 additions and 64 deletions.
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

0 comments on commit b118592

Please sign in to comment.