package com.sb.web.account.controller; import com.sb.web.account.dto.BudgetPeriodStat; import com.sb.web.account.dto.BudgetRequest; import com.sb.web.account.dto.BudgetResponse; import com.sb.web.account.dto.BudgetStatus; import com.sb.web.account.service.BudgetService; import com.sb.web.auth.dto.SessionUser; import com.sb.web.auth.web.AuthInterceptor; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 예산 API. (/api/account/budgets — 로그인 필요, 본인 데이터만) */ @RestController @RequestMapping("/api/account/budgets") @RequiredArgsConstructor public class BudgetController { private final BudgetService budgetService; @GetMapping public List list( @RequestAttribute(AuthInterceptor.CURRENT_MEMBER) SessionUser current) { return budgetService.list(current.getId()); } @GetMapping("/status") public List status( @RequestParam int year, @RequestParam int month, @RequestAttribute(AuthInterceptor.CURRENT_MEMBER) SessionUser current) { return budgetService.status(current.getId(), year, month); } /** 기간(일/주/월/년)별 예산 대비 지출 (대시보드 막대그래프) */ @GetMapping("/period") public List period( @RequestParam(defaultValue = "MONTH") String unit, @RequestParam(required = false) Integer year, @RequestParam(required = false) Integer month, @RequestAttribute(AuthInterceptor.CURRENT_MEMBER) SessionUser current) { return budgetService.periodStats(current.getId(), unit, year, month); } @PostMapping public ResponseEntity create( @Valid @RequestBody BudgetRequest req, @RequestAttribute(AuthInterceptor.CURRENT_MEMBER) SessionUser current) { return ResponseEntity.status(HttpStatus.CREATED).body(budgetService.create(req, current.getId())); } @PutMapping("/{id}") public BudgetResponse update( @PathVariable Long id, @Valid @RequestBody BudgetRequest req, @RequestAttribute(AuthInterceptor.CURRENT_MEMBER) SessionUser current) { return budgetService.update(id, req, current.getId()); } @DeleteMapping("/{id}") public ResponseEntity delete( @PathVariable Long id, @RequestAttribute(AuthInterceptor.CURRENT_MEMBER) SessionUser current) { budgetService.delete(id, current.getId()); return ResponseEntity.noContent().build(); } }