Skip to content

Commit

Permalink
Merge Develop To Main (#261)
Browse files Browse the repository at this point in the history
* feat: remove forward header optiion

* refactor : birth 관련 유저 정보 업데이트 API에 birth를 nullable로 변경 (#206) (#207)

* feat(#209): spring security authorization_request_not_found 수정 (#210)

* [🌎 Feature] Goal 댓글 API 개발 (#208)

* feat : 댓글 엔티티와 repository 생성 (#196)

* feat : Goal 댓글 오름차순 전체 조회 메서드 구현 (#196)

* feat : Goal 댓글 작성 삭제 메서드 구현 (#196)

* feat : Goal의 마지막 댓글 Read 시간을 저장하는 GoalCommentReadTime 구현 (#196)

* feat : Goal의 생성자가 읽지 않은 댓글이 있는지 확인하는 메서드 구현 (#196)

* feat : 비동기적으로 마지막 댓글 확인 시간을 update하는 메서드 구현 (#196)

* ktlint formatting

* refactor : 마지막 댓글 Read 시간을 분리된 테이블이 아닌 Goal이 갖도록 변경 (#196)

* feat : 댓글 조회시 요청자가 Goal의 주인이라면 comment read time을 update하는 이벤트 발행 (#196)

* test : Goal 필드 추가에 따른 테스트 코드 변경 (#196)

* refactor : CoreApiException이 직접 errorMessage를 입력 받을 수 있도록 변경 (#196)

* refactor : Comment가 스스로 제한 조건을 검증하도록 변경 (#196)

* refactor : CommentService의 필드들에 private 접근 제한자 추가 (#196)

* refactor : comment require 조건 정정 (#196)

* refactor : 불필요한 트랜잭션 전파 및 Transactional 이벤트 리스너 제거 (#196)

* refactor : 불필요한 Goal 조회 쿼리 제거 (#196)

* test : Comment 관련 기능 통합 테스트 코드 작성 (#196)

* ktlint formatting

* refactor : getAllByGoalId 메서드의 이름을 역할에 맞게 findAllByGoalId로 변경 (#196)

* feat : 댓글 API 구현 (#196)

* chore : 잘못 작성된 메서드 이름 변경 (#196)

* refactor : DTO 패키지 변경 (#196)

* refactor : comments에서 goal을 꺼낼 때, first 메서드 활용 (#196)

* refactor : 불필요한 @async 어노테이션 제거 (#196)

* refactor : findAllByGoalId 가독성 개선 (#196)

* refactor : Emoji API Restful하게 개선 (#196) (#215)

* [🚌 Issue ] Emoji Count 작업 및 Count 관련 로직 개선 (#213)

* refactor(#211): count관련 eventListener 단일 component화

* feat(#211): emoji count 테이블 추가 및 count관련 event application lock 적용

* feat(#211): add goal count event에 exclusive runner 적용

* refactor: event 같은 패키지로 이동

* feat: lock 적용 시점 비동기 이벤트 실행 Thread로 변경

* refactor: event 네이밍 컨벤션 적용

* fix: key에 매핑된 lock 대기 thread가 없다면 map에서 제거

* [🚌 Issue] 리팩토링 이슈 템플릿 세팅 (#220)

* chore : 리팩토링 이슈 템플릿 세팅

* chore : 기타-이슈 기본 생성 제목에 불필요한 띄어쓰기 제거

* [🛠️ Refactor] Goal Emoji API 응답에 "이모지를 누른 사람 수" 추가 (#221)

* refactor : Goal에 반응 조회 API에 반응한 사람 수 값 추가 (#218)

* test : Goal 반응 조회 API 반응한 사람 수 값이 정확한지 확인하는 테스트 작성 (#218)

* [🛠️ Refactor] IsMyReaction을 확인할 때 Username이 아닌 id로 확인하기 (#219)

* refactor : IsMyReaction을 확인할 때 Username이 아닌 id로 확인하도록 변경 (#217)

* merge with develop

* [🆘 Bug] authorization_request_not_found 오류 (#216)

* feat(#209): spring security authorization_request_not_found 수정

* fix: AuthorizationRequestRepository cookie 기반에서 state parameter 기반으로 변경

* fix: AuthorizationRequestRepository remove 메서드에 명시적인 삭제 추가

* fix: AuthorizationRequestRepository oauthRequestStorage 데이터 명시적 삭제 로직 제거

* refact(#171): add emoji count

* feat(#171): 피드에 이모지및 내가 누른 이모지 추가

* chore(#171): ktlint

* chore(#171): 사용하지 않는 코드 삭제

* chore(#171): ktlint

* [🛠️ Refactor] 댓글 응답에 댓글 갯수 추가  (#225)

* refactor : Goal에 달린 댓글 응답에 댓글 갯수 추가 (#224)

* test : Goal에 달린 댓글 응답이 댓글 갯수를 반환하는 것을 확인하는 테스트 코드 작성 (#224)

* ktlint formatting

* refact(#171): edit field name

* [🛠️ Refactor] RunnerLock 필드 변수명 변경 �+ Security Uri 상수화 + H2 웹 콘솔용 WebSecurityCustomizer 제거 (#226)

* refactor: RunnerLock 내부 필드 변수명 변경

* refactor: security permitall uri 상수화

* [🛠️ Refactor] 댓글 조회 API 응답에 "내 지도 확인" key-value 추가 (#230)

* refactor : CommentsResponse에 자신의 목표인지 확인하는 isMyGoal 필드 추가 (#229)

* test : CommentsResponse를 통해 자신의 목표인지 확인할 수 있는지 검증하는 테스트 코드 작성 (#229)

* feat(#232): add title field

* [🛠️ Refactor] 프로젝트 구조 변경 (1번, 3번 제안만 변경) (#234)

* refactor(#235): pagination 공통화 + cheering squad 공통 pagination 적용

* [🛠️ Refactor] 잘못 작성된 읽지 않은 댓글 조회 쿼리 올바르게 정정 (#237)

* refactor : CommentsResponse에 자신의 목표인지 확인하는 isMyGoal 필드 추가 (#229)

* test : CommentsResponse를 통해 자신의 목표인지 확인할 수 있는지 검증하는 테스트 코드 작성 (#229)

* refactor : exist new comment 쿼리를 id와 시간으로 검색하도록 변경 (#236)

* refactor : 쿼리가 Goal Id를 사용하도록 변경 (#236)

* test : 본인의 Goal만 조회하는지 검증하는 테스트 추가 작성 (#236)

* feat: pagination 공통 response 추가 + cheering squad 조회를 위한 queryRepository 추가

* feat(#235): comment count 엔티티 추가 + comment create/delete event 생성

* feat(#235): 목표 타임라인 페이징 조회 API 작업

* fix: dev 환경 로그인 callback 시  redirect uri 변경

* chore: apply lint

* refactor: CheererRepository 미사용 메서드 제거

* refactor: TriFunction @FunctionalInterface 적용

* refactor(#235): PR 코멘트 반영

* [🌎 Feature] 타임 라인용 목표 조회 API 개발 (#240)

* refactor(#235): pagination 공통화 + cheering squad 공통 pagination 적용

* feat: pagination 공통 response 추가 + cheering squad 조회를 위한 queryRepository 추가

* feat(#235): comment count 엔티티 추가 + comment create/delete event 생성

* feat(#235): 목표 타임라인 페이징 조회 API 작업

* fix: dev 환경 로그인 callback 시  redirect uri 변경

* chore: apply lint

* refactor: CheererRepository 미사용 메서드 제거

* refactor: TriFunction @FunctionalInterface 적용

* refactor(#235): PR 코멘트 반영

* hotfix(#235): 타인 타임라인 조회 API 추가

* chore: apply klint

* [🛠️ Refactor] 타임 라인 API 작업 리팩토링 (#241)

* delete: 유저 정보를 활용한 타임라인 조회 API 삭제

* refactor: PaginationResult.transform() 사용 방식 lamda 형태로 통일

* refactor: 메서드 로직에 따라 get, find 명칭 구분

* refactor: lamda body 내 생략 가능한 parameter 생략

* refactor: 메서드명 내 부정확한 단어 제거(findGoalTimelineCountMap -> findGoalCountMap)

* refactor: associateWith 메서드 활용

* refactor: PaginationResult total값 Long으로 다시 변경

* hotfix: dev login redirect url 수정

* hotfix: login redirect url referer 기준 분기 처리

* hotfix: login redirect url referer 기준 분기 처리 조건 추가

* hotfix: login redirect url referer 기준 분기 처리 제거

* [🌎 Feature] 타임 라인용 목표 조회 API 개발 - Cursor Deadline으로 변경 (#242)

* delete: 유저 정보를 활용한 타임라인 조회 API 삭제

* refactor: PaginationResult.transform() 사용 방식 lamda 형태로 통일

* refactor: 메서드 로직에 따라 get, find 명칭 구분

* refactor: lamda body 내 생략 가능한 parameter 생략

* refactor: 메서드명 내 부정확한 단어 제거(findGoalTimelineCountMap -> findGoalCountMap)

* refactor: associateWith 메서드 활용

* refactor: PaginationResult total값 Long으로 다시 변경

* fix: 목표 피드 조회 API deadline 역순으로 정렬 조회

* chore: apply lint

* fix: goals 테이블의 index 수정

* refactor: pagination cusorId type Any -> Generic으로 변경

* [🌎 Feature] 타임 라인용 목표 조회 API 개발 - Pagination 방식 offset 기반으로 변경 (#243)

* delete: 유저 정보를 활용한 타임라인 조회 API 삭제

* refactor: PaginationResult.transform() 사용 방식 lamda 형태로 통일

* refactor: 메서드 로직에 따라 get, find 명칭 구분

* refactor: lamda body 내 생략 가능한 parameter 생략

* refactor: 메서드명 내 부정확한 단어 제거(findGoalTimelineCountMap -> findGoalCountMap)

* refactor: associateWith 메서드 활용

* refactor: PaginationResult total값 Long으로 다시 변경

* fix: 목표 피드 조회 API deadline 역순으로 정렬 조회

* chore: apply lint

* fix: goals 테이블의 index 수정

* refactor: pagination cusorId type Any -> Generic으로 변경

* fix: 타임 라인 목표 조회 API paging 처리 방식 offset으로 변경

* refactor: cursor 기반 pagination 공통 모듈 cursor type long으로 통일

* refactor: pagination 공통 모듈 cursor와 offset 구분

* refactor: 미사용 코드 및 의미 없는 중복 코드 삭제

* hotfix: global exception config 내 NoSuchElementException 설정 수정

* [🚌 Issue] dev api 로그인 요청 위치에 따라 redirect url 변환 (#245)

* delete: 유저 정보를 활용한 타임라인 조회 API 삭제

* refactor: PaginationResult.transform() 사용 방식 lamda 형태로 통일

* refactor: 메서드 로직에 따라 get, find 명칭 구분

* refactor: lamda body 내 생략 가능한 parameter 생략

* refactor: 메서드명 내 부정확한 단어 제거(findGoalTimelineCountMap -> findGoalCountMap)

* refactor: associateWith 메서드 활용

* refactor: PaginationResult total값 Long으로 다시 변경

* fix: 목표 피드 조회 API deadline 역순으로 정렬 조회

* chore: apply lint

* fix: goals 테이블의 index 수정

* refactor: pagination cusorId type Any -> Generic으로 변경

* fix: 타임 라인 목표 조회 API paging 처리 방식 offset으로 변경

* refactor: cursor 기반 pagination 공통 모듈 cursor type long으로 통일

* refactor: pagination 공통 모듈 cursor와 offset 구분

* feat(#244): dev api 로그인 요청 위치에 따라 redirect url 변환

* chore: apply lint

* fix: @value(spring.profiles.active) default값 추가

* refactor: 코드 리뷰 반영(#245)

* chore: encrypt하던 데이터 삭제

* chore: encrypted test properties 삭제

* chore: referer 저장/조회 logging 추가

* chore: logging 제거

* fix: getReferer 메서드 referer값 null일 경우 Empty String 반환

* [🆘 Bug] 타임라인 관련 버그 수정 (#248)

* fix: timeline 조회 시 목표 없으면 early return

* feat: 유저정보 기반 타임 라인 조회 API 작업

* fix: 목표 삭제 시 LifeMapCount goalCount 필드 -1 처리

* refactor: timeline 조회 api 내 목표 개수 조회 쿼리 변경

* feat(#171): edit comment count

* chore: ktlint

* refactor : Comment와 Emoji에 Goal Delete Casacade 속성 추가 (#246) (#249)

* refactor : 자신의 Goal에 달린 Comment 삭제를 허용하도록 변경 (#251) (#252)

* bug(#254): 타임라인 조회 API 내 코멘트 개수 조회 쿼리 오류 수정

* feat : 이모지 추가 전에 같은 이모지가 존재하는지 확인하는 메서드 작성 (#253) (#256)

* refactor : 모든 Emoji 조회 API에서 일관되게 Emoji id 순서로 정렬해 응답하도록 변경 (#257)

* refactor : 불필요한 정렬 제거 - MySQL Clustered Index로 인해 이미 pk 정렬 되어 있다 (#257)

* fix : 피드 조회 (#259)

* feat(#171): 목표 생성시 기본 댓글 개수 추가

* chore(#171): ktlint

* feat(#171): 기본 카운트 추가

* chore: ktlint

* refact(#171): 변수 삭제

---------

Co-authored-by: ManHyuk <[email protected]>
Co-authored-by: binary_ho <[email protected]>
  • Loading branch information
3 people authored Apr 26, 2024
1 parent 72425c5 commit f201076
Show file tree
Hide file tree
Showing 202 changed files with 2,560 additions and 845 deletions.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/🚌-기타-이슈.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: "\U0001F68C 기타 이슈"
about: 기타 작업을 위한 이슈 템플릿
title: "[\U0001F68C Issue ] 작업 내용"
title: "[\U0001F68C Issue] 작업 내용"
labels: ''
assignees: ''

Expand Down
19 changes: 19 additions & 0 deletions .github/ISSUE_TEMPLATE/🛠️-리팩토링.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
name: "\U0001F6E0️ 리팩토링"
about: 리팩토링을 위한 이슈 템플릿
title: "[\U0001F6E0️ Refactor] "
labels: refactor
assignees: ''

---

## 변경할 내용
- 변경 동기와 내용을 정의해주세요
- As-Is와 To-Be를 설명해주세요

## 할 일
- [ ] 작업1
- [ ] 작업2

## 작업 완료 예정일
- 0000.00.00 00시 00분
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler
import org.springframework.web.bind.annotation.RestControllerAdvice

@RestControllerAdvice
class GlobalExceptionHandler {
class GlobalExceptionConfig {
private val log: Logger = LoggerFactory.getLogger(javaClass)

@ExceptionHandler(CoreApiException::class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
class SpringdocConfig {
class SpringDocsConfig {

@Value("\${springdoc.server.url}")
private lateinit var url: String
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.raemian.admin.dashboard

import io.raemian.admin.dashboard.controller.response.DashboardResponse
import io.raemian.admin.dashboard.model.DashboardResult
import io.raemian.admin.dashboard.service.DashboardService
import io.raemian.admin.support.response.ApiResponse
import io.swagger.v3.oas.annotations.Operation
import org.springframework.http.ResponseEntity
Expand All @@ -15,6 +16,6 @@ class DashboardController(
) {
@Operation(summary = "대시보드 통계 데이터 조회 API")
@GetMapping
fun findAll(): ResponseEntity<ApiResponse<DashboardResponse>> =
fun findAll(): ResponseEntity<ApiResponse<DashboardResult>> =
ResponseEntity.ok(ApiResponse.success(dashboardService.getDashBoard()))
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.raemian.admin.dashboard.dto
package io.raemian.admin.dashboard.model

data class ActiveUserStatics(
val perTodayPercent: Double,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package io.raemian.admin.dashboard.model

data class DashboardResult(
val userStatics: UserStatics,
val goalStatics: GoalStatics,
val taskStatics: TaskStatics,
val activeUserStatics: ActiveUserStatics,
) {
companion object {
fun from(
userStatics: UserStatics,
goalStatics: GoalStatics,
taskStatics: TaskStatics,
activeUserStatics: ActiveUserStatics,
): DashboardResult {
return DashboardResult(userStatics, goalStatics, taskStatics, activeUserStatics)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.raemian.admin.dashboard.dto
package io.raemian.admin.dashboard.model

data class GoalStatics(
val total: Long,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.raemian.admin.dashboard.dto
package io.raemian.admin.dashboard.model

data class TaskStatics(
val total: Long,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.raemian.admin.dashboard.dto
package io.raemian.admin.dashboard.model

data class UserStatics(
val total: Long,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package io.raemian.admin.dashboard
package io.raemian.admin.dashboard.service

import io.raemian.admin.dashboard.controller.response.DashboardResponse
import io.raemian.admin.dashboard.dto.ActiveUserStatics
import io.raemian.admin.dashboard.dto.GoalStatics
import io.raemian.admin.dashboard.dto.TaskStatics
import io.raemian.admin.dashboard.dto.UserStatics
import io.raemian.admin.dashboard.model.ActiveUserStatics
import io.raemian.admin.dashboard.model.DashboardResult
import io.raemian.admin.dashboard.model.GoalStatics
import io.raemian.admin.dashboard.model.TaskStatics
import io.raemian.admin.dashboard.model.UserStatics
import io.raemian.storage.db.core.goal.Goal
import io.raemian.storage.db.core.goal.GoalRepository
import io.raemian.storage.db.core.log.UserLoginLogRepository
Expand All @@ -26,8 +26,8 @@ class DashboardService(
) {

@Transactional(readOnly = true)
fun getDashBoard(): DashboardResponse {
return DashboardResponse.from(
fun getDashBoard(): DashboardResult {
return DashboardResult.from(
getUserStatics(),
getGoalStatics(),
getTaskStatics(),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package io.raemian.admin.emoji.controller

import io.raemian.admin.emoji.EmojiService
import io.raemian.admin.emoji.controller.request.CreateEmojiRequest
import io.raemian.admin.emoji.controller.request.UpdateEmojiRequest
import io.raemian.admin.emoji.controller.response.EmojiResponse
import io.raemian.admin.emoji.model.EmojiResult
import io.raemian.admin.emoji.service.EmojiService
import io.raemian.admin.support.response.ApiResponse
import io.swagger.v3.oas.annotations.Operation
import org.springframework.http.MediaType
Expand All @@ -30,7 +30,7 @@ class EmojiController(
@PostMapping(consumes = arrayOf(MediaType.MULTIPART_FORM_DATA_VALUE), produces = arrayOf(MediaType.APPLICATION_JSON_VALUE))
fun create(
@ModelAttribute createEmojiRequest: CreateEmojiRequest,
): ResponseEntity<ApiResponse<EmojiResponse>> {
): ResponseEntity<ApiResponse<EmojiResult>> {
val response = emojiService.create(createEmojiRequest)

return ResponseEntity
Expand All @@ -40,12 +40,12 @@ class EmojiController(

@Operation(summary = "이모지 전체 조회 API")
@GetMapping
fun findAll(): ResponseEntity<ApiResponse<List<EmojiResponse>>> =
fun findAll(): ResponseEntity<ApiResponse<List<EmojiResult>>> =
ResponseEntity.ok(ApiResponse.success(emojiService.findAll()))

@Operation(summary = "이모지 단건 조회 API")
@GetMapping("/{emojiId}")
fun find(@PathVariable emojiId: Long): ResponseEntity<ApiResponse<EmojiResponse>> =
fun find(@PathVariable emojiId: Long): ResponseEntity<ApiResponse<EmojiResult>> =
ResponseEntity.ok(ApiResponse.success(emojiService.find(emojiId)))

@Operation(summary = "이모지 수정 API")
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package io.raemian.admin.emoji.model

import io.raemian.storage.db.core.emoji.Emoji

data class EmojiResult(
val id: Long?,
val name: String,
val url: String,
) {

companion object {
fun from(emoji: Emoji): EmojiResult {
return EmojiResult(emoji.id, emoji.name, emoji.url)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.raemian.admin.emoji
package io.raemian.admin.emoji.service

import io.raemian.admin.emoji.controller.request.CreateEmojiRequest
import io.raemian.admin.emoji.controller.request.UpdateEmojiRequest
import io.raemian.admin.emoji.controller.response.EmojiResponse
import io.raemian.admin.emoji.model.EmojiResult
import io.raemian.admin.support.error.CoreApiException
import io.raemian.admin.support.error.ErrorType
import io.raemian.image.enums.FileExtensionType
Expand All @@ -22,7 +22,7 @@ class EmojiService(
@Transactional
fun create(
createEmojiRequest: CreateEmojiRequest,
): EmojiResponse {
): EmojiResult {
val fileName = createEmojiRequest.image.originalFilename
validateFileName(fileName)

Expand All @@ -33,22 +33,22 @@ class EmojiService(
)

val emoji = Emoji(createEmojiRequest.name, url)
return EmojiResponse.from(emojiRepository.save(emoji))
return EmojiResult.from(emojiRepository.save(emoji))
}

@Transactional(readOnly = true)
fun findAll(): List<EmojiResponse> =
emojiRepository.findAll().map(EmojiResponse::from)
fun findAll(): List<EmojiResult> =
emojiRepository.findAll().map(EmojiResult::from)

@Transactional(readOnly = true)
fun find(emojiId: Long): EmojiResponse =
EmojiResponse.from(emojiRepository.getById(emojiId))
fun find(emojiId: Long): EmojiResult =
EmojiResult.from(emojiRepository.getById(emojiId))

@Transactional
fun update(
emojiId: Long,
updateEmojiRequest: UpdateEmojiRequest,
): EmojiResponse {
): EmojiResult {
val newFileName = updateEmojiRequest.image.originalFilename
validateFileName(newFileName)

Expand All @@ -61,7 +61,7 @@ class EmojiService(
)

emoji.updateNameAndUrl(updateEmojiRequest.name, url)
return EmojiResponse.from(emojiRepository.save(emoji))
return EmojiResult.from(emojiRepository.save(emoji))
}

@Transactional
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.raemian.admin.lifemap.controller

import io.raemian.admin.lifemap.LifeMapService
import io.raemian.admin.lifemap.controller.response.LifeMapResponse
import io.raemian.admin.lifemap.model.LifeMapResult
import io.raemian.admin.lifemap.service.LifeMapService
import io.raemian.admin.support.response.ApiResponse
import io.swagger.v3.oas.annotations.Operation
import org.springframework.http.ResponseEntity
Expand All @@ -17,6 +17,6 @@ class LifeMapController(
) {
@Operation(summary = "유저 인생 지도 조회 API")
@GetMapping
fun findAllByUsername(@RequestParam userId: Long): ResponseEntity<ApiResponse<LifeMapResponse>> =
fun findAllByUsername(@RequestParam userId: Long): ResponseEntity<ApiResponse<LifeMapResult>> =
ResponseEntity.ok(ApiResponse.success(lifeMapService.findByUserId(userId)))
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package io.raemian.admin.lifemap.controller.response
package io.raemian.admin.lifemap.model

import io.raemian.storage.db.core.goal.Goal
import io.raemian.storage.db.core.tag.Tag
import io.raemian.storage.db.core.task.Task

data class GoalResponse(
data class GoalResult(
val title: String,
val description: String,
val deadline: String,
Expand All @@ -19,7 +19,7 @@ data class GoalResponse(
goal.deadline.toString(),
goal.sticker.url,
TagInfo(goal.tag),
goal.tasks.map(::TaskInfo),
goal.tasks.map(GoalResult::TaskInfo),
)

data class TagInfo(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package io.raemian.admin.lifemap.controller.response
package io.raemian.admin.lifemap.model

import io.raemian.storage.db.core.lifemap.LifeMap

data class LifeMapResponse(
data class LifeMapResult(
val id: Long,
val isPublic: Boolean,
val goals: List<GoalResponse>,
val goals: List<GoalResult>,
val goalsCount: Int,
val viewCount: Long,
val cheeringCount: Long,
) {
constructor(lifeMap: LifeMap, lifeMapCount: Long, cheeringCount: Long) : this(
id = lifeMap.id!!,
isPublic = lifeMap.isPublic,
goals = lifeMap.goals.map(::GoalResponse),
goals = lifeMap.goals.map(::GoalResult),
goalsCount = lifeMap.goals.size,
viewCount = lifeMapCount,
cheeringCount = cheeringCount,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.raemian.admin.lifemap
package io.raemian.admin.lifemap.service

import io.raemian.admin.lifemap.controller.response.LifeMapResponse
import io.raemian.admin.lifemap.model.LifeMapResult
import io.raemian.storage.db.core.cheer.CheeringRepository
import io.raemian.storage.db.core.lifemap.LifeMapCountRepository
import io.raemian.storage.db.core.lifemap.LifeMapRepository
Expand All @@ -14,7 +14,7 @@ class LifeMapService(
private val lifeMapCountRepository: LifeMapCountRepository,
) {
@Transactional(readOnly = true)
fun findByUserId(userId: Long): LifeMapResponse {
fun findByUserId(userId: Long): LifeMapResult {
val lifeMap = lifeMapRepository.findFirstByUserId(userId)
?: throw NoSuchElementException("존재하지 않는 유저입니다. $userId")

Expand All @@ -24,7 +24,7 @@ class LifeMapService(

val cheeringCount = getCheeringCount(lifeMap.id!!)

return LifeMapResponse(lifeMap, viewCount, cheeringCount)
return LifeMapResult(lifeMap, viewCount, cheeringCount)
}

@Transactional(readOnly = true)
Expand Down
Loading

0 comments on commit f201076

Please sign in to comment.