feat: login v2

This commit is contained in:
2025-09-10 17:26:32 +03:30
parent a2e49f985e
commit d9d7c078bb
6 changed files with 187 additions and 5 deletions
+78 -2
View File
@@ -22,6 +22,82 @@
use App\Models\UserBreathingSession;
class UserController extends Controller
{
public function loginV2(Request $request)
{
$data = $request->validate([
'token' => 'required|string',
'package_name' => 'required|string',
]);
$response = Http::acceptJson()->withToken($data['token'])->get('http://localhost:8000/api/status', [
'package_name' => $request['package_name']
]);
if (!$response->successful()) {
return response()->json(['message' => 'invalid token'], 401);
}
$response = json_decode($response->body(), true);
// First, try to find user by identifier
$user = null;
if (!empty($response['uuid'])) {
$user = User::where('identifier', $response['uuid'])->first();
}
// If not found, try by email
if (!$user) {
$user = User::where('email', $response['email'])->first();
}
// If user still doesn't exist, create new
if (!$user) {
$user = User::create([
'email' => $response['email'],
'identifier' => $response['uuid'] ?? null,
'password' => config('app.default_password'),
'name' => trim(($response['first_name'] ?? '') . ' ' . ($response['last_name'] ?? '')),
'mobile' => $response['mobile'] ?? null,
]);
} else {
// Only update name and mobile for existing user
$user->name = trim(($response['first_name'] ?? '') . ' ' . ($response['last_name'] ?? ''));
$user->mobile = $response['mobile'] ?? $user->mobile;
$user->save(); // Do NOT update identifier!
}
$access_token = $user->createToken('user')->plainTextToken;
return [
'email' => $user->email,
'identifier' => $user->identifier,
'token' => $access_token,
'user' => $user,
];
}
public function loginForeginer(Request $request)
{
$request->validate([
'user_token' => ['required'],
'package_name' => ['required', new PackageNameExist],
]);
$response = $this->repository->userTokenVerify($request['package_name'], $request['user_token']);
if ($response['ok']) {
$user = User::where('identifier', $response['data']['identifier'])->first();
if (empty($user)) {
$user = new User();
$user['identifier'] = $response['data']['identifier'];
$user['name'] = $response['data']['username'];
$user->save();
}
if (!empty($request['fcm_token'])) FcmToken::firstOrCreate(['token' => $request['fcm_token'], 'user_id' => $user['id']]);
$access_token = $user->createToken('user')->plainTextToken;
return ['identifier' => $user['identifier'], 'token' => $access_token];
} else abort(500);
}
public function login(Request $request)
{
$data = $request->validate([
@@ -356,8 +432,8 @@ public function profile()
return response()->json([
'email' => $user->email,
'first_name' => $user->first_name,
'last_name' => $user->last_name,
'name' => $user->name,
// 'last_name' => $user->last_name,
'mobile'=> $user->mobile,
'birthday' => $user ->birthday,
'xp' => $user->xp,