Auto-create AppUser on first verify
All checks were successful
build-and-deploy / build-deploy (push) Successful in 28s

This commit is contained in:
androidlover5842
2026-01-26 21:49:45 +05:30
parent e3a7053d78
commit 619a48dd4f

View File

@@ -3,6 +3,7 @@ package com.android.trisolarisserver.controller
import com.android.trisolarisserver.controller.dto.PropertyUserResponse import com.android.trisolarisserver.controller.dto.PropertyUserResponse
import com.android.trisolarisserver.controller.dto.UserResponse import com.android.trisolarisserver.controller.dto.UserResponse
import com.android.trisolarisserver.repo.AppUserRepo import com.android.trisolarisserver.repo.AppUserRepo
import com.android.trisolarisserver.repo.OrganizationRepo
import com.android.trisolarisserver.repo.PropertyUserRepo import com.android.trisolarisserver.repo.PropertyUserRepo
import com.android.trisolarisserver.security.MyPrincipal import com.android.trisolarisserver.security.MyPrincipal
import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.FirebaseAuth
@@ -20,7 +21,8 @@ import org.springframework.http.HttpStatus
@RequestMapping("/auth") @RequestMapping("/auth")
class Auth( class Auth(
private val appUserRepo: AppUserRepo, private val appUserRepo: AppUserRepo,
private val propertyUserRepo: PropertyUserRepo private val propertyUserRepo: PropertyUserRepo,
private val organizationRepo: OrganizationRepo
) { ) {
private val logger = LoggerFactory.getLogger(Auth::class.java) private val logger = LoggerFactory.getLogger(Auth::class.java)
@@ -84,11 +86,26 @@ class Auth(
logger.warn("Auth verify failed: {}", ex.message) logger.warn("Auth verify failed: {}", ex.message)
throw ResponseStatusException(HttpStatus.UNAUTHORIZED, "Invalid token") throw ResponseStatusException(HttpStatus.UNAUTHORIZED, "Invalid token")
} }
val user = appUserRepo.findByFirebaseUid(decoded.uid) val user = appUserRepo.findByFirebaseUid(decoded.uid) ?: run {
?: run { val orgs = organizationRepo.findAll()
logger.warn("Auth verify user not found for uid={}", decoded.uid) 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") 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) logger.warn("Auth verify resolved uid={}, userId={}", decoded.uid, user.id)
return MyPrincipal( return MyPrincipal(
userId = user.id ?: throw ResponseStatusException(HttpStatus.UNAUTHORIZED, "User id missing"), userId = user.id ?: throw ResponseStatusException(HttpStatus.UNAUTHORIZED, "User id missing"),