feat: UserApi.php Swagger 점검 및 개선 (Phase 3-4)

- UserUpdateRequest.php 생성 (검증 로직 분리)
- PasswordChangeRequest.php 생성 (비밀번호 변경 검증)
- SwitchTenantRequest.php 생성 (테넌트 전환 검증)
- UserApi.php에 Request 스키마 추가
- UserController.php FormRequest 적용 및 DI 패턴 적용
- MemberService static 호출 → DI 인스턴스 호출
- lang/ko/message.php user 메시지 키 추가
- SAM API Development Rules 준수 완료
This commit is contained in:
2025-11-07 02:44:11 +09:00
parent c87aadc357
commit 97c0d8245e
7 changed files with 412 additions and 21 deletions

View File

@@ -4,59 +4,62 @@
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Http\Requests\User\PasswordChangeRequest;
use App\Http\Requests\User\SwitchTenantRequest;
use App\Http\Requests\User\UserUpdateRequest;
use App\Services\MemberService;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function __construct(private MemberService $service) {}
public function index(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return MemberService::getMembers($request->all());
}, '회원목록 조회');
return $this->service->getMembers($request->all());
}, __('message.user.fetched'));
}
public function show($userNo)
{
return ApiResponse::handle(function () use ($userNo) {
return MemberService::getMember($userNo);
}, '회원 상세조회');
return $this->service->getMember($userNo);
}, __('message.user.fetched'));
}
public function me(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return MemberService::getMyInfo($request);
}, '나의 정보 조회');
return $this->service->getMyInfo($request);
}, __('message.user.me_fetched'));
}
public function meUpdate(Request $request)
public function meUpdate(UserUpdateRequest $request)
{
return ApiResponse::handle(function () use ($request) {
return MemberService::getMyUpdate($request);
}, '나의 정보 수정');
return $this->service->getMyUpdate($request);
}, __('message.user.me_updated'));
}
public function changePassword(Request $request)
public function changePassword(PasswordChangeRequest $request)
{
return ApiResponse::handle(function () use ($request) {
return MemberService::setMyPassword($request);
}, '나의 비밀번호 수정');
return $this->service->setMyPassword($request);
}, __('message.user.password_changed'));
}
public function tenants(Request $request)
{
return ApiResponse::handle(function () use ($request) {
return MemberService::getMyTenants($request);
}, '나의 테넌트 목록 조회');
return $this->service->getMyTenants($request);
}, __('message.user.tenants_fetched'));
}
public function switchTenant(Request $request)
public function switchTenant(SwitchTenantRequest $request)
{
$tenant_id = $request->tenant_id;
return ApiResponse::handle(function () use ($tenant_id) {
return MemberService::switchMyTenant($tenant_id);
}, '활성 테넌트 전환');
return ApiResponse::handle(function () use ($request) {
return $this->service->switchMyTenant($request->validated()['tenant_id']);
}, __('message.user.tenant_switched'));
}
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Http\Requests\User;
use Illuminate\Foundation\Http\FormRequest;
class PasswordChangeRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'current_password' => 'required|string',
'new_password' => 'required|string|min:8|confirmed',
'new_password_confirmation' => 'required|string',
];
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Http\Requests\User;
use Illuminate\Foundation\Http\FormRequest;
class SwitchTenantRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'tenant_id' => 'required|integer|exists:tenants,id',
];
}
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Http\Requests\User;
use Illuminate\Foundation\Http\FormRequest;
class UserUpdateRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'name' => 'sometimes|string|max:100',
'phone' => 'nullable|string|max:20',
'email' => 'sometimes|email|max:100',
];
}
}