S++Business systems language
DEMO SOURCE · SPP / APP / PHYRead the book

petshop.app

petshop/petshop.app

Download original file · Petstore source contents

1domain petshop;23application petstore {4    environment develop {5        deploy customer;6        deploy product;7        deploy inventory;8        deploy petshop;9        transactions {10            mode: LOCAL;11            resource: shopRecordsResource;12            ordinaryUpdates: PARALLEL;13        }14    }15    environment testing {16        deploy inventory;17        deploy petshop;18        quantum {19            system: UNIFIED_STORE;20            resource: shopLedger;21        }22    }23}2425requests {26    idempotency retention 3 days;27    duplicateWindow 5 seconds;28}2930bind importCatalogue to product.listCatalogue;31bind localizeCatalog to product.localizeProductLabels;32bind initializeInventory to inventory.initializeInventory;33i18n {34    defaultLocale "en-US";35    supportedLocales "en-US", "zh-CN";36}3738header requestContext {39    unique String globalSerialNumber;40    String callerId;41    String requestSerialNumber;42    String callMode;43    String callOrigin;44}4546header responseContext {47    String status(Default = "OK");48}4950tables entities {51    table SHOP_RECEIPTS(Receipt) {52        primarykey(Receipt.receiptNumber);53        auto Receipt.receiptNumber prefix "RECEIPT";54        foreignkey(Receipt.buyer) references Buyer;55        foreignkey(Receipt.order) references ShopOrder;56    }57}5859tables roles {60    table SHOP_CART_LINES(CartLine) {61        primarykey(CartLine.buyer, CartLine.goods);62        foreignkey(CartLine.buyer) references Buyer;63        foreignkey(CartLine.goods) references Goods;64    }65    table SHOP_ORDER_LINES(OrderLine) {66        primarykey(OrderLine.lineNumber);67        auto OrderLine.lineNumber prefix "ORDER-LINE";68        foreignkey(OrderLine.goods) references Goods;69        snapshot(OrderLine.name, OrderLine.unitPrice);70    }7172    table SHOP_CARTS(Cart) {73        primarykey(Cart.buyer);74        foreignkey(Cart.buyer) references Buyer;75    }76    table SHOP_SETTLEMENT_ACCOUNTS(SettlementAccount) {77        primarykey(SettlementAccount.accountNumber);78    }79    table SHOP_GOODS(Goods) {80        primarykey(Goods.sku);81        current(Goods.name);82    }83    table SHOP_BUYERS(Buyer) {84        primarykey(Buyer.membershipNumber);85    }8687    table SHOP_MERCHANTS(Merchant) {88        primarykey notnull String merchantRowId;89    }90}9192tables contracts {93    table SHOP_RESERVATIONS(PetReservationAgreement) {94        primarykey(PetReservationAgreement.reservationNumber);95        auto PetReservationAgreement.reservationNumber prefix "RESERVATION";96        foreignkey(PetReservationAgreement.buyer) references Buyer;97        foreignkey(PetReservationAgreement.goods) references Goods;98    }99    table SHOP_ORDERS(ShopOrder) {100        primarykey(ShopOrder.orderNumber);101        auto ShopOrder.orderNumber prefix "ORDER";102        foreignkey(ShopOrder.buyer) references Buyer;103        index buyerOrders(ShopOrder.buyer);104    }105}106107scope {108    local(in requestContext, out responseContext) {109        repository(argument(0, Goods.active), Goods[]) using shopRecords listProducts;110        duplicate key(111            Buyer.membershipNumber,112            Goods.sku113        ) facts(PetReservationAgreement.quantity) window 10 seconds reserveShopPet;114115        duplicate key(Buyer.membershipNumber, Goods.sku) facts(CartAdditionAgreement.quantity) addCartItem;116        duplicate key(Buyer.membershipNumber) facts(ProfileAgreement) updateShopCustomer;117        duplicate key(118            Buyer.membershipNumber,119            ShopOrder.orderNumber120        ) facts(ShopOrder.orderNumber) deliverShopOrder;121        duplicate key(Buyer.membershipNumber) facts(Buyer.membershipNumber) clearShopCart;122123        duplicate key(124            Buyer.membershipNumber,125            ShopOrder.orderNumber126        ) facts(ReturnRequestAgreement.reason) requestShopReturn;127        duplicate key(128            Buyer.membershipNumber,129            ShopOrder.orderNumber130        ) facts(PaidCancellationAgreement.reason) cancelPaidShopOrder;131        duplicate key(132            Buyer.membershipNumber,133            ShopOrder.orderNumber134        ) facts(ShopOrder.orderNumber) approveShopReturn;135        duplicate key(Buyer.membershipNumber, Goods.sku) facts(Goods.sku) removeCartItem;136        duplicate key(137            Buyer.membershipNumber,138            ShopOrder.orderNumber139        ) facts(ShipmentAgreement.tracking) shipShopOrder;140        duplicate key(141            Buyer.membershipNumber,142            Goods.sku143        ) facts(CartQuantityAgreement.quantity) setCartQuantity;144        duplicate key(Buyer.membershipNumber) facts(Buyer) registerShopCustomer;145        duplicate key(Buyer.membershipNumber) facts(WalletFundingAgreement.amount) fundShopWallet;146        duplicate key(Goods.sku) facts(StockReceiptAgreement.quantity) receiveShopStock;147148        duplicate key(149            Buyer.membershipNumber,150            ShopOrder.orderNumber151        ) facts(UnpaidCancellationAgreement.reason) cancelUnpaidShopOrder;152        duplicate key(153            Buyer.membershipNumber,154            ShopOrder.orderNumber155        ) facts(ShopOrder.orderNumber) payShopOrder;156157        duplicate key(Buyer.membershipNumber) facts(Buyer.membershipNumber) placeShopOrder;158    }159}160161web {162    start initializeStore;163    expose browseShopProducts;164    expose readShopCustomer;165    expose readShopCart;166    expose readShopOrders;167    expose readShopInventory;168    expose readShopMerchant;169    expose registerShopCustomer;170    expose fundShopWallet;171    expose receiveShopStock;172    expose updateShopCustomer;173    expose addCartItem;174    expose setCartQuantity;175    expose removeCartItem;176    expose clearShopCart;177    expose placeShopOrder;178    expose payShopOrder;179    expose shipShopOrder;180    expose deliverShopOrder;181    expose cancelUnpaidShopOrder;182    expose cancelPaidShopOrder;183    expose requestShopReturn;184    expose approveShopReturn;185    expose previewShopOrder;186    expose reserveShopPet;187    expose readShopReservation;188}