mappingService->getMappingsByFormula($formulaId); return response()->json([ 'success' => true, 'data' => $mappings, ]); } /** * 매핑 상세 조회 */ public function show(int $formulaId, int $mappingId): JsonResponse { // 수식 소속 확인 if (! $this->mappingService->belongsToFormula($mappingId, $formulaId)) { return response()->json([ 'success' => false, 'message' => '해당 수식에 속하지 않는 매핑입니다.', ], 404); } $mapping = $this->mappingService->getMappingById($mappingId); return response()->json([ 'success' => true, 'data' => $mapping, ]); } /** * 매핑 생성 */ public function store(Request $request, int $formulaId): JsonResponse { $validated = $request->validate([ 'source_variable' => 'required|string|max:50', 'source_value' => 'required|string|max:100', 'result_value' => 'required|string', 'result_type' => 'nullable|in:fixed,formula', 'sort_order' => 'nullable|integer|min:0', ]); $mapping = $this->mappingService->createMapping($formulaId, $validated); return response()->json([ 'success' => true, 'message' => '매핑이 추가되었습니다.', 'data' => $mapping, ]); } /** * 매핑 수정 */ public function update(Request $request, int $formulaId, int $mappingId): JsonResponse { // 수식 소속 확인 if (! $this->mappingService->belongsToFormula($mappingId, $formulaId)) { return response()->json([ 'success' => false, 'message' => '해당 수식에 속하지 않는 매핑입니다.', ], 404); } $validated = $request->validate([ 'source_variable' => 'nullable|string|max:50', 'source_value' => 'nullable|string|max:100', 'result_value' => 'nullable|string', 'result_type' => 'nullable|in:fixed,formula', ]); $mapping = $this->mappingService->updateMapping($mappingId, $validated); return response()->json([ 'success' => true, 'message' => '매핑이 수정되었습니다.', 'data' => $mapping, ]); } /** * 매핑 삭제 */ public function destroy(int $formulaId, int $mappingId): JsonResponse { // 수식 소속 확인 if (! $this->mappingService->belongsToFormula($mappingId, $formulaId)) { return response()->json([ 'success' => false, 'message' => '해당 수식에 속하지 않는 매핑입니다.', ], 404); } $this->mappingService->deleteMapping($mappingId); return response()->json([ 'success' => true, 'message' => '매핑이 삭제되었습니다.', ]); } /** * 순서 변경 */ public function reorder(Request $request, int $formulaId): JsonResponse { $validated = $request->validate([ 'mapping_ids' => 'required|array', 'mapping_ids.*' => 'integer', ]); // 모든 매핑이 해당 수식에 속하는지 확인 foreach ($validated['mapping_ids'] as $mappingId) { if (! $this->mappingService->belongsToFormula($mappingId, $formulaId)) { return response()->json([ 'success' => false, 'message' => '유효하지 않은 매핑 ID가 포함되어 있습니다.', ], 400); } } $this->mappingService->reorder($validated['mapping_ids']); return response()->json([ 'success' => true, 'message' => '순서가 변경되었습니다.', ]); } }