카테고리 조회
아래 페이지가 유저가 가지고 있는 카테고리에 대한 조회임

- userId로 user_category 테이블 조회 & category 테이블에서 이름 join 해서 반환
- 이때 category가 null인 애들은 삭제된 애들이니 조회하면 안됨
- 이때 반환하는 id는 user_category_id임(category_id 아님)
카테고리 등록
아래 이미지에서 + 버튼을 눌러 카테고리 등록

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

- user_category_id를 입력으로 받고 UserCategory 찾음,
- 가지고 있다면
- 해당 userCategory를 갖고 있는 Expenditure와 Income에서 UserCategory를 null로 수정 (안하면 삭제 불가능함. ForeignKey 물려 있어서)
- user_category테이블과 category 테이블 둘다에서 삭제
- category 테이블에서 삭제해도 통계 쪽에서는 문제가 없는게 어차피 지출이나 수입에서 category의 이름을 갖고 있기에 통계조회 시 구분이 가능함
- 통계 조회 로직은 아래 참고
- 가지고 있지 않다면 삭제 불가
UserCategory는 삭제 하지 말고 category만 삭제하고 userCategory의 category 를 null로 만들어버리기
그러면 Expenditure와 Income에서 UserCategoryId를 갖고 있으니까 통계낼 때 id로 구분이 가능함
그리고 Expenditure나 Income 삭제 시, 해당 UserCategory에 category가 null이라면 해당 UserCategory삭제하기
카테고리 이름 수정
관련해서, 지출이랑 수입에서 카테고리 수정에 대한 내용 논의 필요함
- 지출이랑 수입에서 유저가 가지고 있는 카테고리에서 이름을 수정하는 건 큰 문제 없음
- 그런데 유저가 가지고 있지 않는 카테고리(Expenditure와 Income의 UserCategory가 null인 상태) 에 대해서 이름을 변경할때에 대한 로직이 지금 빠져 있는 듯함
아래 이미지에서 연필 모양을 눌러 카테고리 수정

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