Allow staff rate changes only before first payment
All checks were successful
build-and-deploy / build-deploy (push) Successful in 36s
All checks were successful
build-and-deploy / build-deploy (push) Successful in 36s
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
package com.android.trisolarisserver.controller.room
|
package com.android.trisolarisserver.controller.room
|
||||||
import com.android.trisolarisserver.controller.common.parseOffset
|
import com.android.trisolarisserver.controller.common.parseOffset
|
||||||
import com.android.trisolarisserver.controller.common.requireMember
|
import com.android.trisolarisserver.controller.common.requireMember
|
||||||
import com.android.trisolarisserver.controller.common.requireRole
|
|
||||||
import com.android.trisolarisserver.controller.common.requireRoomStayForProperty
|
import com.android.trisolarisserver.controller.common.requireRoomStayForProperty
|
||||||
|
|
||||||
import com.android.trisolarisserver.component.auth.PropertyAccess
|
import com.android.trisolarisserver.component.auth.PropertyAccess
|
||||||
@@ -11,6 +10,7 @@ import com.android.trisolarisserver.controller.dto.rate.RoomStayRateChangeRespon
|
|||||||
import com.android.trisolarisserver.models.property.Role
|
import com.android.trisolarisserver.models.property.Role
|
||||||
import com.android.trisolarisserver.models.room.RateSource
|
import com.android.trisolarisserver.models.room.RateSource
|
||||||
import com.android.trisolarisserver.models.room.RoomStay
|
import com.android.trisolarisserver.models.room.RoomStay
|
||||||
|
import com.android.trisolarisserver.repo.booking.PaymentRepo
|
||||||
import com.android.trisolarisserver.repo.property.PropertyUserRepo
|
import com.android.trisolarisserver.repo.property.PropertyUserRepo
|
||||||
import com.android.trisolarisserver.repo.room.RoomStayRepo
|
import com.android.trisolarisserver.repo.room.RoomStayRepo
|
||||||
import com.android.trisolarisserver.security.MyPrincipal
|
import com.android.trisolarisserver.security.MyPrincipal
|
||||||
@@ -29,6 +29,7 @@ import java.util.UUID
|
|||||||
class RoomStays(
|
class RoomStays(
|
||||||
private val propertyAccess: PropertyAccess,
|
private val propertyAccess: PropertyAccess,
|
||||||
private val propertyUserRepo: PropertyUserRepo,
|
private val propertyUserRepo: PropertyUserRepo,
|
||||||
|
private val paymentRepo: PaymentRepo,
|
||||||
private val roomStayRepo: RoomStayRepo
|
private val roomStayRepo: RoomStayRepo
|
||||||
) {
|
) {
|
||||||
|
|
||||||
@@ -75,8 +76,20 @@ class RoomStays(
|
|||||||
@AuthenticationPrincipal principal: MyPrincipal?,
|
@AuthenticationPrincipal principal: MyPrincipal?,
|
||||||
@RequestBody request: RoomStayRateChangeRequest
|
@RequestBody request: RoomStayRateChangeRequest
|
||||||
): RoomStayRateChangeResponse {
|
): RoomStayRateChangeResponse {
|
||||||
requireRole(propertyAccess, propertyId, principal, Role.ADMIN, Role.MANAGER)
|
val actor = requireMember(propertyAccess, propertyId, principal)
|
||||||
val stay = requireRoomStayForProperty(roomStayRepo, propertyId, roomStayId)
|
val stay = requireRoomStayForProperty(roomStayRepo, propertyId, roomStayId)
|
||||||
|
val roles = propertyUserRepo.findRolesByPropertyAndUser(propertyId, actor.userId)
|
||||||
|
val hasPrivilegedRole = roles.contains(Role.ADMIN) || roles.contains(Role.MANAGER)
|
||||||
|
val hasStaffRole = roles.contains(Role.STAFF)
|
||||||
|
if (!hasPrivilegedRole && !hasStaffRole) {
|
||||||
|
throw ResponseStatusException(HttpStatus.FORBIDDEN, "Missing role")
|
||||||
|
}
|
||||||
|
if (!hasPrivilegedRole && paymentRepo.existsByBookingId(stay.booking.id!!)) {
|
||||||
|
throw ResponseStatusException(
|
||||||
|
HttpStatus.FORBIDDEN,
|
||||||
|
"Rate changes are locked after first payment"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
val effectiveAt = parseOffset(request.effectiveAt)
|
val effectiveAt = parseOffset(request.effectiveAt)
|
||||||
?: throw ResponseStatusException(HttpStatus.BAD_REQUEST, "effectiveAt required")
|
?: throw ResponseStatusException(HttpStatus.BAD_REQUEST, "effectiveAt required")
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import org.springframework.data.repository.query.Param
|
|||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
interface PaymentRepo : JpaRepository<Payment, UUID> {
|
interface PaymentRepo : JpaRepository<Payment, UUID> {
|
||||||
|
fun existsByBookingId(bookingId: UUID): Boolean
|
||||||
fun findByBookingIdOrderByReceivedAtDesc(bookingId: UUID): List<Payment>
|
fun findByBookingIdOrderByReceivedAtDesc(bookingId: UUID): List<Payment>
|
||||||
fun findByReference(reference: String): Payment?
|
fun findByReference(reference: String): Payment?
|
||||||
fun findByGatewayPaymentId(gatewayPaymentId: String): Payment?
|
fun findByGatewayPaymentId(gatewayPaymentId: String): Payment?
|
||||||
|
|||||||
Reference in New Issue
Block a user