Skip to content

설문조사 수정 API 추가 #128

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

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open

Conversation

sksk713
Copy link
Contributor

@sksk713 sksk713 commented Apr 5, 2025

Goal

설문조사 수정 API를 추가합니다.

Description

ItemOption에 대한 업데이트는 아직 구현이 덜 된 상태라 제외하고 일단 작업된 부분까지 올립니다.

아래와 같은 과정으로 진행되도록 작업했습니다.

  1. 설문조사 제목, 설명 업데이트
  2. 기존 항목과 요청 항목 비교
  3. 요청에 없는 기존 항목은 논리적 삭제
  4. 새 항목 추가
  5. 기존 항목 업데이트
  6. 선택형 항목의 사용하지 않는 옵션 논리적 삭제 TODO
  7. 선택형 항목 의 새 옵션 추가 TODO
  8. 선택형 항목 의 기존 옵션 업데이트 TODO

Question

도메인과 엔티티가 분리된 상태에서의 과정에 대한 궁금증이 있습니다.
예를 들어, 레이어드 아키텍처에서는 Entity를 불러와서 해당 Entity내에 update 로직을 호출하고 더티체킹으로 업데이트 진행시키는게 일반적인 거 같은데, 도메인과 엔티티가 분리되어 있을 때 도메인 비즈니스 로직을 최대한 사용하려고 했는데 고민되는 상황이 있습니다.

설문조사 업데이트 진행 시

레이어드인 경우 조회 후 변경이라는 간단한 과정이라고 보면, 도메인과 인프라가 분리되어 있을 때는 추가로 도메인 <-> 엔티티 변환과정이 추가되고 도메인 비즈니스 로직을 사용하기 위해 아래처럼 인프라에서 굳이 또 엔티티를 불러오는 추가적인 로직들이 발생을 하는데요. 그렇다고 도메인 레이어에서 비즈니스 로직을 사용하지 않고 surveyRepository로 바로 파라미터 넘겨버리면 DDD가 아니게 되는 느낌이기도 하구요. 보통 어떻게 진행하시나요?

fun updateSurvey(
        surveyId: Long,
        title: String,
        description: String,
    ) {
        val survey =
            surveyRepository.findById(surveyId)
                ?: throw IllegalArgumentException("설문조사를 찾을 수 없습니다.")

        survey.update(title, description)

        surveyRepository.save(survey)
    }

override fun save(survey: Survey): Long {
        return surveyJpaRepository.save(survey.toEntity()).id
        val entityToSave =
            if (survey.id > 0) {
                val existingEntity =
                    surveyJpaRepository.findByIdOrNull(survey.id)
                        ?: throw IllegalArgumentException("업데이트할 설문조사가 없습니다")

                existingEntity.updateFromDomain(survey.title, survey.description)
                existingEntity
            } else {
                survey.toEntity()
            }
        return surveyJpaRepository.save(entityToSave).id
    }

@sksk713 sksk713 requested a review from heli-os April 5, 2025 01:14
@sksk713 sksk713 self-assigned this Apr 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant