feat: [org-chart] 조직도 관리 API 이관 (8개 엔드포인트)

- OrgChartController + OrgChartService 신규 생성
- FormRequest 5개 (Assign/Unassign/ReorderEmployees/ReorderDepartments/ToggleHide)
- Department 모델 options cast 추가
- Swagger 문서 (OrgChartApi.php) 생성
- hr.php 라우트 그룹 추가 (/v1/org-chart)
This commit is contained in:
김보곤
2026-03-22 17:22:12 +09:00
parent d502c9b85d
commit 902f681f6e
11 changed files with 1588 additions and 24 deletions

View File

@@ -0,0 +1,82 @@
<?php
namespace App\Http\Controllers\Api\V1;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Http\Requests\OrgChart\AssignRequest;
use App\Http\Requests\OrgChart\ReorderDepartmentsRequest;
use App\Http\Requests\OrgChart\ReorderEmployeesRequest;
use App\Http\Requests\OrgChart\ToggleHideRequest;
use App\Http\Requests\OrgChart\UnassignRequest;
use App\Services\OrgChartService;
use Illuminate\Http\Request;
class OrgChartController extends Controller
{
public function __construct(private OrgChartService $service) {}
// GET /v1/org-chart
public function index(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return $this->service->getOrgChart($request->all());
}, __('message.fetched'));
}
// GET /v1/org-chart/stats
public function stats()
{
return ApiResponse::handle(function () {
return $this->service->getStats();
}, __('message.fetched'));
}
// GET /v1/org-chart/unassigned
public function unassigned(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return $this->service->getUnassigned($request->all());
}, __('message.fetched'));
}
// POST /v1/org-chart/assign
public function assign(AssignRequest $request)
{
return ApiResponse::handle(function () use ($request) {
return $this->service->assign($request->validated());
}, __('message.updated'));
}
// POST /v1/org-chart/unassign
public function unassign(UnassignRequest $request)
{
return ApiResponse::handle(function () use ($request) {
return $this->service->unassign($request->validated());
}, __('message.updated'));
}
// PUT /v1/org-chart/reorder-employees
public function reorderEmployees(ReorderEmployeesRequest $request)
{
return ApiResponse::handle(function () use ($request) {
return $this->service->reorderEmployees($request->validated());
}, __('message.reordered'));
}
// PUT /v1/org-chart/reorder-departments
public function reorderDepartments(ReorderDepartmentsRequest $request)
{
return ApiResponse::handle(function () use ($request) {
return $this->service->reorderDepartments($request->validated());
}, __('message.reordered'));
}
// PATCH /v1/org-chart/departments/{id}/toggle-hide
public function toggleHide(int $id, ToggleHideRequest $request)
{
return ApiResponse::handle(function () use ($id, $request) {
return $this->service->toggleHide($id, $request->validated());
}, __('message.updated'));
}
}