style: Laravel Pint 코드 포맷팅 적용

- PSR-12 스타일 가이드 준수
- 302개 파일 스타일 이슈 자동 수정
- 코드 로직 변경 없음 (포맷팅만)
This commit is contained in:
2025-11-06 17:45:49 +09:00
parent 48e76432ee
commit cc206fdbed
294 changed files with 4476 additions and 2561 deletions

View File

@@ -2,14 +2,13 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\AdminService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class AdminController extends Controller
{
public function index(Request $request)
{
return ApiResponse::handle(function () use ($request) {

View File

@@ -2,7 +2,6 @@
namespace App\Http\Controllers\Api\V1;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Models\Members\User;
use Illuminate\Http\Request;
@@ -11,32 +10,27 @@
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
class ApiController extends Controller
{
public function debugApikey()
{
$message = 'API Key 인증 성공';
return response()->json(['message' => $message]);
}
public function login(Request $request)
{
$userId = $request->input('user_id');
$userPwd = $request->input('user_pwd');
if (!$userId || !$userPwd) {
if (! $userId || ! $userPwd) {
return response()->json(['error' => '아이디 또는 비밀번호 누락'], 400);
}
$user = User::where('user_id', $userId)->first();
if (!$user) {
if (! $user) {
return response()->json(['error' => '사용자를 찾을 수 없습니다.'], 404);
}
@@ -50,11 +44,11 @@ public function login(Request $request)
$isValid = strtoupper(hash('sha256', $userPwd)) === strtoupper($user->password);
}
if (!$isValid) {
if (! $isValid) {
return response()->json(['error' => '아이디 또는 비밀번호가 올바르지 않습니다.'], 401);
}
//인증토큰 생성
// 인증토큰 생성
$token = $user->createToken('front-app')->plainTextToken;
// 선택: DB에 신규 token 저장
@@ -70,21 +64,20 @@ public function login(Request $request)
public function logout(Request $request)
{
//인증토큰 삭제
// 인증토큰 삭제
$request->user()->currentAccessToken()->delete();
return response()->json(['message' => '로그아웃 완료']);
}
public function signup(Request $request)
{
// 신규 회원 생성 + 역할 부여 지원
$v = Validator::make($request->all(), [
'user_id' => 'required|string|max:255|unique:users,user_id',
'name' => 'required|string|max:255',
'email' => 'required|email|max:100|unique:users,email',
'phone' => 'nullable|string|max:30',
'user_id' => 'required|string|max:255|unique:users,user_id',
'name' => 'required|string|max:255',
'email' => 'required|email|max:100|unique:users,email',
'phone' => 'nullable|string|max:30',
'password' => 'required|string|min:8|max:64',
]);
@@ -97,15 +90,14 @@ public function signup(Request $request)
return DB::transaction(function () use ($payload) {
// 신규 사용자 생성
$user = User::create([
'user_id' => $payload['user_id'],
'name' => $payload['name'],
'email' => $payload['email'],
'phone' => $payload['phone'] ?? null,
'user_id' => $payload['user_id'],
'name' => $payload['name'],
'email' => $payload['email'],
'phone' => $payload['phone'] ?? null,
'password' => $payload['password'], // 캐스트가 알아서 해싱
]);
return ['user' => $user->only(['id','user_id','name','email','phone'])];
return ['user' => $user->only(['id', 'user_id', 'name', 'email', 'phone'])];
});
}
}

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\CategoryService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class CategoryController extends Controller
{

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Services\CategoryFieldService;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\CategoryFieldService;
use Illuminate\Http\Request;
class CategoryFieldController extends Controller
{
@@ -48,6 +48,7 @@ public function destroy(int $field)
{
return ApiResponse::handle(function () use ($field) {
$this->service->destroy($field);
return 'success';
}, '카테고리 필드 삭제');
}
@@ -57,6 +58,7 @@ public function reorder(int $id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
$this->service->reorder($id, $request->input());
return 'success';
}, '카테고리 필드 정렬 저장');
}

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Services\CategoryLogService;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\CategoryLogService;
use Illuminate\Http\Request;
class CategoryLogController extends Controller
{

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Services\CategoryTemplateService;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\CategoryTemplateService;
use Illuminate\Http\Request;
class CategoryTemplateController extends Controller
{
@@ -48,6 +48,7 @@ public function destroy(int $tpl)
{
return ApiResponse::handle(function () use ($tpl) {
$this->service->destroy($tpl);
return 'success';
}, '카테고리 템플릿 삭제');
}
@@ -57,6 +58,7 @@ public function apply(int $id, int $tpl)
{
return ApiResponse::handle(function () use ($id, $tpl) {
$this->service->apply($id, $tpl);
return 'success';
}, '카테고리 템플릿 적용');
}
@@ -73,7 +75,7 @@ public function preview(int $id, int $tpl)
public function diff(int $id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return $this->service->diff($id, (int)$request->query('a'), (int)$request->query('b'));
return $this->service->diff($id, (int) $request->query('a'), (int) $request->query('b'));
}, '카테고리 템플릿 비교');
}
}

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\ClassificationService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class ClassificationController extends Controller
{
@@ -13,27 +13,26 @@ public function __construct(private ClassificationService $service) {}
public function index(Request $request)
{
return ApiResponse::handle(fn() => $this->service->index($request->all()), '분류 목록 조회');
return ApiResponse::handle(fn () => $this->service->index($request->all()), '분류 목록 조회');
}
public function show(string $id)
{
return ApiResponse::handle(fn() => $this->service->show((int)$id), '분류 단건 조회');
return ApiResponse::handle(fn () => $this->service->show((int) $id), '분류 단건 조회');
}
public function store(Request $request)
{
return ApiResponse::handle(fn() => $this->service->store($request->all()), '분류 생성');
return ApiResponse::handle(fn () => $this->service->store($request->all()), '분류 생성');
}
public function update(string $id, Request $request)
{
return ApiResponse::handle(fn() => $this->service->update((int)$id, $request->all()), '분류 수정');
return ApiResponse::handle(fn () => $this->service->update((int) $id, $request->all()), '분류 수정');
}
public function destroy(string $id)
{
return ApiResponse::handle(fn() => $this->service->destroy((int)$id), '분류 삭제');
return ApiResponse::handle(fn () => $this->service->destroy((int) $id), '분류 삭제');
}
}

View File

@@ -2,9 +2,9 @@
namespace App\Http\Controllers\Api\V1;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\ClientService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class ClientController extends Controller
@@ -20,6 +20,7 @@ public function index(Request $request)
{
return ApiResponse::handle(function () use ($request) {
$data = $this->service->index($request->all());
return ['data' => $data, 'message' => __('message.fetched')];
});
}
@@ -28,6 +29,7 @@ public function show(int $id)
{
return ApiResponse::handle(function () use ($id) {
$data = $this->service->show($id);
return ['data' => $data, 'message' => __('message.fetched')];
});
}
@@ -36,6 +38,7 @@ public function store(Request $request)
{
return ApiResponse::handle(function () use ($request) {
$data = $this->service->store($request->all());
return ['data' => $data, 'message' => __('message.created')];
});
}
@@ -44,6 +47,7 @@ public function update(Request $request, int $id)
{
return ApiResponse::handle(function () use ($request, $id) {
$data = $this->service->update($id, $request->all());
return ['data' => $data, 'message' => __('message.updated')];
});
}
@@ -52,6 +56,7 @@ public function destroy(int $id)
{
return ApiResponse::handle(function () use ($id) {
$this->service->destroy($id);
return ['data' => null, 'message' => __('message.deleted')];
});
}
@@ -60,6 +65,7 @@ public function toggle(int $id)
{
return ApiResponse::handle(function () use ($id) {
$data = $this->service->toggle($id);
return ['data' => $data, 'message' => __('message.updated')];
});
}

View File

@@ -69,4 +69,4 @@ public function toggle(int $id)
return ['data' => $data, 'message' => __('message.updated')];
});
}
}
}

View File

@@ -21,18 +21,23 @@ class CommonController
* description="테넌트의 활성화된 공통 코드 목록을 조회합니다.",
* tags={"Settings - Common Codes"},
* security={{"ApiKeyAuth": {}}},
*
* @OA\Response(
* response=200,
* description="공통 코드 조회 성공",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="공통코드"),
* @OA\Property(
* property="data",
* type="array",
*
* @OA\Items(
* type="object",
*
* @OA\Property(property="code_group", type="string", example="product_type"),
* @OA\Property(property="code", type="string", example="PRODUCT"),
* @OA\Property(property="name", type="string", example="제품"),
@@ -61,6 +66,7 @@ public static function getComeCode()
* description="전체 공통 코드 목록을 조회합니다.",
* tags={"Settings - Common Codes"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\Response(
* response=200,
* description="공통 코드 목록 조회 성공"
@@ -69,7 +75,7 @@ public static function getComeCode()
*/
public function list(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return ApiResponse::handle(function () {
// Service implementation needed
return [];
}, __('message.fetched'));
@@ -82,13 +88,16 @@ public function list(Request $request)
* description="특정 그룹의 공통 코드 목록을 조회합니다.",
* tags={"Settings - Common Codes"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\Parameter(
* name="group",
* in="path",
* required=true,
* description="코드 그룹",
*
* @OA\Schema(type="string", example="product_type")
* ),
*
* @OA\Response(
* response=200,
* description="그룹 코드 조회 성공"
@@ -97,7 +106,7 @@ public function list(Request $request)
*/
public function index(Request $request, string $group)
{
return ApiResponse::handle(function () use ($group) {
return ApiResponse::handle(function () {
// Service implementation needed
return [];
}, __('message.fetched'));
@@ -110,16 +119,20 @@ public function index(Request $request, string $group)
* description="새로운 공통 코드를 생성합니다.",
* tags={"Settings - Common Codes"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="code_group", type="string", example="product_type"),
* @OA\Property(property="code", type="string", example="SERVICE"),
* @OA\Property(property="name", type="string", example="서비스"),
* @OA\Property(property="description", type="string", example="서비스 상품")
* )
* ),
*
* @OA\Response(
* response=201,
* description="공통 코드 생성 성공"
@@ -127,22 +140,26 @@ public function index(Request $request, string $group)
* @OA\Response(
* response=409,
* description="중복된 공통 코드",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="중복된 공통 코드가 존재합니다.")
* )
* ),
*
* @OA\Response(
* response=422,
* description="유효성 검사 실패",
*
* @OA\JsonContent(ref="#/components/schemas/ErrorResponse")
* )
* )
*/
public function store(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return ApiResponse::handle(function () {
// Service implementation needed
return [];
}, __('message.settings.common_code_saved'));
@@ -155,21 +172,27 @@ public function store(Request $request)
* description="기존 공통 코드를 수정합니다.",
* tags={"Settings - Common Codes"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\Parameter(
* name="id",
* in="path",
* required=true,
* description="공통 코드 ID",
*
* @OA\Schema(type="integer", example=1)
* ),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="name", type="string", example="수정된 이름"),
* @OA\Property(property="description", type="string", example="수정된 설명")
* )
* ),
*
* @OA\Response(
* response=200,
* description="공통 코드 수정 성공"
@@ -177,22 +200,26 @@ public function store(Request $request)
* @OA\Response(
* response=404,
* description="공통 코드를 찾을 수 없음",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="해당 공통 코드를 찾을 수 없습니다.")
* )
* ),
*
* @OA\Response(
* response=422,
* description="유효성 검사 실패",
*
* @OA\JsonContent(ref="#/components/schemas/ErrorResponse")
* )
* )
*/
public function update(Request $request, int $id)
{
return ApiResponse::handle(function () use ($request, $id) {
return ApiResponse::handle(function () {
// Service implementation needed
return [];
}, __('message.updated'));
@@ -205,13 +232,16 @@ public function update(Request $request, int $id)
* description="공통 코드를 삭제합니다.",
* tags={"Settings - Common Codes"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\Parameter(
* name="id",
* in="path",
* required=true,
* description="공통 코드 ID",
*
* @OA\Schema(type="integer", example=1)
* ),
*
* @OA\Response(
* response=200,
* description="공통 코드 삭제 성공"
@@ -219,8 +249,10 @@ public function update(Request $request, int $id)
* @OA\Response(
* response=404,
* description="공통 코드를 찾을 수 없음",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="해당 공통 코드를 찾을 수 없습니다.")
* )
@@ -229,7 +261,7 @@ public function update(Request $request, int $id)
*/
public function destroy(Request $request, int $id)
{
return ApiResponse::handle(function () use ($id) {
return ApiResponse::handle(function () {
// Service implementation needed
return [];
}, __('message.deleted'));

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\DepartmentService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class DepartmentController extends Controller
{
@@ -39,7 +39,7 @@ public function show(int $id, Request $request)
public function update($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return $this->service->update((int)$id, $request->all());
return $this->service->update((int) $id, $request->all());
}, '부서 수정');
}
@@ -47,7 +47,7 @@ public function update($id, Request $request)
public function destroy($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return $this->service->destroy((int)$id, $request->all());
return $this->service->destroy((int) $id, $request->all());
}, '부서 삭제');
}
@@ -55,7 +55,7 @@ public function destroy($id, Request $request)
public function listUsers($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return $this->service->listUsers((int)$id, $request->all());
return $this->service->listUsers((int) $id, $request->all());
}, '부서 사용자 목록');
}
@@ -63,7 +63,7 @@ public function listUsers($id, Request $request)
public function attachUser($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return $this->service->attachUser((int)$id, $request->all());
return $this->service->attachUser((int) $id, $request->all());
}, '부서 사용자 배정');
}
@@ -71,7 +71,7 @@ public function attachUser($id, Request $request)
public function detachUser($id, $user, Request $request)
{
return ApiResponse::handle(function () use ($id, $user, $request) {
return $this->service->detachUser((int)$id, (int)$user, $request->all());
return $this->service->detachUser((int) $id, (int) $user, $request->all());
}, '부서 사용자 제거');
}
@@ -79,7 +79,7 @@ public function detachUser($id, $user, Request $request)
public function setPrimary($id, $user, Request $request)
{
return ApiResponse::handle(function () use ($id, $user, $request) {
return $this->service->setPrimary((int)$id, (int)$user, $request->all());
return $this->service->setPrimary((int) $id, (int) $user, $request->all());
}, '주 부서 설정/해제');
}
@@ -87,7 +87,7 @@ public function setPrimary($id, $user, Request $request)
public function listPermissions($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return $this->service->listPermissions((int)$id, $request->all());
return $this->service->listPermissions((int) $id, $request->all());
}, '부서 권한 목록');
}
@@ -95,7 +95,7 @@ public function listPermissions($id, Request $request)
public function upsertPermissions($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return $this->service->upsertPermissions((int)$id, $request->all());
return $this->service->upsertPermissions((int) $id, $request->all());
}, '부서 권한 부여/차단');
}
@@ -103,7 +103,7 @@ public function upsertPermissions($id, Request $request)
public function revokePermissions($id, $permission, Request $request)
{
return ApiResponse::handle(function () use ($id, $permission, $request) {
return $this->service->revokePermissions((int)$id, (int)$permission, $request->all());
return $this->service->revokePermissions((int) $id, (int) $permission, $request->all());
}, '부서 권한 제거');
}
}

View File

@@ -17,6 +17,7 @@ public function index(AuditLogIndexRequest $request)
{
return ApiResponse::handle(function () use ($request) {
$filters = $request->validated();
return $this->service->paginate($filters);
}, __('message.fetched'));
}

View File

@@ -2,14 +2,14 @@
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 App\Http\Controllers\Controller;
use App\Http\Requests\Design\CalculateBomRequest;
use App\Http\Requests\Design\GetEstimateParametersRequest;
use App\Http\Requests\Design\SaveCompanyFormulaRequest;
use App\Services\Design\BomCalculationService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class BomCalculationController extends Controller
{
@@ -30,7 +30,7 @@ public function getEstimateParameters(GetEstimateParametersRequest $request, int
return [
'success' => true,
'data' => $result,
'message' => __('message.fetched')
'message' => __('message.fetched'),
];
});
}
@@ -46,18 +46,18 @@ public function calculateBom(CalculateBomRequest $request, int $bomTemplateId):
$data['company_name'] ?? null
);
if (!$result['success']) {
if (! $result['success']) {
return [
'success' => false,
'message' => __('error.calculation_failed'),
'error' => $result['error']
'error' => $result['error'],
];
}
return [
'success' => true,
'data' => $result['data'],
'message' => __('message.calculation.completed')
'message' => __('message.calculation.completed'),
];
});
}
@@ -70,7 +70,7 @@ public function getCompanyFormulas(string $companyName): JsonResponse
return [
'success' => true,
'data' => $result,
'message' => __('message.fetched')
'message' => __('message.fetched'),
];
});
}
@@ -85,7 +85,7 @@ public function saveCompanyFormula(SaveCompanyFormulaRequest $request, string $c
return [
'success' => true,
'data' => $result,
'message' => __('message.company_formula.created')
'message' => __('message.company_formula.created'),
];
});
}
@@ -95,7 +95,7 @@ public function testFormula(Request $request): JsonResponse
return ApiResponse::handle(function () use ($request) {
$request->validate([
'formula_expression' => 'required|string',
'test_parameters' => 'required|array'
'test_parameters' => 'required|array',
]);
$startTime = microtime(true);
@@ -115,10 +115,10 @@ public function testFormula(Request $request): JsonResponse
'formula_expression' => $request->input('formula_expression'),
'input_parameters' => $request->input('test_parameters'),
'result' => $result,
'execution_time_ms' => round($executionTime, 2)
'execution_time_ms' => round($executionTime, 2),
],
'message' => __('message.formula.test_completed')
'message' => __('message.formula.test_completed'),
];
});
}
}
}

View File

@@ -28,10 +28,11 @@ public function upsertTemplate(UpsertRequest $request, int $versionId)
{
return ApiResponse::handle(function () use ($request, $versionId) {
$payload = $request->validated();
return $this->service->upsertTemplate(
modelVersionId: $versionId,
name: $payload['name'] ?? 'Main',
isPrimary: (bool)($payload['is_primary'] ?? true),
isPrimary: (bool) ($payload['is_primary'] ?? true),
notes: $payload['notes'] ?? null
);
}, __('message.created'));
@@ -39,7 +40,7 @@ public function upsertTemplate(UpsertRequest $request, int $versionId)
public function show(int $templateId)
{
return ApiResponse::handle(fn() => $this->service->show($templateId, true), __('message.fetched'));
return ApiResponse::handle(fn () => $this->service->show($templateId, true), __('message.fetched'));
}
public function replaceItems(ReplaceItemsRequest $request, int $templateId)
@@ -47,6 +48,7 @@ public function replaceItems(ReplaceItemsRequest $request, int $templateId)
return ApiResponse::handle(function () use ($request, $templateId) {
$payload = $request->validated();
$this->service->replaceItems($templateId, $payload['items']);
return null;
}, __('message.bom.bulk_upsert'));
}
@@ -55,6 +57,7 @@ public function diff(int $templateId, DiffRequest $request)
{
return ApiResponse::handle(function () use ($templateId, $request) {
$otherId = $request->validated()['other_template_id'];
return $this->service->diffTemplates($templateId, $otherId);
}, __('message.design.template_diff'));
}
@@ -67,9 +70,10 @@ public function cloneTemplate(int $templateId, CloneRequest $request)
templateId: $templateId,
targetVersionId: $payload['target_version_id'] ?? null,
name: $payload['name'] ?? null,
isPrimary: (bool)($payload['is_primary'] ?? false),
isPrimary: (bool) ($payload['is_primary'] ?? false),
notes: $payload['notes'] ?? null
);
return $tpl;
}, __('message.design.template_cloned'));
}

View File

@@ -4,10 +4,10 @@
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\Design\ModelService;
use App\Http\Requests\Common\PaginateRequest;
use App\Http\Requests\Design\Model\StoreRequest;
use App\Http\Requests\Design\Model\UpdateRequest;
use App\Services\Design\ModelService;
class DesignModelController extends Controller
{
@@ -19,11 +19,11 @@ public function __construct(
public function index(PaginateRequest $request)
{
return ApiResponse::handle(function () use ($request) {
$v = $request->validatedOrDefaults(); // page/size 기본값 주입됨
$q = $v['q'] ?? '';
$page = (int)($v['page'] ?? 1);
$size = (int)($v['size'] ?? 20);
$sort = $v['sort'] ?? null; // id|code|name|created_at
$v = $request->validatedOrDefaults(); // page/size 기본값 주입됨
$q = $v['q'] ?? '';
$page = (int) ($v['page'] ?? 1);
$size = (int) ($v['size'] ?? 20);
$sort = $v['sort'] ?? null; // id|code|name|created_at
$order = $v['order'] ?? 'desc'; // asc|desc
return $this->service->list($q, $page, $size);
@@ -33,7 +33,7 @@ public function index(PaginateRequest $request)
public function store(StoreRequest $request)
{
return ApiResponse::handle(
fn() => $this->service->create($request->validated()),
fn () => $this->service->create($request->validated()),
__('message.created')
);
}
@@ -41,7 +41,7 @@ public function store(StoreRequest $request)
public function show(int $id)
{
return ApiResponse::handle(
fn() => $this->service->find($id),
fn () => $this->service->find($id),
__('message.fetched')
);
}
@@ -49,7 +49,7 @@ public function show(int $id)
public function update(UpdateRequest $request, int $id)
{
return ApiResponse::handle(
fn() => $this->service->update($id, $request->validated()),
fn () => $this->service->update($id, $request->validated()),
__('message.updated')
);
}
@@ -58,6 +58,7 @@ public function destroy(int $id)
{
return ApiResponse::handle(function () use ($id) {
$this->service->delete($id);
return null;
}, __('message.deleted'));
}

View File

@@ -15,19 +15,20 @@ public function __construct(
public function index(int $modelId)
{
return ApiResponse::handle(fn() => $this->service->listByModel($modelId), __('message.fetched'));
return ApiResponse::handle(fn () => $this->service->listByModel($modelId), __('message.fetched'));
}
public function createDraft(CreateDraftRequest $request, int $modelId)
{
return ApiResponse::handle(function () use ($request, $modelId) {
$payload = $request->validated();
return $this->service->createDraft($modelId, $payload);
}, __('message.created'));
}
public function release(int $versionId)
{
return ApiResponse::handle(fn() => $this->service->release($versionId), __('message.updated'));
return ApiResponse::handle(fn () => $this->service->release($versionId), __('message.updated'));
}
}

View File

@@ -2,11 +2,11 @@
namespace App\Http\Controllers\Api\V1;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Http\Requests\Estimate\CreateEstimateRequest;
use App\Http\Requests\Estimate\UpdateEstimateRequest;
use App\Services\Estimate\EstimateService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
/**
@@ -27,6 +27,7 @@ public function __construct(EstimateService $estimateService)
* summary="견적 목록 조회",
* tags={"Estimate"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="status", in="query", description="견적 상태", @OA\Schema(type="string")),
* @OA\Parameter(name="customer_name", in="query", description="고객명", @OA\Schema(type="string")),
* @OA\Parameter(name="model_set_id", in="query", description="모델셋 ID", @OA\Schema(type="integer")),
@@ -34,6 +35,7 @@ public function __construct(EstimateService $estimateService)
* @OA\Parameter(name="date_to", in="query", description="종료일", @OA\Schema(type="string", format="date")),
* @OA\Parameter(name="search", in="query", description="검색어", @OA\Schema(type="string")),
* @OA\Parameter(name="per_page", in="query", description="페이지당 항목수", @OA\Schema(type="integer", default=20)),
*
* @OA\Response(response=200, description="성공")
* )
*/
@@ -42,7 +44,7 @@ public function index(Request $request)
$estimates = $this->estimateService->getEstimates($request->all());
return ApiResponse::success([
'estimates' => $estimates
'estimates' => $estimates,
], __('message.fetched'));
}
@@ -52,7 +54,9 @@ public function index(Request $request)
* summary="견적 상세 조회",
* tags={"Estimate"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="견적 ID", @OA\Schema(type="integer")),
*
* @OA\Response(response=200, description="성공")
* )
*/
@@ -61,7 +65,7 @@ public function show($id)
$estimate = $this->estimateService->getEstimateDetail($id);
return ApiResponse::success([
'estimate' => $estimate
'estimate' => $estimate,
], __('message.fetched'));
}
@@ -71,10 +75,13 @@ public function show($id)
* summary="견적 생성",
* tags={"Estimate"},
* security={{"bearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* required={"model_set_id", "estimate_name", "parameters"},
*
* @OA\Property(property="model_set_id", type="integer", description="모델셋 ID"),
* @OA\Property(property="estimate_name", type="string", description="견적명"),
* @OA\Property(property="customer_name", type="string", description="고객명"),
@@ -83,6 +90,7 @@ public function show($id)
* @OA\Property(property="notes", type="string", description="비고")
* )
* ),
*
* @OA\Response(response=201, description="생성 성공")
* )
*/
@@ -91,7 +99,7 @@ public function store(CreateEstimateRequest $request)
$estimate = $this->estimateService->createEstimate($request->validated());
return ApiResponse::success([
'estimate' => $estimate
'estimate' => $estimate,
], __('message.created'), 201);
}
@@ -101,10 +109,14 @@ public function store(CreateEstimateRequest $request)
* summary="견적 수정",
* tags={"Estimate"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="견적 ID", @OA\Schema(type="integer")),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
*
* @OA\Property(property="estimate_name", type="string", description="견적명"),
* @OA\Property(property="customer_name", type="string", description="고객명"),
* @OA\Property(property="project_name", type="string", description="프로젝트명"),
@@ -113,6 +125,7 @@ public function store(CreateEstimateRequest $request)
* @OA\Property(property="notes", type="string", description="비고")
* )
* ),
*
* @OA\Response(response=200, description="수정 성공")
* )
*/
@@ -121,7 +134,7 @@ public function update(UpdateEstimateRequest $request, $id)
$estimate = $this->estimateService->updateEstimate($id, $request->validated());
return ApiResponse::success([
'estimate' => $estimate
'estimate' => $estimate,
], __('message.updated'));
}
@@ -131,7 +144,9 @@ public function update(UpdateEstimateRequest $request, $id)
* summary="견적 삭제",
* tags={"Estimate"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="견적 ID", @OA\Schema(type="integer")),
*
* @OA\Response(response=200, description="삭제 성공")
* )
*/
@@ -148,17 +163,22 @@ public function destroy($id)
* summary="견적 복제",
* tags={"Estimate"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="견적 ID", @OA\Schema(type="integer")),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* required={"estimate_name"},
*
* @OA\Property(property="estimate_name", type="string", description="새 견적명"),
* @OA\Property(property="customer_name", type="string", description="고객명"),
* @OA\Property(property="project_name", type="string", description="프로젝트명"),
* @OA\Property(property="notes", type="string", description="비고")
* )
* ),
*
* @OA\Response(response=201, description="복제 성공")
* )
*/
@@ -174,7 +194,7 @@ public function clone(Request $request, $id)
$newEstimate = $this->estimateService->cloneEstimate($id, $request->all());
return ApiResponse::success([
'estimate' => $newEstimate
'estimate' => $newEstimate,
], __('message.estimate.cloned'), 201);
}
@@ -184,15 +204,20 @@ public function clone(Request $request, $id)
* summary="견적 상태 변경",
* tags={"Estimate"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="견적 ID", @OA\Schema(type="integer")),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* required={"status"},
*
* @OA\Property(property="status", type="string", enum={"DRAFT","SENT","APPROVED","REJECTED","EXPIRED"}, description="변경할 상태"),
* @OA\Property(property="notes", type="string", description="상태 변경 사유")
* )
* ),
*
* @OA\Response(response=200, description="상태 변경 성공")
* )
*/
@@ -210,7 +235,7 @@ public function changeStatus(Request $request, $id)
);
return ApiResponse::success([
'estimate' => $estimate
'estimate' => $estimate,
], __('message.estimate.status_changed'));
}
@@ -220,7 +245,9 @@ public function changeStatus(Request $request, $id)
* summary="견적 폼 스키마 조회",
* tags={"Estimate"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="model_set_id", in="path", required=true, description="모델셋 ID", @OA\Schema(type="integer")),
*
* @OA\Response(response=200, description="성공")
* )
*/
@@ -229,7 +256,7 @@ public function getFormSchema($modelSetId)
$schema = $this->estimateService->getEstimateFormSchema($modelSetId);
return ApiResponse::success([
'form_schema' => $schema
'form_schema' => $schema,
], __('message.fetched'));
}
@@ -239,14 +266,19 @@ public function getFormSchema($modelSetId)
* summary="견적 계산 미리보기",
* tags={"Estimate"},
* security={{"bearerAuth": {}}},
*
* @OA\Parameter(name="model_set_id", in="path", required=true, description="모델셋 ID", @OA\Schema(type="integer")),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* required={"parameters"},
*
* @OA\Property(property="parameters", type="object", description="견적 파라미터")
* )
* ),
*
* @OA\Response(response=200, description="계산 성공")
* )
*/
@@ -263,7 +295,7 @@ public function previewCalculation(Request $request, $modelSetId)
);
return ApiResponse::success([
'calculation' => $calculation
'calculation' => $calculation,
], __('message.calculated'));
}
}
}

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Services\FileService;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\FileService;
use Illuminate\Http\Request;
/**
* @OA\Tag(
@@ -22,33 +22,43 @@ class FileController extends Controller
* description="파일을 업로드합니다.",
* tags={"Files"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\MediaType(
* mediaType="multipart/form-data",
*
* @OA\Schema(
* type="object",
*
* @OA\Property(
* property="files[]",
* type="array",
*
* @OA\Items(type="string", format="binary"),
* description="업로드할 파일들"
* )
* )
* )
* ),
*
* @OA\Response(
* response=201,
* description="파일 업로드 성공",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="파일 업로드"),
* @OA\Property(
* property="data",
* type="array",
*
* @OA\Items(
* type="object",
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="filename", type="string", example="document.pdf"),
* @OA\Property(property="path", type="string", example="/uploads/tenant/1/document.pdf"),
@@ -57,29 +67,38 @@ class FileController extends Controller
* )
* )
* ),
*
* @OA\Response(
* response=400,
* description="파일 업로드 실패",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="파일 업로드에 실패했습니다.")
* )
* ),
*
* @OA\Response(
* response=413,
* description="파일 크기 초과",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="파일 크기가 너무 큽니다.")
* )
* ),
*
* @OA\Response(
* response=415,
* description="지원하지 않는 파일 형식",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="허용되지 않는 파일 형식입니다.")
* )
@@ -100,23 +119,30 @@ public function upload(Request $request)
* description="파일 목록을 조회합니다.",
* tags={"Files"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\Parameter(
* name="page",
* in="query",
* description="페이지 번호",
*
* @OA\Schema(type="integer", example=1)
* ),
*
* @OA\Parameter(
* name="size",
* in="query",
* description="페이지 크기",
*
* @OA\Schema(type="integer", example=10)
* ),
*
* @OA\Response(
* response=200,
* description="파일 목록 조회 성공",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="파일 목록조회"),
* @OA\Property(
@@ -128,8 +154,10 @@ public function upload(Request $request)
* @OA\Property(
* property="data",
* type="array",
*
* @OA\Items(
* type="object",
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="filename", type="string", example="document.pdf"),
* @OA\Property(property="path", type="string", example="/uploads/tenant/1/document.pdf"),
@@ -156,32 +184,42 @@ public function list(Request $request)
* description="파일을 삭제합니다.",
* tags={"Files"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(
* property="file_ids",
* type="array",
*
* @OA\Items(type="integer"),
* example={1, 2, 3}
* )
* )
* ),
*
* @OA\Response(
* response=200,
* description="파일 삭제 성공",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="파일 삭제")
* )
* ),
*
* @OA\Response(
* response=404,
* description="파일을 찾을 수 없음",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="파일을 찾을 수 없습니다.")
* )
@@ -202,18 +240,23 @@ public function delete(Request $request)
* description="특정 파일의 정보를 조회합니다.",
* tags={"Files"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\Parameter(
* name="file_id",
* in="query",
* required=true,
* description="파일 ID",
*
* @OA\Schema(type="integer", example=1)
* ),
*
* @OA\Response(
* response=200,
* description="파일 정보 조회 성공",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="파일 정보 조회"),
* @OA\Property(
@@ -228,11 +271,14 @@ public function delete(Request $request)
* )
* )
* ),
*
* @OA\Response(
* response=404,
* description="파일을 찾을 수 없음",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="파일을 찾을 수 없습니다.")
* )

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\MaterialService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
/**
* @OA\Tag(
@@ -24,29 +24,38 @@ public function __construct(private MaterialService $service) {}
* description="테넌트의 자재 목록을 조회합니다. (Products & Materials 통합 관리)",
* tags={"Products & Materials - Materials"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\Parameter(
* name="page",
* in="query",
* description="페이지 번호",
*
* @OA\Schema(type="integer", example=1)
* ),
*
* @OA\Parameter(
* name="size",
* in="query",
* description="페이지 크기",
*
* @OA\Schema(type="integer", example=10)
* ),
*
* @OA\Parameter(
* name="q",
* in="query",
* description="검색어 (자재명, 코드)",
*
* @OA\Schema(type="string", example="스틸")
* ),
*
* @OA\Response(
* response=200,
* description="자재 목록 조회 성공",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="조회 성공"),
* @OA\Property(
@@ -58,8 +67,10 @@ public function __construct(private MaterialService $service) {}
* @OA\Property(
* property="data",
* type="array",
*
* @OA\Items(
* type="object",
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="material_code", type="string", example="MAT001"),
* @OA\Property(property="name", type="string", example="스틸파이프 10mm"),
@@ -87,10 +98,13 @@ public function index(Request $request)
* description="새로운 자재를 등록합니다.",
* tags={"Products & Materials - Materials"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="material_code", type="string", example="MAT002"),
* @OA\Property(property="name", type="string", example="알루미늄 프로파일"),
* @OA\Property(property="specification", type="string", example="20x20x2mm"),
@@ -98,11 +112,14 @@ public function index(Request $request)
* @OA\Property(property="description", type="string", example="알루미늄 프로파일 20x20")
* )
* ),
*
* @OA\Response(
* response=201,
* description="자재 등록 성공",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="자재가 등록되었습니다."),
* @OA\Property(
@@ -112,18 +129,23 @@ public function index(Request $request)
* )
* )
* ),
*
* @OA\Response(
* response=409,
* description="중복된 자재 코드",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="중복된 자재 코드입니다.")
* )
* ),
*
* @OA\Response(
* response=422,
* description="유효성 검사 실패",
*
* @OA\JsonContent(ref="#/components/schemas/ErrorResponse")
* )
* )
@@ -142,18 +164,23 @@ public function store(Request $request)
* description="특정 자재의 상세 정보를 조회합니다.",
* tags={"Products & Materials - Materials"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\Parameter(
* name="id",
* in="path",
* required=true,
* description="자재 ID",
*
* @OA\Schema(type="integer", example=1)
* ),
*
* @OA\Response(
* response=200,
* description="자재 상세 조회 성공",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="조회 성공"),
* @OA\Property(
@@ -171,9 +198,11 @@ public function store(Request $request)
* )
* )
* ),
*
* @OA\Response(
* response=404,
* description="자재 정보를 찾을 수 없음",
*
* @OA\JsonContent(ref="#/components/schemas/ErrorResponse")
* )
* )
@@ -192,27 +221,35 @@ public function show(Request $request, int $id)
* description="기존 자재 정보를 수정합니다.",
* tags={"Products & Materials - Materials"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\Parameter(
* name="id",
* in="path",
* required=true,
* description="자재 ID",
*
* @OA\Schema(type="integer", example=1)
* ),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="name", type="string", example="스틸파이프 12mm"),
* @OA\Property(property="specification", type="string", example="직경 12mm, 두께 2mm"),
* @OA\Property(property="description", type="string", example="수정된 스틸 파이프")
* )
* ),
*
* @OA\Response(
* response=200,
* description="자재 수정 성공",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="자재가 수정되었습니다.")
* )
@@ -233,36 +270,47 @@ public function update(Request $request, int $id)
* description="자재를 소프트 삭제합니다. 사용 중인 자재는 삭제할 수 없습니다.",
* tags={"Products & Materials - Materials"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\Parameter(
* name="id",
* in="path",
* required=true,
* description="자재 ID",
*
* @OA\Schema(type="integer", example=1)
* ),
*
* @OA\Response(
* response=200,
* description="자재 삭제 성공",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="자재가 삭제되었습니다.")
* )
* ),
*
* @OA\Response(
* response=409,
* description="사용 중인 자재는 삭제 불가",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="사용 중인 자재는 삭제할 수 없습니다.")
* )
* ),
*
* @OA\Response(
* response=404,
* description="자재 정보를 찾을 수 없음",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="자재 정보를 찾을 수 없습니다.")
* )

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\MenuService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class MenuController extends Controller
{
@@ -19,7 +19,7 @@ public function index(Request $request)
public function show($id)
{
return ApiResponse::handle(function () use ($id) {
return MenuService::show(['id' => (int)$id]);
return MenuService::show(['id' => (int) $id]);
}, '메뉴 단건 조회');
}
@@ -33,7 +33,9 @@ public function store(Request $request)
public function update(Request $request, $id)
{
return ApiResponse::handle(function () use ($request, $id) {
$params = $request->all(); $params['id'] = (int)$id;
$params = $request->all();
$params['id'] = (int) $id;
return MenuService::update($params);
}, '메뉴 수정');
}
@@ -41,7 +43,7 @@ public function update(Request $request, $id)
public function destroy($id)
{
return ApiResponse::handle(function () use ($id) {
return MenuService::destroy(['id' => (int)$id]);
return MenuService::destroy(['id' => (int) $id]);
}, '메뉴 삭제');
}
@@ -55,7 +57,9 @@ public function reorder(Request $request)
public function toggle(Request $request, $id)
{
return ApiResponse::handle(function () use ($request, $id) {
$params = $request->all(); $params['id'] = (int)$id;
$params = $request->all();
$params['id'] = (int) $id;
return MenuService::toggle($params);
}, '메뉴 상태 토글');
}

View File

@@ -2,12 +2,12 @@
namespace App\Http\Controllers\Api\V1;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Http\Requests\ModelSet\CloneModelSetRequest;
use App\Http\Requests\ModelSet\CreateModelSetRequest;
use App\Http\Requests\ModelSet\UpdateModelSetRequest;
use App\Http\Requests\ModelSet\CloneModelSetRequest;
use App\Services\ModelSet\ModelSetService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class ModelSetController extends Controller
@@ -27,7 +27,7 @@ public function index(Request $request)
$modelSets = $this->modelSetService->getModelSets($request->validated());
return ApiResponse::success([
'model_sets' => $modelSets
'model_sets' => $modelSets,
], __('message.fetched'));
}
@@ -39,7 +39,7 @@ public function show($id)
$modelSet = $this->modelSetService->getModelSetDetail($id);
return ApiResponse::success([
'model_set' => $modelSet
'model_set' => $modelSet,
], __('message.fetched'));
}
@@ -51,7 +51,7 @@ public function store(CreateModelSetRequest $request)
$modelSet = $this->modelSetService->createModelSet($request->validated());
return ApiResponse::success([
'model_set' => $modelSet
'model_set' => $modelSet,
], __('message.created'));
}
@@ -63,7 +63,7 @@ public function update(UpdateModelSetRequest $request, $id)
$modelSet = $this->modelSetService->updateModelSet($id, $request->validated());
return ApiResponse::success([
'model_set' => $modelSet
'model_set' => $modelSet,
], __('message.updated'));
}
@@ -85,7 +85,7 @@ public function clone(CloneModelSetRequest $request, $id)
$newModelSet = $this->modelSetService->cloneModelSet($id, $request->validated());
return ApiResponse::success([
'model_set' => $newModelSet
'model_set' => $newModelSet,
], __('message.model_set.cloned'));
}
@@ -97,7 +97,7 @@ public function getCategoryFields($id)
$fields = $this->modelSetService->getModelSetCategoryFields($id);
return ApiResponse::success([
'category_fields' => $fields
'category_fields' => $fields,
], __('message.fetched'));
}
@@ -109,7 +109,7 @@ public function getBomTemplates($id)
$templates = $this->modelSetService->getModelSetBomTemplates($id);
return ApiResponse::success([
'bom_templates' => $templates
'bom_templates' => $templates,
], __('message.fetched'));
}
@@ -121,7 +121,7 @@ public function getEstimateParameters($id, Request $request)
$parameters = $this->modelSetService->getEstimateParameters($id, $request->all());
return ApiResponse::success([
'parameters' => $parameters
'parameters' => $parameters,
], __('message.fetched'));
}
@@ -134,4 +134,4 @@ public function calculateBom($id, Request $request)
return ApiResponse::success($result, __('message.calculated'));
}
}
}

View File

@@ -93,4 +93,4 @@ public function destroy(int $id)
return ['data' => null, 'message' => __('message.deleted')];
});
}
}
}

View File

@@ -40,6 +40,7 @@ public function destroy(int $id, int $item)
{
return ApiResponse::handle(function () use ($id, $item) {
$this->service->destroy($id, $item);
return 'success';
}, 'BOM 항목 삭제');
}
@@ -49,6 +50,7 @@ public function reorder(int $id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
$this->service->reorder($id, $request->input('items', []));
return 'success';
}, 'BOM 정렬 변경');
}
@@ -81,7 +83,6 @@ public function replace(Request $request, int $id)
}, __('message.bom.creat'));
}
/** 특정 제품 BOM에서 사용 중인 카테고리 목록 */
public function listCategories(int $id)
{
@@ -94,14 +95,13 @@ public function listCategories(int $id)
public function suggestCategories(Request $request)
{
return ApiResponse::handle(function () use ($request) {
$q = $request->query('q');
$limit = (int)($request->query('limit', 20));
$q = $request->query('q');
$limit = (int) ($request->query('limit', 20));
return $this->service->listCategoriesForTenant($q, $limit);
}, __('message.bom.fetch'));
}
/** Bom Tree */
public function tree(Request $request, int $id)
{

View File

@@ -2,11 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\ProductService;
use Illuminate\Http\Request;
class ProductController extends Controller
{
@@ -56,6 +55,7 @@ public function destroy(int $id)
{
return ApiResponse::handle(function () use ($id) {
$this->service->destroy($id);
return 'success';
}, '제품 삭제');
}
@@ -76,4 +76,3 @@ public function toggle(int $id)
}, '제품 활성 토글');
}
}

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\Authz\RoleService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class RoleController extends Controller
{
@@ -26,21 +26,21 @@ public function store(Request $request)
public function show($id)
{
return ApiResponse::handle(function () use ($id) {
return RoleService::show((int)$id);
return RoleService::show((int) $id);
}, '역할 상세 조회');
}
public function update(Request $request, $id)
{
return ApiResponse::handle(function () use ($request, $id) {
return RoleService::update((int)$id, $request->all());
return RoleService::update((int) $id, $request->all());
}, '역할 수정');
}
public function destroy($id)
{
return ApiResponse::handle(function () use ($id) {
return RoleService::destroy((int)$id);
return RoleService::destroy((int) $id);
}, '역할 삭제');
}
}

View File

@@ -2,38 +2,38 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\Authz\RolePermissionService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class RolePermissionController extends Controller
{
public function index($id, Request $request)
{
return ApiResponse::handle(function () use ($id) {
return RolePermissionService::list((int)$id);
return RolePermissionService::list((int) $id);
}, '역할 퍼미션 목록 조회');
}
public function grant($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return RolePermissionService::grant((int)$id, $request->all());
return RolePermissionService::grant((int) $id, $request->all());
}, '역할 퍼미션 부여');
}
public function revoke($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return RolePermissionService::revoke((int)$id, $request->all());
return RolePermissionService::revoke((int) $id, $request->all());
}, '역할 퍼미션 회수');
}
public function sync($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return RolePermissionService::sync((int)$id, $request->all());
return RolePermissionService::sync((int) $id, $request->all());
}, '역할 퍼미션 동기화');
}
}

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\TenantService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class TenantController extends Controller
{
@@ -50,6 +50,4 @@ public function restore(Request $request)
return TenantService::restoreTenant($request->all());
}, '테넌트 복구');
}
}

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\TenantFieldSettingService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
/**
* @OA\Tag(
@@ -22,18 +22,23 @@ class TenantFieldSettingController extends Controller
* description="전역 + 테넌트별 병합된 필드 설정 효과값을 조회합니다.",
* tags={"Settings - Fields"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\Response(
* response=200,
* description="필드 설정 목록 조회 성공",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="조회 성공"),
* @OA\Property(
* property="data",
* type="array",
*
* @OA\Items(
* type="object",
*
* @OA\Property(property="field_key", type="string", example="product_name_required"),
* @OA\Property(property="field_value", type="string", example="true"),
* @OA\Property(property="source", type="string", example="tenant", description="global 또는 tenant")
@@ -57,38 +62,50 @@ public function index(Request $request)
* description="여러 필드 설정을 트랜잭션으로 일괄 저장합니다.",
* tags={"Settings - Fields"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(
* property="fields",
* type="array",
*
* @OA\Items(
* type="object",
*
* @OA\Property(property="field_key", type="string", example="product_name_required"),
* @OA\Property(property="field_value", type="string", example="true")
* )
* )
* )
* ),
*
* @OA\Response(
* response=200,
* description="대량 저장 성공",
*
* @OA\JsonContent(ref="#/components/schemas/ApiResponse")
* ),
*
* @OA\Response(
* response=400,
* description="유효하지 않은 필드 타입",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="유효하지 않은 필드 타입입니다.")
* )
* ),
*
* @OA\Response(
* response=422,
* description="유효성 검사 실패",
*
* @OA\JsonContent(ref="#/components/schemas/ErrorResponse")
* )
* )
@@ -107,39 +124,52 @@ public function bulkUpsert(Request $request)
* description="특정 필드 설정을 개별적으로 수정합니다.",
* tags={"Settings - Fields"},
* security={{"ApiKeyAuth": {}, "BearerAuth": {}}},
*
* @OA\Parameter(
* name="key",
* in="path",
* required=true,
* description="필드 키",
*
* @OA\Schema(type="string", example="product_name_required")
* ),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="field_value", type="string", example="false")
* )
* ),
*
* @OA\Response(
* response=200,
* description="필드 설정 수정 성공",
*
* @OA\JsonContent(ref="#/components/schemas/ApiResponse")
* ),
*
* @OA\Response(
* response=404,
* description="필드 설정을 찾을 수 없음",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="해당 필드 설정을 찾을 수 없습니다.")
* )
* ),
*
* @OA\Response(
* response=400,
* description="유효하지 않은 필드 타입",
*
* @OA\JsonContent(
* type="object",
*
* @OA\Property(property="success", type="boolean", example=false),
* @OA\Property(property="message", type="string", example="유효하지 않은 필드 타입입니다.")
* )

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\TenantOptionGroupService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class TenantOptionGroupController extends Controller
{

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\TenantOptionValueService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class TenantOptionValueController extends Controller
{

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\TenantUserProfileService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class TenantUserProfileController extends Controller
{

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\MemberService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class UserController extends Controller
{
@@ -53,10 +53,10 @@ public function tenants(Request $request)
public function switchTenant(Request $request)
{
$tenant_id = $request->tenant_id;
$tenant_id = $request->tenant_id;
return ApiResponse::handle(function () use ($tenant_id) {
return MemberService::switchMyTenant($tenant_id);
}, '활성 테넌트 전환');
}
}

View File

@@ -2,38 +2,38 @@
namespace App\Http\Controllers\Api\V1;
use Illuminate\Http\Request;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Services\Authz\UserRoleService;
use App\Helpers\ApiResponse;
use Illuminate\Http\Request;
class UserRoleController extends Controller
{
public function index($id)
{
return ApiResponse::handle(function () use ($id) {
return UserRoleService::list((int)$id);
return UserRoleService::list((int) $id);
}, '사용자의 역할 목록 조회');
}
public function grant($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return UserRoleService::grant((int)$id, $request->all());
return UserRoleService::grant((int) $id, $request->all());
}, '사용자에게 역할 부여');
}
public function revoke($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return UserRoleService::revoke((int)$id, $request->all());
return UserRoleService::revoke((int) $id, $request->all());
}, '사용자의 역할 회수');
}
public function sync($id, Request $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return UserRoleService::sync((int)$id, $request->all());
return UserRoleService::sync((int) $id, $request->all());
}, '사용자의 역할 동기화');
}
}

View File

@@ -25,4 +25,4 @@ class Kernel extends HttpKernel
* 개별 미들웨어 설정
*/
protected $routeMiddleware = [];
}
}

View File

@@ -24,7 +24,6 @@ public function handle(Request $request, Closure $next)
'headers' => $request->headers->all(),
]);
$apiKey = $request->header('X-API-KEY');
$validApiKey = false;
@@ -37,13 +36,13 @@ public function handle(Request $request, Closure $next)
->exists();
}
if (!$validApiKey) {
if (! $validApiKey) {
return response()->json(['message' => 'Unauthorized. Invalid or missing API key'], 401);
}
// Bearer 인증 (Sanctum)
$user = [];
if($token = $request->bearerToken()) {
if ($token = $request->bearerToken()) {
$accessToken = PersonalAccessToken::findToken($token);
if ($accessToken && $accessToken->tokenable instanceof User) {
$user = $accessToken->tokenable;
@@ -79,9 +78,9 @@ public function handle(Request $request, Closure $next)
// 현재 라우트 확인 (경로 또는 이름)
$currentRoute = $request->route()->uri(); // 또는 $request->path()
if (!in_array($currentRoute, $allowWithoutAuth)) {
if (! in_array($currentRoute, $allowWithoutAuth)) {
// 인증정보(api_user, tenant_id) 없으면 튕김
if (!app()->bound('api_user')) {
if (! app()->bound('api_user')) {
throw new AuthenticationException('회원정보 정보 없음');
}
}

View File

@@ -2,11 +2,11 @@
namespace App\Http\Middleware;
use App\Models\Members\User as UserModel;
use App\Services\Authz\AccessService;
use Closure;
use Illuminate\Http\Request;
use Spatie\Permission\PermissionRegistrar;
use App\Services\Authz\AccessService;
use App\Models\Members\User as UserModel;
class CheckPermission
{
@@ -21,21 +21,21 @@ public function handle(Request $request, Closure $next)
// perm 미지정 라우트 처리 정책
// TODO :: 초기 도입 단계: 통과. (정책에 따라 403으로 바꿔도 됨)
if (!$perm && !$permsAny) {
if (! $perm && ! $permsAny) {
return $next($request);
// return response()->json(['success'=>false,'message'=>'권한 설정 누락','data'=>null], 403);
}
// 컨텍스트 확보
$tenantId = (int) app('tenant_id');
$userId = (int) app('api_user');
if (!$tenantId || !$userId) {
return response()->json(['success'=>false,'message'=>'인증 또는 테넌트 정보가 없습니다.','data'=>null], 401);
$userId = (int) app('api_user');
if (! $tenantId || ! $userId) {
return response()->json(['success' => false, 'message' => '인증 또는 테넌트 정보가 없습니다.', 'data' => null], 401);
}
$user = UserModel::find($userId);
if (!$user) {
return response()->json(['success'=>false,'message'=>'사용자 없음','data'=>null], 401);
if (! $user) {
return response()->json(['success' => false, 'message' => '사용자 없음', 'data' => null], 401);
}
// Spatie Teams 컨텍스트 고정
@@ -48,10 +48,11 @@ public function handle(Request $request, Closure $next)
return $next($request);
}
}
return response()->json(['success'=>false,'message'=>'권한이 없습니다.','data'=>null], 403);
return response()->json(['success' => false, 'message' => '권한이 없습니다.', 'data' => null], 403);
}
if (! AccessService::allows($user, $perm, $tenantId, 'api')) {
return response()->json(['success'=>false,'message'=>'권한이 없습니다.','data'=>null], 403);
return response()->json(['success' => false, 'message' => '권한이 없습니다.', 'data' => null], 403);
}
return $next($request);

View File

@@ -2,10 +2,10 @@
namespace App\Http\Middleware;
use App\Models\Member;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use App\Models\Member;
class CheckSwaggerAuth
{
@@ -13,19 +13,21 @@ public function handle(Request $request, Closure $next)
{
$token = Session::get('user_token');
if (!$token) {
if (! $token) {
// 원래 URL 저장 후 로그인 페이지로 이동
Session::put('redirect_to', $request->fullUrl());
return redirect()->route('login');
}
$user = Member::where('remember_token', $token)->first();
if (!$user) {
if (! $user) {
Session::forget('user_token');
Session::forget('user_id');
Session::put('redirect_to', $request->fullUrl());
return redirect()->route('login');
}

View File

@@ -22,4 +22,4 @@ public function handle(Request $request, Closure $next): Response
return $response;
}
}
}

View File

@@ -9,18 +9,18 @@ class PermMapper
{
/** HTTP 메서드 → 액션 버킷 */
private array $actionMap = [
'GET' => 'view',
'HEAD' => 'view',
'POST' => 'create',
'PUT' => 'update',
'PATCH' => 'update',
'GET' => 'view',
'HEAD' => 'view',
'POST' => 'create',
'PUT' => 'update',
'PATCH' => 'update',
'DELETE' => 'delete',
];
public function handle(Request $request, Closure $next)
{
$route = $request->route();
if (!$route) {
if (! $route) {
return $next($request);
}
@@ -33,6 +33,7 @@ public function handle(Request $request, Closure $next)
$forced = $route->defaults['perm'] ?? $route->defaults['permission'] ?? null;
if ($forced) {
$request->attributes->set('perm', $forced);
return $next($request);
}

View File

@@ -14,16 +14,16 @@ public function authorize(): bool
public function rules(): array
{
return [
'page' => 'nullable|integer|min:1',
'size' => 'nullable|integer|min:1|max:200',
'page' => 'nullable|integer|min:1',
'size' => 'nullable|integer|min:1|max:200',
'target_type' => 'nullable|string|max:100',
'target_id' => 'nullable|integer|min:1',
'action' => 'nullable|string|max:50',
'actor_id' => 'nullable|integer|min:1',
'from' => 'nullable|date',
'to' => 'nullable|date|after_or_equal:from',
'sort' => 'nullable|string|in:created_at',
'order' => 'nullable|string|in:asc,desc',
'target_id' => 'nullable|integer|min:1',
'action' => 'nullable|string|max:50',
'actor_id' => 'nullable|integer|min:1',
'from' => 'nullable|date',
'to' => 'nullable|date|after_or_equal:from',
'sort' => 'nullable|string|in:created_at',
'order' => 'nullable|string|in:asc,desc',
];
}
}

View File

@@ -1,19 +1,23 @@
<?php
namespace App\Http\Requests\Common;
use Illuminate\Foundation\Http\FormRequest;
class PaginateRequest extends FormRequest
{
public function authorize(): bool { return true; }
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'page' => 'nullable|integer|min:1',
'size' => 'nullable|integer|min:1|max:100',
'q' => 'nullable|string|max:100',
'sort' => 'nullable|string|in:id,code,name,created_at',
'page' => 'nullable|integer|min:1',
'size' => 'nullable|integer|min:1|max:100',
'q' => 'nullable|string|max:100',
'sort' => 'nullable|string|in:id,code,name,created_at',
'order' => 'nullable|string|in:asc,desc',
];
}
@@ -21,9 +25,10 @@ public function rules(): array
public function validatedOrDefaults(): array
{
$v = $this->validated();
$v['page'] = $v['page'] ?? 1;
$v['size'] = $v['size'] ?? 20;
$v['page'] = $v['page'] ?? 1;
$v['size'] = $v['size'] ?? 20;
$v['order'] = $v['order'] ?? 'desc';
return $v;
}
}

View File

@@ -15,9 +15,9 @@ public function rules(): array
{
return [
'target_version_id' => 'nullable|integer|min:1',
'name' => 'nullable|string|max:100',
'is_primary' => 'nullable|boolean',
'notes' => 'nullable|string',
'name' => 'nullable|string|max:100',
'is_primary' => 'nullable|boolean',
'notes' => 'nullable|string',
];
}
}

View File

@@ -22,8 +22,8 @@ public function messages(): array
{
return [
'other_template_id.required' => __('validation.required', ['attribute' => 'other_template_id']),
'other_template_id.integer' => __('validation.integer', ['attribute' => 'other_template_id']),
'other_template_id.min' => __('validation.min.numeric', ['attribute' => 'other_template_id', 'min' => 1]),
'other_template_id.integer' => __('validation.integer', ['attribute' => 'other_template_id']),
'other_template_id.min' => __('validation.min.numeric', ['attribute' => 'other_template_id', 'min' => 1]),
];
}
}

View File

@@ -1,17 +1,21 @@
<?php
namespace App\Http\Requests\Design\BomTemplate;
use Illuminate\Foundation\Http\FormRequest;
use App\Support\Validation\BomItemRules;
use Illuminate\Foundation\Http\FormRequest;
class ReplaceItemsRequest extends FormRequest
{
public function authorize(): bool { return true; }
public function authorize(): bool
{
return true;
}
public function rules(): array
{
$itemRules = collect(BomItemRules::base())
->mapWithKeys(fn($rule, $key) => ["items.*.$key" => $rule])
->mapWithKeys(fn ($rule, $key) => ["items.*.$key" => $rule])
->all();
return ['items' => 'required|array|min:1'] + $itemRules;
@@ -21,8 +25,8 @@ public function messages(): array
{
return [
'items.required' => __('validation.required', ['attribute' => 'items']),
'items.array' => __('validation.array', ['attribute' => 'items']),
'items.min' => __('validation.min.array', ['attribute' => 'items', 'min' => 1]),
'items.array' => __('validation.array', ['attribute' => 'items']),
'items.min' => __('validation.min.array', ['attribute' => 'items', 'min' => 1]),
];
}
}

View File

@@ -30,7 +30,7 @@ public function rules(): array
'parameters.power_source' => 'nullable|string|in:manual,electric,automatic',
'parameters.motor_type' => 'nullable|string|in:standard,low_noise,high_torque',
'parameters.material_grade' => 'nullable|string|in:standard,premium,luxury',
'company_name' => 'nullable|string|max:100'
'company_name' => 'nullable|string|max:100',
];
}
@@ -61,7 +61,7 @@ public function messages(): array
'parameters.material_grade.string' => __('error.validation.string'),
'parameters.material_grade.in' => __('error.validation.in'),
'company_name.string' => __('error.validation.string'),
'company_name.max' => __('error.validation.max.string')
'company_name.max' => __('error.validation.max.string'),
];
}
@@ -81,7 +81,7 @@ public function attributes(): array
'parameters.power_source' => '동력원',
'parameters.motor_type' => '모터타입',
'parameters.material_grade' => '자재등급',
'company_name' => '업체명'
'company_name' => '업체명',
];
}
}
}

View File

@@ -22,7 +22,7 @@ public function authorize(): bool
public function rules(): array
{
return [
'company_name' => 'nullable|string|max:100'
'company_name' => 'nullable|string|max:100',
];
}
@@ -35,7 +35,7 @@ public function messages(): array
{
return [
'company_name.string' => __('error.validation.string'),
'company_name.max' => __('error.validation.max.string')
'company_name.max' => __('error.validation.max.string'),
];
}
}
}

View File

@@ -1,21 +1,25 @@
<?php
namespace App\Http\Requests\Design\Model;
use Illuminate\Foundation\Http\FormRequest;
class StoreRequest extends FormRequest
{
public function authorize(): bool { return true; }
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'code' => 'required|string|max:100',
'name' => 'required|string|max:200',
'code' => 'required|string|max:100',
'name' => 'required|string|max:200',
'category_id' => 'nullable|integer',
'lifecycle' => 'nullable|string|max:50',
'lifecycle' => 'nullable|string|max:50',
'description' => 'nullable|string',
'is_active' => 'boolean',
'is_active' => 'boolean',
];
}

View File

@@ -40,7 +40,7 @@ public function rules(): array
'validation_rules.*.field' => 'nullable|string|max:50',
'validation_rules.*.rule' => 'nullable|string|max:200',
'validation_rules.*.message' => 'nullable|string|max:200',
'description' => 'nullable|string|max:500'
'description' => 'nullable|string|max:500',
];
}
@@ -84,7 +84,7 @@ public function messages(): array
'validation_rules.*.message.string' => __('error.validation.string'),
'validation_rules.*.message.max' => __('error.validation.max.string'),
'description.string' => __('error.validation.string'),
'description.max' => __('error.validation.max.string')
'description.max' => __('error.validation.max.string'),
];
}
@@ -114,7 +114,7 @@ public function attributes(): array
'validation_rules.*.field' => '검증 필드',
'validation_rules.*.rule' => '검증 규칙',
'validation_rules.*.message' => '검증 메시지',
'description' => '설명'
'description' => '설명',
];
}
}
}

View File

@@ -35,4 +35,4 @@ public function messages(): array
'parameters.array' => __('validation.array', ['attribute' => '견적 파라미터']),
];
}
}
}

View File

@@ -33,4 +33,4 @@ public function messages(): array
'status.in' => __('validation.in', ['attribute' => '상태']),
];
}
}
}