From 619a48dd4f135d1628a1aeefbae15a207ba9db4d Mon Sep 17 00:00:00 2001 From: androidlover5842 Date: Mon, 26 Jan 2026 21:49:45 +0530 Subject: [PATCH] Auto-create AppUser on first verify --- .../trisolarisserver/controller/Auth.kt | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/Auth.kt b/src/main/kotlin/com/android/trisolarisserver/controller/Auth.kt index 546a39a..74aefa9 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/Auth.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/Auth.kt @@ -3,6 +3,7 @@ package com.android.trisolarisserver.controller import com.android.trisolarisserver.controller.dto.PropertyUserResponse import com.android.trisolarisserver.controller.dto.UserResponse import com.android.trisolarisserver.repo.AppUserRepo +import com.android.trisolarisserver.repo.OrganizationRepo import com.android.trisolarisserver.repo.PropertyUserRepo import com.android.trisolarisserver.security.MyPrincipal import com.google.firebase.auth.FirebaseAuth @@ -20,7 +21,8 @@ import org.springframework.http.HttpStatus @RequestMapping("/auth") class Auth( private val appUserRepo: AppUserRepo, - private val propertyUserRepo: PropertyUserRepo + private val propertyUserRepo: PropertyUserRepo, + private val organizationRepo: OrganizationRepo ) { private val logger = LoggerFactory.getLogger(Auth::class.java) @@ -84,11 +86,26 @@ class Auth( logger.warn("Auth verify failed: {}", ex.message) throw ResponseStatusException(HttpStatus.UNAUTHORIZED, "Invalid token") } - val user = appUserRepo.findByFirebaseUid(decoded.uid) - ?: run { - logger.warn("Auth verify user not found for uid={}", decoded.uid) + val user = appUserRepo.findByFirebaseUid(decoded.uid) ?: run { + val orgs = organizationRepo.findAll() + if (orgs.size != 1) { + logger.warn("Auth verify user not found for uid={}, orgCount={}", decoded.uid, orgs.size) throw ResponseStatusException(HttpStatus.UNAUTHORIZED, "User not found") } + val org = orgs.first() + val phone = decoded.claims["phone_number"] as? String + val name = decoded.claims["name"] as? String + val created = appUserRepo.save( + com.android.trisolarisserver.models.property.AppUser( + org = org, + firebaseUid = decoded.uid, + phoneE164 = phone, + name = name + ) + ) + logger.warn("Auth verify auto-created user uid={}, userId={}, orgId={}", decoded.uid, created.id, org.id) + created + } logger.warn("Auth verify resolved uid={}, userId={}", decoded.uid, user.id) return MyPrincipal( userId = user.id ?: throw ResponseStatusException(HttpStatus.UNAUTHORIZED, "User id missing"),