diff --git a/src/main/kotlin/com/facegram/facegrambackend/controller/face/AnalysisController.kt b/src/main/kotlin/com/facegram/facegrambackend/controller/face/AnalysisController.kt index 87d3c29..a49aa51 100644 --- a/src/main/kotlin/com/facegram/facegrambackend/controller/face/AnalysisController.kt +++ b/src/main/kotlin/com/facegram/facegrambackend/controller/face/AnalysisController.kt @@ -5,12 +5,11 @@ import com.facegram.facegrambackend.dto.request.analysis.description.Description import com.facegram.facegrambackend.dto.request.analysis.info.InfoDto import com.facegram.facegrambackend.security.CustomUserDetails import com.facegram.facegrambackend.service.analysis.AnalysisService +import com.facegram.facegrambackend.service.analysis.AnalysisServiceImpl import org.springframework.http.ResponseEntity import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.web.bind.annotation.PostMapping -import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RequestPart import org.springframework.web.bind.annotation.RestController import org.springframework.web.multipart.MultipartFile diff --git a/src/main/kotlin/com/facegram/facegrambackend/controller/history/HistoryController.kt b/src/main/kotlin/com/facegram/facegrambackend/controller/history/HistoryController.kt index f19b8c9..6f215dd 100644 --- a/src/main/kotlin/com/facegram/facegrambackend/controller/history/HistoryController.kt +++ b/src/main/kotlin/com/facegram/facegrambackend/controller/history/HistoryController.kt @@ -4,14 +4,13 @@ import com.facegram.facegrambackend.dto.response.history.analysishistory.Analysi import com.facegram.facegrambackend.dto.response.history.userhistory.UserHistoryAnalysisDto import com.facegram.facegrambackend.security.CustomUserDetails import com.facegram.facegrambackend.service.history.HistoryService +import com.facegram.facegrambackend.service.history.HistoryServiceImpl import lombok.extern.slf4j.Slf4j import org.springframework.http.ResponseEntity import org.springframework.security.core.annotation.AuthenticationPrincipal -import org.springframework.stereotype.Service import org.springframework.web.bind.annotation.* import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse -import kotlin.math.log @Slf4j @RestController diff --git a/src/main/kotlin/com/facegram/facegrambackend/service/analysis/AnalysisService.kt b/src/main/kotlin/com/facegram/facegrambackend/service/analysis/AnalysisService.kt index bf33f6d..d7980d9 100644 --- a/src/main/kotlin/com/facegram/facegrambackend/service/analysis/AnalysisService.kt +++ b/src/main/kotlin/com/facegram/facegrambackend/service/analysis/AnalysisService.kt @@ -1,404 +1,17 @@ package com.facegram.facegrambackend.service.analysis -import com.facegram.facegrambackend.domain.analyze.Analysis -import com.facegram.facegrambackend.domain.analyze.AnalysisRepository -import com.facegram.facegrambackend.domain.eyebrows.Eyebrows -import com.facegram.facegrambackend.domain.eyebrows.EyebrowsRepository -import com.facegram.facegrambackend.domain.eyes.Eyes -import com.facegram.facegrambackend.domain.eyes.EyesRepository -import com.facegram.facegrambackend.domain.face.Face -import com.facegram.facegrambackend.domain.face.FaceRepository -import com.facegram.facegrambackend.domain.feature.Feature -import com.facegram.facegrambackend.domain.feature.FeatureRepository -import com.facegram.facegrambackend.domain.hairstyle.Hairstyle -import com.facegram.facegrambackend.domain.hairstyle.HairstyleRepository -import com.facegram.facegrambackend.domain.impression.Impression -import com.facegram.facegrambackend.domain.impression.ImpressionRepository -import com.facegram.facegrambackend.domain.mouth.Mouth -import com.facegram.facegrambackend.domain.mouth.MouthRepository -import com.facegram.facegrambackend.domain.nose.Nose -import com.facegram.facegrambackend.domain.nose.NoseRepository -import com.facegram.facegrambackend.domain.user.UserRepository -import com.facegram.facegrambackend.domain.wrinkle.Wrinkle -import com.facegram.facegrambackend.domain.wrinkle.WrinkleRepository import com.facegram.facegrambackend.dto.request.analysis.AnalysisLowCreateRequestDto -import com.facegram.facegrambackend.dto.request.analysis.description.DescriptionDto -import com.facegram.facegrambackend.dto.request.analysis.info.InfoDto -import com.facegram.facegrambackend.dto.response.Message -import com.facegram.facegrambackend.dto.response.ResponseType -import com.facegram.facegrambackend.gcp.storage.GCSService import com.facegram.facegrambackend.security.CustomUserDetails -import com.facegram.facegrambackend.service.auth.AuthService -import com.facegram.facegrambackend.service.responseentity.ResponseEntityService -import org.springframework.http.HttpStatus import org.springframework.http.ResponseEntity -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional -import org.springframework.web.multipart.MultipartFile -import java.lang.IllegalArgumentException import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse +interface AnalysisService { -@Service -class AnalysisService constructor( - private val userRepository: UserRepository, - private val analysisRepository: AnalysisRepository, - private val faceRepository: FaceRepository, - private val hairstyleRepository: HairstyleRepository, - private val eyebrowsRepository: EyebrowsRepository, - private val eyesRepository: EyesRepository, - private val noseRepository: NoseRepository, - private val mouthRepository: MouthRepository, - private val wrinkleRepository: WrinkleRepository, - private val featureRepository: FeatureRepository, - private val impressionRepository: ImpressionRepository, - private val responseEntityService: ResponseEntityService, - private val gcsService: GCSService, - private val authService: AuthService - -) { - companion object{ - private var analysisNum = 0; - - fun numIncrease(){ - analysisNum++ - } - } - - @Transactional fun createAnalysis( - analysisLowCreateRequestDto: AnalysisLowCreateRequestDto, -// image: MultipartFile, -// info: InfoDto, -// image: MultipartFile, - user: CustomUserDetails, - request: HttpServletRequest, - response: HttpServletResponse - ) - :ResponseEntity{ - val face = faceRepository.save(createFace(analysisLowCreateRequestDto)) - val hairstyle = hairstyleRepository.save(createHairstyle(analysisLowCreateRequestDto)) - val eyebrows = eyebrowsRepository.save(createEyebrows(analysisLowCreateRequestDto)) - val eye = eyesRepository.save(createEyes(analysisLowCreateRequestDto)) - val nose = noseRepository.save(createNose(analysisLowCreateRequestDto)) - val mouth = mouthRepository.save(createMouth(analysisLowCreateRequestDto)) - val wrinkle = wrinkleRepository.save(createWrinkle(analysisLowCreateRequestDto)) -// val characteristic = - val feature = featureRepository.save(createFeature(analysisLowCreateRequestDto)) - val impression = impressionRepository.save(createImpression(analysisLowCreateRequestDto)) - println("다른 것들 생성 완료") - val findUser = userRepository.findById(user.name.toLong()) - if(findUser.isEmpty){ - throw IllegalArgumentException("유저를 찾을 수 없습니다.") - } - println("유저 생성 완료") - val imageUrl = gcsService.uploadFileToGCS(analysisLowCreateRequestDto.image) - - numIncrease() - - val analysis = Analysis.newInstance( - null, - "${user.username}님이 생성한 몽타주 $analysisNum", - findUser.get(), - face, - hairstyle, - eyebrows, - eye, - nose, - mouth, - wrinkle, - feature, - impression, - "생성된 몽타주입니다.", - analysisLowCreateRequestDto - .info.age.toInt(), - analysisLowCreateRequestDto - .info.gender, - imageUrl - ) - - analysisRepository.save(analysis) - - val message = Message(ResponseType.OK,"성공입니다.") - - return responseEntityService.createResponseEntity(message,HttpStatus.OK) - } - - private fun createFace(analysisLowCreateRequestDto: - AnalysisLowCreateRequestDto): Face{ - return Face.newInstance( - null, - analysisLowCreateRequestDto - .description - .face - .type, - analysisLowCreateRequestDto - .description - .face - .size, - analysisLowCreateRequestDto - .description - .face - .foreheadType, - analysisLowCreateRequestDto - .description - .face - .foreheadSize, - analysisLowCreateRequestDto - .description - .face - .chinType, - analysisLowCreateRequestDto - .description - .face - .chinSize, - analysisLowCreateRequestDto - .description - .face - .cheek, - ) - } - private fun createHairstyle(analysisLowCreateRequestDto: - AnalysisLowCreateRequestDto): Hairstyle{ - return Hairstyle.newInstance( - null, - analysisLowCreateRequestDto - .description - .hairstyle - .type, - analysisLowCreateRequestDto - .description - .hairstyle - .topLength, - analysisLowCreateRequestDto - .description - .hairstyle - .sizeLength, - analysisLowCreateRequestDto - .description - .hairstyle - .part, - ) - } - private fun createEyebrows(analysisLowCreateRequestDto: - AnalysisLowCreateRequestDto): Eyebrows{ - return Eyebrows.newInstance( - null, - analysisLowCreateRequestDto - .description - .eyebrows - .type, - analysisLowCreateRequestDto - .description - .eyebrows - .deep, - analysisLowCreateRequestDto - .description - .eyebrows - .length, - analysisLowCreateRequestDto - .description - .eyebrows - .thick, - analysisLowCreateRequestDto - .description - .eyebrows - .glabella, - ) - } - - private fun createEyes(analysisLowCreateRequestDto: - AnalysisLowCreateRequestDto): Eyes{ - return Eyes.newInstance( - null, - analysisLowCreateRequestDto - .description - .eyes - .size, - analysisLowCreateRequestDto - .description - .eyes - .type, - analysisLowCreateRequestDto - .description - .eyes - .distance, - analysisLowCreateRequestDto - .description - .eyes - .slant, - analysisLowCreateRequestDto - .description - .eyes - .shape, - analysisLowCreateRequestDto - .description - .eyes - .eyeLids, - analysisLowCreateRequestDto - .description - .eyes - .bottom, - ) - } - private fun createNose(analysisLowCreateRequestDto: - AnalysisLowCreateRequestDto): Nose{ - return Nose.newInstance( - null, - analysisLowCreateRequestDto - .description - .nose - .size, - analysisLowCreateRequestDto - .description - .nose - .length, - analysisLowCreateRequestDto - .description - .nose - .heights, - analysisLowCreateRequestDto - .description - .nose - .top, - analysisLowCreateRequestDto - .description - .nose - .noseTrills, - analysisLowCreateRequestDto - .description - .nose - .philtrum, - ) - } - private fun createMouth(analysisLowCreateRequestDto: - AnalysisLowCreateRequestDto): Mouth{ - return Mouth.newInstance( - null, - analysisLowCreateRequestDto - .description - .mouth - .type, - analysisLowCreateRequestDto - .description - .mouth - .size, - analysisLowCreateRequestDto - .description - .mouth - .thick, - analysisLowCreateRequestDto - .description - .mouth - .ratio, - analysisLowCreateRequestDto - .description - .mouth - .side, - analysisLowCreateRequestDto - .description - .mouth - .line, - ) - } - - private fun createWrinkle(analysisLowCreateRequestDto: - AnalysisLowCreateRequestDto): Wrinkle{ - return Wrinkle.newInstance( - null, - analysisLowCreateRequestDto - .description - .wrinkle - .forehead, - analysisLowCreateRequestDto - .description - .wrinkle - .glabella, - analysisLowCreateRequestDto - .description - .wrinkle - .eyes, - analysisLowCreateRequestDto - .description - .wrinkle - .mouth, - analysisLowCreateRequestDto - .description - .wrinkle - .cheek, - analysisLowCreateRequestDto - .description - .wrinkle - .lip, - ) - } - - private fun createFeature(analysisLowCreateRequestDto: - AnalysisLowCreateRequestDto): Feature { - return Feature.newInstance( - null, - analysisLowCreateRequestDto - .description - .feature - .mustache, - analysisLowCreateRequestDto - .description - .feature - .sideburns, - analysisLowCreateRequestDto - .description - .feature - .dimple, - analysisLowCreateRequestDto - .description - .feature - .scar, - analysisLowCreateRequestDto - .description - .feature - .mole, - analysisLowCreateRequestDto - .description - .feature - .freckles, - analysisLowCreateRequestDto - .description - .feature - .spots, - analysisLowCreateRequestDto - .description - .feature - .tattoo, - analysisLowCreateRequestDto - .description - .feature - .makeup, - analysisLowCreateRequestDto - .description - .feature - .description, - ) - } - private fun createImpression(analysisLowCreateRequestDto: - AnalysisLowCreateRequestDto): Impression { - return Impression.newInstance( - null, - analysisLowCreateRequestDto - .description - .impression - .type, - ) - } -// private fun createCharacteristic(analysisLowCreateRequestDto: -// AnalysisLowCreateRequestDto): Characteristic { -// return Characteristic.newInstance( -// null, -// analysisLowCreateRequestDto -// .description -// .impression -// .type, -// ) -// } - + analysisLowCreateRequestDto: AnalysisLowCreateRequestDto, + user: CustomUserDetails, + request: HttpServletRequest, + response: HttpServletResponse + ): ResponseEntity } \ No newline at end of file diff --git a/src/main/kotlin/com/facegram/facegrambackend/service/analysis/AnalysisServiceImpl.kt b/src/main/kotlin/com/facegram/facegrambackend/service/analysis/AnalysisServiceImpl.kt new file mode 100644 index 0000000..cbab2bb --- /dev/null +++ b/src/main/kotlin/com/facegram/facegrambackend/service/analysis/AnalysisServiceImpl.kt @@ -0,0 +1,399 @@ +package com.facegram.facegrambackend.service.analysis + +import com.facegram.facegrambackend.domain.analyze.Analysis +import com.facegram.facegrambackend.domain.analyze.AnalysisRepository +import com.facegram.facegrambackend.domain.eyebrows.Eyebrows +import com.facegram.facegrambackend.domain.eyebrows.EyebrowsRepository +import com.facegram.facegrambackend.domain.eyes.Eyes +import com.facegram.facegrambackend.domain.eyes.EyesRepository +import com.facegram.facegrambackend.domain.face.Face +import com.facegram.facegrambackend.domain.face.FaceRepository +import com.facegram.facegrambackend.domain.feature.Feature +import com.facegram.facegrambackend.domain.feature.FeatureRepository +import com.facegram.facegrambackend.domain.hairstyle.Hairstyle +import com.facegram.facegrambackend.domain.hairstyle.HairstyleRepository +import com.facegram.facegrambackend.domain.impression.Impression +import com.facegram.facegrambackend.domain.impression.ImpressionRepository +import com.facegram.facegrambackend.domain.mouth.Mouth +import com.facegram.facegrambackend.domain.mouth.MouthRepository +import com.facegram.facegrambackend.domain.nose.Nose +import com.facegram.facegrambackend.domain.nose.NoseRepository +import com.facegram.facegrambackend.domain.user.UserRepository +import com.facegram.facegrambackend.domain.wrinkle.Wrinkle +import com.facegram.facegrambackend.domain.wrinkle.WrinkleRepository +import com.facegram.facegrambackend.dto.request.analysis.AnalysisLowCreateRequestDto +import com.facegram.facegrambackend.dto.request.analysis.info.InfoDto +import com.facegram.facegrambackend.dto.response.Message +import com.facegram.facegrambackend.dto.response.ResponseType +import com.facegram.facegrambackend.gcp.storage.GCSService +import com.facegram.facegrambackend.security.CustomUserDetails +import com.facegram.facegrambackend.service.auth.AuthService +import com.facegram.facegrambackend.service.responseentity.ResponseEntityService +import org.springframework.http.HttpStatus +import org.springframework.http.ResponseEntity +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional +import org.springframework.web.multipart.MultipartFile +import java.lang.IllegalArgumentException +import javax.servlet.http.HttpServletRequest +import javax.servlet.http.HttpServletResponse + + +@Service +class AnalysisServiceImpl constructor( + private val userRepository: UserRepository, + private val analysisRepository: AnalysisRepository, + private val faceRepository: FaceRepository, + private val hairstyleRepository: HairstyleRepository, + private val eyebrowsRepository: EyebrowsRepository, + private val eyesRepository: EyesRepository, + private val noseRepository: NoseRepository, + private val mouthRepository: MouthRepository, + private val wrinkleRepository: WrinkleRepository, + private val featureRepository: FeatureRepository, + private val impressionRepository: ImpressionRepository, + private val responseEntityService: ResponseEntityService, + private val gcsService: GCSService, + private val authService: AuthService + +):AnalysisService { + companion object{ + private var analysisNum = 0; + + fun numIncrease(){ + analysisNum++ + } + } + + @Transactional + override fun createAnalysis( + analysisLowCreateRequestDto: AnalysisLowCreateRequestDto, + user: CustomUserDetails, + request: HttpServletRequest, + response: HttpServletResponse + ) + :ResponseEntity{ + val face = faceRepository.save(createFace(analysisLowCreateRequestDto)) + val hairstyle = hairstyleRepository.save(createHairstyle(analysisLowCreateRequestDto)) + val eyebrows = eyebrowsRepository.save(createEyebrows(analysisLowCreateRequestDto)) + val eye = eyesRepository.save(createEyes(analysisLowCreateRequestDto)) + val nose = noseRepository.save(createNose(analysisLowCreateRequestDto)) + val mouth = mouthRepository.save(createMouth(analysisLowCreateRequestDto)) + val wrinkle = wrinkleRepository.save(createWrinkle(analysisLowCreateRequestDto)) +// val characteristic = + val feature = featureRepository.save(createFeature(analysisLowCreateRequestDto)) + val impression = impressionRepository.save(createImpression(analysisLowCreateRequestDto)) + val findUser = userRepository.findById(user.name.toLong()) + if(findUser.isEmpty){ + throw IllegalArgumentException("유저를 찾을 수 없습니다.") + } + println("유저 생성 완료") + val imageUrl = gcsService.uploadFileToGCS(analysisLowCreateRequestDto.image) + + numIncrease() + + val analysis = Analysis.newInstance( + null, + "${user.username}님이 생성한 몽타주 $analysisNum", + findUser.get(), + face, + hairstyle, + eyebrows, + eye, + nose, + mouth, + wrinkle, + feature, + impression, + "생성된 몽타주입니다.", + analysisLowCreateRequestDto + .info.age.toInt(), + analysisLowCreateRequestDto + .info.gender, + imageUrl + ) + + analysisRepository.save(analysis) + + val message = Message(ResponseType.OK,"성공입니다.") + + return responseEntityService.createResponseEntity(message,HttpStatus.OK) + } + + private fun createFace(analysisLowCreateRequestDto: + AnalysisLowCreateRequestDto): Face{ + return Face.newInstance( + null, + analysisLowCreateRequestDto + .description + .face + .type, + analysisLowCreateRequestDto + .description + .face + .size, + analysisLowCreateRequestDto + .description + .face + .foreheadType, + analysisLowCreateRequestDto + .description + .face + .foreheadSize, + analysisLowCreateRequestDto + .description + .face + .chinType, + analysisLowCreateRequestDto + .description + .face + .chinSize, + analysisLowCreateRequestDto + .description + .face + .cheek, + ) + } + private fun createHairstyle(analysisLowCreateRequestDto: + AnalysisLowCreateRequestDto): Hairstyle{ + return Hairstyle.newInstance( + null, + analysisLowCreateRequestDto + .description + .hairstyle + .type, + analysisLowCreateRequestDto + .description + .hairstyle + .topLength, + analysisLowCreateRequestDto + .description + .hairstyle + .sizeLength, + analysisLowCreateRequestDto + .description + .hairstyle + .part, + ) + } + private fun createEyebrows(analysisLowCreateRequestDto: + AnalysisLowCreateRequestDto): Eyebrows{ + return Eyebrows.newInstance( + null, + analysisLowCreateRequestDto + .description + .eyebrows + .type, + analysisLowCreateRequestDto + .description + .eyebrows + .deep, + analysisLowCreateRequestDto + .description + .eyebrows + .length, + analysisLowCreateRequestDto + .description + .eyebrows + .thick, + analysisLowCreateRequestDto + .description + .eyebrows + .glabella, + ) + } + + private fun createEyes(analysisLowCreateRequestDto: + AnalysisLowCreateRequestDto): Eyes{ + return Eyes.newInstance( + null, + analysisLowCreateRequestDto + .description + .eyes + .size, + analysisLowCreateRequestDto + .description + .eyes + .type, + analysisLowCreateRequestDto + .description + .eyes + .distance, + analysisLowCreateRequestDto + .description + .eyes + .slant, + analysisLowCreateRequestDto + .description + .eyes + .shape, + analysisLowCreateRequestDto + .description + .eyes + .eyeLids, + analysisLowCreateRequestDto + .description + .eyes + .bottom, + ) + } + private fun createNose(analysisLowCreateRequestDto: + AnalysisLowCreateRequestDto): Nose{ + return Nose.newInstance( + null, + analysisLowCreateRequestDto + .description + .nose + .size, + analysisLowCreateRequestDto + .description + .nose + .length, + analysisLowCreateRequestDto + .description + .nose + .heights, + analysisLowCreateRequestDto + .description + .nose + .top, + analysisLowCreateRequestDto + .description + .nose + .noseTrills, + analysisLowCreateRequestDto + .description + .nose + .philtrum, + ) + } + private fun createMouth(analysisLowCreateRequestDto: + AnalysisLowCreateRequestDto): Mouth{ + return Mouth.newInstance( + null, + analysisLowCreateRequestDto + .description + .mouth + .type, + analysisLowCreateRequestDto + .description + .mouth + .size, + analysisLowCreateRequestDto + .description + .mouth + .thick, + analysisLowCreateRequestDto + .description + .mouth + .ratio, + analysisLowCreateRequestDto + .description + .mouth + .side, + analysisLowCreateRequestDto + .description + .mouth + .line, + ) + } + + private fun createWrinkle(analysisLowCreateRequestDto: + AnalysisLowCreateRequestDto): Wrinkle{ + return Wrinkle.newInstance( + null, + analysisLowCreateRequestDto + .description + .wrinkle + .forehead, + analysisLowCreateRequestDto + .description + .wrinkle + .glabella, + analysisLowCreateRequestDto + .description + .wrinkle + .eyes, + analysisLowCreateRequestDto + .description + .wrinkle + .mouth, + analysisLowCreateRequestDto + .description + .wrinkle + .cheek, + analysisLowCreateRequestDto + .description + .wrinkle + .lip, + ) + } + + private fun createFeature(analysisLowCreateRequestDto: + AnalysisLowCreateRequestDto): Feature { + return Feature.newInstance( + null, + analysisLowCreateRequestDto + .description + .feature + .mustache, + analysisLowCreateRequestDto + .description + .feature + .sideburns, + analysisLowCreateRequestDto + .description + .feature + .dimple, + analysisLowCreateRequestDto + .description + .feature + .scar, + analysisLowCreateRequestDto + .description + .feature + .mole, + analysisLowCreateRequestDto + .description + .feature + .freckles, + analysisLowCreateRequestDto + .description + .feature + .spots, + analysisLowCreateRequestDto + .description + .feature + .tattoo, + analysisLowCreateRequestDto + .description + .feature + .makeup, + analysisLowCreateRequestDto + .description + .feature + .description, + ) + } + private fun createImpression(analysisLowCreateRequestDto: + AnalysisLowCreateRequestDto): Impression { + return Impression.newInstance( + null, + analysisLowCreateRequestDto + .description + .impression + .type, + ) + } +// private fun createCharacteristic(analysisLowCreateRequestDto: +// AnalysisLowCreateRequestDto): Characteristic { +// return Characteristic.newInstance( +// null, +// analysisLowCreateRequestDto +// .description +// .impression +// .type, +// ) +// } + +} \ No newline at end of file diff --git a/src/main/kotlin/com/facegram/facegrambackend/service/history/HistoryService.kt b/src/main/kotlin/com/facegram/facegrambackend/service/history/HistoryService.kt index 81f8f65..028418e 100644 --- a/src/main/kotlin/com/facegram/facegrambackend/service/history/HistoryService.kt +++ b/src/main/kotlin/com/facegram/facegrambackend/service/history/HistoryService.kt @@ -1,161 +1,16 @@ package com.facegram.facegrambackend.service.history -import com.facegram.facegrambackend.domain.analyze.Analysis -import com.facegram.facegrambackend.domain.analyze.AnalysisRepository -import com.facegram.facegrambackend.domain.user.User -import com.facegram.facegrambackend.domain.user.UserRepository -import com.facegram.facegrambackend.dto.response.Message -import com.facegram.facegrambackend.dto.response.ResponseType import com.facegram.facegrambackend.dto.response.history.analysishistory.AnalysisHistoryResponseDto -import com.facegram.facegrambackend.dto.response.history.analysishistory.analysisstatus.* import com.facegram.facegrambackend.dto.response.history.userhistory.UserHistoryAnalysisDto -import com.facegram.facegrambackend.security.CustomUserDetails -import com.facegram.facegrambackend.service.responseentity.ResponseEntityService -import lombok.extern.slf4j.Slf4j -import org.springframework.http.HttpStatus import org.springframework.http.ResponseEntity -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional -import java.util.Optional import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse -import kotlin.IllegalArgumentException -@Slf4j -@Service -class HistoryService - constructor( - private val analysisRepository: AnalysisRepository, - private val userRepository: UserRepository, - private val responseEntityService: ResponseEntityService - ) { +interface HistoryService { - @Transactional - fun historySearchByUser(userId: Long) - : MutableList{ - println("history 서치") - val history: MutableList = mutableListOf() - val findUser: Optional = userRepository.findById(userId) - if(findUser.isEmpty){ - throw IllegalArgumentException("유저를 찾지 못했습니다.") - } - println("유저 서치") - val userAnalysisHistory: List = analysisRepository.findAllByUser(findUser.get()) - println("history 서치") - userAnalysisHistory.forEach { - analysis -> - history.add( - UserHistoryAnalysisDto( - analysis.id, - analysis.image, - analysis.createdAt) - ) - } - println(history) - println("히스토리 리턴") - return history - } + fun historySearchByUser(userId: Long): MutableList - @Transactional - fun historySearchById(id: Long): AnalysisHistoryResponseDto{ + fun historySearchById(id: Long): AnalysisHistoryResponseDto - val findAnalysis:Optional = analysisRepository.findById(id) - if (findAnalysis.isPresent){ - val face = FaceResponseDto( - findAnalysis.get().face.type, - findAnalysis.get().face.size, - findAnalysis.get().face.foreheadType, - findAnalysis.get().face.foreheadSize, - findAnalysis.get().face.chinType, - findAnalysis.get().face.chinSize, - findAnalysis.get().face.cheek, - ) - val hairstyle = HairstyleResponseDto( - findAnalysis.get().hairstyle.type, - findAnalysis.get().hairstyle.topLength, - findAnalysis.get().hairstyle.sizeLength, - findAnalysis.get().hairstyle.part - ) - val eyebrows = EyebrowsResponseDto( - findAnalysis.get().eyebrows.type, - findAnalysis.get().eyebrows.deep, - findAnalysis.get().eyebrows.length, - findAnalysis.get().eyebrows.thick, - findAnalysis.get().eyebrows.glabella, - ) - val eyes = EyesResponseDto( - findAnalysis.get().eyes.type, - findAnalysis.get().eyes.size, - findAnalysis.get().eyes.distance, - findAnalysis.get().eyes.slant, - findAnalysis.get().eyes.shape, - findAnalysis.get().eyes.eyeLids, - findAnalysis.get().eyes.bottom, - ) - val nose = NoseResponseDto( - findAnalysis.get().nose.size, - findAnalysis.get().nose.length, - findAnalysis.get().nose.heights, - findAnalysis.get().nose.top, - findAnalysis.get().nose.noseTrills, - findAnalysis.get().nose.philtrum, - ) - val mouth = MouthResponseDto( - findAnalysis.get().mouth.type, - findAnalysis.get().mouth.size, - findAnalysis.get().mouth.thick, - findAnalysis.get().mouth.ratio, - findAnalysis.get().mouth.side, - findAnalysis.get().mouth.line, - ) - val wrinkle = WrinkleResponseDto( - findAnalysis.get().wrinkle.forehead, - findAnalysis.get().wrinkle.glabella, - findAnalysis.get().wrinkle.eyes, - findAnalysis.get().wrinkle.mouth, - findAnalysis.get().wrinkle.cheek, - findAnalysis.get().wrinkle.lip, - ) - val feature = FeatureResponseDto( - findAnalysis.get().feature.mustache, - findAnalysis.get().feature.sideburns, - findAnalysis.get().feature.dimple, - findAnalysis.get().feature.scar, - findAnalysis.get().feature.mole, - findAnalysis.get().feature.freckles, - findAnalysis.get().feature.spots, - findAnalysis.get().feature.tattoo, - findAnalysis.get().feature.makeup, - findAnalysis.get().feature.description, - ) - val impression = ImpressionResponseDto( - findAnalysis.get().impression.type - ) - - return AnalysisHistoryResponseDto( - face, - hairstyle, - eyebrows, - eyes, - nose, - mouth, - wrinkle, - feature, - impression, - findAnalysis.get().age, - findAnalysis.get().gender - ) - - } - throw IllegalArgumentException("존재하지 않는 분석입니다.") - } - - @Transactional - fun historyDeleteById(id: Long, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity { - - analysisRepository.deleteAnalysisById(id) - - val message = Message(ResponseType.OK,"성공입니다.") - return responseEntityService.createResponseEntity(message, HttpStatus.OK) - } + fun historyDeleteById(id: Long, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity } \ No newline at end of file diff --git a/src/main/kotlin/com/facegram/facegrambackend/service/history/HistoryServiceImpl.kt b/src/main/kotlin/com/facegram/facegrambackend/service/history/HistoryServiceImpl.kt new file mode 100644 index 0000000..c492852 --- /dev/null +++ b/src/main/kotlin/com/facegram/facegrambackend/service/history/HistoryServiceImpl.kt @@ -0,0 +1,158 @@ +package com.facegram.facegrambackend.service.history + +import com.facegram.facegrambackend.domain.analyze.Analysis +import com.facegram.facegrambackend.domain.analyze.AnalysisRepository +import com.facegram.facegrambackend.domain.user.User +import com.facegram.facegrambackend.domain.user.UserRepository +import com.facegram.facegrambackend.dto.response.Message +import com.facegram.facegrambackend.dto.response.ResponseType +import com.facegram.facegrambackend.dto.response.history.analysishistory.AnalysisHistoryResponseDto +import com.facegram.facegrambackend.dto.response.history.analysishistory.analysisstatus.* +import com.facegram.facegrambackend.dto.response.history.userhistory.UserHistoryAnalysisDto +import com.facegram.facegrambackend.service.responseentity.ResponseEntityService +import lombok.extern.slf4j.Slf4j +import org.springframework.http.HttpStatus +import org.springframework.http.ResponseEntity +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional +import java.util.Optional +import javax.servlet.http.HttpServletRequest +import javax.servlet.http.HttpServletResponse +import kotlin.IllegalArgumentException + +@Slf4j +@Service +class HistoryServiceImpl + constructor( + private val analysisRepository: AnalysisRepository, + private val userRepository: UserRepository, + private val responseEntityService: ResponseEntityService + ): HistoryService { + + @Transactional + override fun historySearchByUser(userId: Long) + : MutableList{ + val history: MutableList = mutableListOf() + val findUser: Optional = userRepository.findById(userId) + if(findUser.isPresent){ + val userAnalysisHistory: List = analysisRepository.findAllByUser(findUser.get()) + userAnalysisHistory.forEach { + analysis -> + history.add( + UserHistoryAnalysisDto( + analysis.id, + analysis.image, + analysis.createdAt) + ) + } + return history + } + + throw IllegalArgumentException("유저를 찾지 못했습니다.") + } + + @Transactional + override fun historySearchById(id: Long): AnalysisHistoryResponseDto{ + val findAnalysis:Optional = analysisRepository.findById(id) + if (findAnalysis.isPresent){ + generateHistoryResponse(findAnalysis) + } + throw IllegalArgumentException("존재하지 않는 분석입니다.") + } + + @Transactional + override fun historyDeleteById(id: Long, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity { + analysisRepository.deleteAnalysisById(id) + val message = Message(ResponseType.OK,"성공입니다.") + return responseEntityService.createResponseEntity(message, HttpStatus.OK) + } + + + private fun generateHistoryResponse(findAnalysis: Optional) + : AnalysisHistoryResponseDto{ + val face = FaceResponseDto( + findAnalysis.get().face.type, + findAnalysis.get().face.size, + findAnalysis.get().face.foreheadType, + findAnalysis.get().face.foreheadSize, + findAnalysis.get().face.chinType, + findAnalysis.get().face.chinSize, + findAnalysis.get().face.cheek, + ) + val hairstyle = HairstyleResponseDto( + findAnalysis.get().hairstyle.type, + findAnalysis.get().hairstyle.topLength, + findAnalysis.get().hairstyle.sizeLength, + findAnalysis.get().hairstyle.part + ) + val eyebrows = EyebrowsResponseDto( + findAnalysis.get().eyebrows.type, + findAnalysis.get().eyebrows.deep, + findAnalysis.get().eyebrows.length, + findAnalysis.get().eyebrows.thick, + findAnalysis.get().eyebrows.glabella, + ) + val eyes = EyesResponseDto( + findAnalysis.get().eyes.type, + findAnalysis.get().eyes.size, + findAnalysis.get().eyes.distance, + findAnalysis.get().eyes.slant, + findAnalysis.get().eyes.shape, + findAnalysis.get().eyes.eyeLids, + findAnalysis.get().eyes.bottom, + ) + val nose = NoseResponseDto( + findAnalysis.get().nose.size, + findAnalysis.get().nose.length, + findAnalysis.get().nose.heights, + findAnalysis.get().nose.top, + findAnalysis.get().nose.noseTrills, + findAnalysis.get().nose.philtrum, + ) + val mouth = MouthResponseDto( + findAnalysis.get().mouth.type, + findAnalysis.get().mouth.size, + findAnalysis.get().mouth.thick, + findAnalysis.get().mouth.ratio, + findAnalysis.get().mouth.side, + findAnalysis.get().mouth.line, + ) + val wrinkle = WrinkleResponseDto( + findAnalysis.get().wrinkle.forehead, + findAnalysis.get().wrinkle.glabella, + findAnalysis.get().wrinkle.eyes, + findAnalysis.get().wrinkle.mouth, + findAnalysis.get().wrinkle.cheek, + findAnalysis.get().wrinkle.lip, + ) + val feature = FeatureResponseDto( + findAnalysis.get().feature.mustache, + findAnalysis.get().feature.sideburns, + findAnalysis.get().feature.dimple, + findAnalysis.get().feature.scar, + findAnalysis.get().feature.mole, + findAnalysis.get().feature.freckles, + findAnalysis.get().feature.spots, + findAnalysis.get().feature.tattoo, + findAnalysis.get().feature.makeup, + findAnalysis.get().feature.description, + ) + val impression = ImpressionResponseDto( + findAnalysis.get().impression.type + ) + + return AnalysisHistoryResponseDto( + face, + hairstyle, + eyebrows, + eyes, + nose, + mouth, + wrinkle, + feature, + impression, + findAnalysis.get().age, + findAnalysis.get().gender + ) + } +} \ No newline at end of file diff --git a/src/test/kotlin/com/facegram/facegrambackend/service/history/HistoryServiceTest.kt b/src/test/kotlin/com/facegram/facegrambackend/service/history/HistoryServiceImplTest.kt similarity index 81% rename from src/test/kotlin/com/facegram/facegrambackend/service/history/HistoryServiceTest.kt rename to src/test/kotlin/com/facegram/facegrambackend/service/history/HistoryServiceImplTest.kt index 4fa4cab..b507bba 100644 --- a/src/test/kotlin/com/facegram/facegrambackend/service/history/HistoryServiceTest.kt +++ b/src/test/kotlin/com/facegram/facegrambackend/service/history/HistoryServiceImplTest.kt @@ -4,23 +4,19 @@ import com.facegram.facegrambackend.domain.analyze.AnalysisRepository import com.facegram.facegrambackend.domain.user.User import com.facegram.facegrambackend.domain.user.UserRepository import com.facegram.facegrambackend.domain.user.UserRole -import com.facegram.facegrambackend.dto.response.history.analysishistory.AnalysisHistoryResponseDto import com.facegram.facegrambackend.security.oauth2.user.AuthProvider import com.facegram.facegrambackend.service.responseentity.ResponseEntityService -import org.assertj.core.api.Assertions import org.assertj.core.api.Assertions.* -import org.junit.jupiter.api.AfterAll -import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test import org.springframework.boot.test.context.SpringBootTest import java.util.* @SpringBootTest -class HistoryServiceTest constructor( +class HistoryServiceImplTest constructor( private val analysisRepository: AnalysisRepository, private val userRepository: UserRepository, private val responseEntityService: ResponseEntityService, - private val historyService: HistoryService + private val historyServiceImpl: HistoryServiceImpl ){ @@ -40,7 +36,7 @@ class HistoryServiceTest constructor( ) userRepository.save(testUser) // when - val historySearchByUser = historyService.historySearchByUser(randomNumber) + val historySearchByUser = historyServiceImpl.historySearchByUser(randomNumber) // then assertThat(historySearchByUser.size).isEqualTo(0)