petshop-35-reservation.spp
petshop/reservation/petshop-35-reservation.spp
Download original file · Petstore source contents
1domain petshop;23Contract PetReservationAgreement {4business("Reservation reference used to track an accepted application") String reservationNumber;5Buyer buyer;6Goods goods;7int quantity;8ReservationStatus status;9ReservationRejectionReason rejectionReason;10}1112atomic check checkReservationQuantity(PetReservationAgreement) {13require(PetReservationAgreement.quantity > 0, "INVALID_QUANTITY");14}1516atomic calculate preparePetReservation(Buyer, Goods, PetReservationAgreement) {17PetReservationAgreement.buyer = Buyer;18PetReservationAgreement.goods = Goods;19PetReservationAgreement.status = ReservationStatus.ACCEPTED;20PetReservationAgreement.rejectionReason = null;21}2223atomic calculate prepareReservationInventory(Goods, StockLine[]) {24StockLine[] = new StockLine[] {25new StockLine()26};27for (StockLine item : StockLine[]) {28item.goods = Goods;29}30}3132atomic calculate confirmPetReservation(PetReservationAgreement) {33PetReservationAgreement.status = ReservationStatus.RESERVED;34}3536atomic calculate rejectPetReservation(StockLine[], PetReservationAgreement) {37PetReservationAgreement.status = ReservationStatus.REJECTED;38PetReservationAgreement.rejectionReason = ReservationRejectionReason.RESERVATION_NOT_COMPLETED;39for (StockLine item : StockLine[]) {40if (item.goods.sku == PetReservationAgreement.goods.sku41&& item.available < PetReservationAgreement.quantity) {42PetReservationAgreement.rejectionReason = ReservationRejectionReason.INSUFFICIENT_STOCK;43}44}45}4647atomic update reserveRequestedInventory(StockLine[], PetReservationAgreement);