/
itp_practice
/
itp_backend
Обзор
Документация
Войти
/
itp_practice
/
itp_backend
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
app/Http/Controllers/UserProfileController.php
176 строк
6 KB
vivanenko
profile edit
29 май 2025, 19:57
29 май 2025, 19:57
2ec716b
Код
Авторство
О чём код?
<?php namespace App\Http\Controllers; use App\Http\Requests\UpdateEmailRequest; use App\Http\Requests\UpdateTelegramRequest; use App\Http\Resources\UserResource; use App\Services\UserProfileService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Log; /** * User Profile Management Controller * * Handles user profile updates following SOLID principles: * - Single Responsibility: Only handles HTTP layer for profile updates * - Open/Closed: Extensible for new profile update types * - Dependency Inversion: Depends on UserProfileService abstraction */ class UserProfileController extends Controller { public function __construct( private UserProfileService $userProfileService ) {} /** * Update user email * * @param UpdateEmailRequest $request * @return JsonResponse */ public function updateEmail(UpdateEmailRequest $request): JsonResponse { try { $user = Auth::user(); Log::info('Email update attempt', [ 'user_id' => $user->id, 'current_email' => $user->email, 'new_email' => $request->validated('email') ]); // Business Logic Layer - delegate to service $updatedUser = $this->userProfileService->updateEmail( $user, $request->validated('email') ); Log::info('Email updated successfully', [ 'user_id' => $user->id, 'new_email' => $updatedUser->email ]); return response()->json([ 'success' => true, 'message' => 'Email успешно обновлен', 'user' => new UserResource($updatedUser) ]); } catch (\Exception $e) { Log::error('Email update failed', [ 'user_id' => Auth::id(), 'error' => $e->getMessage() ]); // Return appropriate error based on exception type if ($e instanceof \App\Exceptions\EmailAlreadyExistsException) { return response()->json([ 'success' => false, 'message' => 'Этот email уже используется другим пользователем' ], 409); } return response()->json([ 'success' => false, 'message' => 'Ошибка при обновлении email' ], 500); } } /** * Update user Telegram data * * @param UpdateTelegramRequest $request * @return JsonResponse */ public function updateTelegram(UpdateTelegramRequest $request): JsonResponse { try { $user = Auth::user(); Log::info('Telegram data update attempt', [ 'user_id' => $user->id, 'current_telegram_username' => $user->telegram_username, 'current_telegram_id' => $user->telegram_id, 'request_data' => $request->validated() ]); // Business Logic Layer - delegate to service $updatedUser = $this->userProfileService->updateTelegram( $user, $request->validated() ); Log::info('Telegram data updated successfully', [ 'user_id' => $user->id, 'new_telegram_username' => $updatedUser->telegram_username, 'new_telegram_id' => $updatedUser->telegram_id ]); return response()->json([ 'success' => true, 'message' => 'Данные Telegram успешно обновлены', 'user' => new UserResource($updatedUser) ]); } catch (\Exception $e) { Log::error('Telegram data update failed', [ 'user_id' => Auth::id(), 'error' => $e->getMessage() ]); // Return appropriate error based on exception type if ($e instanceof \App\Exceptions\TelegramDataAlreadyExistsException) { return response()->json([ 'success' => false, 'message' => 'Эти данные Telegram уже используются другим пользователем' ], 409); } return response()->json([ 'success' => false, 'message' => 'Ошибка при обновлении данных Telegram' ], 500); } } /** * Get verification token for Telegram linking * * @param Request $request * @return JsonResponse */ public function getTelegramVerifyToken(Request $request): JsonResponse { try { $user = Auth::user(); Log::info('Telegram verification token requested', [ 'user_id' => $user->id ]); // Business Logic Layer - delegate to service $tokenData = $this->userProfileService->generateTelegramVerifyToken($user); return response()->json([ 'success' => true, 'token' => $tokenData['token'], 'botUsername' => $tokenData['botUsername'] ]); } catch (\Exception $e) { Log::error('Telegram verification token generation failed', [ 'user_id' => Auth::id(), 'error' => $e->getMessage() ]); return response()->json([ 'success' => false, 'message' => 'Ошибка при генерации токена верификации' ], 500); } } }