Files
sam-api/app/Http/Controllers/Api/V1/LoanController.php

137 lines
3.5 KiB
PHP
Raw Normal View History

<?php
namespace App\Http\Controllers\Api\V1;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Http\Requests\Loan\LoanCalculateInterestRequest;
use App\Http\Requests\Loan\LoanIndexRequest;
use App\Http\Requests\Loan\LoanSettleRequest;
use App\Http\Requests\Loan\LoanStoreRequest;
use App\Http\Requests\Loan\LoanUpdateRequest;
use App\Services\LoanService;
use Illuminate\Http\JsonResponse;
class LoanController extends Controller
{
public function __construct(
private readonly LoanService $loanService
) {}
/**
* 가지급금 목록
*/
public function index(LoanIndexRequest $request): JsonResponse
{
$result = $this->loanService->index($request->validated());
return ApiResponse::success($result, __('message.fetched'));
}
/**
* 가지급금 요약
*/
public function summary(LoanIndexRequest $request): JsonResponse
{
$userId = $request->validated()['user_id'] ?? null;
$result = $this->loanService->summary($userId);
return ApiResponse::success($result, __('message.fetched'));
}
/**
* 가지급금 대시보드
*/
public function dashboard(): JsonResponse
{
$result = $this->loanService->dashboard();
return ApiResponse::success($result, __('message.fetched'));
}
/**
* 가지급금 등록
*/
public function store(LoanStoreRequest $request): JsonResponse
{
$result = $this->loanService->store($request->validated());
return ApiResponse::success($result, __('message.created'), [], 201);
}
/**
* 가지급금 상세
*/
public function show(int $id): JsonResponse
{
$result = $this->loanService->show($id);
return ApiResponse::success($result, __('message.fetched'));
}
/**
* 가지급금 수정
*/
public function update(LoanUpdateRequest $request, int $id): JsonResponse
{
$result = $this->loanService->update($id, $request->validated());
return ApiResponse::success($result, __('message.updated'));
}
/**
* 가지급금 삭제
*/
public function destroy(int $id): JsonResponse
{
$this->loanService->destroy($id);
return ApiResponse::success(null, __('message.deleted'));
}
/**
* 가지급금 정산
*/
public function settle(LoanSettleRequest $request, int $id): JsonResponse
{
$result = $this->loanService->settle($id, $request->validated());
return ApiResponse::success($result, __('message.loan.settled'));
}
/**
* 인정이자 계산
*/
public function calculateInterest(LoanCalculateInterestRequest $request): JsonResponse
{
$validated = $request->validated();
$result = $this->loanService->calculateInterest(
$validated['year'],
$validated['user_id'] ?? null
);
return ApiResponse::success($result, __('message.fetched'));
}
/**
* 인정이자 리포트
*/
public function interestReport(int $year): JsonResponse
{
$result = $this->loanService->interestReport($year);
return ApiResponse::success($result, __('message.fetched'));
}
/**
* 세금 시뮬레이션
*/
public function taxSimulation(LoanCalculateInterestRequest $request): JsonResponse
{
$validated = $request->validated();
$result = $this->loanService->taxSimulation($validated['year']);
return ApiResponse::success($result, __('message.fetched'));
}
}