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

feat: HOUSEWORK INFO 수정 API 구현 #105

Closed
2 tasks
jusung-c opened this issue Nov 6, 2023 · 11 comments · Fixed by #117
Closed
2 tasks

feat: HOUSEWORK INFO 수정 API 구현 #105

jusung-c opened this issue Nov 6, 2023 · 11 comments · Fixed by #117
Labels
feat 기능 개발 🥸 이주성 (진행중) 진행중인 이슈 or Pull request

Comments

@jusung-c
Copy link
Collaborator

jusung-c commented Nov 6, 2023

  • 집안일 수정 API 구현

    • 단건 -> 비단건
    • 비단건 -> 단건
    • 비단건 -> 비단건
  • 집안일 수정 API Test

@jusung-c jusung-c added feat 기능 개발 🥸 이주성 (진행중) 진행중인 이슈 or Pull request labels Nov 6, 2023
@jusung-c
Copy link
Collaborator Author

jusung-c commented Nov 10, 2023

HOUSEWORK INFO 수정 가능한 필드

  • 집안일 담당자
    • OneToMany
    • List
  • 집안일 카테고리
    • ManyToOne
    • HouseworkCategory
  • 집안일 제목
  • 집안일 내용
  • 집안일 주기 타입
  • dayDate
  • weekDate
  • monthDate
  • 집안일 마감시간

API 시나리오

프론트

  1. 수정할 정보들 입력 후 수정 버튼 클릭

  2. HouseworkInfo Update API 호출

    • PathVariable로 groupId를 넣어줌
    • 입력한 데이터를 JSON으로 RequestBody에 넣음
    {
      "groupMemberIdList": ["1", "2", "3"],
      "houseworkCategory": "CLEANING",
      "title": "Clean the living room",
      "detail": "Dust, vacuum, and mop the living room.",
      "type": "HOUSEWORK_PERIOD_DAY",    
      "dayDate": "2023-11-10",
    	"weekDate": null,
    	"monthDate": null,
      "endTime": "18:00:00"
    }

백엔드

Controller

  • POST “/houseworkInfo/update/{groupId}”
  • 요청 JSON 데이터를 위한 DTO 필요
    • HouseworkAddRequestDTO
    • Requestbody로 받기
    • Valid로 유효성 검증
  • 요청자 인증을 위한 Authorization 헤더에 담긴 토큰 필요
    • RequestHeader로 받기
  • Authorization 토큰과 groupId로 Auth 서버에 인증 + 해당 그룹원이 맞는지 인증 요청

Service

  • 집안일 수정 권한이 있는지 확인
    • status: ACCEPT
    • role: GROUP_ADMIN
  • HouseworkPeriodType에 따른 처리
    • 단건 집안일 → 단건 집안일
      1. HouseTodo 수정 메소드 사용해 수정
      2. groupInfoId와 Date로 todoList를 조회 후 캐싱되어있다면, dirtyBit를 true로 체킹
    • 단건 집안일 → 단건 외 집안일
      1. HOUSEWORKTODO 삭제
      2. HouseworkInfo 저장 후 houseworkMember 담당자 지정
      3. 해당 그룹의 캐싱된 todoList 중 단건 외 타입을 필터링한 후 dirtyBit를 ture로 체킹
    • 단건 외 집안일 → 단건 집안일
      1. HouseworkInfo 삭제
      2. HouseworkTodo 생성
      3. groupInfoId와 Date로 todoList를 조회 후 캐싱되어있다면, dirtyBit를 true로 체킹
    • 단건 외 집안일 → 단건 외 집안일
      1. HouseworkInfo 수정 메소드 사용해 수정
      2. 해당 그룹의 캐싱된 todoList 중 단건 외 타입을 필터링한 후 dirtyBit를 ture로 체킹

@jusung-c
Copy link
Collaborator Author

jusung-c commented Nov 10, 2023

houseworkUpdate 001

쓰읍 이게 맞나 싶네요🥲

@ghdcksgml1
Copy link
Owner

단건 외 집안일 → 단건 집안일

이부분 HouseworkInfo 삭제하기 전에 기존 HouseworkTodo에 있던 의존성 다 끊어줘야합니다! null 값으로 대체

@jusung-c
Copy link
Collaborator Author

삭제 API와 동일하게 아래 과정 거치면 될까요?

  1. HouseworkMember 삭제
  2. HousewrokTodo 의존성 해제 후 DELETE 상태로 변환
  3. HouseworkInfo 삭제

@ghdcksgml1
Copy link
Owner

@jusung-c
Copy link
Collaborator Author

image
  • 카테고리, 담당자, 집안일 주기 정보 등을 내려줄 때 어떻게 내려줘야 할지에 대한 고민
    • 해당 카테고리만 내려주는 방법
      • 재사용할 수 있을지도?
      • 카테고리 목록 조회 API 호출 후 해당 카테고리 조회 API 호출 (2번 호출)
    • 모든 카테고리 목록을 내려준 후 check 필드 추가해서 내려주는 방법
      • 한번의 호출로 끝
      • 나중에 재사용 할 일 없을 듯

@ghdcksgml1
Copy link
Owner

HouseworkTodo 아이디를 받으면 Todo에 딸린 INFO를 조인해서 데이터를 가져오면 모든 데이터를 다 넣어줄 수 있지 않나요??

@ghdcksgml1
Copy link
Owner

API를 2개 만들어 호출하는 것보단, Service 로직을 분리시키는게 더 나아보여요

@jusung-c
Copy link
Collaborator Author

