diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/Guests.kt b/src/main/kotlin/com/android/trisolarisserver/controller/Guests.kt index c736e04..f3b9c42 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/Guests.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/Guests.kt @@ -4,6 +4,7 @@ import com.android.trisolarisserver.component.PropertyAccess import com.android.trisolarisserver.component.GuestSignatureStorage import com.android.trisolarisserver.controller.dto.GuestCreateRequest import com.android.trisolarisserver.controller.dto.GuestResponse +import com.android.trisolarisserver.controller.dto.GuestUpdateRequest import com.android.trisolarisserver.controller.dto.GuestVehicleRequest import com.android.trisolarisserver.models.booking.Guest import com.android.trisolarisserver.models.booking.GuestVehicle @@ -101,6 +102,36 @@ class Guests( return setOf(saved).toResponse(propertyId, guestVehicleRepo, guestRatingRepo).first() } + @PutMapping("/{guestId}") + fun updateGuest( + @PathVariable propertyId: UUID, + @PathVariable guestId: UUID, + @AuthenticationPrincipal principal: MyPrincipal?, + @RequestBody request: GuestUpdateRequest + ): GuestResponse { + requireMember(propertyAccess, propertyId, principal) + val (_, guest) = requirePropertyGuest(propertyRepo, guestRepo, propertyId, guestId) + + val phone = request.phoneE164?.trim()?.takeIf { it.isNotBlank() } + if (phone != null) { + val existing = guestRepo.findByPropertyIdAndPhoneE164(propertyId, phone) + if (existing != null && existing.id != guest.id) { + throw ResponseStatusException(HttpStatus.CONFLICT, "Phone number already exists") + } + guest.phoneE164 = phone + } + + val name = request.name?.trim()?.ifBlank { null } + val nationality = request.nationality?.trim()?.ifBlank { null } + val address = request.addressText?.trim()?.ifBlank { null } + if (name != null) guest.name = name + if (nationality != null) guest.nationality = nationality + if (address != null) guest.addressText = address + guest.updatedAt = OffsetDateTime.now() + val saved = guestRepo.save(guest) + return setOf(saved).toResponse(propertyId, guestVehicleRepo, guestRatingRepo).first() + } + @GetMapping("/search") fun search( @PathVariable propertyId: UUID, diff --git a/src/main/kotlin/com/android/trisolarisserver/controller/dto/OrgPropertyDtos.kt b/src/main/kotlin/com/android/trisolarisserver/controller/dto/OrgPropertyDtos.kt index 9f84de0..21dd13a 100644 --- a/src/main/kotlin/com/android/trisolarisserver/controller/dto/OrgPropertyDtos.kt +++ b/src/main/kotlin/com/android/trisolarisserver/controller/dto/OrgPropertyDtos.kt @@ -58,6 +58,13 @@ data class GuestCreateRequest( val addressText: String? = null ) +data class GuestUpdateRequest( + val phoneE164: String? = null, + val name: String? = null, + val nationality: String? = null, + val addressText: String? = null +) + data class GuestVehicleRequest( val vehicleNumber: String, val bookingId: UUID