fix : 회원 관리 API 수정 및 ApiResponse 타입 수정
This commit is contained in:
@@ -3,8 +3,11 @@
|
||||
namespace App\Services;
|
||||
|
||||
use App\Helpers\ApiResponse;
|
||||
use App\Models\Members\User;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use App\Models\Members\User;
|
||||
use App\Models\Members\UserTenant;
|
||||
|
||||
class MemberService
|
||||
{
|
||||
@@ -64,118 +67,131 @@ public static function getMyInfo()
|
||||
}
|
||||
|
||||
/**
|
||||
* 회원 등록 또는 수정
|
||||
* 내정보 수정
|
||||
*/
|
||||
public static function setMember(array $params)
|
||||
public static function getMyUpdate($request)
|
||||
{
|
||||
if ($res = ApiResponse::validate(isset($params['user_id']), '아이디 없음')) return $res;
|
||||
if ($res = ApiResponse::validate(isset($params['user_ncnm']), '이름 없음')) return $res;
|
||||
$debug = app()->environment('local');
|
||||
if ($debug) DB::enableQueryLog();
|
||||
|
||||
$pwd1 = $params['user_pwd1'] ?? null;
|
||||
$pwd2 = $params['user_pwd2'] ?? null;
|
||||
if ($res = ApiResponse::validate(
|
||||
!$pwd1 || $pwd1 === $pwd2,
|
||||
'비밀번호가 일치하지 않음'
|
||||
)) return $res;
|
||||
$apiUser = app('api_user');
|
||||
|
||||
$now = now();
|
||||
|
||||
$data = [
|
||||
'USER_EMAIL' => $params['user_email'] ?? null,
|
||||
'USER_HP' => $params['user_hp'] ?? null,
|
||||
'USER_IP' => $params['user_ip'] ?? null,
|
||||
'ALT_DTTM' => $now,
|
||||
];
|
||||
// 요청으로 받은 수정 데이터 유효성 검사
|
||||
$validatedData = $request->validate([
|
||||
'name' => 'sometimes|string|max:255',
|
||||
'phone' => 'sometimes|string|max:20',
|
||||
'email' => 'sometimes|email|max:100',
|
||||
'options' => 'nullable|json',
|
||||
'profile_photo_path' => 'nullable|string|max:255',
|
||||
]);
|
||||
|
||||
if (!empty($params['user_start_dt'])) {
|
||||
$data['USER_START_DT'] = $params['user_start_dt'];
|
||||
}
|
||||
if (!empty($params['user_end_dt'])) {
|
||||
$data['USER_END_DT'] = $params['user_end_dt'];
|
||||
$user = User::find($apiUser);
|
||||
|
||||
if (!$user) {
|
||||
return ApiResponse::error('User not found.', 404);
|
||||
}
|
||||
|
||||
// 신규 등록
|
||||
if (empty($params['user_no'])) {
|
||||
// 사용자 정보 업데이트
|
||||
$user->update($validatedData);
|
||||
|
||||
// 초기 비빌번호 설정이 없으면 0000 으로 셋팅
|
||||
$pwd = $pwd1 ?? '0000';
|
||||
// 수정 성공 시 success 반환
|
||||
return ApiResponse::response('success');
|
||||
}
|
||||
|
||||
$data += [
|
||||
'USER_ID' => $params['user_id'],
|
||||
'USER_PWD' => hash('sha256', $pwd),
|
||||
'USER_NCNM' => $params['user_ncnm'] ?? null,
|
||||
'USER_PART' => $params['user_part'] ?? null,
|
||||
'USER_DEPT' => $params['user_dept'] ?? null,
|
||||
'USER_ROLE' => $params['user_role'] ?? null,
|
||||
'USER_STATUS' => $params['user_status'] ?? null,
|
||||
'USER_MEMO' => $params['user_memo'] ?? null,
|
||||
'REG_DTTM' => $now,
|
||||
'ALT_DTTM' => $now,
|
||||
];
|
||||
/**
|
||||
* 내 비밀번호 수정
|
||||
*/
|
||||
public static function setMyPassword($request)
|
||||
{
|
||||
$debug = app()->environment('local');
|
||||
if ($debug) DB::enableQueryLog();
|
||||
|
||||
DB::table('SITE_USER_INFO')->insert($data);
|
||||
$apiUserId = app('api_user'); // 현재 로그인한 사용자 PK
|
||||
|
||||
// 유효성 검사 (확인 비밀번호는 선택)
|
||||
$validated = $request->validate([
|
||||
'current_password' => 'required|string',
|
||||
'new_password' => 'required|string|min:8|max:64',
|
||||
]);
|
||||
|
||||
// 선택적으로 확인 비밀번호가 온 경우 체크
|
||||
if ($request->filled('new_password_confirmation') &&
|
||||
$request->input('new_password_confirmation') !== $validated['new_password']) {
|
||||
return ApiResponse::error('비밀번호 확인이 일치하지 않습니다.', 400);
|
||||
}
|
||||
|
||||
// 수정
|
||||
else {
|
||||
if (!empty($pwd1)) {
|
||||
$data['USER_PWD'] = hash('sha256', $pwd1);
|
||||
}
|
||||
|
||||
if (AdminPermissionService::hasPermission(session('Adm.token'), 'AC')) {
|
||||
$data += [
|
||||
'USER_ID' => $params['user_id'],
|
||||
'USER_NCNM' => $params['user_ncnm'],
|
||||
'USER_PART' => $params['user_part'],
|
||||
'USER_DEPT' => $params['user_dept'],
|
||||
'USER_ROLE' => $params['user_role'],
|
||||
'USER_STATUS' => $params['user_status'],
|
||||
'USER_MEMO' => $params['user_memo'],
|
||||
'ALT_DTTM' => $now,
|
||||
];
|
||||
}
|
||||
|
||||
DB::table('SITE_USER_INFO')
|
||||
->where('USER_NO', $params['user_no'])
|
||||
->update($data);
|
||||
// 유저 조회
|
||||
$user = User::find($apiUserId);
|
||||
if (!$user) {
|
||||
return ApiResponse::error('유저를 찾을 수 없음', 404);
|
||||
}
|
||||
|
||||
// 현재 비밀번호 확인
|
||||
if (!Hash::check($validated['current_password'], $user->password)) {
|
||||
return ApiResponse::error('현재 비밀번호가 일치하지 않습니다.', 400);
|
||||
}
|
||||
|
||||
// 기존 비밀번호와 동일한지 방지
|
||||
if (Hash::check($validated['new_password'], $user->password)) {
|
||||
return ApiResponse::error('새 비밀번호가 기존 비밀번호와 동일합니다.', 400);
|
||||
}
|
||||
|
||||
// 비밀번호 변경 (guarded 우회: 직접 대입 + save)
|
||||
$user->password = Hash::make($validated['new_password']);
|
||||
$saved = $user->save();
|
||||
|
||||
// (선택) 모든 기존 토큰 무효화하려면 아래 주석 해제
|
||||
// $user->tokens()->delete();
|
||||
|
||||
return ApiResponse::response('success');
|
||||
}
|
||||
|
||||
/**
|
||||
* 관리자 권한 삭제
|
||||
* 나의 테넌트 목록
|
||||
*/
|
||||
public static function delAdmin(int $userNo)
|
||||
public static function getMyTenants()
|
||||
{
|
||||
DB::table('SITE_ADMIN')->where('UNO', $userNo)->delete();
|
||||
DB::table('SITE_USER_INFO')
|
||||
->where('USER_NO', $userNo)
|
||||
->update(['USER_STATUS' => '02']);
|
||||
$debug = app()->environment('local');
|
||||
if ($debug) DB::enableQueryLog();
|
||||
|
||||
return ApiResponse::response('success');
|
||||
$apiUser = app('api_user');
|
||||
$data = UserTenant::join('tenants', 'user_tenants.tenant_id', '=', 'tenants.id')
|
||||
->where('user_tenants.user_id', $apiUser)
|
||||
->get([
|
||||
'tenants.id',
|
||||
'tenants.company_name',
|
||||
'user_tenants.is_active',
|
||||
'user_tenants.is_default'
|
||||
]);
|
||||
|
||||
return ApiResponse::response('result', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 관리자 권한 등록
|
||||
*/
|
||||
public static function setAdmin(int $userNo)
|
||||
{
|
||||
$mem = DB::table('SITE_USER_INFO')
|
||||
->select('USER_ROLE', 'USER_PART')
|
||||
->where('USER_NO', $userNo)
|
||||
->first();
|
||||
if (!$mem) {
|
||||
return ApiResponse::error('존재하지 않는 회원입니다.', 404);
|
||||
}
|
||||
|
||||
DB::table('SITE_ADMIN')->updateOrInsert(
|
||||
['UNO' => $userNo],
|
||||
['LEVEL' => 'public', 'COMMENT' => '일반관리자']
|
||||
);
|
||||
DB::table('SITE_USER_INFO')
|
||||
->where('USER_NO', $userNo)
|
||||
->update(['USER_STATUS' => '01']);
|
||||
/**
|
||||
* 나의 테넌트 전환
|
||||
*/
|
||||
public static function switchMyTenant(int $tenantId)
|
||||
{
|
||||
$debug = app()->environment('local');
|
||||
if ($debug) DB::enableQueryLog();
|
||||
|
||||
$apiUser = app('api_user');
|
||||
|
||||
// 1) 현재 유저의 기본 테넌트를 모두 해제
|
||||
UserTenant::where('user_id', $apiUser)
|
||||
->where('is_default', 1)
|
||||
->update(['is_default' => 0]);
|
||||
|
||||
// 2) 지정한 tenant_id를 기본 테넌트로 설정
|
||||
$updated = UserTenant::where('user_id', $apiUser)
|
||||
->where('tenant_id', $tenantId)
|
||||
->update(['is_default' => 1]);
|
||||
|
||||
if (!$updated) {
|
||||
return ApiResponse::error('해당 테넌트를 찾을 수 없습니다.', 404);
|
||||
}
|
||||
|
||||
return ApiResponse::response('success');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user