기존 Todo 최대한 사용해보려고 했는데 굳이 그럴 필요가 없겠네요 리뷰감사합니다 😀

@ghdcksgml1
Copy link
Owner

제 말이 100% 다 맞는건 아니라서 하고싶은대로 해봐도 상관없긴 합니다! ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

@jusung-c
Copy link
Collaborator Author

jusung-c commented Nov 18, 2023

API 시나리오

수정 화면 보여주기

프론트

  1. 수정 버튼 클릭
  2. HouseworkInfo Update API GET으로 호출
    • header: authorization
    • path: groupId
    • param: todoId

백엔드

Controller

  • GET “/housework/update/{groupId}”
  • 요청자 인증을 위한 Authorization 헤더에 담긴 토큰 필요
    • RequestHeader로 받기
  • Authorization 토큰과 groupId로 Auth 서버에 인증 + 해당 그룹원이 맞는지 인증 요청

Service

  • todoId를 이용해 HouseworkTodo 조회

    • HouseworkInfo 정보 필요하므로 fetch join
      • HouseworkInfo가 null인 경우(단건 집안일)도 조회해줘야 하기 때문에 left join 사용
  • 단건 집안일일 경우

    • HouseworkTodo 정보 내려줌
  • 비단건 집안일일 경우

    • HouseworkInfo 정보 내려줌
  • 내려줄 DTO : HouseworkUpdatePageResponse

image
  • String title
  • Long houseworkCategoryId
  • List<Long> groupMemberIdList
  • HouseworkPeriodType type
  • LocalDate dayDate
  • String weekDate
  • String monthDate
  • LocalTime endTime

수정 API 시나리오

프론트

  1. 수정 입력 폼 작성 후 수정 버튼 클릭
    • ${groupId}?todoId=${todoId}
    • body: 수정한 정보

Controller

  • POST “/housework/update/{groupId}”
  • @PathVariable로 groupId 받기
  • @RequestParam으로 todoId 받기
  • @RequestBody로 DTO 받기 → @Valid 검증 필요
  • Authorization 토큰과 groupId로 Auth 서버에 인증 + 해당 그룹원이 맞는지 인증 요청

Service

  • groupId, todoId, requestDTO 보유
  • todoId를 이용해 HouseworkTodo 조회
    • HouseworkInfo 정보 필요하므로 fetch join
      • HouseworkInfo가 null인 경우(단건 집안일)도 조회해줘야 하기 때문에 left join 사용
  • groupId를 이용해 GroupInfo 조회
  • PeriodType에 따른 처리 → 집안일 생성, 삭제와 반복되는 로직 많으므로 메서드화 시켜서 재사용하기
    • 단건 집안일
      • → 단건 집안일
        1. HouseworkTodo 수정 메소드 사용해 수정
        2. dirtyBit 체킹
          • 요청 날짜의 todoList
          • 수정 날짜의 todoList
      • → 비단건 집안일
        1. HouseworkTodo 삭제하기
          1. DELETE 상태로 변환
          2. 요청 날짜의 todoList를 조회 후 dirtyBit 체킹
        2. HouseworkInfo 생성
          1. HouseworkCategory 조회
          2. HouseworkInfo 저장
          3. HouseworkMember 담당자 지정
          4. groupId로 todoList를 조회해서 Period로 필터링 후 dirtyBit 체킹
    • 비단건 집안일
      • → 단건 집안일
        1. HouseworkInfo 삭제하기
          1. HouseworkInfo를 외래키로 가진 HouseworkMember 삭제
          2. HouseworkInfo를 외래키로 가진 HouseworkTodo의 houseworkInfo 필드값 null로 변환해 관계 해제
          3. HouseworkInfo 삭제
          4. 현재 시점 이후의 HouseworkTodo를 HOUSEWORK_TODO_DELETE로 상태 변경
          5. groupId로 TodoList 조회하고 해당 requestTodo를 가진 TodoList로 필터링한 후 dirtyBit Checking
        2. HouseworkTodo 생성하기
          1. HouseworkTodo 생성
          2. 요청 날짜의 todoList를 조회 후 dirtyBit 체킹
      • → 비단건 집안일
        1. 담당자가 바뀌었다면 HouseworkMember 삭제
        2. HouseworkInfo를 외래키로 가진 HouseworkTodo의 houseworkInfo 필드값 null로 변환해 관계 해제 후 DELETE 상태로 변경
        3. groupId로 todoList를 조회해서 Period로 필터링 후 dirtyBit 체킹 → 수정 전 날짜 기준
        4. HouseworkInfo 수정 메서드 사용해 수정
        5. HouseworkMember 생성 - 담당자 지정
        6. groupId로 todoList를 조회해서 Period로 필터링 후 dirtyBit 체킹 -> 수정 후 날짜 기준

jusung-c added a commit that referenced this issue Nov 18, 2023
jusung-c added a commit that referenced this issue Nov 19, 2023
기존에는 관계 해제 후 관계로 조회한 투두를DELETE 상태로 변경해줘서 아무일도 일어나지 않았었다.
관계 해제 전에 DELETE로 변경해줘야 했다.
@jusung-c jusung-c linked a pull request Nov 19, 2023 that will close this issue
6 tasks
jusung-c added a commit that referenced this issue Nov 23, 2023
ghdcksgml1 added a commit that referenced this issue Nov 24, 2023
Feat(#105) housework info update
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feat 기능 개발 🥸 이주성 (진행중) 진행중인 이슈 or Pull request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants