feat(API): Position API 추가 (직급/직책 통합)
- Position 모델 생성 (type: rank | title) - PositionService: CRUD + reorder 구현 - PositionController: REST API 엔드포인트 - Swagger 문서 작성 (PositionApi.php) - 마이그레이션: positions 테이블 + common_codes 등록 - routes/api.php에 라우트 등록 Phase L-3 (직급관리), L-4 (직책관리) 백엔드 완료 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
59
app/Http/Requests/PositionRequest.php
Normal file
59
app/Http/Requests/PositionRequest.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use App\Models\Tenants\Position;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class PositionRequest extends FormRequest
|
||||
{
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
$method = $this->method();
|
||||
|
||||
if ($method === 'GET') {
|
||||
return [
|
||||
'type' => ['nullable', Rule::in([Position::TYPE_RANK, Position::TYPE_TITLE])],
|
||||
'is_active' => 'nullable|boolean',
|
||||
'q' => 'nullable|string|max:100',
|
||||
'per_page' => 'nullable|integer|min:1|max:100',
|
||||
'page' => 'nullable|integer|min:1',
|
||||
];
|
||||
}
|
||||
|
||||
if ($method === 'POST') {
|
||||
return [
|
||||
'type' => ['required', Rule::in([Position::TYPE_RANK, Position::TYPE_TITLE])],
|
||||
'name' => 'required|string|max:50',
|
||||
'sort_order' => 'nullable|integer|min:0',
|
||||
'is_active' => 'nullable|boolean',
|
||||
];
|
||||
}
|
||||
|
||||
if (in_array($method, ['PUT', 'PATCH'])) {
|
||||
return [
|
||||
'name' => 'nullable|string|max:50',
|
||||
'sort_order' => 'nullable|integer|min:0',
|
||||
'is_active' => 'nullable|boolean',
|
||||
];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
public function messages(): array
|
||||
{
|
||||
return [
|
||||
'type.required' => __('validation.required', ['attribute' => '유형']),
|
||||
'type.in' => __('validation.in', ['attribute' => '유형']),
|
||||
'name.required' => __('validation.required', ['attribute' => '명칭']),
|
||||
'name.max' => __('validation.max.string', ['attribute' => '명칭', 'max' => 50]),
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user