feat: 분류 순서변경(reorder) + 월 예상 수입 설정 API
- 분류: sort_order reorder 엔드포인트, 생성 시 맨 뒤 배치 - 예산: account_setting 테이블 + 월 예상 수입 GET/PUT Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
9ad6a91a56
commit
cac9919cc5
@@ -0,0 +1,25 @@
|
||||
package com.sb.web.account.service;
|
||||
|
||||
import com.sb.web.account.mapper.AccountSettingMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* 사용자별 가계부 설정 서비스 (월 예상 수입 등).
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class AccountSettingService {
|
||||
|
||||
private final AccountSettingMapper settingMapper;
|
||||
|
||||
public Long getExpectedIncome(Long memberId) {
|
||||
return settingMapper.findExpectedIncome(memberId);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void setExpectedIncome(Long memberId, Long expectedIncome) {
|
||||
settingMapper.upsertExpectedIncome(memberId, expectedIncome);
|
||||
}
|
||||
}
|
||||
@@ -35,12 +35,27 @@ public class CategoryService {
|
||||
if (categoryMapper.countByName(memberId, req.getType(), name, null) > 0) {
|
||||
throw new ApiException(HttpStatus.CONFLICT, "이미 존재하는 분류입니다.");
|
||||
}
|
||||
Integer max = categoryMapper.maxSortOrder(memberId, req.getType());
|
||||
int order = (max == null ? 0 : max + 1);
|
||||
AccountCategory c = AccountCategory.builder()
|
||||
.memberId(memberId).type(req.getType()).name(name).sortOrder(0).build();
|
||||
.memberId(memberId).type(req.getType()).name(name).sortOrder(order).build();
|
||||
categoryMapper.insert(c);
|
||||
return CategoryResponse.from(c);
|
||||
}
|
||||
|
||||
/** 드래그앤드랍 순서 변경: 전달된 id 순서대로 sort_order 재설정 (본인·동일 타입만) */
|
||||
@Transactional
|
||||
public List<CategoryResponse> reorder(Long memberId, String type, List<Long> ids) {
|
||||
int i = 0;
|
||||
for (Long id : ids) {
|
||||
AccountCategory c = categoryMapper.findByIdAndMember(id, memberId);
|
||||
if (c != null && c.getType().equals(type)) {
|
||||
categoryMapper.updateSortOrder(id, memberId, i++);
|
||||
}
|
||||
}
|
||||
return list(memberId);
|
||||
}
|
||||
|
||||
/** 이름만 변경 가능. 변경 시 기존 내역·예산의 분류명도 함께 갱신 */
|
||||
@Transactional
|
||||
public CategoryResponse update(Long id, CategoryRequest req, Long memberId) {
|
||||
|
||||
Reference in New Issue
Block a user