HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
♥️
2기 최종 프로젝트 팀별 공간
/
💸
10원모아10조❗️
/
🏝️
Back End
/
👒
도메인 분석
/
카테고리 관련 로직 정리

카테고리 관련 로직 정리

카테고리 조회

아래 페이지가 유저가 가지고 있는 카테고리에 대한 조회임
notion image
  1. userId로 user_category 테이블 조회 & category 테이블에서 이름 join 해서 반환
    1. 이때 category가 null인 애들은 삭제된 애들이니 조회하면 안됨
  1. 이때 반환하는 id는 user_category_id임(category_id 아님)

카테고리 등록

아래 이미지에서 + 버튼을 눌러 카테고리 등록
notion image
ㅤ
Category 테이블
ㅤ
id
name
categoryType
1
식비
지출
ㅤ
ㅤ
ㅤ
ㅤ
user_category
ㅤ
id
userId
categoryId
ㅤ
1
1
  1. 카테고리 등록 시, category 테이블에 카테고리 row 생성
  1. user_category 테이블에 row 생성

카테고리 삭제

아래 이미지에서 - 버튼을 눌러 카테고리 삭제
notion image
  1. user_category_id를 입력으로 받고 UserCategory 찾음,
    1. 가지고 있다면
      1. 해당 userCategory를 갖고 있는 Expenditure와 Income에서 UserCategory를 null로 수정 (안하면 삭제 불가능함. ForeignKey 물려 있어서)
      2. user_category테이블과 category 테이블 둘다에서 삭제
          • category 테이블에서 삭제해도 통계 쪽에서는 문제가 없는게 어차피 지출이나 수입에서 category의 이름을 갖고 있기에 통계조회 시 구분이 가능함
          • 통계 조회 로직은 아래 참고
    2. 가지고 있지 않다면 삭제 불가
UserCategory는 삭제 하지 말고 category만 삭제하고 userCategory의 category 를 null로 만들어버리기
그러면 Expenditure와 Income에서 UserCategoryId를 갖고 있으니까 통계낼 때 id로 구분이 가능함
그리고 Expenditure나 Income 삭제 시, 해당 UserCategory에 category가 null이라면 해당 UserCategory삭제하기

카테고리 이름 수정

관련해서, 지출이랑 수입에서 카테고리 수정에 대한 내용 논의 필요함
  • 지출이랑 수입에서 유저가 가지고 있는 카테고리에서 이름을 수정하는 건 큰 문제 없음
  • 그런데 유저가 가지고 있지 않는 카테고리(Expenditure와 Income의 UserCategory가 null인 상태) 에 대해서 이름을 변경할때에 대한 로직이 지금 빠져 있는 듯함
아래 이미지에서 연필 모양을 눌러 카테고리 수정
notion image
  1. user_category 테이블에서 해당 user가 해당 category를 갖고 있는지 조회 후,
    1. 가지고 있다면 category 테이블에서 해당 이름 수정
    2. 가지고 있지 않다면 수정 불가

Default 카테고리 등록

public static final Map<CategoryType, List<String>> DEFAULT_CATEGORY = Map.of( CategoryType.EXPENDITURE, List.of("교통/차량", "문화생활", "마트/편의점", "패션/미용", "생활용품", "주거/통신", "건강", "교육", "경조사/회비", "부모님", "기타"), CategoryType.INCOME, List.of("월급", "부수입", "용돈", "상여", "금융소득", "기타") );
  • 위와 같은 형태로 Category 도메인에서 관리함
  • 해당 변수를 이용하여 default category 생성
      1. 유저 등록 도중, 내부에서 userCategoryService.registerDefaultCategory() 호출
        1. DEFAULT_CATEGORY 순회하며 - category 테이블에 row 생성 - user_category 테이블에도 row 생성
          • 주의점(제한걸기) : 이 메소드는 유저가 등록될 때만 호출됨
            • 후에 default 카테고리에 변경이 있다면 그 시점 이후부터 가입한 유저에게만 default 카테고리가 늘어난 상태로 시작

통계 페이지에서 카테고리 별 조회

  1. 해당하는 날짜 기간에 대해 수입, 지출 조회 후
  1. 각 수입, 지출에 대해 key를 (categoryId, name)으로 잡고 groupBy 하면 될듯 함
    1. 이렇게 하면, (1, 식비) 와 (null, 식비) 가 다른 키를 갖게 되기 때문에 통계페이지에서 분류가 가능함
    2.