Files
sam-api/app/Http/Controllers/Api/V1/Design/BomCalculationController.php
hskwon eb42d11f5e feat: BOM 계산 API Swagger 문서 완성 및 오류 수정
- BomCalculationApi.php: 기존 시스템 방식 클래스 형태 Swagger 문서 작성
- BOM Calculation 태그로 5개 API 엔드포인트 완전 문서화
- 요청/응답 스키마, 예시 데이터, 오류 응답 모두 정의
- BomCalculationController.php: ApiResponse 클래스 참조 경로 수정
- App\Http\Resources\ApiResponse → App\Helpers\ApiResponse
- 테스트 데이터 생성으로 완전한 API 테스트 환경 구축

Swagger UI에서 "BOM Calculation" 메뉴로 확인 가능

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-24 14:40:51 +09:00

124 lines
4.2 KiB
PHP

<?php
namespace App\Http\Controllers\Api\V1\Design;
use App\Http\Controllers\Controller;
use App\Services\Design\BomCalculationService;
use App\Http\Requests\Design\GetEstimateParametersRequest;
use App\Http\Requests\Design\CalculateBomRequest;
use App\Http\Requests\Design\SaveCompanyFormulaRequest;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
class BomCalculationController extends Controller
{
protected BomCalculationService $bomCalculationService;
public function __construct(BomCalculationService $bomCalculationService)
{
$this->bomCalculationService = $bomCalculationService;
}
public function getEstimateParameters(GetEstimateParametersRequest $request, int $modelId): JsonResponse
{
return ApiResponse::handle(function () use ($request, $modelId) {
$companyName = $request->query('company_name');
$result = $this->bomCalculationService->getEstimateParameters($modelId, $companyName);
return [
'success' => true,
'data' => $result,
'message' => __('message.fetched')
];
});
}
public function calculateBom(CalculateBomRequest $request, int $bomTemplateId): JsonResponse
{
return ApiResponse::handle(function () use ($request, $bomTemplateId) {
$data = $request->validated();
$result = $this->bomCalculationService->calculateBomEstimate(
$bomTemplateId,
$data['parameters'],
$data['company_name'] ?? null
);
if (!$result['success']) {
return [
'success' => false,
'message' => __('error.calculation_failed'),
'error' => $result['error']
];
}
return [
'success' => true,
'data' => $result['data'],
'message' => __('message.calculation.completed')
];
});
}
public function getCompanyFormulas(string $companyName): JsonResponse
{
return ApiResponse::handle(function () use ($companyName) {
$result = $this->bomCalculationService->getCompanyFormulas($companyName);
return [
'success' => true,
'data' => $result,
'message' => __('message.fetched')
];
});
}
public function saveCompanyFormula(SaveCompanyFormulaRequest $request, string $companyName, string $formulaType): JsonResponse
{
return ApiResponse::handle(function () use ($request, $companyName, $formulaType) {
$data = $request->validated();
$result = $this->bomCalculationService->saveCompanyFormula($companyName, $formulaType, $data);
return [
'success' => true,
'data' => $result,
'message' => __('message.company_formula.created')
];
});
}
public function testFormula(Request $request): JsonResponse
{
return ApiResponse::handle(function () use ($request) {
$request->validate([
'formula_expression' => 'required|string',
'test_parameters' => 'required|array'
]);
$startTime = microtime(true);
// 직접 FormulaParser를 사용하여 테스트
$parser = app(\App\Services\Calculation\FormulaParser::class);
$result = $parser->execute(
$request->input('formula_expression'),
$request->input('test_parameters')
);
$executionTime = (microtime(true) - $startTime) * 1000; // ms로 변환
return [
'success' => true,
'data' => [
'formula_expression' => $request->input('formula_expression'),
'input_parameters' => $request->input('test_parameters'),
'result' => $result,
'execution_time_ms' => round($executionTime, 2)
],
'message' => __('message.formula.test_completed')
];
});
}
}