diff --git a/examples/v3.1/shopping.json b/examples/v3.1/shopping.json index 175a251..ac45be0 100644 --- a/examples/v3.1/shopping.json +++ b/examples/v3.1/shopping.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "0.4.0", + "version": "0.11.0", "title": "@samchon/shopping-backend", "description": "Backend for shopping", "license": { @@ -17,21 +17,32 @@ "paths": { "/monitors/health": { "get": { + "summary": "Health check API", + "description": "Health check API.", "tags": [ "Monitor" ], "parameters": [], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Health check API", - "description": "Health check API." + "x-samchon-accessor": [ + "monitors", + "health", + "get" + ], + "x-samchon-controller": "MonitorHealthController" } }, "/monitors/performance": { "get": { + "summary": "Get performance information", + "description": "Get performance information.\n\nGet perofmration information composed with CPU, memory and resource usage.", "tags": [ "Monitor" ], @@ -48,12 +59,18 @@ } } }, - "summary": "Get performance information", - "description": "Get performance information.\n\nGet perofmration information composed with CPU, memory and resource usage." + "x-samchon-accessor": [ + "monitors", + "performance", + "get" + ], + "x-samchon-controller": "MonitorPerformanceController" } }, "/monitors/system": { "get": { + "summary": "Get system information", + "description": "Get system information.\n\nGet system information with commit and package information.\n\nAs such information is a type of sensitive, response be encrypted.", "tags": [ "Monitor" ], @@ -70,12 +87,18 @@ } } }, - "summary": "Get system information", - "description": "Get system information.\n\nGet system information with commit and package information.\n\nAs such information is a type of sensitive, response be encrypted." + "x-samchon-accessor": [ + "monitors", + "system", + "get" + ], + "x-samchon-controller": "MonitorSystemController" } }, "/shoppings/admins/authenticate": { "get": { + "summary": "Get administrator information", + "description": "Get administrator information.\n\nGet {@link IShoppingAdministrator.IInvert administrator} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an administrator,\nit throws 403 forbidden exception.", "tags": [ "Authenticate" ], @@ -92,10 +115,22 @@ } } }, - "summary": "Get administrator information", - "description": "Get administrator information.\n\nGet {@link IShoppingAdministrator.IInvert administrator} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an administrator,\nit throws 403 forbidden exception." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "authenticate", + "get" + ], + "x-samchon-controller": "ShoppingAdminAuthenticateController" }, "post": { + "summary": "Join as an administrator", + "description": "Join as an administrator.\n\nJoin as an administrator with {@link IShoppingAdministrator.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown.", "tags": [ "Authenticate" ], @@ -123,12 +158,24 @@ } } }, - "summary": "Join as an administrator", - "description": "Join as an administrator.\n\nJoin as an administrator with {@link IShoppingAdministrator.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "authenticate", + "join" + ], + "x-samchon-controller": "ShoppingAdminAuthenticateController" } }, "/shoppings/admins/authenticate/login": { "put": { + "summary": "Login as an administrator", + "description": "Login as an administrator.\n\nLogin as an administrator with {@link IShoppingAdministrator.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login} function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer} type that starting from the customer information, so\nthat you have to access to the administrator info through\n`customer.member.administrator`. In contrast with that, this method returns\n{@link IShoppingAdministrator.IInvert} type that starting from the administrator\ninfo, so that can access to the customer info through `administrator.customer`.\n\nOf course, to use this function, you had to {@link join} as an administrator\nbefore. If not, 403 forbidden exception would be thrown,", "tags": [ "Authenticate" ], @@ -156,12 +203,24 @@ } } }, - "summary": "Login as an administrator", - "description": "Login as an administrator.\n\nLogin as an administrator with {@link IShoppingAdministrator.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login } function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer } type that starting from the customer information, so\nthat you have to access to the administrator info through\n`customer.member.administrator`. In contrast with that, this method returns\n{@link IShoppingAdministrator.IInvert } type that starting from the administrator\ninfo, so that can access to the customer info through `administrator.customer`.\n\nOf course, to use this function, you had to {@link join } as an administrator\nbefore. If not, 403 forbidden exception would be thrown," + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "authenticate", + "login" + ], + "x-samchon-controller": "ShoppingAdminAuthenticateController" } }, "/shoppings/admins/coupons": { "post": { + "summary": "Create a new coupon", + "description": "Create a new coupon.\n\nCreate a new {@link IShoppingCoupon coupon} with given information.\n\nBy the way, if you are a {@link IShoppingSeller seller}, you have to\nadd include direction's {@link IShoppingCouponSellerCriteria} or\n{@link IShoppingCouponSaleCriteria} condition. This is because only\n{@link IShoppingAdministrator administrators} can create a coupon\nwhich can be used throughout the market. Seller must limit the usage\nrange by his/her {@link IShoppingSale sale(s)}.\n\nOf course, when adminstrator is planning to make a general coupon\nthat can be used throughout the market, the administrator must\nget agree from the sellers who are going to be affected.", "tags": [ "Discount" ], @@ -189,10 +248,22 @@ } } }, - "summary": "Create a new coupon", - "description": "Create a new coupon.\n\nCreate a new {@link IShoppingCoupon coupon} with given information.\n\nBy the way, if you are a {@link IShoppingSeller seller}, you have to\nadd include direction's {@link IShoppingCouponSellerCriteria } or\n{@link IShoppingCouponSaleCriteria } condition. This is because only\n{@link IShoppingAdministrator administrators} can create a coupon\nwhich can be used throughout the market. Seller must limit the usage\nrange by his/her {@link IShoppingSale sale(s)}.\n\nOf course, when adminstrator is planning to make a general coupon\nthat can be used throughout the market, the administrator must\nget agree from the sellers who are going to be affected." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "coupons", + "create" + ], + "x-samchon-controller": "ShoppingAdminCouponController" }, "patch": { + "summary": "List up every coupons", + "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up.", "tags": [ "Discount" ], @@ -220,12 +291,24 @@ } } }, - "summary": "List up every coupons", - "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "coupons", + "index" + ], + "x-samchon-controller": "ShoppingAdminCouponController" } }, "/shoppings/admins/coupons/{id}": { "delete": { + "summary": "Erase a coupon", + "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time.", "tags": [ "Discount" ], @@ -236,19 +319,34 @@ "schema": { "type": "string" }, - "description": "Target coupon's ", - "required": true + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase a coupon", - "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "coupons", + "erase" + ], + "x-samchon-controller": "ShoppingAdminCouponController" }, "get": { + "summary": "Get a coupon info", + "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible.", "tags": [ "Discount" ], @@ -259,8 +357,8 @@ "schema": { "type": "string" }, - "description": "Target coupon's ", - "required": true + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" } ], "responses": { @@ -275,12 +373,24 @@ } } }, - "summary": "Get a coupon info", - "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "coupons", + "at" + ], + "x-samchon-controller": "ShoppingAdminCouponController" } }, "/shoppings/admins/deposits": { "patch": { + "summary": "Get deposit metadata list", + "description": "Get deposit metadata list.\n\nList up every {@link IShoppingDeposit deposit} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDeposit.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingDeposit.IRequest.sort sort condition}.", "tags": [ "Discount" ], @@ -308,10 +418,22 @@ } } }, - "summary": "Get deposit metadata list", - "description": "Get deposit metadata list.\n\nList up every {@link IShoppingDeposit deposit} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDeposit.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingDeposit.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "deposits", + "index" + ], + "x-samchon-controller": "ShoppingAdminDepositController" }, "post": { + "summary": "Create a new deposit metadata", + "description": "Create a new deposit metadata.\n\nCreate a new {@link IShoppingDeposit deposit} metadata.\n\nThis action means that adding a new origin reason of deposit's income/outcome.\nOf course, creating a new deposit record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side.", "tags": [ "Discount" ], @@ -339,12 +461,24 @@ } } }, - "summary": "Create a new deposit metadata", - "description": "Create a new deposit metadata.\n\nCreate a new {@link IShoppingDeposit deposit} metadata.\n\nThis action means that adding a new origin reason of deposit's income/outcome.\nOf course, creating a new deposit record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "deposits", + "create" + ], + "x-samchon-controller": "ShoppingAdminDepositController" } }, "/shoppings/admins/deposits/{id}": { "get": { + "summary": "Get a deposit metadata", + "description": "Get a deposit metadata.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its ID.", "tags": [ "Discount" ], @@ -356,8 +490,8 @@ "type": "string", "format": "uuid" }, - "description": "Target deposit's ", - "required": true + "required": true, + "description": " Target deposit's {@link IShoppingDeposit.id }" } ], "responses": { @@ -372,10 +506,22 @@ } } }, - "summary": "Get a deposit metadata", - "description": "Get a deposit metadata.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its ID." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "deposits", + "at" + ], + "x-samchon-controller": "ShoppingAdminDepositController" }, "delete": { + "summary": "Erase a deposit metadata", + "description": "Erase a deposit metadata.\n\nErase a {@link IShoppingDeposit deposit} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the deposit's reason why.", "tags": [ "Discount" ], @@ -387,21 +533,36 @@ "type": "string", "format": "uuid" }, - "description": "Target deposit's ", - "required": true + "required": true, + "description": " Target deposit's {@link IShoppingDeposit.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase a deposit metadata", - "description": "Erase a deposit metadata.\n\nErase a {@link IShoppingDeposit deposit} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the deposit's reason why." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "deposits", + "erase" + ], + "x-samchon-controller": "ShoppingAdminDepositController" } }, "/shoppings/admins/deposits/{code}/get": { "get": { + "summary": "Get a deposit metadata by its code", + "description": "Get a deposit metadata by its code.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its code.", "tags": [ "Discount" ], @@ -412,7 +573,6 @@ "schema": { "type": "string" }, - "description": "", "required": true } ], @@ -428,12 +588,24 @@ } } }, - "summary": "Get a deposit metadata by its code", - "description": "Get a deposit metadata by its code.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its code." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "deposits", + "get" + ], + "x-samchon-controller": "ShoppingAdminDepositController" } }, "/shoppings/admins/mileages": { "patch": { + "summary": "Get mileage metadata list", + "description": "Get mileage metadata list.\n\nList up every {@link IShoppingMileage mileage} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileage.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingMileage.IRequest.sort sort condition}.", "tags": [ "Discount" ], @@ -461,10 +633,22 @@ } } }, - "summary": "Get mileage metadata list", - "description": "Get mileage metadata list.\n\nList up every {@link IShoppingMileage mileage} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileage.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingMileage.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "index" + ], + "x-samchon-controller": "ShoppingAdminMileageController" }, "post": { + "summary": "Create a new mileage metadata", + "description": "Create a new mileage metadata.\n\nCreate a new {@link IShoppingMileage mileage} metadata.\n\nThis action means that adding a new origin reason of mileage's income/outcome.\nOf course, creating a new mileage record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side.", "tags": [ "Discount" ], @@ -492,12 +676,24 @@ } } }, - "summary": "Create a new mileage metadata", - "description": "Create a new mileage metadata.\n\nCreate a new {@link IShoppingMileage mileage} metadata.\n\nThis action means that adding a new origin reason of mileage's income/outcome.\nOf course, creating a new mileage record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "create" + ], + "x-samchon-controller": "ShoppingAdminMileageController" } }, "/shoppings/admins/mileages/{id}": { "get": { + "summary": "Get a mileage metadata", + "description": "Get a mileage metadata.\n\nGet a {@link IShoppingMileage mileage} metadata information with its ID.", "tags": [ "Discount" ], @@ -509,8 +705,8 @@ "type": "string", "format": "uuid" }, - "description": "Target mileage's ", - "required": true + "required": true, + "description": " Target mileage's {@link IShoppingMileage.id }" } ], "responses": { @@ -525,10 +721,22 @@ } } }, - "summary": "Get a mileage metadata", - "description": "Get a mileage metadata.\n\nGet a {@link IShoppingMileage mileage} metadata information with its ID." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "at" + ], + "x-samchon-controller": "ShoppingAdminMileageController" }, "delete": { + "summary": "Erase a mileage metadata", + "description": "Erase a mileage metadata.\n\nErase a {@link IShoppingMileage mileage} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the mileage's reason why.", "tags": [ "Discount" ], @@ -540,21 +748,36 @@ "type": "string", "format": "uuid" }, - "description": "Target mileage's ", - "required": true + "required": true, + "description": " Target mileage's {@link IShoppingMileage.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase a mileage metadata", - "description": "Erase a mileage metadata.\n\nErase a {@link IShoppingMileage mileage} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the mileage's reason why." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "erase" + ], + "x-samchon-controller": "ShoppingAdminMileageController" } }, "/shoppings/admins/mileages/{code}/get": { "get": { + "summary": "Get a mileage metadata by its code", + "description": "Get a mileage metadata by its code.\n\nGet a {@link IShoppingMileage mileage} metadata information with its code.", "tags": [ "Discount" ], @@ -565,7 +788,6 @@ "schema": { "type": "string" }, - "description": "", "required": true } ], @@ -581,12 +803,24 @@ } } }, - "summary": "Get a mileage metadata by its code", - "description": "Get a mileage metadata by its code.\n\nGet a {@link IShoppingMileage mileage} metadata information with its code." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "get" + ], + "x-samchon-controller": "ShoppingAdminMileageController" } }, "/shoppings/admins/mileages/donations": { "patch": { + "summary": "List up every mileage donation histories", + "description": "List up every mileage donation histories.\n\nList up every {@link IShoppingMileageDonation mileage donation histories}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageDonation.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingMileageDonation.IRequest.sort sort}.", "tags": [ "Discount" ], @@ -614,10 +848,23 @@ } } }, - "summary": "List up every mileage donation histories", - "description": "List up every mileage donation histories.\n\nList up every {@link IShoppingMileageDonation mileage donation histories}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageDonation.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingMileageDonation.IRequest.sort sort}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "donations", + "index" + ], + "x-samchon-controller": "ShoppingAdminMileageDonationController" }, "post": { + "summary": "Donate a mileage to a citizen", + "description": "Donate a mileage to a citizen.\n\nDonate a mileage to a specific {@link IShoppingCitizen citizen} from\ncurrent {@link IShoppingAdministrator administrator}, with detailed\nreason why.\n\nNote that, as donating mileage affects to the citizen's balance and\ncurrent shopping mall's operating profit, administrator must archive\nthe detailed reason why the mileage is donated.", "tags": [ "Discount" ], @@ -645,12 +892,25 @@ } } }, - "summary": "Donate a mileage to a citizen", - "description": "Donate a mileage to a citizen.\n\nDonate a mileage to a specific {@link IShoppingCitizen citizen} from\ncurrent {@link IShoppingAdministrator administrator}, with detailed\nreason why.\n\nNote that, as donating mileage affects to the citizen's balance and\ncurrent shopping mall's operating profit, administrator must archive\nthe detailed reason why the mileage is donated." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "donations", + "create" + ], + "x-samchon-controller": "ShoppingAdminMileageDonationController" } }, "/shoppings/admins/mileages/donations/{id}": { "get": { + "summary": "Get a mileage donation history", + "description": "Get a mileage donation history.\n\nGet a {@link IShoppingMileageDonation mileage donation history} with its ID.", "tags": [ "Discount" ], @@ -662,8 +922,8 @@ "type": "string", "format": "uuid" }, - "description": "Target history's ", - "required": true + "required": true, + "description": " Target history's {@link IShoppingMileageDonation.id }" } ], "responses": { @@ -678,12 +938,25 @@ } } }, - "summary": "Get a mileage donation history", - "description": "Get a mileage donation history.\n\nGet a {@link IShoppingMileageDonation mileage donation history} with its ID." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "donations", + "at" + ], + "x-samchon-controller": "ShoppingAdminMileageDonationController" } }, "/shoppings/admins/orders": { "patch": { + "summary": "List up every orders", + "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order.", "tags": [ "Order" ], @@ -711,12 +984,24 @@ } } }, - "summary": "List up every orders", - "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "orders", + "index" + ], + "x-samchon-controller": "ShoppingAdminOrderController" } }, "/shoppings/admins/orders/{id}": { "get": { + "summary": "Get an order info", + "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown.", "tags": [ "Order" ], @@ -728,8 +1013,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { @@ -744,12 +1029,24 @@ } } }, - "summary": "Get an order info", - "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "orders", + "at" + ], + "x-samchon-controller": "ShoppingAdminOrderController" } }, "/shoppings/admins/sales": { "patch": { + "summary": "List up every summarized sales", + "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at} function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -777,12 +1074,24 @@ } } }, - "summary": "List up every summarized sales", - "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at } function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "index" + ], + "x-samchon-controller": "ShoppingAdminSaleController" } }, "/shoppings/admins/sales/{id}": { "get": { + "summary": "Get a sale info", + "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales.", "tags": [ "Sale" ], @@ -794,8 +1103,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { @@ -810,12 +1119,24 @@ } } }, - "summary": "Get a sale info", - "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "at" + ], + "x-samchon-controller": "ShoppingAdminSaleController" } }, "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments": { "patch": { + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales.", "tags": [ "Sale" ], @@ -827,8 +1148,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -837,8 +1158,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -864,10 +1185,24 @@ } } }, - "summary": "List up every inquiry comments", - "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "comments", + "index" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionCommentController" }, "post": { + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales.", "tags": [ "Sale" ], @@ -879,8 +1214,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -889,8 +1224,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry's ", - "required": true + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -916,12 +1251,26 @@ } } }, - "summary": "Create an inquiry comment", - "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "comments", + "create" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionCommentController" } }, "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments/{id}": { "get": { + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales.", "tags": [ "Sale" ], @@ -933,8 +1282,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -943,8 +1292,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -953,8 +1302,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "responses": { @@ -969,10 +1318,24 @@ } } }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "comments", + "at" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionCommentController" }, "put": { + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -984,8 +1347,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -994,8 +1357,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -1004,8 +1367,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "requestBody": { @@ -1031,12 +1394,26 @@ } } }, - "summary": "Update an inquiry comment", - "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "comments", + "update" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionCommentController" } }, "/shoppings/admins/sales/{saleId}/questions": { "patch": { + "summary": "List up every summarized questions", + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges} function\nor {@link at} function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret} with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -1048,8 +1425,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -1075,12 +1452,25 @@ } } }, - "summary": "List up every summarized questions", - "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "index" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionController" } }, "/shoppings/admins/sales/{saleId}/questions/abridges": { "patch": { + "summary": "List up every abridged questions", + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at} function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret} with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -1092,8 +1482,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -1119,12 +1509,25 @@ } } }, - "summary": "List up every abridged questions", - "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "abridges" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionController" } }, "/shoppings/admins/sales/{saleId}/questions/{id}": { "get": { + "summary": "Get a question info", + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret}\nvalue is `false`.", "tags": [ "Sale" ], @@ -1136,8 +1539,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -1146,8 +1549,8 @@ "type": "string", "format": "uuid" }, - "description": "Target question's ", - "required": true + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" } ], "responses": { @@ -1162,12 +1565,25 @@ } } }, - "summary": "Get a question info", - "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "at" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionController" } }, "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments": { "patch": { + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales.", "tags": [ "Sale" ], @@ -1179,8 +1595,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -1189,8 +1605,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -1216,10 +1632,24 @@ } } }, - "summary": "List up every inquiry comments", - "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "comments", + "index" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewCommentController" }, "post": { + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales.", "tags": [ "Sale" ], @@ -1231,8 +1661,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -1241,8 +1671,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry's ", - "required": true + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -1268,12 +1698,26 @@ } } }, - "summary": "Create an inquiry comment", - "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "comments", + "create" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewCommentController" } }, "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { "get": { + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales.", "tags": [ "Sale" ], @@ -1285,8 +1729,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -1295,8 +1739,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -1305,8 +1749,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "responses": { @@ -1321,10 +1765,24 @@ } } }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "comments", + "at" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewCommentController" }, "put": { + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -1336,8 +1794,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -1346,8 +1804,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -1356,8 +1814,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "requestBody": { @@ -1383,12 +1841,26 @@ } } }, - "summary": "Update an inquiry comment", - "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "comments", + "update" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewCommentController" } }, "/shoppings/admins/sales/{saleId}/reviews": { "patch": { + "summary": "List up every summarized reviews", + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges} function\nor {@link at} function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -1400,8 +1872,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -1427,12 +1899,25 @@ } } }, - "summary": "List up every summarized reviews", - "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "index" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewController" } }, "/shoppings/admins/sales/{saleId}/reviews/abridges": { "patch": { + "summary": "List up every abridged reviews", + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at} function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -1444,8 +1929,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -1471,12 +1956,25 @@ } } }, - "summary": "List up every abridged reviews", - "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "abridges" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewController" } }, "/shoppings/admins/sales/{saleId}/reviews/{id}": { "get": { + "summary": "Get a review info", + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales.", "tags": [ "Sale" ], @@ -1488,8 +1986,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -1498,8 +1996,8 @@ "type": "string", "format": "uuid" }, - "description": "Target review's ", - "required": true + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" } ], "responses": { @@ -1514,12 +2012,25 @@ } } }, - "summary": "Get a review info", - "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "at" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewController" } }, "/shoppings/admins/sales/{saleId}/snapshots": { "patch": { + "summary": "List up every snapshots", + "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at} or {@link flipo} function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended.", "tags": [ "Sale" ], @@ -1531,8 +2042,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -1558,12 +2069,25 @@ } } }, - "summary": "List up every snapshots", - "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at } or {@link flipo } function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "snapshots", + "index" + ], + "x-samchon-controller": "ShoppingAdminSaleSnapshotController" } }, "/shoppings/admins/sales/{saleId}/snapshots/{id}": { "get": { + "summary": "Get a snapshot info", + "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip} function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended.", "tags": [ "Sale" ], @@ -1575,8 +2099,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -1585,8 +2109,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -1601,12 +2125,25 @@ } } }, - "summary": "Get a snapshot info", - "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip } function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "snapshots", + "at" + ], + "x-samchon-controller": "ShoppingAdminSaleSnapshotController" } }, "/shoppings/admins/sales/{saleId}/snapshots/{id}/flip": { "get": { + "summary": "Get a flipped snapshot info", + "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended.", "tags": [ "Sale" ], @@ -1618,8 +2155,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -1628,8 +2165,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -1644,12 +2181,25 @@ } } }, - "summary": "Get a flipped snapshot info", - "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "snapshots", + "flip" + ], + "x-samchon-controller": "ShoppingAdminSaleSnapshotController" } }, "/shoppings/admins/systematic/channels/{channelCode}/categories": { "post": { + "summary": "Create a new category", + "description": "Create a new category.\n\nCreate a new {@link IShoppingChannelCategory category} of a\n{@link IShoppingChannel channel} with given name. If required, it is\npossible to specify the parent category by its ID.", "tags": [ "Systematic" ], @@ -1660,8 +2210,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" } ], "requestBody": { @@ -1687,10 +2237,24 @@ } } }, - "summary": "Create a new category", - "description": "Create a new category.\n\nCreate a new {@link IShoppingChannelCategory category} of a\n{@link IShoppingChannel channel} with given name. If required, it is\npossible to specify the parent category by its ID." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "categories", + "create" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelCategoryController" }, "patch": { + "summary": "List up every categories with children records", + "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -1701,8 +2265,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" } ], "responses": { @@ -1720,12 +2284,26 @@ } } }, - "summary": "List up every categories with children records", - "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "categories", + "index" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelCategoryController" } }, "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}": { "put": { + "summary": "Update a category", + "description": "Update a category.\n\nUpdate a {@link IShoppingChannelCategory category}'s name. If required,\nit is possible to change the parent category by its ID. Of course, detaching\nfrom the parent category so that becoming the root category is also possible.", "tags": [ "Systematic" ], @@ -1736,8 +2314,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -1745,8 +2323,8 @@ "schema": { "type": "string" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "requestBody": { @@ -1762,13 +2340,30 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Update a category", - "description": "Update a category.\n\nUpdate a {@link IShoppingChannelCategory category}'s name. If required,\nit is possible to change the parent category by its ID. Of course, detaching\nfrom the parent category so that becoming the root category is also possible." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "categories", + "update" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelCategoryController" }, "get": { + "summary": "Get a category info", + "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too.", "tags": [ "Systematic" ], @@ -1779,8 +2374,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -1789,8 +2384,8 @@ "type": "string", "format": "uuid" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "responses": { @@ -1805,12 +2400,26 @@ } } }, - "summary": "Get a category info", - "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "categories", + "at" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelCategoryController" } }, "/shoppings/admins/systematic/channels/{channelCode}/categories/merge": { "delete": { + "summary": "Merge multiple categories into one", + "description": "Merge multiple categories into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannelCategory category}, because it is a systematic\nentity affecting to all other core entities like\n{@link IShoppingSale sales}. Instead of deleting, you can merge multiple\ncategories into one.\n\nIf you specify a category to absorb others, then all of other categories\nwill be merged into the specified one. Also, subsidiary entities of\ncategories also be merged and their references also be merged cascadingly.", "tags": [ "Systematic" ], @@ -1821,8 +2430,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" } ], "requestBody": { @@ -1838,15 +2447,32 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Merge multiple categories into one", - "description": "Merge multiple categories into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannelCategory category}, because it is a systematic\nentity affecting to all other core entities like\n{@link IShoppingSale sales}. Instead of deleting, you can merge multiple\ncategories into one.\n\nIf you specify a category to absorb others, then all of other categories\nwill be merged into the specified one. Also, subsidiary entities of\ncategories also be merged and their references also be merged cascadingly." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "categories", + "merge" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelCategoryController" } }, "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}/invert": { "get": { + "summary": "Get a category info of inverted", + "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories.", "tags": [ "Systematic" ], @@ -1857,8 +2483,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -1867,8 +2493,8 @@ "type": "string", "format": "uuid" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "responses": { @@ -1883,12 +2509,26 @@ } } }, - "summary": "Get a category info of inverted", - "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "categories", + "invert" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelCategoryController" } }, "/shoppings/admins/systematic/channels": { "post": { + "summary": "Create a new channel", + "description": "Create a new channel.\n\nCreate a new {@link IShoppingChannel channel} with given code and name.\n\nAs channel means an individual market,\n{@link IShoppingAdministrator administrator} should perform this action\nonly when a new application being registered.", "tags": [ "Systematic" ], @@ -1916,10 +2556,23 @@ } } }, - "summary": "Create a new channel", - "description": "Create a new channel.\n\nCreate a new {@link IShoppingChannel channel} with given code and name.\n\nAs channel means an individual market,\n{@link IShoppingAdministrator administrator} should perform this action\nonly when a new application being registered." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "create" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" }, "patch": { + "summary": "List up every channels", + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -1947,12 +2600,25 @@ } } }, - "summary": "List up every channels", - "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "index" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" } }, "/shoppings/admins/systematic/channels/{id}": { "put": { + "summary": "Update a channel", + "description": "Update a channel.\n\nUpdate a {@link IShoppingChannel channel}'s name.\n\nNote that, it is not possible to change the channel's code. If you want to\nto do it forcibly, then {@link create} new one and {@link merge} with it.", "tags": [ "Systematic" ], @@ -1964,8 +2630,8 @@ "type": "string", "format": "uuid" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.code }" } ], "requestBody": { @@ -1981,13 +2647,29 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Update a channel", - "description": "Update a channel.\n\nUpdate a {@link IShoppingChannel channel}'s name.\n\nNote that, it is not possible to change the channel's code. If you want to\nto do it forcibly, then {@link create } new one and {@link merge } with it." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "update" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" }, "get": { + "summary": "Get a channel info", + "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations.", "tags": [ "Systematic" ], @@ -1999,8 +2681,8 @@ "type": "string", "format": "uuid" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.id }" } ], "responses": { @@ -2015,12 +2697,25 @@ } } }, - "summary": "Get a channel info", - "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "at" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" } }, "/shoppings/admins/systematic/channels/merge": { "delete": { + "summary": "Merge multiple channels into one", + "description": "Merge multiple channels into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannel channel}, because it is a systematic entity\naffecting to all other core entities like customers, members and\nsales. Instead of deleting, you can merge multiple channels into one.\n\nIf you specify a channel to absorb others, then all of other channels\nwill be merged into the specified one. Also, subsidiary entities of\nchannels also be merged and their references also be merged cascadingly.", "tags": [ "Systematic" ], @@ -2038,15 +2733,31 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Merge multiple channels into one", - "description": "Merge multiple channels into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannel channel}, because it is a systematic entity\naffecting to all other core entities like customers, members and\nsales. Instead of deleting, you can merge multiple channels into one.\n\nIf you specify a channel to absorb others, then all of other channels\nwill be merged into the specified one. Also, subsidiary entities of\nchannels also be merged and their references also be merged cascadingly." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "merge" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" } }, "/shoppings/admins/systematic/channels/hierarchical": { "patch": { + "summary": "List up every channels with nested categories", + "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -2074,12 +2785,25 @@ } } }, - "summary": "List up every channels with nested categories", - "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "hierarchical" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" } }, "/shoppings/admins/systematic/channels/{code}/get": { "get": { + "summary": "Get a channel info by its code", + "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations.", "tags": [ "Systematic" ], @@ -2090,8 +2814,8 @@ "schema": { "type": "string" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.code }" } ], "responses": { @@ -2106,12 +2830,25 @@ } } }, - "summary": "Get a channel info by its code", - "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "get" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" } }, "/shoppings/admins/systematic/sections": { "post": { + "summary": "Create a new section", + "description": "Create a new section.\n\nCreate a new {@link IShoppingSection section} with given code and name.\n\nAs section means a spatial unit of a market that handling different type\nof products with other section, {@link IShoppingAdministrator administrator}\nshould perform this action only when a new section being required.", "tags": [ "Systematic" ], @@ -2139,10 +2876,23 @@ } } }, - "summary": "Create a new section", - "description": "Create a new section.\n\nCreate a new {@link IShoppingSection section} with given code and name.\n\nAs section means a spatial unit of a market that handling different type\nof products with other section, {@link IShoppingAdministrator administrator}\nshould perform this action only when a new section being required." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "sections", + "create" + ], + "x-samchon-controller": "ShoppingAdminSystematicSectionController" }, "patch": { + "summary": "List up every sections", + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}.", "tags": [ "Section" ], @@ -2170,12 +2920,25 @@ } } }, - "summary": "List up every sections", - "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "sections", + "index" + ], + "x-samchon-controller": "ShoppingAdminSystematicSectionController" } }, "/shoppings/admins/systematic/sections/{id}": { "put": { + "summary": "Update a section", + "description": "Update a section.\n\nUpdate a {@link IShoppingSection section}'s name.\n\nNote that, it is not possible to change the section's code. If you want to\nto do it forcibly, then {@link create} new one and {@link merge} with it.", "tags": [ "Systematic" ], @@ -2187,8 +2950,8 @@ "type": "string", "format": "uuid" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.code }" } ], "requestBody": { @@ -2204,13 +2967,29 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Update a section", - "description": "Update a section.\n\nUpdate a {@link IShoppingSection section}'s name.\n\nNote that, it is not possible to change the section's code. If you want to\nto do it forcibly, then {@link create } new one and {@link merge } with it." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "sections", + "update" + ], + "x-samchon-controller": "ShoppingAdminSystematicSectionController" }, "get": { + "summary": "Get a section info", + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information.", "tags": [ "Section" ], @@ -2222,8 +3001,8 @@ "type": "string", "format": "uuid" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.id }" } ], "responses": { @@ -2238,12 +3017,25 @@ } } }, - "summary": "Get a section info", - "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "sections", + "at" + ], + "x-samchon-controller": "ShoppingAdminSystematicSectionController" } }, "/shoppings/admins/systematic/sections/merge": { "delete": { + "summary": "Merge multiple sections into one", + "description": "Merge multiple sections into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingSection section}, because it is a systematic entity\naffecting to all other core entities like {@link IShoppingSale sales}.\nInstead of deleting, you can merge multiple sections into one.\n\nIf you specify a section to absorb others, then all of other sections\nwill be merged into the specified one. Also, subsidiary entities of\nsections also be merged and their references also be merged cascadingly.", "tags": [ "Systematic" ], @@ -2261,15 +3053,31 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Merge multiple sections into one", - "description": "Merge multiple sections into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingSection section}, because it is a systematic entity\naffecting to all other core entities like {@link IShoppingSale sales}.\nInstead of deleting, you can merge multiple sections into one.\n\nIf you specify a section to absorb others, then all of other sections\nwill be merged into the specified one. Also, subsidiary entities of\nsections also be merged and their references also be merged cascadingly." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "sections", + "merge" + ], + "x-samchon-controller": "ShoppingAdminSystematicSectionController" } }, "/shoppings/admins/systematic/sections/{code}/get": { "get": { + "summary": "Get a section info by its code", + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code.", "tags": [ "Section" ], @@ -2280,8 +3088,8 @@ "schema": { "type": "string" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.code }" } ], "responses": { @@ -2296,12 +3104,25 @@ } } }, - "summary": "Get a section info by its code", - "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "sections", + "get" + ], + "x-samchon-controller": "ShoppingAdminSystematicSectionController" } }, "/shoppings/customers/authenticate/refresh": { "patch": { + "summary": "Refresh the authentication token", + "description": "Refresh the authentication token.\n\nCreate a new {@link IShoppingCustomer.IToken.access access token} of a\n{@link IShoppingCustomer customer} with the pre-issued\n{@link IShoppingCustomer.IToken.refresh refresh} token.\n\nNote that, this function is available until the\n{@link IShoppingCustomer.IToken.refreshable_until} value.", "tags": [ "Authenticate" ], @@ -2329,12 +3150,19 @@ } } }, - "summary": "Refresh the authentication token", - "description": "Refresh the authentication token.\n\nCreate a new {@link IShoppingCustomer.IToken.access access token} of a\n{@link IShoppingCustomer customer} with the pre-issued\n{@link IShoppingCustomer.IToken.refresh refresh} token.\n\nNote that, this function is available until the\n{@link IShoppingCustomer.IToken.refreshable_until } value." + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "refresh" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" } }, "/shoppings/customers/authenticate": { "get": { + "summary": "Get current customer info", + "description": "Get current customer info.\n\nGet current {@link IShoppingCustomer customer} information from the\n{@link IShoppingCustomer.IToken.access access token}.", "tags": [ "Authenticate" ], @@ -2351,10 +3179,22 @@ } } }, - "summary": "Get current customer info", - "description": "Get current customer info.\n\nGet current {@link IShoppingCustomer customer} information from the\n{@link IShoppingCustomer.IToken.access access token}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "get" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" }, "post": { + "summary": "Create a new customer record", + "description": "Create a new customer record.\n\nThis shopping mall system defines everyone participating in this market as\na \"customer\". And the customer records are not archived based on individual\n{@link IShoppingCitizen people}, but based on the unit of connection.\nTherefore, even if it is the same person, a new {@link IShoppingCustomer}\nrecord is created every time a connection is made.\n\nTherefore, all Client Applications that access this service must first call\nthis function, report the customer's inflow path to the server, and create\nan {@link IShoppingCustomer.IToken.access access token}. If you skip this\nfunction call, all the other API functions would be prohibited. There is no\nexception, even if you want to {@link activate} your citizenship or\n{@link login} with your {@link IShoppingMember member account}. Before\nauthenticating yourself or logging in, be sure to call this function first.\nThis also applies when an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller} logs in.\n\nAlso, the authentication token has an\n{@link IShoppingCustomer.IToken.expired_at expiration time}\nand cannot be used permanently. For reference, the authentication token is\nvalid for 3 hours, and if you want to maintain customer authentication even\nafter 3 hours, you must call the {@link refresh} function.", "tags": [ "Authenticate" ], @@ -2382,12 +3222,19 @@ } } }, - "summary": "Create a new customer record", - "description": "Create a new customer record.\n\nThis shopping mall system defines everyone participating in this market as\na \"customer\". And the customer records are not archived based on individual\n{@link IShoppingCitizen people}, but based on the unit of connection.\nTherefore, even if it is the same person, a new {@link IShoppingCustomer }\nrecord is created every time a connection is made.\n\nTherefore, all Client Applications that access this service must first call\nthis function, report the customer's inflow path to the server, and create\nan {@link IShoppingCustomer.IToken.access access token}. If you skip this\nfunction call, all the other API functions would be prohibited. There is no\nexception, even if you want to {@link activate } your citizenship or\n{@link login } with your {@link IShoppingMember member account}. Before\nauthenticating yourself or logging in, be sure to call this function first.\nThis also applies when an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller} logs in.\n\nAlso, the authentication token has an\n{@link IShoppingCustomer.IToken.expired_at expiration time}\nand cannot be used permanently. For reference, the authentication token is\nvalid for 3 hours, and if you want to maintain customer authentication even\nafter 3 hours, you must call the {@link refresh } function." + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "create" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" } }, "/shoppings/customers/authenticate/join": { "post": { + "summary": "Join membership", + "description": "Join membership.\n\n{@link IShoppingCustomer Customer} signs up for\n{@link IShoppingMember membership} of current shopping mall system.\n\nIf you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate}\nfunction calling everytime you log in from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate} and {@link external}\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to membership registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create} function, before calling\nthis `join` function, you must first create a customer record and token by\ncalling the {@link create} function.", "tags": [ "Authenticate" ], @@ -2415,12 +3262,24 @@ } } }, - "summary": "Join membership", - "description": "Join membership.\n\n{@link IShoppingCustomer Customer} signs up for\n{@link IShoppingMember membership} of current shopping mall system.\n\nIf you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate }\nfunction calling everytime you log in from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate } and {@link external }\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to membership registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create } function, before calling\nthis `join` function, you must first create a customer record and token by\ncalling the {@link create } function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "join" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" } }, "/shoppings/customers/authenticate/login": { "put": { + "summary": "Membership login", + "description": "Membership login.\n\n{@link IShoppingCustomer Customer} logs in with his/her\n{@link IShoppingMember membership} account with the email and password.\n\nIf the {@link IShoppingMember member} has previously performed\n{@link activate citizenship activation}, the {@link IShoppingCustomer.citizen}\nvalue would be filled in accordingly. And if the member has also signed up\nas an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller}, the relevant information is also entered\naccordingly.\n\nFor reference, as described in the {@link create} function, before calling\nthis `login` function, you must first create a customer record and token by\ncalling the {@link create} function.", "tags": [ "Authenticate" ], @@ -2448,12 +3307,24 @@ } } }, - "summary": "Membership login", - "description": "Membership login.\n\n{@link IShoppingCustomer Customer} logs in with his/her\n{@link IShoppingMember membership} account with the email and password.\n\nIf the {@link IShoppingMember member} has previously performed\n{@link activate citizenship activation}, the {@link IShoppingCustomer.citizen }\nvalue would be filled in accordingly. And if the member has also signed up\nas an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller}, the relevant information is also entered\naccordingly.\n\nFor reference, as described in the {@link create } function, before calling\nthis `login` function, you must first create a customer record and token by\ncalling the {@link create } function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "login" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" } }, "/shoppings/customers/authenticate/activate": { "post": { + "summary": "Activate citizenship", + "description": "Activate citizenship.\n\n{@link IShoppingCustomer Customer} activates his/her\n{@link IShoppingCitizen citizenship} with mobile number and real name.\n\nIf the custommer already {@link join joined} to the\n{@link IShoppingMember membership}, then you can skip the citizenship\n{@link activation} function calling everytime you log in from now on.\nOf course, such story would be same to the {@link external} function, too.\n\nFor reference, as described in the {@link create} function, before calling\nthis `activate` function, you must first create a customer record and token\nby calling the {@link create} function.", "tags": [ "Authenticate" ], @@ -2481,12 +3352,24 @@ } } }, - "summary": "Activate citizenship", - "description": "Activate citizenship.\n\n{@link IShoppingCustomer Customer} activates his/her\n{@link IShoppingCitizen citizenship} with mobile number and real name.\n\nIf the custommer already {@link join joined} to the\n{@link IShoppingMember membership}, then you can skip the citizenship\n{@link activation } function calling everytime you log in from now on.\nOf course, such story would be same to the {@link external } function, too.\n\nFor reference, as described in the {@link create } function, before calling\nthis `activate` function, you must first create a customer record and token\nby calling the {@link create } function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "activate" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" } }, "/shoppings/customers/authenticate/external": { "post": { + "summary": "Enroll external user info", + "description": "Enroll external user info.\n\n{@link IShoppingCustomer Customer} enrolls his/her\n{@link IShoppingExternalUser external user} information from other service.\n\nIt has similar effect with the {@link join membership joining} function,\nso that if you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate}\nfunction calling everytime you call this `external` function with same\ninfo from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate} and {@link join}\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to external server registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create} function, before calling\nthis `external` function, you must first create a customer record and token\nby calling the {@link create} function.", "tags": [ "Authenticate" ], @@ -2514,12 +3397,24 @@ } } }, - "summary": "Enroll external user info", - "description": "Enroll external user info.\n\n{@link IShoppingCustomer Customer} enrolls his/her\n{@link IShoppingExternalUser external user} information from other service.\n\nIt has similar effect with the {@link join membership joining} function,\nso that if you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate }\nfunction calling everytime you call this `external` function with same\ninfo from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate } and {@link join }\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to external server registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create } function, before calling\nthis `external` function, you must first create a customer record and token\nby calling the {@link create } function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "external" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" } }, "/shoppings/customers/authenticate/password/change": { "put": { + "summary": "Change password", + "description": "Change password.\n\nChange password of {@link IShoppingMember member} with the current password.\n\nThe reason why the current password is required is for security.", "tags": [ "Authenticate" ], @@ -2537,15 +3432,31 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Change password", - "description": "Change password.\n\nChange password of {@link IShoppingMember member} with the current password.\n\nThe reason why the current password is required is for security." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "password", + "change" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticatePasswordController" } }, "/shoppings/customers/coupons": { "patch": { + "summary": "List up every coupons", + "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up.", "tags": [ "Discount" ], @@ -2573,12 +3484,24 @@ } } }, - "summary": "List up every coupons", - "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "coupons", + "index" + ], + "x-samchon-controller": "ShoppingCustomerCouponController" } }, "/shoppings/customers/coupons/{id}": { "get": { + "summary": "Get a coupon info", + "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible.", "tags": [ "Discount" ], @@ -2589,8 +3512,8 @@ "schema": { "type": "string" }, - "description": "Target coupon's ", - "required": true + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" } ], "responses": { @@ -2605,12 +3528,24 @@ } } }, - "summary": "Get a coupon info", - "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "coupons", + "at" + ], + "x-samchon-controller": "ShoppingCustomerCouponController" } }, "/shoppings/customers/coupons/tickets": { "patch": { + "summary": "List up every coupon tickets", + "description": "List up every coupon tickets.\n\nList up every {@link IShoppingCouponTicket coupon tickets} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nFor reference, coupon ticket means that a {@link IShoppingCoupon coupon}\nhas been taken by a customer. If the target coupon has expiration day or\ndate, the coupon ticket also has\n{@link IShoppingCouponTicket.expired_at expiration time}, and such expired\ntickets would not be listed up. Likewise, tickets used to\n{@link IShoppingCouponTicketPayment pay} for the {@link IShoppingOrder order}\nwould not be listed up, either.\n\nAdditionally, you can limit the result by configuring\n{@link IShoppingCouponTicket.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCouponTicket.IRequest.sort sort condition}.", "tags": [ "Discount" ], @@ -2638,10 +3573,23 @@ } } }, - "summary": "List up every coupon tickets", - "description": "List up every coupon tickets.\n\nList up every {@link IShoppingCouponTicket coupon tickets} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nFor reference, coupon ticket means that a {@link IShoppingCoupon coupon}\nhas been taken by a customer. If the target coupon has expiration day or\ndate, the coupon ticket also has\n{@link IShoppingCouponTicket.expired_at expiration time}, and such expired\ntickets would not be listed up. Likewise, tickets used to\n{@link IShoppingCouponTicketPayment pay} for the {@link IShoppingOrder order}\nwould not be listed up, either.\n\nAdditionally, you can limit the result by configuring\n{@link IShoppingCouponTicket.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCouponTicket.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "coupons", + "tickets", + "index" + ], + "x-samchon-controller": "ShoppingCustomerCouponTicketController" }, "post": { + "summary": "Create a new coupon ticket", + "description": "Create a new coupon ticket.\n\nCreate a new {@link IShoppingCouponTicket coupon ticket} of a specific\n{@link IShoppingCoupon coupon} for the {@link IShoppingCustomer customer}.\n\nBy the way, if the target coupon has been\n{@link IShoppingCoupon.expired_at expired} or\n{@link IShoppingCoupon.IInventory.volume out of stock} or\n{@link IShoppingCoupon.IInventory.volume_per_citizen exhausted for him/her},\n410 gone exception would be thrown.\n\nAlso, even though succeeded to create a new coupon ticket from the target\ncoupon, if the coupon has expiration day or date, the newly created ticket\nalso has {@link IShoppingCouponTicket.expired_at expiration time}, and it\nwould be disabled after the expiration time.", "tags": [ "Discount" ], @@ -2669,12 +3617,25 @@ } } }, - "summary": "Create a new coupon ticket", - "description": "Create a new coupon ticket.\n\nCreate a new {@link IShoppingCouponTicket coupon ticket} of a specific\n{@link IShoppingCoupon coupon} for the {@link IShoppingCustomer customer}.\n\nBy the way, if the target coupon has been\n{@link IShoppingCoupon.expired_at expired} or\n{@link IShoppingCoupon.IInventory.volume out of stock} or\n{@link IShoppingCoupon.IInventory.volume_per_citizen exhausted for him/her},\n410 gone exception would be thrown.\n\nAlso, even though succeeded to create a new coupon ticket from the target\ncoupon, if the coupon has expiration day or date, the newly created ticket\nalso has {@link IShoppingCouponTicket.expired_at expiration time}, and it\nwould be disabled after the expiration time." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "coupons", + "tickets", + "create" + ], + "x-samchon-controller": "ShoppingCustomerCouponTicketController" } }, "/shoppings/customers/coupons/tickets/{id}": { "get": { + "summary": "Get a coupon ticket", + "description": "Get a coupon ticket.\n\nGet a {@link IShoppingCouponTicket coupon ticket} information with its ID.\n\nBy the way, if the target coupon ticket has been\n{@link IShoppingCouponTicket.expired_at expired} or used to\n{@link IShoppingCouponTicketPayment pay} for the {@link IShoppingOrder order},\n410 gone exception would be thrown.", "tags": [ "Discount" ], @@ -2686,8 +3647,8 @@ "type": "string", "format": "uuid" }, - "description": "Target coupon ticket's ", - "required": true + "required": true, + "description": " Target coupon ticket's {@link IShoppingCouponTicket.id }" } ], "responses": { @@ -2702,12 +3663,25 @@ } } }, - "summary": "Get a coupon ticket", - "description": "Get a coupon ticket.\n\nGet a {@link IShoppingCouponTicket coupon ticket} information with its ID.\n\nBy the way, if the target coupon ticket has been\n{@link IShoppingCouponTicket.expired_at expired} or used to\n{@link IShoppingCouponTicketPayment pay} for the {@link IShoppingOrder order},\n410 gone exception would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "coupons", + "tickets", + "at" + ], + "x-samchon-controller": "ShoppingCustomerCouponTicketController" } }, "/shoppings/customers/deposits/charges": { "patch": { + "summary": "List up every deposit charges", + "description": "List up every deposit charges.\n\nList up every {@link IShoppingDepositCharge deposit charges} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositCharge.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositCharge.IRequest.sort sort condition}.", "tags": [ "Discount" ], @@ -2735,10 +3709,23 @@ } } }, - "summary": "List up every deposit charges", - "description": "List up every deposit charges.\n\nList up every {@link IShoppingDepositCharge deposit charges} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositCharge.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositCharge.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "index" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargeController" }, "post": { + "summary": "Create a new deposit charge application", + "description": "Create a new deposit charge application.\n\nCreate a new {@link IShoppingDepositCharge deposit charge application}.\n\nBy the way, this function does not mean completion the deposit charge, but\nmeans just {@link IShoppingCustomer customer} is appling the deposit charge.\nThe deposit charge be completed only when customer\n{@link IShoppingDepositChargePublish.publish pay} the deposit charge.", "tags": [ "Discount" ], @@ -2766,12 +3753,25 @@ } } }, - "summary": "Create a new deposit charge application", - "description": "Create a new deposit charge application.\n\nCreate a new {@link IShoppingDepositCharge deposit charge application}.\n\nBy the way, this function does not mean completion the deposit charge, but\nmeans just {@link IShoppingCustomer customer} is appling the deposit charge.\nThe deposit charge be completed only when customer\n{@link IShoppingDepositChargePublish.publish pay} the deposit charge." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "create" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargeController" } }, "/shoppings/customers/deposits/charges/{id}": { "get": { + "summary": "Get a deposit charge info", + "description": "Get a deposit charge info.\n\nGet a {@link IShoppingDepositCharge deposit charge} information.", "tags": [ "Discount" ], @@ -2782,8 +3782,8 @@ "schema": { "type": "string" }, - "description": "Target deposit charge's ", - "required": true + "required": true, + "description": " Target deposit charge's {@link IShoppingDepositCharge.id }" } ], "responses": { @@ -2798,10 +3798,23 @@ } } }, - "summary": "Get a deposit charge info", - "description": "Get a deposit charge info.\n\nGet a {@link IShoppingDepositCharge deposit charge} information." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "at" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargeController" }, "put": { + "summary": "Update a deposit charge application", + "description": "Update a deposit charge application.\n\nUpdate value of a {@link IShoppingDepositCharge deposit charge application}\nthat has been applied by the {@link IShoppingCustomer}.\n\nIf the charge has been {@link IShoppingDepositChargePublish published},\nthen it is not possible to update the deposit charge. Only 410 gone exception\nwould be thrown.", "tags": [ "Discount" ], @@ -2812,8 +3825,8 @@ "schema": { "type": "string" }, - "description": "Target deposit charge's ", - "required": true + "required": true, + "description": " Target deposit charge's {@link IShoppingDepositCharge.id }" } ], "requestBody": { @@ -2829,13 +3842,29 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Update a deposit charge application", - "description": "Update a deposit charge application.\n\nUpdate value of a {@link IShoppingDepositCharge deposit charge application}\nthat has been applied by the {@link IShoppingCustomer }.\n\nIf the charge has been {@link IShoppingDepositChargePublish published},\nthen it is not possible to update the deposit charge. Only 410 gone exception\nwould be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "update" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargeController" }, "delete": { + "summary": "Erase a deposit charge application", + "description": "Erase a deposit charge application.\n\nErase a {@link IShoppingDepositCharge deposit charge application} that has been\napplied by the {@link IShoppingCustomer}.\n\nIf the charge has been {@link IShoppingDepositChargePublish published}, then\nit is not possible to erase the deposit charge. In that case, you've to cancel\nthe payment by calling the {@link publish.cancel} function.", "tags": [ "Discount" ], @@ -2846,21 +3875,37 @@ "schema": { "type": "string" }, - "description": "Target deposit charge's ", - "required": true + "required": true, + "description": " Target deposit charge's {@link IShoppingDepositCharge.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase a deposit charge application", - "description": "Erase a deposit charge application.\n\nErase a {@link IShoppingDepositCharge deposit charge application} that has been\napplied by the {@link IShoppingCustomer }.\n\nIf the charge has been {@link IShoppingDepositChargePublish published}, then\nit is not possible to erase the deposit charge. In that case, you've to cancel\nthe payment by calling the {@link publish.cancel } function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "erase" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargeController" } }, "/shoppings/customers/deposits/charges/{chargeId}/publish/able": { "get": { + "summary": "Check publishable", + "description": "Check publishable.\n\nTest whether the {@link IShoppingDepositCharge charge} is publishable or not.\n\nIf the charge has not been {@link IShoppingDepositChargePublish published} and\nnot deleted yet, then it is possible to publish the charge", "tags": [ "Discount" ], @@ -2872,8 +3917,8 @@ "type": "string", "format": "uuid" }, - "description": "Target charge's ", - "required": true + "required": true, + "description": " Target charge's {@link IShoppingDepositCharge.id }" } ], "responses": { @@ -2888,12 +3933,26 @@ } } }, - "summary": "Check publishable", - "description": "Check publishable.\n\nTest whether the {@link IShoppingDepositCharge charge} is publishable or not.\n\nIf the charge has not been {@link IShoppingDepositChargePublish published} and\nnot deleted yet, then it is possible to publish the charge" + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "publish", + "able" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargePublishController" } }, "/shoppings/customers/deposits/charges/{chargeId}/publish": { "post": { + "summary": "Publish a charge", + "description": "Publish a charge.\n\n{@link IShoppingDepositChargePublish Publish} a\n{@link IShoppingDepositCharge charge} that has been applied by the\n{@link IShoppingCustomer} with payment information gotten from the\npayment vendor system.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingDepositChargePublish.paid_at} would be `null` value,\nso that you have to check it after calling this publish function.", "tags": [ "Discount" ], @@ -2905,8 +3964,8 @@ "type": "string", "format": "uuid" }, - "description": "Target charge's ", - "required": true + "required": true, + "description": " Target charge's {@link IShoppingDepositCharge.id }" } ], "requestBody": { @@ -2932,12 +3991,26 @@ } } }, - "summary": "Publish a charge", - "description": "Publish a charge.\n\n{@link IShoppingDepositChargePublish Publish} a\n{@link IShoppingDepositCharge charge} that has been applied by the\n{@link IShoppingCustomer } with payment information gotten from the\npayment vendor system.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingDepositChargePublish.paid_at } would be `null` value,\nso that you have to check it after calling this publish function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "publish", + "create" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargePublishController" } }, "/shoppings/customers/deposits/histories": { "patch": { + "summary": "List up every deposit histories", + "description": "List up every deposit histories.\n\nList up every {@link IShoppingDepositHistory deposit histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositHistory.IRequest.sort sort condition}.", "tags": [ "Discount" ], @@ -2965,12 +4038,25 @@ } } }, - "summary": "List up every deposit histories", - "description": "List up every deposit histories.\n\nList up every {@link IShoppingDepositHistory deposit histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositHistory.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "histories", + "index" + ], + "x-samchon-controller": "ShoppingCustomerDepositHistoryController" } }, "/shoppings/customers/deposits/histories/{id}": { "get": { + "summary": "Get a deposit history info", + "description": "Get a deposit history info.\n\nGet a {@link IShoppingDepositHistory deposit history} information.", "tags": [ "Discount" ], @@ -2982,7 +4068,6 @@ "type": "string", "format": "uuid" }, - "description": "", "required": true } ], @@ -2998,12 +4083,25 @@ } } }, - "summary": "Get a deposit history info", - "description": "Get a deposit history info.\n\nGet a {@link IShoppingDepositHistory deposit history} information." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "histories", + "at" + ], + "x-samchon-controller": "ShoppingCustomerDepositHistoryController" } }, "/shoppings/customers/deposits/histories/balance": { "get": { + "summary": "Get balance of the deposit", + "description": "Get balance of the deposit.\n\nGet current balance of the deposit of the {@link IShoppingCustomer customer}.", "tags": [ "Discount" ], @@ -3020,12 +4118,25 @@ } } }, - "summary": "Get balance of the deposit", - "description": "Get balance of the deposit.\n\nGet current balance of the deposit of the {@link IShoppingCustomer customer}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "histories", + "balance" + ], + "x-samchon-controller": "ShoppingCustomerDepositHistoryController" } }, "/shoppings/customers/mileages/histories": { "patch": { + "summary": "List up every mileage histories", + "description": "List up every mileage histories.\n\nList up every {@link IShoppingMileageHistory mileage histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingMileageHistory.IRequest.sort sort condition}.", "tags": [ "Discount" ], @@ -3053,12 +4164,25 @@ } } }, - "summary": "List up every mileage histories", - "description": "List up every mileage histories.\n\nList up every {@link IShoppingMileageHistory mileage histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingMileageHistory.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "mileages", + "histories", + "index" + ], + "x-samchon-controller": "ShoppingCustomerMileageHistoryController" } }, "/shoppings/customers/mileages/histories/{id}": { "get": { + "summary": "Get a mileage history info", + "description": "Get a mileage history info.\n\nGet a {@link IShoppingMileageHistory mileage history} information.", "tags": [ "Discount" ], @@ -3070,8 +4194,8 @@ "type": "string", "format": "uuid" }, - "description": "Target mileage history's ", - "required": true + "required": true, + "description": " Target mileage history's {@link IShoppingMileageHistory.id }" } ], "responses": { @@ -3086,12 +4210,25 @@ } } }, - "summary": "Get a mileage history info", - "description": "Get a mileage history info.\n\nGet a {@link IShoppingMileageHistory mileage history} information." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "mileages", + "histories", + "at" + ], + "x-samchon-controller": "ShoppingCustomerMileageHistoryController" } }, "/shoppings/customers/mileages/histories/balance": { "get": { + "summary": "Get balance of the mileage", + "description": "Get balance of the mileage.\n\nGet current balance of the mileage of the {@link IShoppingCustomer customer}.", "tags": [ "Discount" ], @@ -3108,34 +4245,29 @@ } } }, - "summary": "Get balance of the mileage", - "description": "Get balance of the mileage.\n\nGet current balance of the mileage of the {@link IShoppingCustomer customer}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "mileages", + "histories", + "balance" + ], + "x-samchon-controller": "ShoppingCustomerMileageHistoryController" } }, - "/shoppings/customers/carts/{cartId}/commodities": { + "/shoppings/customers/carts/commodities": { "patch": { + "summary": "List of every commodities", + "description": "List of every commodities.\n\nList up every {@link IShoppingCartCommodity commodities} in the\nshopping cart with {@link IPage pagination}.\n\nYou can limit the result by configuring\n{@link IShoppingCartCommodity.IRequest.search search condition} in the\nrequest body. Furthermore, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingCartCommodity.IRequest.sort}.\n\nFor reference, when some commodity be {@link IShoppingOrder ordered} and\n{@link IShoppingOrderPublish published}, then it would not be appread in\nthe shopping cart more. Otherwise, the order has not been published yet,\nit would be appread in the shopping cart and still enable to create a new\n{@link IShoppingOrder order application} with the same commodity.\n\nOf course, if the target {@link IShoppingSale sale} has been suspended, or\n{@link IShoppingSaleUnitStockInventory out of stock}, then it would not be\nappread in the shopping cart more, either.", "tags": [ "Order" ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - } - ], + "parameters": [], "requestBody": { "description": "Request info of pagination, searching and sorting", "content": { @@ -3159,32 +4291,27 @@ } } }, - "summary": "List of every commodities", - "description": "List of every commodities.\n\nList up every {@link IShoppingCartCommodity commodities} in the\nshopping cart with {@link IPage pagination}.\n\nIf the *cartId* is not specified but `null` value assigned, then every\ncart would be targetted. Also, you can limit the result by configuring\n{@link IShoppingCartCommodity.IRequest.search search condition} in the\nrequest body. Furthermore, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingCartCommodity.IRequest.sort }.\n\nFor reference, when some commodity be {@link IShoppingOrder ordered} and\n{@link IShoppingOrderPublish published}, then it would not be appread in\nthe shopping cart more. Otherwise, the order has not been published yet,\nit would be appread in the shopping cart and still enable to create a new\n{@link IShoppingOrder order application} with the same commodity.\n\nOf course, if the target {@link IShoppingSale sale} has been suspended, or\n{@link IShoppingSaleUnitStockInventory out of stock}, then it would not be\nappread in the shopping cart more, either." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "index" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" }, "post": { + "summary": "Create a new commodity", + "description": "Create a new commodity.\n\nCreate a new {@link IShoppingCartCommodity commodity} into a specific\nshopping cart.\n\nIf {@link IShoppingCartCommodity.ICreate.accumulate} has `true` value\nand there's some same commodity that composed with same\n{@link IShoppingSaleUnitStock.IInvert stocks and quantities},\nthen new commodity would not be created but the volume would be accumulated.\n\nBy the way, if the target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, then 410 gone error\nwould be thrown. Therefore, it would better to check the target sale and\n{@link IShoppingSaleUnitStock stock}'s status before.", "tags": [ "Order" ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - } - ], + "parameters": [], "requestBody": { "description": "Creation info of the commodity", "content": { @@ -3208,33 +4335,29 @@ } } }, - "summary": "Create a new commodity", - "description": "Create a new commodity.\n\nCreate a new {@link IShoppingCartCommodity commodity} into a specific\nshopping cart.\n\nIf {@link IShoppingCartCommodity.ICreate.accumulate } has `true` value\nand there's some same commodity that composed with same\n{@link IShoppingSaleUnitStock.IInvert stocks and quantities},\nthen new commodity would not be created but the volume would be accumulated.\n\nAlso, if the *cartId* is not specified but `null` value assigned, then\nordinary cart would be utilized or create new one considering the\nexistence of the previous cart.\n\nBy the way, if the target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, then 410 gone error\nwould be thrown. Therefore, it would better to check the target sale and\n{@link IShoppingSaleUnitStock stock}'s status before." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "create" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" } }, - "/shoppings/customers/carts/{cartId}/commodities/{id}": { + "/shoppings/customers/carts/commodities/{id}": { "get": { + "summary": "Get a commodity", + "description": "Get a commodity.\n\nGet a {@link IShoppingCartCommodity commodity} record of the shopping cart.\n\nIf target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, then 410 gone error\nwould be thrown. Therefore, even if you've created a commodity successfully\nwith the {@link create} method, it still can be failed when you access the\ncommodity with this {@link at} method.", "tags": [ "Order" ], "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - }, { "name": "id", "in": "path", @@ -3242,8 +4365,8 @@ "type": "string", "format": "uuid" }, - "description": "Target commodity's ", - "required": true + "required": true, + "description": " Target commodity's {@link IShoppingCartCommodity.id }" } ], "responses": { @@ -3258,40 +4381,36 @@ } } }, - "summary": "Get a commodity", - "description": "Get a commodity.\n\nGet a {@link IShoppingCartCommodity commodity} record of the shopping cart.\n\nIf the *cartId* is different with the belonged cart's ID, then 404 not\nfound exception would be thrown. Otherwise, the *cartId* has `null` value,\nsuch dependency checking would be skipped, but still ownership would be\nvalidated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, then 410 gone error\nwould be thrown. Therefore, even if you've created a commodity successfully\nwith the {@link create } method, it still can be failed when you access the\ncommodity with this {@link at } method." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "at" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" }, "put": { + "summary": "Update a commodity (volume)", + "description": "Update a commodity (volume).\n\nUpdate a {@link IShoppingCartCommodity commodity}'s volume in the\nshopping cart.\n\nIf target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly, then 410\ngone error would be thrown, either.", "tags": [ "Order" ], "parameters": [ { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - }, - { - "name": "id", + "name": "id", "in": "path", "schema": { "type": "string", "format": "uuid" }, - "description": "Target commodity's ", - "required": true + "required": true, + "description": " Target commodity's {@link IShoppingCartCommodity.id }" } ], "requestBody": { @@ -3307,34 +4426,33 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Update a commodity (volume)", - "description": "Update a commodity (volume).\n\nUpdate a {@link IShoppingCartCommodity commodity}'s volume in the\nshopping cart.\n\nIf the *cartId* is different with the belonged cart's ID, then 404 not\nfound exception would be thrown. Otherwise, the *cartId* has `null` value,\nsuch dependency checking would be skipped, but still ownership would be\nvalidated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly, then 410\ngone error would be thrown, either." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "update" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" }, "delete": { + "summary": "Erase a commodity", + "description": "Erase a commodity.\n\nErase a {@link IShoppingCartCommodity commodity} from the shopping cart.\n\nIf the commodity is on an {@link IShoppingOrder order} process, it is not\npossible to erase it. Instead, if the order has been\n{@link IShoppingOrderPublish published}, then it would not be appread in\nthe shopping cart more. If the order be erased, then you also can continue\nerasinng the commodity, neither.", "tags": [ "Order" ], "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - }, { "name": "id", "in": "path", @@ -3342,42 +4460,41 @@ "type": "string", "format": "uuid" }, - "description": "Target commodity's ", - "required": true + "required": true, + "description": " Target commodity's {@link IShoppingCartCommodity.id }" } ], "responses": { "200": { - "description": "Newly created commodity" + "description": "Newly created commodity", + "content": { + "application/json": {} + } } }, - "summary": "Erase a commodity", - "description": "Erase a commodity.\n\nErase a {@link IShoppingCartCommodity commodity} from the shopping cart.\n\nIf the commodity is on an {@link IShoppingOrder order} process, it is not\npossible to erase it. Instead, if the order has been\n{@link IShoppingOrderPublish published}, then it would not be appread in\nthe shopping cart more. If the order be erased, then you also can continue\nerasinng the commodity, neither." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "erase" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" } }, - "/shoppings/customers/carts/{cartId}/commodities/{id}/replica": { + "/shoppings/customers/carts/commodities/{id}/replica": { "get": { + "summary": "Get replica of a commodity", + "description": "Get replica of a commodity.\n\nGet a {@link IShoppingCartCommodity.ICreate} typed info of the target\ncommodity for replication.\n\nIf target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly,\nthen 410 gone error would be thrown, either.", "tags": [ "Order" ], "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - }, { "name": "id", "in": "path", @@ -3385,8 +4502,8 @@ "type": "string", "format": "uuid" }, - "description": "Target commodity's ", - "required": true + "required": true, + "description": " Target commodity's {@link IShoppingCartCommodity.id }" } ], "responses": { @@ -3401,34 +4518,29 @@ } } }, - "summary": "Get replica of a commodity", - "description": "Get replica of a commodity.\n\nGet a {@link IShoppingCartCommodity.ICreate } typed info of the target\ncommodity for replication.\n\nBy the way, if the *cartId* is different with the belonged cart's ID,\nthen 404 not found exception would be thrown. Otherwise, the *cartId*\nhas `null` value, such dependency checking would be skipped, but still\nownership would be validated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly,\nthen 410 gone error would be thrown, either." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "replica" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" } }, - "/shoppings/customers/carts/{cartId}/commodities/discountable": { + "/shoppings/customers/carts/commodities/discountable": { "patch": { + "summary": "Get discountable info", + "description": "Get discountable info.\n\nCompute discountable features about the\n {@link IShoppingCartCommodity shopping cart} even including\nnon-carted {@link IShoppingSale sales}.\n\nReturned {@link IShoppingCartDiscountable} contains including\ncombinations of adjustable {@link IShoppingCoupon coupons},\nwithdrawable {@link IShoppingDepositHistory deposits} and\n{@link IShoppingMileageHistory mileages}.\n\nIf you want to know the discountable info about some specific sales\nthat have not been carted yet, specify the sales to the\n{@link IShoppingCartDiscountable.pseudos} property with composing\n{@link IShoppingCartCommodity.ICreate creation info of the commodities}.\nThen, they would be included in the discountable info.", "tags": [ "Order" ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - } - ], + "parameters": [], "requestBody": { "description": "Request info for discountable", "content": { @@ -3452,12 +4564,25 @@ } } }, - "summary": "Get discountable info", - "description": "Get discountable info.\n\nCompute discountable features about the\n {@link IShoppingCartCommodity shopping cart} even including\nnon-carted {@link IShoppingSale sales}.\n\nReturned {@link IShoppingCartDiscountable } contains including\ncombinations of adjustable {@link IShoppingCoupon coupons},\nwithdrawable {@link IShoppingDepositHistory deposits} and\n{@link IShoppingMileageHistory mileages}.\n\nAlso, if you want to know the discountable info about some specific\nsales that have not been carted yet, specify the sales\nto the {@link IShoppingCartDiscountable.pseudos } property with composing\n{@link IShoppingCartCommodity.ICreate creation info of the commodities}.\nThen, they would be included in the discountable info." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "discountable" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" } }, "/shoppings/customers/orders": { "post": { + "summary": "Create a new order application", + "description": "Create a new order application.\n\nCreate a new {@link IShoppingOrder order application} from a\n{@link IShoppingCartCommodity shopping cart} that has been composed by the\n{@link IShoppingCustomer}. Of course, do not need to put every commodities\nto the order, but possible to select some of them by the customer.\n\nBy the way, this function does not mean completion the order, but means\njust customer is appling the order. The order be completed only when customer\n{@link IShoppingOrderPublish.paid_at pays} the order.", "tags": [ "Order" ], @@ -3485,10 +4610,22 @@ } } }, - "summary": "Create a new order application", - "description": "Create a new order application.\n\nCreate a new {@link IShoppingOrder order application} from a\n{@link IShoppingCartCommodity shopping cart} that has been composed by the\n{@link IShoppingCustomer }. Of course, do not need to put every commodities\nto the order, but possible to select some of them by the customer.\n\nBy the way, this function does not mean completion the order, but means\njust customer is appling the order. The order be completed only when customer\n{@link IShoppingOrderPublish.paid_at pays} the order." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "create" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" }, "patch": { + "summary": "List up every orders", + "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order.", "tags": [ "Order" ], @@ -3516,12 +4653,24 @@ } } }, - "summary": "List up every orders", - "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "index" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" } }, "/shoppings/customers/orders/{id}": { "delete": { + "summary": "Erase an order application", + "description": "Erase an order application.\n\nErase an order application that has been applied by the\n{@link IShoppingCustomer}.\n\nIf the order has been {@link IShoppingOrderPublish published}, then it is\nnot possible to erase the order. In that case, you've to cancel the\npayment by calling the {@link publish.cancel} function.", "tags": [ "Order" ], @@ -3533,19 +4682,34 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase an order application", - "description": "Erase an order application.\n\nErase an order application that has been applied by the\n{@link IShoppingCustomer }.\n\nIf the order has been {@link IShoppingOrderPublish published}, then it is\nnot possible to erase the order. In that case, you've to cancel the\npayment by calling the {@link publish.cancel } function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "erase" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" }, "get": { + "summary": "Get an order info", + "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown.", "tags": [ "Order" ], @@ -3557,8 +4721,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { @@ -3573,12 +4737,24 @@ } } }, - "summary": "Get an order info", - "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "at" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" } }, "/shoppings/customers/orders/{id}/price": { "get": { + "summary": "Get price of the order", + "description": "Get price of the order.\n\nGet detailed price information of the {@link IShoppingOrder order}.\n\nReturned price info contains not only the amount of the order, but also\ncontains the discount amount by {@link IShoppingCoupono coupons},\n{@link IShoppingDepositHistory deposits} and\n{@link IShoppingMileageHistory mileages}.", "tags": [ "Order" ], @@ -3590,8 +4766,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { @@ -3606,12 +4782,24 @@ } } }, - "summary": "Get price of the order", - "description": "Get price of the order.\n\nGet detailed price information of the {@link IShoppingOrder order}.\n\nReturned price info contains not only the amount of the order, but also\ncontains the discount amount by {@link IShoppingCoupono coupons},\n{@link IShoppingDepositHistory deposits} and\n{@link IShoppingMileageHistory mileages}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "price" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" } }, "/shoppings/customers/orders/{id}/discountable": { "patch": { + "summary": "Get discountable info", + "description": "Get discountable info.\n\nCompute discountable features about the {@link IShoppingOrder}.\n\nRetured {@link IShoppingOrderDiscountable} contains including\ncombinations of adjustable {@link IShoppingCoupon coupons},\nwithdrawable {@link IShoppingDepositHistory deposits}\nand {@link IShoppingMileageHistory mileages}.\n\nOf course, returned features are valid only when the order has not\nbeen {@link IShoppingOrderPublish published} yet. If the order has\nalready been published, then no way to discount the price more.", "tags": [ "Order" ], @@ -3623,8 +4811,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "requestBody": { @@ -3650,12 +4838,24 @@ } } }, - "summary": "Get discountable info", - "description": "Get discountable info.\n\nCompute discountable features about the {@link IShoppingOrder }.\n\nRetured {@link IShoppingOrderDiscountable } contains including\ncombinations of adjustable {@link IShoppingCoupon coupons},\nwithdrawable {@link IShoppingDepositHistory deposits}\nand {@link IShoppingMileageHistory mileages}.\n\nOf course, returned features are valid only when the order has not\nbeen {@link IShoppingOrderPublish published} yet. If the order has\nalready been published, then no way to discount the price more." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "discountable" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" } }, "/shoppings/customers/orders/{id}/discount": { "put": { + "summary": "Discount the order", + "description": "Discount the order.\n\nDiscount total price of the {@link IShoppingOrder} by adjusting\n{@link IShoppingCoupon coupons}, {@link IShoppingDepositHistory deposits}\nand {@link IShoppingMileageHistory mileages}. If amount of discount\nfeatures are equal to the total price of the order, it is possible to\n{@link IShoppingOrderPublish publish} it without any cash.\n\nBy the way, the discounting features must be valid. If not, 428\nunprocessable entity error would be thrown. To know which features are\nadjustable or withdrawable, call the {@link discountable} function\nbefore.", "tags": [ "Order" ], @@ -3667,8 +4867,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "requestBody": { @@ -3694,12 +4894,24 @@ } } }, - "summary": "Discount the order", - "description": "Discount the order.\n\nDiscount total price of the {@link IShoppingOrder } by adjusting\n{@link IShoppingCoupon coupons}, {@link IShoppingDepositHistory deposits}\nand {@link IShoppingMileageHistory mileages}. If amount of discount\nfeatures are equal to the total price of the order, it is possible to\n{@link IShoppingOrderPublish publish} it without any cash.\n\nBy the way, the discounting features must be valid. If not, 428\nunprocessable entity error would be thrown. To know which features are\nadjustable or withdrawable, call the {@link discountable } function\nbefore." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "discount" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" } }, "/shoppings/customers/orders/{orderId}/goods/{id}/confirm": { "put": { + "summary": "Confirm an order good", + "description": "Confirm an order good.\n\nConfirm an {@link IShoppingOrderGood order good} that has been\ncompleted {@link IShoppingDelivery delivering} to the\n{@link IShoppingCustomer customer}.\n\nIn other words, belonged {@link IShoppingOrder order} must be\n{@link IShoppingPublish.paid_at published, paid} and delivery of\nthe good must be {@link IShoppingDeliveryJourney arrived} to the\ncustomer. If not, 428 unprocessable entity error would be thrown.", "tags": [ "Order" ], @@ -3711,8 +4923,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged order's ", - "required": true + "required": true, + "description": " Belonged order's {@link IShoppingOrder.id }" }, { "name": "id", @@ -3721,21 +4933,37 @@ "type": "string", "format": "uuid" }, - "description": "Target good's ", - "required": true + "required": true, + "description": " Target good's {@link IShoppingOrderGood.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Confirm an order good", - "description": "Confirm an order good.\n\nConfirm an {@link IShoppingOrderGood order good} that has been\ncompleted {@link IShoppingDelivery delivering} to the\n{@link IShoppingCustomer customer}.\n\nIn other words, belonged {@link IShoppingOrder order} must be\n{@link IShoppingPublish.paid_at published, paid} and delivery of\nthe good must be {@link IShoppingDeliveryJourney arrived} to the\ncustomer. If not, 428 unprocessable entity error would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "goods", + "confirm" + ], + "x-samchon-controller": "ShoppingCustomerOrderGoodController" } }, "/shoppings/customers/orders/{orderId}/publish/able": { "get": { + "summary": "Check publishable", + "description": "Check publishable.\n\nTest whether the {@link IShoppingOrder order} is publishable or not.\n\nIf the order has not been {@link IShoppingOrderPublish published} and\nnot deleted yet, then it is possible to publish the order. Even thouogh\ntarget {@link IShoppingSale sale} is suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, it is still possible\nto publish because the order already has been applied.", "tags": [ "Order" ], @@ -3747,8 +4975,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { @@ -3763,12 +4991,25 @@ } } }, - "summary": "Check publishable", - "description": "Check publishable.\n\nTest whether the {@link IShoppingOrder order} is publishable or not.\n\nIf the order has not been {@link IShoppingOrderPublish published} and\nnot deleted yet, then it is possible to publish the order. Even thouogh\ntarget {@link IShoppingSale sale} is suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, it is still possible\nto publish because the order already has been applied." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "publish", + "able" + ], + "x-samchon-controller": "ShoppingCustomerOrderPublishController" } }, "/shoppings/customers/orders/{orderId}/publish": { "post": { + "summary": "Publish an order", + "description": "Publish an order.\n\n{@link IShoppingOrderPublish Publish} an {@link IShoppingOrder order} that\nhas been applied by the {@link IShoppingCustomer} with\n{@link IShoppingAddress address} to delivery and payment information gotten\nfrom the payment vendor system.\n\nIf the order has been discounted for entire order price, then no need\nto send payment vendor info. Instead, only address info is required.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingOrderPublish.paid_at} would be `null` value, so\nthat you have to check it after calling this publish function.", "tags": [ "Order" ], @@ -3780,8 +5021,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "requestBody": { @@ -3789,14 +5030,7 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingOrderPublish.ICashCreate" - }, - { - "$ref": "#/components/schemas/IShoppingOrderPublish.IZeroCreate" - } - ] + "$ref": "#/components/schemas/IShoppingOrderPublish.ICreate" } } }, @@ -3814,10 +5048,23 @@ } } }, - "summary": "Publish an order", - "description": "Publish an order.\n\n{@link IShoppingOrderPublish Publish} an {@link IShoppingOrder order} that\nhas been applied by the {@link IShoppingCustomer } with\n{@link IShoppingAddress address} to delivery and payment information gotten\nfrom the payment vendor system.\n\nIf the order has been discounted for entire order price, then no need\nto send payment vendor info. Instead, only address info is required.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingOrderPublish.paid_at } would be `null` value, so\nthat you have to check it after calling this publish function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "publish", + "create" + ], + "x-samchon-controller": "ShoppingCustomerOrderPublishController" }, "delete": { + "summary": "Cancel the publish (payment)", + "description": "Cancel the publish (payment).\n\nCancel payment of an {@link IShoppingOrder order} that has been\n{@link IShoppingOrderPublish published}.\n\nIf target publish's payment method is manual bank account transfer,\nthen it would be cancelled directly. If not, then payment cancel\nrequest would be sent to the payment vendor system.", "tags": [ "Order" ], @@ -3829,21 +5076,37 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Cancel the publish (payment)", - "description": "Cancel the publish (payment).\n\nCancel payment of an {@link IShoppingOrder order} that has been\n{@link IShoppingOrderPublish published}.\n\nIf target publish's payment method is manual bank account transfer,\nthen it would be cancelled directly. If not, then payment cancel\nrequest would be sent to the payment vendor system." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "publish", + "cancel" + ], + "x-samchon-controller": "ShoppingCustomerOrderPublishController" } }, "/shoppings/customers/sales": { "patch": { + "summary": "List up every summarized sales", + "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at} function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -3871,12 +5134,24 @@ } } }, - "summary": "List up every summarized sales", - "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at } function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSaleController" } }, "/shoppings/customers/sales/{id}": { "get": { + "summary": "Get a sale info", + "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales.", "tags": [ "Sale" ], @@ -3888,8 +5163,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { @@ -3904,12 +5179,24 @@ } } }, - "summary": "Get a sale info", - "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSaleController" } }, "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments": { "patch": { + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales.", "tags": [ "Sale" ], @@ -3921,8 +5208,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -3931,8 +5218,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -3958,10 +5245,24 @@ } } }, - "summary": "List up every inquiry comments", - "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "comments", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionCommentController" }, "post": { + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales.", "tags": [ "Sale" ], @@ -3973,8 +5274,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -3983,8 +5284,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry's ", - "required": true + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -4010,12 +5311,26 @@ } } }, - "summary": "Create an inquiry comment", - "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "comments", + "create" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionCommentController" } }, "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { "get": { + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales.", "tags": [ "Sale" ], @@ -4027,8 +5342,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -4037,8 +5352,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -4047,8 +5362,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "responses": { @@ -4063,10 +5378,24 @@ } } }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "comments", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionCommentController" }, "put": { + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -4078,8 +5407,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -4088,8 +5417,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -4098,8 +5427,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "requestBody": { @@ -4125,12 +5454,26 @@ } } }, - "summary": "Update an inquiry comment", - "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "comments", + "update" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionCommentController" } }, "/shoppings/customers/sales/{saleId}/questions": { "post": { + "summary": "Write a question article", + "description": "Write a question article.\n\nWhen a {@link IShoppingCustomer customer} wants to ask something about\na specific {@link IShoppingSale sale}, he/she can ask it by writing a\nnew {@link IShoppingSaleQuestion question article}.\n\nIf the customer does not want to reveal his/her identify and question,\nhe/she can write the question as a secret article. In that case, only\nthe customer and the related {@link IShoppingSeller seller} can see\nthe {@link at detailed content}. Also, such secret question's title and\nwriter name would be masked with `*` characters in the\n{@link index pagiation API}.", "tags": [ "Sale" ], @@ -4142,8 +5485,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4169,10 +5512,23 @@ } } }, - "summary": "Write a question article", - "description": "Write a question article.\n\nWhen a {@link IShoppingCustomer customer} wants to ask something about\na specific {@link IShoppingSale sale}, he/she can ask it by writing a\nnew {@link IShoppingSaleQuestion question article}.\n\nIf the customer does not want to reveal his/her identify and question,\nhe/she can write the question as a secret article. In that case, only\nthe customer and the related {@link IShoppingSeller seller} can see\nthe {@link at detailed content}. Also, such secret question's title and\nwriter name would be masked with `*` characters in the\n{@link index pagiation API}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "create" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionController" }, "patch": { + "summary": "List up every summarized questions", + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges} function\nor {@link at} function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret} with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -4184,8 +5540,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4211,12 +5567,25 @@ } } }, - "summary": "List up every summarized questions", - "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionController" } }, "/shoppings/customers/sales/{saleId}/questions/{id}": { "post": { + "summary": "Update a question", + "description": "Update a question.\n\nUpdate a {@link IShoppingSaleQuestion question}'s content.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleQuestion.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -4228,8 +5597,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -4238,8 +5607,8 @@ "type": "string", "format": "uuid" }, - "description": "Target question's ", - "required": true + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" } ], "requestBody": { @@ -4265,10 +5634,23 @@ } } }, - "summary": "Update a question", - "description": "Update a question.\n\nUpdate a {@link IShoppingSaleQuestion question}'s content.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleQuestion.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "update" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionController" }, "get": { + "summary": "Get a question info", + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret}\nvalue is `false`.", "tags": [ "Sale" ], @@ -4280,8 +5662,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -4290,8 +5672,8 @@ "type": "string", "format": "uuid" }, - "description": "Target question's ", - "required": true + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" } ], "responses": { @@ -4306,12 +5688,25 @@ } } }, - "summary": "Get a question info", - "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionController" } }, "/shoppings/customers/sales/{saleId}/questions/abridges": { "patch": { + "summary": "List up every abridged questions", + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at} function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret} with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -4323,8 +5718,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4350,12 +5745,25 @@ } } }, - "summary": "List up every abridged questions", - "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "abridges" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionController" } }, "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments": { "patch": { + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales.", "tags": [ "Sale" ], @@ -4367,8 +5775,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -4377,8 +5785,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -4404,10 +5812,24 @@ } } }, - "summary": "List up every inquiry comments", - "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "comments", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewCommentController" }, "post": { + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales.", "tags": [ "Sale" ], @@ -4419,8 +5841,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -4429,8 +5851,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry's ", - "required": true + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -4456,12 +5878,26 @@ } } }, - "summary": "Create an inquiry comment", - "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "comments", + "create" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewCommentController" } }, "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { "get": { + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales.", "tags": [ "Sale" ], @@ -4473,8 +5909,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -4483,8 +5919,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -4493,8 +5929,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "responses": { @@ -4509,10 +5945,24 @@ } } }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "comments", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewCommentController" }, "put": { + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -4524,8 +5974,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -4534,8 +5984,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -4544,8 +5994,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "requestBody": { @@ -4571,12 +6021,26 @@ } } }, - "summary": "Update an inquiry comment", - "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "comments", + "update" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewCommentController" } }, "/shoppings/customers/sales/{saleId}/reviews": { "post": { + "summary": "Write a review article", + "description": "Write a review article.\n\nWhen a {@link IShoppingCustomer customer} has purchased a specific\n{@link IShoppingSale sale} and get {@link IShoppingDelivery delivered} it,\nhe/she can write a {@link IShoppingSaleReview review} article about the sale.\n\nIf try to write a review article without purchasing or the delivery has not\nbeen completed, 428 unprocessable entity error would be thrown. Also, the\ncustomer can write multiple review articles per an order, but the next\narticle can be written after 2 weeks from the previous article. If not,\n428 unprocessable entity error would be thrown, either.", "tags": [ "Sale" ], @@ -4588,8 +6052,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4615,10 +6079,23 @@ } } }, - "summary": "Write a review article", - "description": "Write a review article.\n\nWhen a {@link IShoppingCustomer customer} has purchased a specific\n{@link IShoppingSale sale} and get {@link IShoppingDelivery delivered} it,\nhe/she can write a {@link IShoppingSaleReview review} article about the sale.\n\nIf try to write a review article without purchasing or the delivery has not\nbeen completed, 428 unprocessable entity error would be thrown. Also, the\ncustomer can write multiple review articles per an order, but the next\narticle can be written after 2 weeks from the previous article. If not,\n428 unprocessable entity error would be thrown, either." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "create" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewController" }, "patch": { + "summary": "List up every summarized reviews", + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges} function\nor {@link at} function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -4630,8 +6107,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4657,12 +6134,25 @@ } } }, - "summary": "List up every summarized reviews", - "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewController" } }, "/shoppings/customers/sales/{saleId}/reviews/{id}": { "post": { + "summary": "Update a review", + "description": "Update a review.\n\nUpdadte a {@link IShoppingSaleReview review}'s content and score.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleReview.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -4674,8 +6164,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -4684,8 +6174,8 @@ "type": "string", "format": "uuid" }, - "description": "Target review's ", - "required": true + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" } ], "requestBody": { @@ -4711,10 +6201,23 @@ } } }, - "summary": "Update a review", - "description": "Update a review.\n\nUpdadte a {@link IShoppingSaleReview review}'s content and score.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleReview.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "update" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewController" }, "get": { + "summary": "Get a review info", + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales.", "tags": [ "Sale" ], @@ -4726,8 +6229,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -4736,8 +6239,8 @@ "type": "string", "format": "uuid" }, - "description": "Target review's ", - "required": true + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" } ], "responses": { @@ -4752,12 +6255,25 @@ } } }, - "summary": "Get a review info", - "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewController" } }, "/shoppings/customers/sales/{saleId}/reviews/abridges": { "patch": { + "summary": "List up every abridged reviews", + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at} function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -4769,8 +6285,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4796,12 +6312,25 @@ } } }, - "summary": "List up every abridged reviews", - "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "abridges" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewController" } }, "/shoppings/customers/sales/{saleId}/snapshots": { "patch": { + "summary": "List up every snapshots", + "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at} or {@link flipo} function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended.", "tags": [ "Sale" ], @@ -4813,8 +6342,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4840,12 +6369,25 @@ } } }, - "summary": "List up every snapshots", - "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at } or {@link flipo } function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "snapshots", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSaleSnapshotController" } }, "/shoppings/customers/sales/{saleId}/snapshots/{id}": { "get": { + "summary": "Get a snapshot info", + "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip} function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended.", "tags": [ "Sale" ], @@ -4857,8 +6399,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -4867,8 +6409,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -4883,12 +6425,25 @@ } } }, - "summary": "Get a snapshot info", - "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip } function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "snapshots", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSaleSnapshotController" } }, "/shoppings/customers/sales/{saleId}/snapshots/{id}/flip": { "get": { + "summary": "Get a flipped snapshot info", + "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended.", "tags": [ "Sale" ], @@ -4900,8 +6455,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -4910,8 +6465,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -4926,12 +6481,25 @@ } } }, - "summary": "Get a flipped snapshot info", - "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "snapshots", + "flip" + ], + "x-samchon-controller": "ShoppingCustomerSaleSnapshotController" } }, "/shoppings/customers/systematic/channels/{channelCode}/categories": { "patch": { + "summary": "List up every categories with children records", + "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -4942,8 +6510,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" } ], "responses": { @@ -4961,12 +6529,26 @@ } } }, - "summary": "List up every categories with children records", - "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "categories", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelCategoryController" } }, "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}": { "get": { + "summary": "Get a category info", + "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too.", "tags": [ "Systematic" ], @@ -4977,8 +6559,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -4987,8 +6569,8 @@ "type": "string", "format": "uuid" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "responses": { @@ -5003,12 +6585,26 @@ } } }, - "summary": "Get a category info", - "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "categories", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelCategoryController" } }, "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}/invert": { "get": { + "summary": "Get a category info of inverted", + "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories.", "tags": [ "Systematic" ], @@ -5019,8 +6615,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -5029,8 +6625,8 @@ "type": "string", "format": "uuid" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "responses": { @@ -5045,12 +6641,26 @@ } } }, - "summary": "Get a category info of inverted", - "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "categories", + "invert" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelCategoryController" } }, "/shoppings/customers/systematic/channels": { "patch": { + "summary": "List up every channels", + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -5078,12 +6688,25 @@ } } }, - "summary": "List up every channels", - "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelController" } }, "/shoppings/customers/systematic/channels/hierarchical": { "patch": { + "summary": "List up every channels with nested categories", + "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -5111,12 +6734,25 @@ } } }, - "summary": "List up every channels with nested categories", - "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "hierarchical" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelController" } }, "/shoppings/customers/systematic/channels/{id}": { "get": { + "summary": "Get a channel info", + "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations.", "tags": [ "Systematic" ], @@ -5128,8 +6764,8 @@ "type": "string", "format": "uuid" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.id }" } ], "responses": { @@ -5144,12 +6780,25 @@ } } }, - "summary": "Get a channel info", - "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelController" } }, "/shoppings/customers/systematic/channels/{code}/get": { "get": { + "summary": "Get a channel info by its code", + "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations.", "tags": [ "Systematic" ], @@ -5160,8 +6809,8 @@ "schema": { "type": "string" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.code }" } ], "responses": { @@ -5176,12 +6825,25 @@ } } }, - "summary": "Get a channel info by its code", - "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "get" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelController" } }, "/shoppings/customers/systematic/sections": { "patch": { + "summary": "List up every sections", + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}.", "tags": [ "Section" ], @@ -5209,12 +6871,25 @@ } } }, - "summary": "List up every sections", - "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "sections", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSystematicSectionController" } }, "/shoppings/customers/systematic/sections/{id}": { "get": { + "summary": "Get a section info", + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information.", "tags": [ "Section" ], @@ -5226,8 +6901,8 @@ "type": "string", "format": "uuid" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.id }" } ], "responses": { @@ -5242,12 +6917,25 @@ } } }, - "summary": "Get a section info", - "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "sections", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSystematicSectionController" } }, "/shoppings/customers/systematic/sections/{code}/get": { "get": { + "summary": "Get a section info by its code", + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code.", "tags": [ "Section" ], @@ -5258,8 +6946,8 @@ "schema": { "type": "string" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.code }" } ], "responses": { @@ -5274,12 +6962,25 @@ } } }, - "summary": "Get a section info by its code", - "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "sections", + "get" + ], + "x-samchon-controller": "ShoppingCustomerSystematicSectionController" } }, "/shoppings/sellers/authenticate": { "get": { + "summary": "Get seller information", + "description": "Get seller information.\n\nGet {@link IShoppingSeller.IInvert seller} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an seller,\nit throws 403 forbidden exception.", "tags": [ "Authenticate" ], @@ -5296,10 +6997,22 @@ } } }, - "summary": "Get seller information", - "description": "Get seller information.\n\nGet {@link IShoppingSeller.IInvert seller} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an seller,\nit throws 403 forbidden exception." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "authenticate", + "get" + ], + "x-samchon-controller": "ShoppingSellerAuthenticateController" }, "post": { + "summary": "Join as an seller", + "description": "Join as an seller.\n\nJoin as an seller with {@link IShoppingSeller.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown.", "tags": [ "Authenticate" ], @@ -5327,12 +7040,24 @@ } } }, - "summary": "Join as an seller", - "description": "Join as an seller.\n\nJoin as an seller with {@link IShoppingSeller.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "authenticate", + "join" + ], + "x-samchon-controller": "ShoppingSellerAuthenticateController" } }, "/shoppings/sellers/authenticate/login": { "put": { + "summary": "Login as an seller", + "description": "Login as an seller.\n\nLogin as an seller with {@link IShoppingSeller.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login} function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer} type that starting from the customer information, so\nthat you have to access to the seller info through\n`customer.member.seller`. In contrast with that, this method returns\n{@link IShoppingSeller.IInvert} type that starting from the seller\ninfo, so that can access to the customer info through `seller.customer`.\n\nOf course, to use this function, you had to {@link join} as an seller\nbefore. If not, 403 forbidden exception would be thrown,", "tags": [ "Authenticate" ], @@ -5360,12 +7085,24 @@ } } }, - "summary": "Login as an seller", - "description": "Login as an seller.\n\nLogin as an seller with {@link IShoppingSeller.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login } function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer } type that starting from the customer information, so\nthat you have to access to the seller info through\n`customer.member.seller`. In contrast with that, this method returns\n{@link IShoppingSeller.IInvert } type that starting from the seller\ninfo, so that can access to the customer info through `seller.customer`.\n\nOf course, to use this function, you had to {@link join } as an seller\nbefore. If not, 403 forbidden exception would be thrown," + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "authenticate", + "login" + ], + "x-samchon-controller": "ShoppingSellerAuthenticateController" } }, "/shoppings/sellers/deliveries": { "patch": { + "summary": "Get list of deliveries", + "description": "Get list of deliveries.\n\nGet list of {@link IShoppingDelivery.IInvert deliveries} of current\n{@link IShoppingSeller seller} with {@link IPage pagination}.\n\nFor reference, returned deliveries are containing the target\n{@link IShoppingOrder.IInvertFromDelivery order} informations. Of course,\nonly related {@link IShoppingOrderGood goods} are contained in the orders.\n\nAdditionally, you can limit the result by configuring\n{@link IShoppingDelivery.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingDelivery.IRequest.sort sort condition}.", "tags": [ "Order" ], @@ -5393,10 +7130,22 @@ } } }, - "summary": "Get list of deliveries", - "description": "Get list of deliveries.\n\nGet list of {@link IShoppingDelivery.IInvert deliveries} of current\n{@link IShoppingSeller seller} with {@link IPage pagination}.\n\nFor reference, returned deliveries are containing the target\n{@link IShoppingOrder.IInvertFromDelivery order} informations. Of course,\nonly related {@link IShoppingOrderGood goods} are contained in the orders.\n\nAdditionally, you can limit the result by configuring\n{@link IShoppingDelivery.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingDelivery.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "index" + ], + "x-samchon-controller": "ShoppingSellerDeliveryController" }, "post": { + "summary": "Create a delivery", + "description": "Create a delivery.\n\nCreate a {@link IShoppingDelivery delivery} record targetting\n{@link IShoppingOrder orders}, their {@link IShoppingOrderGood goods} and\n{@link IShoppingSaleUnitStock stocks} ({@link IShoppingDeliveryPiece}) with\n{@link IShoppingDeliveryJourney journeys} and\n{@link IShoppingDeliveryShipper shippers} info.\n\nNote that, composition of the {@link IShoppingDeliveryPiece} must not over\nthe required. To identify which pieces are required, recommend to call\nthe {@link incompletes} function with target orders'\n{@link IShoppingOrderPublish.id}s before calling this one.", "tags": [ "Order" ], @@ -5424,12 +7173,24 @@ } } }, - "summary": "Create a delivery", - "description": "Create a delivery.\n\nCreate a {@link IShoppingDelivery delivery} record targetting\n{@link IShoppingOrder orders}, their {@link IShoppingOrderGood goods} and\n{@link IShoppingSaleUnitStock stocks} ({@link IShoppingDeliveryPiece }) with\n{@link IShoppingDeliveryJourney journeys} and\n{@link IShoppingDeliveryShipper shippers} info.\n\nNote that, composition of the {@link IShoppingDeliveryPiece } must not over\nthe required. To identify which pieces are required, recommend to call\nthe {@link incompletes } function with target orders'\n{@link IShoppingOrderPublish.id }s before calling this one." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "create" + ], + "x-samchon-controller": "ShoppingSellerDeliveryController" } }, "/shoppings/sellers/deliveries/{id}": { "get": { + "summary": "Get a delivery", + "description": "Get a delivery.\n\nGet a {@link IShoppingDelivery.IInvert delivery} information with its ID.\n\nFor reference, returned delivery is containing the target\n{@link IShoppingOrder.IInvertFromDelivery order} informations. Of course,\nonly related {@link IShoppingOrderGood goods} are contained in the orders.", "tags": [ "Order" ], @@ -5441,8 +7202,8 @@ "type": "string", "format": "uuid" }, - "description": "Target delivery's ", - "required": true + "required": true, + "description": " Target delivery's {@link IShoppingDelivery.id }" } ], "responses": { @@ -5457,12 +7218,24 @@ } } }, - "summary": "Get a delivery", - "description": "Get a delivery.\n\nGet a {@link IShoppingDelivery.IInvert delivery} information with its ID.\n\nFor reference, returned delivery is containing the target\n{@link IShoppingOrder.IInvertFromDelivery order} informations. Of course,\nonly related {@link IShoppingOrderGood goods} are contained in the orders." - } + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "at" + ], + "x-samchon-controller": "ShoppingSellerDeliveryController" + } }, "/shoppings/sellers/deliveries/incompletes": { "patch": { + "summary": "Get list of incomplete pieces", + "description": "Get list of incomplete pieces.\n\nGet list of {@link IShoppingDeliveryPiece incomplete pieces} of target\norders' {@link IShoppingOrderPublish.id}s.\n\nIf you specify target orders' publish IDs, then this function returns\nincompleted pieces of the orders with computation as an Array of\n{@link IShoppingDeliveryPiece.ICreate} type.\n\nYou can utillize the result to make a huge {@link IShoppingDelivery delivery}\nfor integrated delivering, and also possible to make multiple deliveries for\nsplitted delivering.", "tags": [ "Order" ], @@ -5493,12 +7266,24 @@ } } }, - "summary": "Get list of incomplete pieces", - "description": "Get list of incomplete pieces.\n\nGet list of {@link IShoppingDeliveryPiece incomplete pieces} of target\norders' {@link IShoppingOrderPublish.id }s.\n\nIf you specify target orders' publish IDs, then this function returns\nincompleted pieces of the orders with computation as an Array of\n{@link IShoppingDeliveryPiece.ICreate } type.\n\nYou can utillize the result to make a huge {@link IShoppingDelivery delivery}\nfor integrated delivering, and also possible to make multiple deliveries for\nsplitted delivering." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "incompletes" + ], + "x-samchon-controller": "ShoppingSellerDeliveryController" } }, "/shoppings/sellers/deliveries/{deliveryId}/journeys": { "post": { + "summary": "Create a new journey", + "description": "Create a new journey.\n\nCreate a new {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nThis action may change the related {@link IShoppingOrderGood.state}.\nAlso, if the target journey's type is \"delivering\", whether the property\n{@link IShoppingDeliveryJourney.completed_at} is null or not affects to\nthe related goods' states. If the property is not null, the state becomes\n\"arrived\". Otherwise, the state becomes \"delivering\".", "tags": [ "Order" ], @@ -5510,8 +7295,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged delivery's ", - "required": true + "required": true, + "description": " Belonged delivery's {@link IShoppingDelivery.id }" } ], "requestBody": { @@ -5537,12 +7322,25 @@ } } }, - "summary": "Create a new journey", - "description": "Create a new journey.\n\nCreate a new {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nThis action may change the related {@link IShoppingOrderGood.state }.\nAlso, if the target journey's type is \"delivering\", whether the property\n{@link IShoppingDeliveryJourney.completed_at } is null or not affects to\nthe related goods' states. If the property is not null, the state becomes\n\"arrived\". Otherwise, the state becomes \"delivering\"." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "journeys", + "create" + ], + "x-samchon-controller": "ShoppingSellerDeliveryJourneyController" } }, "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}/complete": { "put": { + "summary": "Complete a journey", + "description": "Complete a journey.\n\nComplete a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}. In other words, fills the\n{@link IShoppingDeliveryJourney.completed_at} property with current time.\n\nIf the target journey's type is \"delivering\", this action may change\nthe related {@link IShoppingOrderGood.state goods' states} to be \"arrived\".", "tags": [ "Order" ], @@ -5554,8 +7352,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged delivery's ", - "required": true + "required": true, + "description": " Belonged delivery's {@link IShoppingDelivery.id }" }, { "name": "id", @@ -5564,8 +7362,8 @@ "type": "string", "format": "uuid" }, - "description": "Target journey's ", - "required": true + "required": true, + "description": " Target journey's {@link IShoppingDeliveryJourney.id }" } ], "requestBody": { @@ -5581,15 +7379,31 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Complete a journey", - "description": "Complete a journey.\n\nComplete a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}. In other words, fills the\n{@link IShoppingDeliveryJourney.completed_at } property with current time.\n\nIf the target journey's type is \"delivering\", this action may change\nthe related {@link IShoppingOrderGood.state goods' states} to be \"arrived\"." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "journeys", + "complete" + ], + "x-samchon-controller": "ShoppingSellerDeliveryJourneyController" } }, "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}": { "delete": { + "summary": "Erase a journey", + "description": "Erase a journey.\n\nErase a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nIf erasing journey is the last one of the belonged delivery, this action\nmay change the related {@link IShoppingOrderGood.state}. By erasing the last\njourney, the state rolls back to the previous.", "tags": [ "Order" ], @@ -5601,8 +7415,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged delivery's ", - "required": true + "required": true, + "description": " Belonged delivery's {@link IShoppingDelivery.id }" }, { "name": "id", @@ -5611,21 +7425,37 @@ "type": "string", "format": "uuid" }, - "description": "Target journey's ", - "required": true + "required": true, + "description": " Target journey's {@link IShoppingDeliveryJourney.id }" } ], "responses": { "200": { - "description": "Newly created journey" + "description": "Newly created journey", + "content": { + "application/json": {} + } } }, - "summary": "Erase a journey", - "description": "Erase a journey.\n\nErase a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nIf erasing journey is the last one of the belonged delivery, this action\nmay change the related {@link IShoppingOrderGood.state }. By erasing the last\njourney, the state rolls back to the previous." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "journeys", + "erase" + ], + "x-samchon-controller": "ShoppingSellerDeliveryJourneyController" } }, "/shoppings/sellers/deliveries/{deliveryId}/shippers": { "post": { + "summary": "Create a new shipper", + "description": "Create a new shipper.\n\nCreate a new {@link IShoppingDeliveryShipper shipper} of the\n{@link IShoppingDelivery delivery}.\n\nThis action does not affect to the related {@link IShoppingOrder orders} or\n{@link IShoppingOrderGood goods} like {@link IShoppingDeliveryJourney}\nor {@link IShoppingDeliveryPiece} case, but just informs to the\n{@link IShoppingCustomer customer}.", "tags": [ "Order" ], @@ -5637,8 +7467,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged delivery's ", - "required": true + "required": true, + "description": " Belonged delivery's {@link IShoppingDelivery.id }" } ], "requestBody": { @@ -5664,12 +7494,25 @@ } } }, - "summary": "Create a new shipper", - "description": "Create a new shipper.\n\nCreate a new {@link IShoppingDeliveryShipper shipper} of the\n{@link IShoppingDelivery delivery}.\n\nThis action does not affect to the related {@link IShoppingOrder orders} or\n{@link IShoppingOrderGood goods} like {@link IShoppingDeliveryJourney }\nor {@link IShoppingDeliveryPiece } case, but just informs to the\n{@link IShoppingCustomer customer}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "shippers", + "create" + ], + "x-samchon-controller": "ShoppingSellerDeliveryShipperController" } }, "/shoppings/sellers/coupons": { "post": { + "summary": "Create a new coupon", + "description": "Create a new coupon.\n\nCreate a new {@link IShoppingCoupon coupon} with given information.\n\nBy the way, if you are a {@link IShoppingSeller seller}, you have to\nadd include direction's {@link IShoppingCouponSellerCriteria} or\n{@link IShoppingCouponSaleCriteria} condition. This is because only\n{@link IShoppingAdministrator administrators} can create a coupon\nwhich can be used throughout the market. Seller must limit the usage\nrange by his/her {@link IShoppingSale sale(s)}.\n\nOf course, when adminstrator is planning to make a general coupon\nthat can be used throughout the market, the administrator must\nget agree from the sellers who are going to be affected.", "tags": [ "Discount" ], @@ -5697,10 +7540,22 @@ } } }, - "summary": "Create a new coupon", - "description": "Create a new coupon.\n\nCreate a new {@link IShoppingCoupon coupon} with given information.\n\nBy the way, if you are a {@link IShoppingSeller seller}, you have to\nadd include direction's {@link IShoppingCouponSellerCriteria } or\n{@link IShoppingCouponSaleCriteria } condition. This is because only\n{@link IShoppingAdministrator administrators} can create a coupon\nwhich can be used throughout the market. Seller must limit the usage\nrange by his/her {@link IShoppingSale sale(s)}.\n\nOf course, when adminstrator is planning to make a general coupon\nthat can be used throughout the market, the administrator must\nget agree from the sellers who are going to be affected." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "coupons", + "create" + ], + "x-samchon-controller": "ShoppingSellerCouponController" }, "patch": { + "summary": "List up every coupons", + "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up.", "tags": [ "Discount" ], @@ -5728,12 +7583,24 @@ } } }, - "summary": "List up every coupons", - "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "coupons", + "index" + ], + "x-samchon-controller": "ShoppingSellerCouponController" } }, "/shoppings/sellers/coupons/{id}": { "delete": { + "summary": "Erase a coupon", + "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time.", "tags": [ "Discount" ], @@ -5744,19 +7611,34 @@ "schema": { "type": "string" }, - "description": "Target coupon's ", - "required": true + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase a coupon", - "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "coupons", + "erase" + ], + "x-samchon-controller": "ShoppingSellerCouponController" }, "get": { + "summary": "Get a coupon info", + "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible.", "tags": [ "Discount" ], @@ -5767,8 +7649,8 @@ "schema": { "type": "string" }, - "description": "Target coupon's ", - "required": true + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" } ], "responses": { @@ -5783,12 +7665,24 @@ } } }, - "summary": "Get a coupon info", - "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "coupons", + "at" + ], + "x-samchon-controller": "ShoppingSellerCouponController" } }, "/shoppings/sellers/orders": { "patch": { + "summary": "List up every orders", + "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order.", "tags": [ "Order" ], @@ -5816,12 +7710,24 @@ } } }, - "summary": "List up every orders", - "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "orders", + "index" + ], + "x-samchon-controller": "ShoppingSellerOrderController" } }, "/shoppings/sellers/orders/{id}": { "get": { + "summary": "Get an order info", + "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown.", "tags": [ "Order" ], @@ -5833,8 +7739,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { @@ -5849,12 +7755,24 @@ } } }, - "summary": "Get an order info", - "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "orders", + "at" + ], + "x-samchon-controller": "ShoppingSellerOrderController" } }, "/shoppings/sellers/sales": { "post": { + "summary": "Create a sale", + "description": "Create a sale.\n\n{@link IShoppingSeller Seller} creates a new {@link IShoppingSale} for\noperation.\n\nFor reference, sale has complicate hierarchical structure that composing\nwith {@link IShoppingSaleUnit units}, {@link IShoppingSaleUnitOption options}\nand {@link IShoppingSaleUnitStock stocks}. Therefore, I recommend you to\nread the {@link IShoppingSale} and related DTOs' documents before creating\na new sale.\n\nERD (Entity Relationship Diagram) and its description document also would\nbe helpful, too.", "tags": [ "Sale" ], @@ -5882,10 +7800,22 @@ } } }, - "summary": "Create a sale", - "description": "Create a sale.\n\n{@link IShoppingSeller Seller} creates a new {@link IShoppingSale } for\noperation.\n\nFor reference, sale has complicate hierarchical structure that composing\nwith {@link IShoppingSaleUnit units}, {@link IShoppingSaleUnitOption options}\nand {@link IShoppingSaleUnitStock stocks}. Therefore, I recommend you to\nread the {@link IShoppingSale } and related DTOs' documents before creating\na new sale.\n\nERD (Entity Relationship Diagram) and its description document also would\nbe helpful, too." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "create" + ], + "x-samchon-controller": "ShoppingSellerSaleController" }, "patch": { + "summary": "List up every summarized sales", + "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at} function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -5913,12 +7843,24 @@ } } }, - "summary": "List up every summarized sales", - "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at } function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{id}": { "put": { + "summary": "Update a sale", + "description": "Update a sale.\n\nUpdate a {@link IShoppingSale sale} with new information.\n\nBy the way, the sale actually does not being modified, but just make a new\n{@link IShoppingSaleSnapshot snapshot} record of the sale. Its 1st purpose\nis to keeping the integrity of the sale, due to modification of the sale\nmust not affect to the {@link IShoppingOrder orders} that already had been\napplied to the sale.\n\nThe 2nd purpose is for the A/B tests. {@link IShoppingSeller Seller} needs\nto demonstrate operating performance by chaning price, content, and\ncomposition of the product. This snapshot concept would be helpful for it.", "tags": [ "Sale" ], @@ -5930,13 +7872,12 @@ "type": "string", "format": "uuid" }, - "title": "Target sale's ID", - "description": "Target sale's ID to update.\nNote that, you have to specify only the sale ID of your own.", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "requestBody": { - "description": "New information of the sale.\nNote that, your input data would entirely modify the sale, so that have to be careful if you only want the partial updating.", + "description": "New information of the sale", "content": { "application/json": { "schema": { @@ -5958,10 +7899,22 @@ } } }, - "summary": "Update a sale", - "description": "Update a sale.\n\nUpdate a {@link IShoppingSale sale} with new information.\n\nBy the way, the sale actually does not being modified, but just make a new\n{@link IShoppingSaleSnapshot snapshot} record of the sale. Its 1st purpose\nis to keeping the integrity of the sale, due to modification of the sale\nmust not affect to the {@link IShoppingOrder orders} that already had been\napplied to the sale.\n\nThe 2nd purpose is for the A/B tests. {@link IShoppingSeller Seller} needs\nto demonstrate operating performance by chaning price, content, and\ncomposition of the product. This snapshot concept would be helpful for it." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "update" + ], + "x-samchon-controller": "ShoppingSellerSaleController" }, "get": { + "summary": "Get a sale info", + "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales.", "tags": [ "Sale" ], @@ -5973,8 +7926,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { @@ -5989,12 +7942,24 @@ } } }, - "summary": "Get a sale info", - "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "at" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{id}/open": { "put": { + "summary": "Change opening and closing time of a sale", + "description": "Change opening and closing time of a sale.\n\nUpdate a {@link IShoppingSale sale}'s opening and closing time.\n\nBy the way, if the sale still be opened or closed, it is not possible to\nchange the opening time. In contrary, if the sale already had been opened\nbut still not closed, it is possible to change the closing time.\n\nOf course, if closing time is less than opening time or not,\n428 unprocessable entity error would be thrown.", "tags": [ "Sale" ], @@ -6006,8 +7971,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -6023,15 +7988,30 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Change opening and closing time of a sale", - "description": "Change opening and closing time of a sale.\n\nUpdate a {@link IShoppingSale sale}'s opening and closing time.\n\nBy the way, if the sale still be opened or closed, it is not possible to\nchange the opening time. In contrary, if the sale already had been opened\nbut still not closed, it is possible to change the closing time.\n\nOf course, if closing time is less than opening time or not,\n428 unprocessable entity error would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "open" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{id}/replica": { "post": { + "summary": "Get replica of a sale", + "description": "Get replica of a sale.\n\nGet a {@link IShoppingSale.ICreate} typed info of the target sale for\nreplication.\n\nIt would be useful for creating a new replication\n{@link IShoppingSale sale} with similar innformatiopn.", "tags": [ "Sale" ], @@ -6043,8 +8023,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { @@ -6059,12 +8039,24 @@ } } }, - "summary": "Get replica of a sale", - "description": "Get replica of a sale.\n\nGet a {@link IShoppingSale.ICreate } typed info of the target sale for\nreplication.\n\nIt would be useful for creating a new replication\n{@link IShoppingSale sale} with similar innformatiopn." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "replica" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{id}/pause": { "delete": { + "summary": "Pause a sale", + "description": "Pause a sale.\n\nPause a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored}. By the way, {@link IShoppingCustomer customer}\nstill can sale from the {@link index} and {@link at} API endpints, but\n\"paused\" label would be attached.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the paused sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer.", "tags": [ "Sale" ], @@ -6076,21 +8068,36 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Pause a sale", - "description": "Pause a sale.\n\nPause a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored}. By the way, {@link IShoppingCustomer customer}\nstill can sale from the {@link index } and {@link at } API endpints, but\n\"paused\" label would be attached.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the paused sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "pause" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{id}/suspend": { "delete": { + "summary": "Suspend a sale", + "description": "Suspend a sale.\n\nSuspend a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored} and {@link IShoppingCustomer customer} cannot\nsee the sale from the {@link index} and {@link at} API.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the suspended sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer.", "tags": [ "Sale" ], @@ -6102,21 +8109,35 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Suspend a sale", - "description": "Suspend a sale.\n\nSuspend a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored} and {@link IShoppingCustomer customer} cannot\nsee the sale from the {@link index } and {@link at } API.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the suspended sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "suspend" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{id}/restore": { "put": { + "description": "Restore a sale\n\nRestore a {@link IShoppingSale sale} from {@link pause paused} or\n{@link suspend suspended} state\n\nTherefore the sale can be operated again if its\n{@link IShoppingSale.closed_at closing time} has not been reached.\nAlso, if a {@link IShoppingCustomer customer} had put the sale into the\nshopping cart when being paused or suspended, the\n{@link IShoppingCartCommodity commodity} will be listed again on the\nshopping cart.", "tags": [ "Sale" ], @@ -6128,20 +8149,36 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "description": "Restore a sale\n\nRestore a {@link IShoppingSale sale} from {@link pause paused} or\n{@link suspend suspended} state\n\nTherefore the sale can be operated again if its\n{@link IShoppingSale.closed_at closing time} has not been reached.\nAlso, if a {@link IShoppingCustomer customer} had put the sale into the\nshopping cart when being paused or suspended, the\n{@link IShoppingCartCommodity commodity} will be listed again on the\nshopping cart." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "restore" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{saleId}/questions/{questionId}/answer": { "post": { + "summary": "Write an answer article", + "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer}.\n\nNote that, this is the formal answer that can be written only one per\na question article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe question article as many as he/she wants, it would be useful for\nadditional communication.", "tags": [ "Sale" ], @@ -6153,8 +8190,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "questionId", @@ -6163,8 +8200,8 @@ "type": "string", "format": "uuid" }, - "description": "Target question's ", - "required": true + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" } ], "requestBody": { @@ -6190,10 +8227,24 @@ } } }, - "summary": "Write an answer article", - "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer }.\n\nNote that, this is the formal answer that can be written only one per\na question article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe question article as many as he/she wants, it would be useful for\nadditional communication." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "answer", + "create" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionAnswerController" }, "put": { + "summary": "Update an answer article", + "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer}.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -6205,8 +8256,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "questionId", @@ -6215,8 +8266,8 @@ "type": "string", "format": "uuid" }, - "description": "Target question's ", - "required": true + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" } ], "requestBody": { @@ -6242,12 +8293,26 @@ } } }, - "summary": "Update an answer article", - "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer }.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "answer", + "update" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionAnswerController" } }, "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments": { "patch": { + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales.", "tags": [ "Sale" ], @@ -6259,8 +8324,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6269,8 +8334,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -6296,10 +8361,24 @@ } } }, - "summary": "List up every inquiry comments", - "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "comments", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionCommentController" }, "post": { + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales.", "tags": [ "Sale" ], @@ -6311,8 +8390,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6321,8 +8400,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry's ", - "required": true + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -6348,12 +8427,26 @@ } } }, - "summary": "Create an inquiry comment", - "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "comments", + "create" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionCommentController" } }, "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { "get": { + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales.", "tags": [ "Sale" ], @@ -6365,8 +8458,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6375,8 +8468,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -6385,8 +8478,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "responses": { @@ -6401,11 +8494,25 @@ } } }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." - }, - "put": { - "tags": [ + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "comments", + "at" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionCommentController" + }, + "put": { + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", + "tags": [ "Sale" ], "parameters": [ @@ -6416,8 +8523,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6426,8 +8533,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -6436,8 +8543,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "requestBody": { @@ -6463,12 +8570,26 @@ } } }, - "summary": "Update an inquiry comment", - "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "comments", + "update" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionCommentController" } }, "/shoppings/sellers/sales/{saleId}/questions": { "patch": { + "summary": "List up every summarized questions", + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges} function\nor {@link at} function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret} with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -6480,8 +8601,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -6507,12 +8628,25 @@ } } }, - "summary": "List up every summarized questions", - "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionController" } }, "/shoppings/sellers/sales/{saleId}/questions/abridges": { "patch": { + "summary": "List up every abridged questions", + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at} function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret} with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -6524,8 +8658,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -6551,12 +8685,25 @@ } } }, - "summary": "List up every abridged questions", - "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "abridges" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionController" } }, "/shoppings/sellers/sales/{saleId}/questions/{id}": { "get": { + "summary": "Get a question info", + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret}\nvalue is `false`.", "tags": [ "Sale" ], @@ -6568,8 +8715,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -6578,8 +8725,8 @@ "type": "string", "format": "uuid" }, - "description": "Target question's ", - "required": true + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" } ], "responses": { @@ -6594,12 +8741,25 @@ } } }, - "summary": "Get a question info", - "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "at" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionController" } }, "/shoppings/sellers/sales/{saleId}/reviews/{reviewId}/answer": { "post": { + "summary": "Write an answer article", + "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer}.\n\nNote that, this is the formal answer that can be written only one per\na review article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe review article as many as he/she wants, it would be useful for\nadditional communication.", "tags": [ "Sale" ], @@ -6611,8 +8771,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "reviewId", @@ -6621,8 +8781,8 @@ "type": "string", "format": "uuid" }, - "description": "Target review's ", - "required": true + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" } ], "requestBody": { @@ -6648,10 +8808,24 @@ } } }, - "summary": "Write an answer article", - "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer }.\n\nNote that, this is the formal answer that can be written only one per\na review article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe review article as many as he/she wants, it would be useful for\nadditional communication." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "answer", + "create" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewAnswerController" }, "put": { + "summary": "Update an answer article", + "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer}.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a review articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -6663,8 +8837,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "reviewId", @@ -6673,8 +8847,8 @@ "type": "string", "format": "uuid" }, - "description": "Target review's ", - "required": true + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" } ], "requestBody": { @@ -6700,12 +8874,26 @@ } } }, - "summary": "Update an answer article", - "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer }.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a review articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "answer", + "update" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewAnswerController" } }, "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments": { "patch": { + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales.", "tags": [ "Sale" ], @@ -6717,8 +8905,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6727,8 +8915,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -6754,10 +8942,24 @@ } } }, - "summary": "List up every inquiry comments", - "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "comments", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewCommentController" }, "post": { + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales.", "tags": [ "Sale" ], @@ -6769,8 +8971,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6779,8 +8981,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry's ", - "required": true + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -6806,12 +9008,26 @@ } } }, - "summary": "Create an inquiry comment", - "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "comments", + "create" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewCommentController" } }, "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { "get": { + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales.", "tags": [ "Sale" ], @@ -6823,8 +9039,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6833,8 +9049,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -6843,8 +9059,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "responses": { @@ -6859,10 +9075,24 @@ } } }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "comments", + "at" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewCommentController" }, "put": { + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -6874,8 +9104,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6884,8 +9114,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -6894,8 +9124,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "requestBody": { @@ -6921,12 +9151,26 @@ } } }, - "summary": "Update an inquiry comment", - "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "comments", + "update" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewCommentController" } }, "/shoppings/sellers/sales/{saleId}/reviews": { "patch": { + "summary": "List up every summarized reviews", + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges} function\nor {@link at} function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -6938,8 +9182,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -6965,12 +9209,25 @@ } } }, - "summary": "List up every summarized reviews", - "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewController" } }, "/shoppings/sellers/sales/{saleId}/reviews/abridges": { "patch": { + "summary": "List up every abridged reviews", + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at} function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -6982,8 +9239,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -7009,12 +9266,25 @@ } } }, - "summary": "List up every abridged reviews", - "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "abridges" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewController" } }, "/shoppings/sellers/sales/{saleId}/reviews/{id}": { "get": { + "summary": "Get a review info", + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales.", "tags": [ "Sale" ], @@ -7026,8 +9296,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -7036,8 +9306,8 @@ "type": "string", "format": "uuid" }, - "description": "Target review's ", - "required": true + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" } ], "responses": { @@ -7052,12 +9322,25 @@ } } }, - "summary": "Get a review info", - "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "at" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewController" } }, "/shoppings/sellers/sales/{saleId}/snapshots/{id}/replica": { "post": { + "summary": "Get replica of a snapshot", + "description": "Get replica of a snapshot.\n\nGet a {@link IShoppingSale.ICreate} typed info of the target\n{@link IShoppingSaleSnapshot snapshot} record for replication.\n\nIt would be useful for creating a new replication {@link IShoppingSale sale}\nfrom the old snapshot.", "tags": [ "Sale" ], @@ -7069,8 +9352,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -7079,8 +9362,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -7095,12 +9378,25 @@ } } }, - "summary": "Get replica of a snapshot", - "description": "Get replica of a snapshot.\n\nGet a {@link IShoppingSale.ICreate } typed info of the target\n{@link IShoppingSaleSnapshot snapshot} record for replication.\n\nIt would be useful for creating a new replication {@link IShoppingSale sale}\nfrom the old snapshot." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "snapshots", + "replica" + ], + "x-samchon-controller": "ShoppingSellerSaleSnapshotController" } }, "/shoppings/sellers/sales/{saleId}/snapshots": { "patch": { + "summary": "List up every snapshots", + "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at} or {@link flipo} function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended.", "tags": [ "Sale" ], @@ -7112,8 +9408,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -7139,12 +9435,25 @@ } } }, - "summary": "List up every snapshots", - "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at } or {@link flipo } function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "snapshots", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleSnapshotController" } }, "/shoppings/sellers/sales/{saleId}/snapshots/{id}": { "get": { + "summary": "Get a snapshot info", + "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip} function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended.", "tags": [ "Sale" ], @@ -7156,8 +9465,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -7166,8 +9475,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -7182,12 +9491,25 @@ } } }, - "summary": "Get a snapshot info", - "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip } function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "snapshots", + "at" + ], + "x-samchon-controller": "ShoppingSellerSaleSnapshotController" } }, "/shoppings/sellers/sales/{saleId}/snapshots/{id}/flip": { "get": { + "summary": "Get a flipped snapshot info", + "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended.", "tags": [ "Sale" ], @@ -7199,8 +9521,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -7209,8 +9531,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -7225,12 +9547,25 @@ } } }, - "summary": "Get a flipped snapshot info", - "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "snapshots", + "flip" + ], + "x-samchon-controller": "ShoppingSellerSaleSnapshotController" } }, "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements": { "patch": { + "summary": "List up every supplements", + "description": "List up every supplements.\n\nList up every {@link IShoppingSaleUnitStockSupplement supplement histories}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleUnitStockSupplement.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingSaleUnitStockSupplement.IRequest.sort}\nproperty.", "tags": [ "Sale" ], @@ -7242,8 +9577,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "unitId", @@ -7252,8 +9587,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged unit's ", - "required": true + "required": true, + "description": " Belonged unit's {@link IShoppingSaleUnit.id }" }, { "name": "stockId", @@ -7262,8 +9597,8 @@ "type": "string", "format": "uuid" }, - "description": "Target stock's ", - "required": true + "required": true, + "description": " Target stock's {@link IShoppingSaleUnitStock.id }" } ], "requestBody": { @@ -7289,10 +9624,25 @@ } } }, - "summary": "List up every supplements", - "description": "List up every supplements.\n\nList up every {@link IShoppingSaleUnitStockSupplement supplement histories}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleUnitStockSupplement.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingSaleUnitStockSupplement.IRequest.sort }\nproperty." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "units", + "stocks", + "supplements", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleUnitStockSupplementController" }, "post": { + "summary": "Create a supplement", + "description": "Create a supplement.\n\nCreate a {@link IShoppingSaleUnitStockSupplement supplement history} of a\nspecific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be increased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}.", "tags": [ "Sale" ], @@ -7304,8 +9654,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "unitId", @@ -7314,8 +9664,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged unit's ", - "required": true + "required": true, + "description": " Belonged unit's {@link IShoppingSaleUnit.id }" }, { "name": "stockId", @@ -7324,8 +9674,8 @@ "type": "string", "format": "uuid" }, - "description": "Target stock's ", - "required": true + "required": true, + "description": " Target stock's {@link IShoppingSaleUnitStock.id }" } ], "requestBody": { @@ -7351,12 +9701,27 @@ } } }, - "summary": "Create a supplement", - "description": "Create a supplement.\n\nCreate a {@link IShoppingSaleUnitStockSupplement supplement history} of a\nspecific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be increased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "units", + "stocks", + "supplements", + "create" + ], + "x-samchon-controller": "ShoppingSellerSaleUnitStockSupplementController" } }, "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements/{id}": { "put": { + "summary": "Update a supplement", + "description": "Update a supplement.\n\nUpdate quantity value of a {@link IShoppingSaleUnitStockSupplement supplement}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be changed by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}.", "tags": [ "Sale" ], @@ -7368,8 +9733,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "unitId", @@ -7378,8 +9743,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged unit's ", - "required": true + "required": true, + "description": " Belonged unit's {@link IShoppingSaleUnit.id }" }, { "name": "stockId", @@ -7388,8 +9753,8 @@ "type": "string", "format": "uuid" }, - "description": "Target stock's ", - "required": true + "required": true, + "description": " Target stock's {@link IShoppingSaleUnitStock.id }" }, { "name": "id", @@ -7398,8 +9763,8 @@ "type": "string", "format": "uuid" }, - "description": "Target supplement's ", - "required": true + "required": true, + "description": " Target supplement's {@link IShoppingSaleUnitStockSupplement.id }" } ], "requestBody": { @@ -7415,13 +9780,31 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Update a supplement", - "description": "Update a supplement.\n\nUpdate quantity value of a {@link IShoppingSaleUnitStockSupplement supplement}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be changed by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "units", + "stocks", + "supplements", + "update" + ], + "x-samchon-controller": "ShoppingSellerSaleUnitStockSupplementController" }, "delete": { + "summary": "Erase a supplement", + "description": "Erase a supplement.\n\nErase a {@link IShoppingSaleUnitStockSupplement supplement} of a specific\n{@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be decreased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}.", "tags": [ "Sale" ], @@ -7433,8 +9816,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "unitId", @@ -7443,8 +9826,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged unit's ", - "required": true + "required": true, + "description": " Belonged unit's {@link IShoppingSaleUnit.id }" }, { "name": "stockId", @@ -7453,8 +9836,8 @@ "type": "string", "format": "uuid" }, - "description": "Target stock's ", - "required": true + "required": true, + "description": " Target stock's {@link IShoppingSaleUnitStock.id }" }, { "name": "id", @@ -7463,21 +9846,39 @@ "type": "string", "format": "uuid" }, - "description": "Target supplement's ", - "required": true + "required": true, + "description": " Target supplement's {@link IShoppingSaleUnitStockSupplement.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase a supplement", - "description": "Erase a supplement.\n\nErase a {@link IShoppingSaleUnitStockSupplement supplement} of a specific\n{@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be decreased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "units", + "stocks", + "supplements", + "erase" + ], + "x-samchon-controller": "ShoppingSellerSaleUnitStockSupplementController" } }, "/shoppings/sellers/systematic/channels/{channelCode}/categories": { "patch": { + "summary": "List up every categories with children records", + "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -7488,8 +9889,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" } ], "responses": { @@ -7507,12 +9908,26 @@ } } }, - "summary": "List up every categories with children records", - "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "categories", + "index" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelCategoryController" } }, "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}": { "get": { + "summary": "Get a category info", + "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too.", "tags": [ "Systematic" ], @@ -7523,8 +9938,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -7533,8 +9948,8 @@ "type": "string", "format": "uuid" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "responses": { @@ -7549,12 +9964,26 @@ } } }, - "summary": "Get a category info", - "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "categories", + "at" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelCategoryController" } }, "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}/invert": { "get": { + "summary": "Get a category info of inverted", + "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories.", "tags": [ "Systematic" ], @@ -7565,8 +9994,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -7575,8 +10004,8 @@ "type": "string", "format": "uuid" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "responses": { @@ -7591,12 +10020,26 @@ } } }, - "summary": "Get a category info of inverted", - "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "categories", + "invert" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelCategoryController" } }, "/shoppings/sellers/systematic/channels": { "patch": { + "summary": "List up every channels", + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -7624,12 +10067,25 @@ } } }, - "summary": "List up every channels", - "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "index" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelController" } }, "/shoppings/sellers/systematic/channels/hierarchical": { "patch": { + "summary": "List up every channels with nested categories", + "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -7657,12 +10113,25 @@ } } }, - "summary": "List up every channels with nested categories", - "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "hierarchical" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelController" } }, "/shoppings/sellers/systematic/channels/{id}": { "get": { + "summary": "Get a channel info", + "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations.", "tags": [ "Systematic" ], @@ -7674,8 +10143,8 @@ "type": "string", "format": "uuid" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.id }" } ], "responses": { @@ -7690,12 +10159,25 @@ } } }, - "summary": "Get a channel info", - "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "at" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelController" } }, "/shoppings/sellers/systematic/channels/{code}/get": { "get": { + "summary": "Get a channel info by its code", + "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations.", "tags": [ "Systematic" ], @@ -7706,8 +10188,8 @@ "schema": { "type": "string" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.code }" } ], "responses": { @@ -7722,12 +10204,25 @@ } } }, - "summary": "Get a channel info by its code", - "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "get" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelController" } }, "/shoppings/sellers/systematic/sections": { "patch": { + "summary": "List up every sections", + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}.", "tags": [ "Section" ], @@ -7755,12 +10250,25 @@ } } }, - "summary": "List up every sections", - "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "sections", + "index" + ], + "x-samchon-controller": "ShoppingSellerSystematicSectionController" } }, "/shoppings/sellers/systematic/sections/{id}": { "get": { + "summary": "Get a section info", + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information.", "tags": [ "Section" ], @@ -7772,8 +10280,8 @@ "type": "string", "format": "uuid" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.id }" } ], "responses": { @@ -7788,12 +10296,25 @@ } } }, - "summary": "Get a section info", - "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "sections", + "at" + ], + "x-samchon-controller": "ShoppingSellerSystematicSectionController" } }, "/shoppings/sellers/systematic/sections/{code}/get": { "get": { + "summary": "Get a section info by its code", + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code.", "tags": [ "Section" ], @@ -7804,8 +10325,8 @@ "schema": { "type": "string" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.code }" } ], "responses": { @@ -7820,8 +10341,19 @@ } } }, - "summary": "Get a section info by its code", - "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "sections", + "get" + ], + "x-samchon-controller": "ShoppingSellerSystematicSectionController" } } }, @@ -7865,19 +10397,25 @@ "type": "object", "properties": { "rss": { - "type": "number" + "type": "number", + "description": "Resident Set Size, is the amount of space occupied in the main memory device (that is a subset of the total allocated memory) for the\nprocess, including all C++ and JavaScript objects and code." }, "heapTotal": { - "type": "number" + "type": "number", + "title": "Refers to V8's memory usage", + "description": "Refers to V8's memory usage." }, "heapUsed": { - "type": "number" + "type": "number", + "title": "Refers to V8's memory usage", + "description": "Refers to V8's memory usage." }, "external": { "type": "number" }, "arrayBuffers": { - "type": "number" + "type": "number", + "description": "Refers to memory allocated for `ArrayBuffer`s and `SharedArrayBuffer`s, including all Node.js Buffers. This is also included\nin the external value. When Node.js is used as an embedded library, this value may be `0` because allocations for `ArrayBuffer`s\nmay not be tracked in that case." } }, "required": [ @@ -8169,6 +10707,7 @@ "Recordstringstring": { "type": "object", "properties": {}, + "required": [], "description": "Construct a type with a set of properties K of type T", "additionalProperties": { "type": "string" @@ -8218,7 +10757,7 @@ "id", "created_at" ], - "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member} -> {@link IShoppingMember.administrator},\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." }, "IShoppingMember.IInvert": { "type": "object", @@ -8255,7 +10794,7 @@ "emails", "created_at" ], - "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert}\n- {@link IShoppingAdministrator.IInvert}" }, "IShoppingMemberEmail": { "type": "object", @@ -8316,7 +10855,7 @@ "type": "string", "format": "uri", "title": "Connection address", - "description": "Connection address.\n\nSame with {@link window.location.href } of client." + "description": "Connection address.\n\nSame with {@link window.location.href} of client." }, "referrer": { "oneOf": [ @@ -8326,10 +10865,14 @@ { "type": "string", "format": "uri" + }, + { + "type": "string", + "maxLength": 0 } ], "title": "Referrer address", - "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + "description": "Referrer address.\n\nSame with {@link window.document.referrer} of client." }, "ip": { "oneOf": [ @@ -8361,7 +10904,7 @@ "ip", "created_at" ], - "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert}\n- {@link IShoppingAdministrator.IInvert}" }, "IShoppingChannel": { "type": "object", @@ -8424,16 +10967,16 @@ "title": "Creation time of record", "description": "Creation time of record.\n\nAnother word, first time when the external user connected." }, - "application": { - "type": "string", - "title": "Identifier code of the external service", - "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." - }, "uid": { "type": "string", "title": "Identifier key of external user from the external system", "description": "Identifier key of external user from the external system." }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code} in common." + }, "nickname": { "type": "string", "title": "Nickname of external user in the external system", @@ -8447,12 +10990,12 @@ "id", "citizen", "created_at", - "application", "uid", + "application", "nickname", "data" ], - "description": "External user information.\n\n`IShoppingExternalUser` is an entity dsigned for when this system needs\nto connect with external services and welcome their users as\n{@link IShoppingCustomer customers} of this service.\n\nFor reference, customers who connect from an external service must have\nthis record, and the external service user is identified through the two\nattributes {@link application } and {@link uid }. If a customer connected\nfrom an external service completes\n{@link IShoppingCitizen real-name authentication} from this service, each\ntime the external service user reconnects to this service and issues a\nnew customer authentication token, real-name authentication begins with\ncompleted.\n\nAnd {@link password } is the password issued to the user by the external\nservice system (the so-called permanent user authentication token), and\nis never the actual user password. However, for customers who entered the\nsame application and uid as the current external system user, this is to\ndetermine whether to view this as a correct external system user or a\nviolation.\n\nIn addition, additional information received from external services can\nbe recorded in the data field in JSON format." + "description": "External user information.\n\n`IShoppingExternalUser` is an entity dsigned for when this system needs\nto connect with external services and welcome their users as\n{@link IShoppingCustomer customers} of this service.\n\nFor reference, customers who connect from an external service must have\nthis record, and the external service user is identified through the two\nattributes {@link application} and {@link uid}. If a customer connected\nfrom an external service completes\n{@link IShoppingCitizen real-name authentication} from this service, each\ntime the external service user reconnects to this service and issues a\nnew customer authentication token, real-name authentication begins with\ncompleted.\n\nAnd {@link password} is the password issued to the user by the external\nservice system (the so-called permanent user authentication token), and\nis never the actual user password. However, for customers who entered the\nsame application and uid as the current external system user, this is to\ndetermine whether to view this as a correct external system user or a\nviolation.\n\nIn addition, additional information received from external services can\nbe recorded in the data field in JSON format." }, "IShoppingCitizen": { "type": "object", @@ -8472,11 +11015,13 @@ "mobile": { "type": "string", "pattern": "^[0-9]*$", + "x-wrtn-payment-order-mobile": true, "title": "Mobile number", "description": "Mobile number." }, "name": { "type": "string", + "x-wrtn-payment-order-citizen": true, "title": "Real name, or equivalent nickname", "description": "Real name, or equivalent nickname." } @@ -8487,11 +11032,12 @@ "mobile", "name" ], - "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile} input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." }, "IShoppingAdministrator.IJoin": { "type": "object", "properties": {}, + "required": [], "description": "Joining request info." }, "IShoppingMember.ILogin": { @@ -8515,53 +11061,89 @@ ], "description": "Login request info." }, - "IShoppingCoupon.ICreate": { + "IShoppingCoupon": { "type": "object", "properties": { - "discount": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "designer": { "oneOf": [ { - "$ref": "#/components/schemas/IShoppingCouponDiscount.IAmount" + "$ref": "#/components/schemas/IShoppingAdministrator" }, { - "$ref": "#/components/schemas/IShoppingCouponDiscount.IPercent" + "$ref": "#/components/schemas/IShoppingSeller" } ], - "title": "Discount information", - "description": "Discount information." + "title": "Designer who've made the coupon", + "description": "Designer who've made the coupon." }, - "restriction": { - "$ref": "#/components/schemas/IShoppingCouponRestriction", - "title": "Restriction information", - "description": "Restriction information." + "inventory": { + "$ref": "#/components/schemas/IShoppingCouponInventory", + "title": "Inventory information", + "description": "Inventory information." }, "criterias": { "type": "array", "items": { "oneOf": [ { - "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.ICreate" + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria" }, { - "$ref": "#/components/schemas/IShoppingCouponSectionCriteria.ICreate" + "$ref": "#/components/schemas/IShoppingCouponSectionCriteria" }, { - "$ref": "#/components/schemas/IShoppingCouponSellerCriteria.ICreate" + "$ref": "#/components/schemas/IShoppingCouponSellerCriteria" }, { - "$ref": "#/components/schemas/IShoppingCouponSaleCriteria.ICreate" + "$ref": "#/components/schemas/IShoppingCouponSaleCriteria" }, { - "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.ICreate" + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria" } - ] - } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "channel": "#/components/schemas/IShoppingCouponChannelCriteria", + "section": "#/components/schemas/IShoppingCouponSectionCriteria", + "seller": "#/components/schemas/IShoppingCouponSellerCriteria", + "sale": "#/components/schemas/IShoppingCouponSaleCriteria", + "funnel": "#/components/schemas/IShoppingCouponFunnelCriteria" + } + } + }, + "title": "List of criteria informations", + "description": "List of criteria informations." }, - "disposable_codes": { - "type": "array", - "items": { - "type": "string" - } + "discount": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponDiscount.IAmount" + }, + { + "$ref": "#/components/schemas/IShoppingCouponDiscount.IPercent" + } + ], + "discriminator": { + "propertyName": "unit", + "mapping": { + "amount": "#/components/schemas/IShoppingCouponDiscount.IAmount", + "percent": "#/components/schemas/IShoppingCouponDiscount.IPercent" + } + }, + "title": "Discount information", + "description": "Discount information." + }, + "restriction": { + "$ref": "#/components/schemas/IShoppingCouponRestriction", + "title": "Restriction information", + "description": "Restriction information." }, "name": { "type": "string", @@ -8593,219 +11175,250 @@ ], "title": "Closing time of the coupon", "description": "Closing time of the coupon.\n\nTickets cannot be issued after this time.\n\nHowever, previously issued tickets can still be used until their\nexpiration date." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tie of the record", + "description": "Creation tie of the record." } }, "required": [ + "id", + "designer", + "inventory", + "criterias", "discount", "restriction", - "criterias", - "disposable_codes", "name", "opened_at", - "closed_at" + "closed_at", + "created_at" ], - "description": "Creation information of the coupon." + "description": "Discount coupon.\n\n`IShoppingCoupon` is an entity that symbolizes discount coupons at\na shopping mall.\n\nNote that, `IShoppingCoupon` only contains specification information\nabout discount coupons. Please keep in mind that this is a different\nconcept from {@link IShoppingCouponTicket}, which refers to the issuance\nof a discount coupon, or {@link IShoppingCouponTicketPayment}, which\nrefers to its payment.\n\nAdditionally, discount coupons are applied on an order-by-order basis,\nbut each has its own unique restrictions. For example, a coupon with\n{@link IShoppingCouponSellerCriteria} may or may not be used only for\n{@link IShoppingSale} of listings registered by the {@link IShoppingSeller}.\nAlso, there are restrictions such as\n{@link IShoppingCouponDiscount.threshold minimum amount restrictions} for\nusing discount coupons and\n{@link IShoppingCouponDiscount.limit maximum discount amount limits}.\n\nIn addition, you can set whether to issue discount coupons publicly or\ngive them only to people who know the specific issuing code. In addition,\nthere are restrictions such as issued discount coupons having an\n{@link IShoppingCouponRestriction.expired_at expiration date} or being\nissued only to customers who came in through a\n{@link IShoppingCouponFunnelCriteria specific funnel}.\n\nFor more information, please refer to the properties below and the\nsubsidiary entities described later." }, - "IShoppingCouponDiscount.IAmount": { + "IShoppingAdministrator": { "type": "object", "properties": { - "unit": { - "const": "amount", - "title": "Discount unit as amount", - "description": "Discount unit as amount.\n\nIt means the order price would be discounted by the amount value." + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." }, - "value": { - "type": "number", - "title": "Discount value as amount", - "description": "Discount value as amount." + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator account.\n\n`IShoppingAdministrator` is an entity that embodies a person who manages\nthe shopping mall system, with {@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can participate\neven without membership joining, administrator must join membership to operate\nmanagements. Also, administrator must perform the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "IShoppingSeller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." }, - "threshold": { + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "IShoppingCouponInventory": { + "type": "object", + "properties": { + "volume": { "oneOf": [ { "type": "null" }, { - "type": "number", - "minimum": 0 + "type": "integer" } ], - "title": "Minimum purchase amount for discount", - "description": "Minimum purchase amount for discount.\n\nWhen setting this value, discount coupons cannot be applied to\norder totals that are less than this value." + "title": "Remaining volume for everyone", + "description": "Remaining volume for everyone.\n\nIf there is a limit to the quantity issued, it becomes impossible to\nissue tickets exceeding this value.\n\nIn other words, the concept of N coupons being issued on a first-come,\nfirst-served basis is created." }, - "limit": { + "volume_per_citizen": { "oneOf": [ { "type": "null" }, { - "type": "number", - "exclusiveMinimum": true, - "minimum": 0 + "type": "integer" } ], - "title": "Maximum amount available for discount", - "description": "Maximum amount available for discount.\n\nWhen this value is set, no further discount will be given no\nmatter how much you order. This property would be meaningful\nonly when the {@link multiplicative } is `true`." - }, - "multiplicative": { - "type": "boolean", - "title": "Multiplicative or not", - "description": "Multiplicative or not.\n\nIf this property is `true`, the discount value would be multiplied\nto the {@link IShoppingCartCommodity.volume } or\n{@link IShoppingOrderGood.volume } value. Also, in that case,\nthe {@link limit } property would be meaningful." + "title": "Remaining volume per citizen", + "description": "Remaining volume per citizen.\n\nAs a limit to the total amount of issuance per person, it is common to\nassign 1 to limit duplicate issuance to the same citizen, or to use the\n`nul`` value to set no limit.\n\nOf course, by assigning a value of N, the total amount issued to the\nsame citizen can be limited." } }, "required": [ - "unit", - "value", - "threshold", - "limit", - "multiplicative" + "volume", + "volume_per_citizen" ], - "description": "Discount information with amount unit." + "description": "Inventory information of the coupon.\n\nIf a {@link IShoppingCoupon coupon} has been designed with limited\ninventory, this `IShoppingCouponInventory` structure represents the\nremaining inventory information." }, - "IShoppingCouponDiscount.IPercent": { + "IShoppingCouponChannelCriteria": { "type": "object", "properties": { - "unit": { - "const": "percent", - "title": "Discount unit as percent", - "description": "Discount unit as percent.\n\nIt means the order price would be discounted by the percent value." - }, - "value": { - "type": "number", - "minimum": 0, - "maximum": 100, - "title": "Discount value as percent", - "description": "Discount value as percent." + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo" + }, + "minItems": 1, + "title": "List of target channels and categories", + "description": "List of target channels and categories." }, - "threshold": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "number", - "minimum": 0 - } - ], - "title": "Minimum purchase amount for discount", - "description": "Minimum purchase amount for discount.\n\nWhen setting this value, discount coupons cannot be applied to\norder totals that are less than this value." + "type": { + "const": "channel", + "title": "Descrimanator type", + "description": "Descrimanator type." }, - "limit": { + "direction": { "oneOf": [ { - "type": "null" + "const": "include" }, { - "type": "number", - "exclusiveMinimum": true, - "minimum": 0 + "const": "exclude" } ], - "title": "Maximum amount available for discount", - "description": "Maximum amount available for discount.\n\nWhen this value is set, no further discount will be given no\nmatter how much you order." + "title": "Direction of the criteria", + "description": "Direction of the criteria." } }, "required": [ - "unit", - "value", - "threshold", - "limit" + "channels", + "type", + "direction" ], - "description": "Discount information with percent unit." + "description": "Conditions for channels of discount coupons.\n\n`ishoppingcouponchannelcriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase} and is used when setting conditions on\na specific {@link IShoppingChannel channel} or\n{@link IShoppingChannelCategory category} of that channel.\n\nIf the {@link direction} value is \"include\", the coupon can only be used\nfor the target channels (or categories). Conversely, if it is \"exclude\",\nit is a coupon that cannot be used." }, - "IShoppingCouponRestriction": { + "IShoppingCouponChannelCriteria.IChannelTo": { "type": "object", "properties": { - "access": { - "oneOf": [ - { - "const": "public" - }, - { - "const": "private" - } - ], - "title": "Access level of coupon", - "description": "Access level of coupon.\n\n- public: possible to find from public API\n- private: unable to find from public API\n - arbitrarily assigned by the seller or administrator\n - issued from one-time link" - }, - "exclusive": { - "type": "boolean", - "title": "Exclusivity or not", - "description": "Exclusivity or not.\n\nAn exclusive discount coupon refers to a discount coupon that has an\nexclusive relationship with other discount coupons and can only be\nused alone. That is, when an exclusive discount coupon is used, no\nother discount coupon can be used for the same\n{@link IShoppingOrder order} or {@link IShoppingOrderGood good}.\n\nPlease note that this exclusive attribute is a very different concept\nfrom multiplicative, which means whether the same coupon can be\nmultiplied and applied to multiple coupons of the same order, so\nplease do not confuse them." + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "Target channel", + "description": "Target channel." }, - "volume": { + "categories": { "oneOf": [ { "type": "null" }, { - "type": "integer" + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "minItems": 1 } ], - "title": "Limited quantity issued", - "description": "Limited quantity issued.\n\nIf there is a limit to the quantity issued, it becomes impossible to issue tickets exceeding this value.\n\nIn other words, the concept of N coupons being issued on a first-come, first-served basis is created." - }, - "volume_per_citizen": { + "title": "List of target categories", + "description": "List of target categories." + } + }, + "required": [ + "channel", + "categories" + ] + }, + "IShoppingChannelCategory.IInvert": { + "type": "object", + "properties": { + "parent": { "oneOf": [ { "type": "null" }, { - "type": "integer" + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" } ], - "title": "Limited quantity issued per person", - "description": "Limited quantity issued per person.\n\nAs a limit to the total amount of issuance per person, it is common to assign 1 to limit duplicate issuance to the same citizen, or to use the NULL value to set no limit.\n\nOf course, by assigning a value of N, the total amount issued to the same citizen can be limited." + "title": "Parent category info with recursive structure", + "description": "Parent category info with recursive structure.\n\nIf no parent exists, then be `null`." }, - "expired_in": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "integer" - } - ], - "title": "Expiration day(s) value", - "description": "Expiration day(s) value.\n\nThe concept of expiring N days after a discount coupon ticket is issued.\n\nTherefore, customers must use the ticket within N days, if possible, from the time it is issued." + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." }, - "expired_at": { + "code": { + "type": "string", + "title": "Identifier code of the category", + "description": "Identifier code of the category.\n\nThe code must be unique in the channel." + }, + "parent_id": { "oneOf": [ { "type": "null" }, { "type": "string", - "format": "date-time" + "format": "uuid" } ], - "title": "Expiration date", - "description": "Expiration date.\n\nA concept that expires after YYYY-MM-DD after a discount coupon ticket is issued.\n\nDouble restrictions are possible with expired_in, of which the one with the shorter expiration date is used." + "title": "Parent category's ID", + "description": "Parent category's ID." + }, + "name": { + "type": "string", + "title": "Representative name of the category", + "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." } }, "required": [ - "access", - "exclusive", - "volume", - "volume_per_citizen", - "expired_in", - "expired_at" + "parent", + "id", + "code", + "parent_id", + "name", + "created_at" ], - "description": "Restriction information of the coupon." + "description": "Invert category information with parent category." }, - "IShoppingCouponChannelCriteria.ICreate": { + "IShoppingCouponSectionCriteria": { "type": "object", "properties": { - "channels": { + "sections": { "type": "array", "items": { - "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo.ICreate" + "$ref": "#/components/schemas/IShoppingSection" }, "minItems": 1, - "title": "List of target channels and categories", - "description": "List of target channels and categories." + "title": "Target sections to include or exclude", + "description": "Target sections to include or exclude." }, "type": { - "const": "channel" + "const": "section", + "title": "Descrimanator type", + "description": "Descrimanator type." }, "direction": { "oneOf": [ @@ -8815,61 +11428,68 @@ { "const": "exclude" } - ] + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." } }, "required": [ - "channels", + "sections", "type", "direction" ], - "description": "Creation information of the channel criteria." + "description": "Conditions for sections of discount coupons.\n\n`IShoppingCouponSectionCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase} and is used when setting conditions\nfor a specific {@link IShoppingSection section}.\n\nIf the {@link direction} value is \"include\", the coupon can only be used\nfor the target {@link sections}. Conversely, if it is \"exclude\", the\ncoupon cannot be used." }, - "IShoppingCouponChannelCriteria.IChannelTo.ICreate": { + "IShoppingSection": { "type": "object", "properties": { - "channel_code": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { "type": "string", - "title": "Target channel's {@link IShoppingChannel.code }", - "description": "Target channel's {@link IShoppingChannel.code }." + "title": "Identifier code", + "description": "Identifier code." }, - "category_ids": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - ], - "title": "Target categories' {@link IShoppingChannelCategory.id }s", - "description": "Target categories' {@link IShoppingChannelCategory.id }s." + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." } }, "required": [ - "channel_code", - "category_ids" + "id", + "code", + "name", + "created_at" ], - "description": "Target channel and categories." + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." }, - "IShoppingCouponSectionCriteria.ICreate": { + "IShoppingCouponSellerCriteria": { "type": "object", "properties": { - "section_codes": { + "sellers": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/IShoppingSeller" }, "minItems": 1, - "title": "List of target section's {@link IShoppingSection.code }s", - "description": "List of target section's {@link IShoppingSection.code }s." + "title": "Target sellers to include or exclude", + "description": "Target sellers to include or exclude." }, "type": { - "const": "section" + "const": "seller", + "title": "Descrimanator type", + "description": "Descrimanator type." }, "direction": { "oneOf": [ @@ -8879,31 +11499,34 @@ { "const": "exclude" } - ] + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." } }, "required": [ - "section_codes", + "sellers", "type", "direction" ], - "description": "Creation information of the section criteria." + "description": "Conditions for sellers of discount coupons.\n\n`IShoppingCouponSellerCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase} and is used when setting conditions\nfor a specific {@link IShoppingSeller seller}.\n\nIf the {@link direction} value is \"include\", the coupon can only be used\nfor the target {@link sellers}. Conversely, if it is \"exclude\", the\ncoupon cannot be used." }, - "IShoppingCouponSellerCriteria.ICreate": { + "IShoppingCouponSaleCriteria": { "type": "object", "properties": { - "seller_ids": { + "sales": { "type": "array", "items": { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/IShoppingSale.ISummary" }, "minItems": 1, - "title": "List of target seller's {@link IShoppingSeller.id }s", - "description": "List of target seller's {@link IShoppingSeller.id }s." + "title": "Target sales to include or exclude", + "description": "Target sales to include or exclude." }, "type": { - "const": "seller" + "const": "sale", + "title": "Descrimanator type", + "description": "Descrimanator type." }, "direction": { "oneOf": [ @@ -8913,191 +11536,121 @@ { "const": "exclude" } - ] + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." } }, "required": [ - "seller_ids", + "sales", "type", "direction" ], - "description": "Creation information of the seller criteria." + "description": "Conditions for sales of discount coupons.\n\n`IShoppingCouponSaleCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase} and is used when setting conditions\nfor a specific {@link IShoppingSale sale}.\n\nIf the {@link direction} value is \"include\", the coupon can only be used\nfor the target {@link sales}. Conversely, if it is \"exclude\", the\ncoupon cannot be used." }, - "IShoppingCouponSaleCriteria.ICreate": { + "IShoppingSale.ISummary": { "type": "object", "properties": { - "sale_ids": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "Belonged section", + "description": "Belonged section." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "Seller who has registered the sale", + "description": "Seller who has registered the sale." + }, + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange", + "title": "Price range of the unit", + "description": "Price range of the unit." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Sale", + "description": "Primary Key of Sale." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Snapshot", + "description": "Primary Key of Snapshot." + }, + "latest": { + "type": "boolean", + "title": "Whether the snapshot is the latest one or not", + "description": "Whether the snapshot is the latest one or not." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "Description and image content describing the sale", + "description": "Description and image content describing the sale." + }, + "channels": { "type": "array", "items": { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/IShoppingSaleChannel" }, "minItems": 1, - "title": "List of target sale's {@link IShoppingSale.id }s", - "description": "List of target sale's {@link IShoppingSale.id }s." + "title": "List of channels and categories", + "description": "List of channels and categories.\n\nWhich channels and categories the sale is registered to." }, - "type": { - "const": "sale" + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "List of search tags", + "description": "List of search tags." }, - "direction": { - "oneOf": [ - { - "const": "include" - }, - { - "const": "exclude" - } - ] - } - }, - "required": [ - "sale_ids", - "type", - "direction" - ], - "description": "Creation information of the sale criteria." - }, - "IShoppingCouponFunnelCriteria.ICreate": { - "type": "object", - "properties": { - "funnels": { + "units": { "type": "array", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" - }, - { - "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" - } - ] + "$ref": "#/components/schemas/IShoppingSaleUnit.ISummary" }, "minItems": 1, - "title": "List of target funnels", - "description": "List of target funnels." + "title": "List of units", + "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." }, - "type": { - "const": "funnel" + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at},\nwhich means the timepoint of the sale is opened." }, - "direction": { - "oneOf": [ - { - "const": "include" - }, - { - "const": "exclude" - } - ] - } - }, - "required": [ - "funnels", - "type", - "direction" - ], - "description": "Creation information of the funnel criteria." - }, - "IShoppingCouponFunnelCriteria.IValueFunnel": { - "type": "object", - "properties": { - "kind": { + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Last updated time of the record", + "description": "Last updated time of the record.\n\nIn another words, creation time of the last snapshot." + }, + "paused_at": { "oneOf": [ { - "const": "url" + "type": "null" }, { - "const": "referrer" + "type": "string", + "format": "date-time" } ], - "title": "Kind of funnel restriction", - "description": "Kind of funnel restriction." - }, - "value": { - "type": "string", - "title": "Target value", - "description": "Target value." - } - }, - "required": [ - "kind", - "value" - ], - "description": "Kind of funnel restriction by a value." - }, - "IShoppingCouponFunnelCriteria.IVariableFunnel": { - "type": "object", - "properties": { - "kind": { - "const": "variable", - "title": "Kind of funnel restriction", - "description": "Kind of funnel restriction." - }, - "key": { - "type": "string", - "title": "Target variable's key", - "description": "Target variable's key." - }, - "value": { - "type": "string", - "title": "Target variable's value", - "description": "Target variable's value." - } - }, - "required": [ - "kind", - "key", - "value" - ], - "description": "Kind of funnel restriction by a variable." - }, - "IShoppingCoupon": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." + "title": "Paused time of the sale", + "description": "Paused time of the sale.\n\nThe sale is paused by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} can still see the sale on the\nboth list and detail pages, but the sale has a warning label\n\"The sale is paused by the seller\"." }, - "designer": { + "suspended_at": { "oneOf": [ { - "$ref": "#/components/schemas/IShoppingSeller" + "type": "null" }, { - "$ref": "#/components/schemas/IShoppingAdministrator" + "type": "string", + "format": "date-time" } ], - "title": "Designer who've made the coupon", - "description": "Designer who've made the coupon." - }, - "inventory": { - "$ref": "#/components/schemas/IShoppingCouponInventory", - "title": "Inventory information", - "description": "Inventory information." - }, - "criterias": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingCouponCriteria" - }, - "title": "List of criteria informations", - "description": "List of criteria informations." - }, - "discount": { - "$ref": "#/components/schemas/IShoppingCouponDiscount", - "title": "Discount information", - "description": "Discount information." - }, - "restriction": { - "$ref": "#/components/schemas/IShoppingCouponRestriction", - "title": "Restriction information", - "description": "Restriction information." - }, - "name": { - "type": "string", - "title": "Representative name of the coupon", - "description": "Representative name of the coupon." + "title": "Suspended time of the sale", + "description": "Suspended time of the sale.\n\nThe sale is suspended by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} cannot see the sale on the\nboth list and detail pages. It is almost same with soft delettion,\nbut there's a little bit difference that the owner\n{@link IShoppingSeller seller} can still see the sale and resume it.\n\nOf course, the {@link IShoppingCustomer customers} who have\nalready purchased the sale can still see the sale on the\n{@link IShoppingOrder order} page." }, "opened_at": { "oneOf": [ @@ -9109,8 +11662,8 @@ "format": "date-time" } ], - "title": "Opening time of the coupon", - "description": "Opening time of the coupon." + "title": "Opening time of the sale", + "description": "Opening time of the sale." }, "closed_at": { "oneOf": [ @@ -9122,33 +11675,53 @@ "format": "date-time" } ], - "title": "Closing time of the coupon", - "description": "Closing time of the coupon.\n\nTickets cannot be issued after this time.\n\nHowever, previously issued tickets can still be used until their\nexpiration date." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation tie of the record", - "description": "Creation tie of the record." + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." } }, "required": [ + "section", + "seller", + "price_range", "id", - "designer", - "inventory", - "criterias", - "discount", - "restriction", - "name", - "opened_at", - "closed_at", - "created_at" + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" ], - "description": "Discount coupon.\n\n`IShoppingCoupon` is an entity that symbolizes discount coupons at\na shopping mall.\n\nNote that, `IShoppingCoupon` only contains specification information\nabout discount coupons. Please keep in mind that this is a different\nconcept from {@link IShoppingCouponTicket }, which refers to the issuance\nof a discount coupon, or {@link IShoppingCouponTicketPayment }, which\nrefers to its payment.\n\nAdditionally, discount coupons are applied on an order-by-order basis,\nbut each has its own unique restrictions. For example, a coupon with\n{@link IShoppingCouponSellerCriteria } may or may not be used only for\n{@link IShoppingSale } of listings registered by the {@link IShoppingSeller }.\nAlso, there are restrictions such as\n{@link IShoppingCouponDiscount.threshold minimum amount restrictions} for\nusing discount coupons and\n{@link IShoppingCouponDiscount.limit maximum discount amount limits}.\n\nIn addition, you can set whether to issue discount coupons publicly or\ngive them only to people who know the specific issuing code. In addition,\nthere are restrictions such as issued discount coupons having an\n{@link IShoppingCouponRestriction.expired_at expiration date} or being\nissued only to customers who came in through a\n{@link IShoppingCouponFunnelCriteria specific funnel}.\n\nFor more information, please refer to the properties below and the\nsubsidiary entities described later." + "description": "Summarized information of sale.\n\nThis summarized information being used for pagination." }, - "IShoppingSeller": { + "IShoppingSeller.IInvert": { "type": "object", "properties": { + "type": { + "const": "seller", + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "$ref": "#/components/schemas/IShoppingMember.IInvert", + "title": "Membership joining information", + "description": "Membership joining information." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer.IInvert", + "title": "Customer, the connection information", + "description": "Customer, the connection information." + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen", + "title": "Real-name and mobile number authentication information", + "description": "Real-name and mobile number authentication information." + }, "id": { "type": "string", "format": "uuid", @@ -9163,101 +11736,227 @@ } }, "required": [ + "type", + "member", + "customer", + "citizen", "id", "created_at" ], - "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member} -> {@link IShoppingMember.seller},\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." }, - "IShoppingAdministrator": { + "IShoppingSalePriceRange": { + "type": "object", + "properties": { + "lowest": { + "$ref": "#/components/schemas/IShoppingPrice" + }, + "highest": { + "$ref": "#/components/schemas/IShoppingPrice" + } + }, + "required": [ + "lowest", + "highest" + ] + }, + "IShoppingPrice": { + "type": "object", + "properties": { + "nominal": { + "type": "number", + "minimum": 0, + "title": "Nominal price", + "description": "Nominal price.\n\nThis is not {@link real real price} to pay, but just a nominal price to show.\nIf this value is greater than the {@link real real price}, it would be shown\nlike {@link IShoppingSeller seller} is giving a discount." + }, + "real": { + "type": "number", + "minimum": 0, + "title": "Real price to pay", + "description": "Real price to pay." + } + }, + "required": [ + "nominal", + "real" + ], + "description": "Shopping price interface." + }, + "IShoppingSaleContent.IInvert": { "type": "object", "properties": { "id": { "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." + "format": "uuid" }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of record", - "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + "title": { + "type": "string" + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + } } }, "required": [ "id", - "created_at" - ], - "description": "Administrator account.\n\n`IShoppingAdministrator` is an entity that embodies a person who manages\nthe shopping mall system, with {@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can participate\neven without membership joining, administrator must join membership to operate\nmanagements. Also, administrator must perform the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + "title", + "thumbnails" + ] }, - "IShoppingCouponInventory": { + "IAttachmentFile": { "type": "object", "properties": { - "volume": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "integer" - } - ], - "title": "Remaining volume for everyone", - "description": "Remaining volume for everyone.\n\nIf there is a limit to the quantity issued, it becomes impossible to\nissue tickets exceeding this value.\n\nIn other words, the concept of N coupons being issued on a first-come,\nfirst-served basis is created." + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." }, - "volume_per_citizen": { + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of attachment file", + "description": "Creation time of attachment file." + }, + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { "oneOf": [ { "type": "null" }, { - "type": "integer" + "type": "string", + "minLength": 1, + "maxLength": 8 } ], - "title": "Remaining volume per citizen", - "description": "Remaining volume per citizen.\n\nAs a limit to the total amount of issuance per person, it is common to\nassign 1 to limit duplicate issuance to the same citizen, or to use the\n`nul`` value to set no limit.\n\nOf course, by assigning a value of N, the total amount issued to the\nsame citizen can be limited." + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "contentMediaType": "image/*", + "title": "URL path of the real file", + "description": "URL path of the real file." } }, "required": [ - "volume", - "volume_per_citizen" + "id", + "created_at", + "name", + "extension", + "url" ], - "description": "Inventory information of the coupon.\n\nIf a {@link IShoppingCoupon coupon} has been designed with limited\ninventory, this `IShoppingCouponInventory` structure represents the\nremaining inventory information." + "description": "Attachment File.\n\nEvery attachment files that are managed in current system.\n\nFor reference, it is possible to omit one of file {@link name}\nor {@link extension} like `.gitignore` or `README` case, but not\npossible to omit both of them." }, - "IShoppingCouponCriteria": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingCouponChannelCriteria" + "IShoppingSaleChannel": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "title": "List of categories of the channel listing the sale", + "description": "List of categories of the channel listing the sale.\n\nIf empty, it means all categories of the channel is listing the sale." }, - { - "$ref": "#/components/schemas/IShoppingCouponSectionCriteria" + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." }, - { - "$ref": "#/components/schemas/IShoppingCouponSellerCriteria" + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." }, - { - "$ref": "#/components/schemas/IShoppingCouponSaleCriteria" + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." }, - { - "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria" + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." } + }, + "required": [ + "categories", + "id", + "created_at", + "code", + "name" ], - "description": "Union type of the criteria.\n\n`IShoppingCouponCriteria` is an union typed structure that embodies the\nconditions for applying a {@link IShoppingCoupon discount coupon}. All\nof individual entities are imposing constraints on the reference unit of\na discount coupon were created by inheritig\n{@link IShoppingCouponCriteriaBase } type.\n\nAlso, individual entities can be specified by using the if condition on\nthe {@link type } property. For example, if the {@link type } value is\n`section`, {@link IShoppingCouponSectionCriteria } type would be specified,\nso that you can access to the target\n{@link IShoppingCouponSectionCriteria.section } directly. For reference,\nthis concept is called a descriminated union in TypeScript.\n\n```typescript\nconst union: IShoppingCouponCriteria;\nif (union.type === \"section\")\n union.section; // IShoppingCouponSectionCriteria.section\n```\n\nIn addition, constraints on reference units can be specified through the\n{@link direction } property to proceed as an inclusion condition or,\nconversely, as an exclusion condition. If the direction value is \"include\",\nthe coupon is applicable only to the reference object. Conversely, if the\ndirection value is \"exclude\", it is a coupon that cannot be applied to the\nreference object." + "description": "Target channel (and categories) of sale to sell.\n\n`IShoppingSaleChannel` is an entity that expresses through which\n{@link IShoppingChannel channel} a listing {@link IShoppingSale} is sold.\n\nAlso, if {@link IShoppingChannelCategory categories} are specified, it also\nmeans that the sale be sold. Otherwise, none of the categories of the channel\nbeing specified, it means that every categories of the channel is listing the\ntarget sale." }, - "IShoppingCouponChannelCriteria": { + "IShoppingSaleUnit.ISummary": { "type": "object", "properties": { - "channels": { + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "name": { + "type": "string", + "title": "Representative name of the unit", + "description": "Representative name of the unit." + }, + "primary": { + "type": "boolean", + "title": "Whether the unit is primary or not", + "description": "Whether the unit is primary or not.\n\nJust a labeling value." + }, + "required": { + "type": "boolean", + "title": "Whether the unit is required or not", + "description": "Whether the unit is required or not.\n\nWhen the unit is required, the customer must select the unit. If do not\nselect, customer can't buy it.\n\nFor example, if there's a sale \"Macbook Set\" and one of the unit is the\n\"Main Body\", is it possible to buy the \"Macbook Set\" without the\n\"Main Body\" unit? This property is for that case." + } + }, + "required": [ + "price_range", + "id", + "name", + "primary", + "required" + ] + }, + "IShoppingCouponFunnelCriteria": { + "type": "object", + "properties": { + "funnels": { "type": "array", "items": { - "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo" + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" + } + ] }, "minItems": 1, - "title": "List of target channels and categories", - "description": "List of target channels and categories." + "title": "List of target funnels", + "description": "List of target funnels." }, "type": { - "const": "channel", + "const": "funnel", "title": "Descrimanator type", "description": "Descrimanator type." }, @@ -9275,334 +11974,228 @@ } }, "required": [ - "channels", + "funnels", "type", "direction" ], - "description": "Conditions for channels of discount coupons.\n\n`ishoppingcouponchannelcriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase } and is used when setting conditions on\na specific {@link IShoppingChannel channel} or\n{@link IShoppingChannelCategory category} of that channel.\n\nIf the {@link direction } value is \"include\", the coupon can only be used\nfor the target channels (or categories). Conversely, if it is \"exclude\",\nit is a coupon that cannot be used." + "description": "Limit the funnel of discount coupons.\n\n`ishoppingcouponfunnelcriteria` is a subtype entity of\n{@link IShoppingCouponCriteria}, and is used when you want to issue or\nexclude discount coupons only to {@link IShoppingCustomer customers} who\ncame from a specific path.\n\nAnd funnel restrictions are possible in 3 ways: The first is\n{@link IShoppingCustomer.referrer}, and by parsing\n{@link IShoppingCustomer.href}, which records the customer's access\naddress, restrictions can be made in units of specific URLs or variables." }, - "IShoppingCouponChannelCriteria.IChannelTo": { + "IShoppingCouponFunnelCriteria.IValueFunnel": { "type": "object", "properties": { - "channel": { - "$ref": "#/components/schemas/IShoppingChannel", - "title": "Target channel", - "description": "Target channel." - }, - "categories": { + "kind": { "oneOf": [ { - "type": "null" + "const": "url" }, { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" - }, - "minItems": 1 + "const": "referrer" } ], - "title": "List of target categories", - "description": "List of target categories." + "title": "Kind of funnel restriction", + "description": "Kind of funnel restriction." + }, + "value": { + "type": "string", + "title": "Target value", + "description": "Target value." } }, "required": [ - "channel", - "categories" - ] + "kind", + "value" + ], + "description": "Kind of funnel restriction by a value." }, - "IShoppingChannelCategory.IInvert": { + "IShoppingCouponFunnelCriteria.IVariableFunnel": { "type": "object", "properties": { - "parent": { + "kind": { + "const": "variable", + "title": "Kind of funnel restriction", + "description": "Kind of funnel restriction." + }, + "key": { + "type": "string", + "title": "Target variable's key", + "description": "Target variable's key." + }, + "value": { + "type": "string", + "title": "Target variable's value", + "description": "Target variable's value." + } + }, + "required": [ + "kind", + "key", + "value" + ], + "description": "Kind of funnel restriction by a variable." + }, + "IShoppingCouponDiscount.IAmount": { + "type": "object", + "properties": { + "unit": { + "const": "amount", + "title": "Discount unit as amount", + "description": "Discount unit as amount.\n\nIt means the order price would be discounted by the amount value." + }, + "value": { + "type": "number", + "title": "Discount value as amount", + "description": "Discount value as amount." + }, + "threshold": { "oneOf": [ { "type": "null" }, { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + "type": "number", + "minimum": 0 } ], - "title": "Parent category info with recursive structure", - "description": "Parent category info with recursive structure.\n\nIf no parent exists, then be `null`." - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." + "title": "Minimum purchase amount for discount", + "description": "Minimum purchase amount for discount.\n\nWhen setting this value, discount coupons cannot be applied to\norder totals that are less than this value." }, - "parent_id": { + "limit": { "oneOf": [ { "type": "null" }, { - "type": "string", - "format": "uuid" + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 } ], - "title": "Parent category's ID", - "description": "Parent category's ID." - }, - "name": { - "type": "string", - "title": "Representative name of the category", - "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + "title": "Maximum amount available for discount", + "description": "Maximum amount available for discount.\n\nWhen this value is set, no further discount will be given no\nmatter how much you order. This property would be meaningful\nonly when the {@link multiplicative} is `true`." }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of record", - "description": "Creation time of record." + "multiplicative": { + "type": "boolean", + "title": "Multiplicative or not", + "description": "Multiplicative or not.\n\nIf this property is `true`, the discount value would be multiplied\nto the {@link IShoppingCartCommodity.volume} or\n{@link IShoppingOrderGood.volume} value. Also, in that case,\nthe {@link limit} property would be meaningful." } }, "required": [ - "parent", - "id", - "parent_id", - "name", - "created_at" + "unit", + "value", + "threshold", + "limit", + "multiplicative" ], - "description": "Invert category information with parent category." + "description": "Discount information with amount unit." }, - "IShoppingCouponSectionCriteria": { + "IShoppingCouponDiscount.IPercent": { "type": "object", "properties": { - "sections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSection" - }, - "minItems": 1, - "title": "Target sections to include or exclude", - "description": "Target sections to include or exclude." + "unit": { + "const": "percent", + "title": "Discount unit as percent", + "description": "Discount unit as percent.\n\nIt means the order price would be discounted by the percent value." }, - "type": { - "const": "section", - "title": "Descrimanator type", - "description": "Descrimanator type." + "value": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Discount value as percent", + "description": "Discount value as percent." }, - "direction": { + "threshold": { "oneOf": [ { - "const": "include" + "type": "null" }, { - "const": "exclude" + "type": "number", + "minimum": 0 } ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." - } - }, - "required": [ - "sections", - "type", - "direction" - ], - "description": "Conditions for sections of discount coupons.\n\n`IShoppingCouponSectionCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase } and is used when setting conditions\nfor a specific {@link IShoppingSection section}.\n\nIf the {@link direction } value is \"include\", the coupon can only be used\nfor the target {@link sections }. Conversely, if it is \"exclude\", the\ncoupon cannot be used." - }, - "IShoppingSection": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "code": { - "type": "string", - "title": "Identifier code", - "description": "Identifier code." - }, - "name": { - "type": "string", - "title": "Representative name of the section", - "description": "Representative name of the section." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of record", - "description": "Creation time of record." - } - }, - "required": [ - "id", - "code", - "name", - "created_at" - ], - "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." - }, - "IShoppingCouponSellerCriteria": { - "type": "object", - "properties": { - "sellers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSeller" - }, - "minItems": 1, - "title": "Target sellers to include or exclude", - "description": "Target sellers to include or exclude." - }, - "type": { - "const": "seller", - "title": "Descrimanator type", - "description": "Descrimanator type." + "title": "Minimum purchase amount for discount", + "description": "Minimum purchase amount for discount.\n\nWhen setting this value, discount coupons cannot be applied to\norder totals that are less than this value." }, - "direction": { + "limit": { "oneOf": [ { - "const": "include" + "type": "null" }, { - "const": "exclude" + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 } ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." + "title": "Maximum amount available for discount", + "description": "Maximum amount available for discount.\n\nWhen this value is set, no further discount will be given no\nmatter how much you order." } }, "required": [ - "sellers", - "type", - "direction" + "unit", + "value", + "threshold", + "limit" ], - "description": "Conditions for sellers of discount coupons.\n\n`IShoppingCouponSellerCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase } and is used when setting conditions\nfor a specific {@link IShoppingSeller seller}.\n\nIf the {@link direction } value is \"include\", the coupon can only be used\nfor the target {@link sellers }. Conversely, if it is \"exclude\", the\ncoupon cannot be used." + "description": "Discount information with percent unit." }, - "IShoppingCouponSaleCriteria": { + "IShoppingCouponRestriction": { "type": "object", "properties": { - "sales": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSale.ISummary" - }, - "minItems": 1, - "title": "Target sales to include or exclude", - "description": "Target sales to include or exclude." - }, - "type": { - "const": "sale", - "title": "Descrimanator type", - "description": "Descrimanator type." - }, - "direction": { + "access": { "oneOf": [ { - "const": "include" + "const": "public" }, { - "const": "exclude" + "const": "private" } ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." - } - }, - "required": [ - "sales", - "type", - "direction" - ], - "description": "Conditions for sales of discount coupons.\n\n`IShoppingCouponSaleCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase } and is used when setting conditions\nfor a specific {@link IShoppingSale sale}.\n\nIf the {@link direction } value is \"include\", the coupon can only be used\nfor the target {@link sales }. Conversely, if it is \"exclude\", the\ncoupon cannot be used." - }, - "IShoppingSale.ISummary": { - "type": "object", - "properties": { - "section": { - "$ref": "#/components/schemas/IShoppingSection", - "title": "Belonged section", - "description": "Belonged section." - }, - "seller": { - "$ref": "#/components/schemas/IShoppingSeller.IInvert", - "title": "Seller who has registered the sale", - "description": "Seller who has registered the sale." - }, - "price_range": { - "$ref": "#/components/schemas/IShoppingSalePriceRange", - "title": "Price range of the unit", - "description": "Price range of the unit." - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key of Sale", - "description": "Primary Key of Sale." - }, - "snapshot_id": { - "type": "string", - "format": "uuid", - "title": "Primary Key of Snapshot", - "description": "Primary Key of Snapshot." + "title": "Access level of coupon", + "description": "Access level of coupon.\n\n- public: possible to find from public API\n- private: unable to find from public API\n - arbitrarily assigned by the seller or administrator\n - issued from one-time link" }, - "latest": { + "exclusive": { "type": "boolean", - "title": "Whether the snapshot is the latest one or not", - "description": "Whether the snapshot is the latest one or not." - }, - "content": { - "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", - "title": "Description and image content describing the sale", - "description": "Description and image content describing the sale." - }, - "channels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSaleChannel" - }, - "minItems": 1, - "title": "List of channels and categories", - "description": "List of channels and categories.\n\nWhich channels and categories the sale is registered to." - }, - "tags": { - "type": "array", - "items": { - "type": "string" - }, - "title": "List of search tags", - "description": "List of search tags." - }, - "units": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSaleUnit.ISummary" - }, - "minItems": 1, - "title": "List of units", - "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." + "title": "Exclusivity or not", + "description": "Exclusivity or not.\n\nAn exclusive discount coupon refers to a discount coupon that has an\nexclusive relationship with other discount coupons and can only be\nused alone. That is, when an exclusive discount coupon is used, no\nother discount coupon can be used for the same\n{@link IShoppingOrder order} or {@link IShoppingOrderGood good}.\n\nPlease note that this exclusive attribute is a very different concept\nfrom multiplicative, which means whether the same coupon can be\nmultiplied and applied to multiple coupons of the same order, so\nplease do not confuse them." }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of the record", - "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at },\nwhich means the timepoint of the sale is opened." + "volume": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limited quantity issued", + "description": "Limited quantity issued.\n\nIf there is a limit to the quantity issued, it becomes impossible to issue tickets exceeding this value.\n\nIn other words, the concept of N coupons being issued on a first-come, first-served basis is created." }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Last updated time of the record", - "description": "Last updated time of the record.\n\nIn another words, creation time of the last snapshot." + "volume_per_citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limited quantity issued per person", + "description": "Limited quantity issued per person.\n\nAs a limit to the total amount of issuance per person, it is common to assign 1 to limit duplicate issuance to the same citizen, or to use the NULL value to set no limit.\n\nOf course, by assigning a value of N, the total amount issued to the same citizen can be limited." }, - "paused_at": { + "expired_in": { "oneOf": [ { "type": "null" }, { - "type": "string", - "format": "date-time" + "type": "integer" } ], - "title": "Paused time of the sale", - "description": "Paused time of the sale.\n\nThe sale is paused by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} can still see the sale on the\nboth list and detail pages, but the sale has a warning label\n\"The sale is paused by the seller\"." + "title": "Expiration day(s) value", + "description": "Expiration day(s) value.\n\nThe concept of expiring N days after a discount coupon ticket is issued.\n\nTherefore, customers must use the ticket within N days, if possible, from the time it is issued." }, - "suspended_at": { + "expired_at": { "oneOf": [ { "type": "null" @@ -9612,8 +12205,89 @@ "format": "date-time" } ], - "title": "Suspended time of the sale", - "description": "Suspended time of the sale.\n\nThe sale is suspended by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} cannot see the sale on the\nboth list and detail pages. It is almost same with soft delettion,\nbut there's a little bit difference that the owner\n{@link IShoppingSeller seller} can still see the sale and resume it.\n\nOf course, the {@link IShoppingCustomer customers} who have\nalready purchased the sale can still see the sale on the\n{@link IShoppingOrder order} page." + "title": "Expiration date", + "description": "Expiration date.\n\nA concept that expires after YYYY-MM-DD after a discount coupon ticket is issued.\n\nDouble restrictions are possible with expired_in, of which the one with the shorter expiration date is used." + } + }, + "required": [ + "access", + "exclusive", + "volume", + "volume_per_citizen", + "expired_in", + "expired_at" + ], + "description": "Restriction information of the coupon." + }, + "IShoppingCoupon.ICreate": { + "type": "object", + "properties": { + "discount": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponDiscount.IAmount" + }, + { + "$ref": "#/components/schemas/IShoppingCouponDiscount.IPercent" + } + ], + "discriminator": { + "propertyName": "unit", + "mapping": { + "amount": "#/components/schemas/IShoppingCouponDiscount.IAmount", + "percent": "#/components/schemas/IShoppingCouponDiscount.IPercent" + } + }, + "title": "Discount information", + "description": "Discount information." + }, + "restriction": { + "$ref": "#/components/schemas/IShoppingCouponRestriction", + "title": "Restriction information", + "description": "Restriction information." + }, + "criterias": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSectionCriteria.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSellerCriteria.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSaleCriteria.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.ICreate" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "channel": "#/components/schemas/IShoppingCouponChannelCriteria.ICreate", + "section": "#/components/schemas/IShoppingCouponSectionCriteria.ICreate", + "seller": "#/components/schemas/IShoppingCouponSellerCriteria.ICreate", + "sale": "#/components/schemas/IShoppingCouponSaleCriteria.ICreate", + "funnel": "#/components/schemas/IShoppingCouponFunnelCriteria.ICreate" + } + } + } + }, + "disposable_codes": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string", + "title": "Representative name of the coupon", + "description": "Representative name of the coupon." }, "opened_at": { "oneOf": [ @@ -9625,8 +12299,8 @@ "format": "date-time" } ], - "title": "Opening time of the sale", - "description": "Opening time of the sale." + "title": "Opening time of the coupon", + "description": "Opening time of the coupon." }, "closed_at": { "oneOf": [ @@ -9638,267 +12312,187 @@ "format": "date-time" } ], - "title": "Closing time of the sale", - "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + "title": "Closing time of the coupon", + "description": "Closing time of the coupon.\n\nTickets cannot be issued after this time.\n\nHowever, previously issued tickets can still be used until their\nexpiration date." } }, "required": [ - "section", - "seller", - "price_range", - "id", - "snapshot_id", - "latest", - "content", - "channels", - "tags", - "units", - "created_at", - "updated_at", - "paused_at", - "suspended_at", + "discount", + "restriction", + "criterias", + "disposable_codes", + "name", "opened_at", "closed_at" ], - "description": "Summarized information of sale.\n\nThis summarized information being used for pagination." + "description": "Creation information of the coupon." }, - "IShoppingSeller.IInvert": { + "IShoppingCouponChannelCriteria.ICreate": { "type": "object", "properties": { - "type": { - "const": "seller", - "title": "Discriminant for the type of customer", - "description": "Discriminant for the type of customer." - }, - "member": { - "$ref": "#/components/schemas/IShoppingMember.IInvert", - "title": "Membership joining information", - "description": "Membership joining information." - }, - "customer": { - "$ref": "#/components/schemas/IShoppingCustomer.IInvert", - "title": "Customer, the connection information", - "description": "Customer, the connection information." - }, - "citizen": { - "$ref": "#/components/schemas/IShoppingCitizen", - "title": "Real-name and mobile number authentication information", - "description": "Real-name and mobile number authentication information." + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo.ICreate" + }, + "minItems": 1, + "title": "List of target channels and categories", + "description": "List of target channels and categories." }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." + "type": { + "const": "channel" }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation tmie of record", - "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] } }, "required": [ + "channels", "type", - "member", - "customer", - "citizen", - "id", - "created_at" + "direction" ], - "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." - }, - "IShoppingSalePriceRange": { - "type": "object", - "properties": { - "lowest": { - "$ref": "#/components/schemas/IShoppingPrice" - }, - "highest": { - "$ref": "#/components/schemas/IShoppingPrice" - } - }, - "required": [ - "lowest", - "highest" - ] + "description": "Creation information of the channel criteria." }, - "IShoppingPrice": { + "IShoppingCouponChannelCriteria.IChannelTo.ICreate": { "type": "object", "properties": { - "nominal": { - "type": "number", - "minimum": 0, - "title": "Nominal price", - "description": "Nominal price.\n\nThis is not {@link real real price} to pay, but just a nominal price to show.\nIf this value is greater than the {@link real real price}, it would be shown\nlike {@link IShoppingSeller seller} is giving a discount." + "channel_code": { + "type": "string", + "title": "Target channel's {@link IShoppingChannel.code}", + "description": "Target channel's {@link IShoppingChannel.code}." }, - "real": { - "type": "number", - "minimum": 0, - "title": "Real price to pay", - "description": "Real price to pay." + "category_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + ], + "title": "Target categories' {@link IShoppingChannelCategory.id}s", + "description": "Target categories' {@link IShoppingChannelCategory.id}s." } }, "required": [ - "nominal", - "real" + "channel_code", + "category_ids" ], - "description": "Shopping price interface." + "description": "Target channel and categories." }, - "IShoppingSaleContent.IInvert": { + "IShoppingCouponSectionCriteria.ICreate": { "type": "object", "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "title": { - "type": "string" - }, - "thumbnails": { + "section_codes": { "type": "array", "items": { - "$ref": "#/components/schemas/IAttachmentFile" - } - } - }, - "required": [ - "id", - "title", - "thumbnails" - ] - }, - "IAttachmentFile": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of attachment file", - "description": "Creation time of attachment file." + "type": "string" + }, + "minItems": 1, + "title": "List of target section's {@link IShoppingSection.code}s", + "description": "List of target section's {@link IShoppingSection.code}s." }, - "name": { - "type": "string", - "maxLength": 255, - "title": "File name, except extension", - "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + "type": { + "const": "section" }, - "extension": { + "direction": { "oneOf": [ { - "type": "null" + "const": "include" }, { - "type": "string", - "minLength": 1, - "maxLength": 8 + "const": "exclude" } - ], - "title": "Extension", - "description": "Extension.\n\nPossible to omit like `README` case." - }, - "url": { - "type": "string", - "format": "uri", - "title": "URL path of the real file", - "description": "URL path of the real file." + ] } }, "required": [ - "id", - "created_at", - "name", - "extension", - "url" + "section_codes", + "type", + "direction" ], - "description": "Attachment File.\n\nEvery attachment files that are managed in current system.\n\nFor reference, it is possible to omit one of file {@link name }\nor {@link extension } like `.gitignore` or `README` case, but not\npossible to omit both of them." + "description": "Creation information of the section criteria." }, - "IShoppingSaleChannel": { + "IShoppingCouponSellerCriteria.ICreate": { "type": "object", "properties": { - "categories": { + "seller_ids": { "type": "array", "items": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + "type": "string", + "format": "uuid" }, - "title": "List of categories of the channel listing the sale", - "description": "List of categories of the channel listing the sale.\n\nIf empty, it means all categories of the channel is listing the sale." - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of record", - "description": "Creation time of record." + "minItems": 1, + "title": "List of target seller's {@link IShoppingSeller.id}s", + "description": "List of target seller's {@link IShoppingSeller.id}s." }, - "code": { - "type": "string", - "title": "Identifier code", - "description": "Identifier code." + "type": { + "const": "seller" }, - "name": { - "type": "string", - "title": "Name of the channel", - "description": "Name of the channel." + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] } }, "required": [ - "categories", - "id", - "created_at", - "code", - "name" + "seller_ids", + "type", + "direction" ], - "description": "Target channel (and categories) of sale to sell.\n\n`IShoppingSaleChannel` is an entity that expresses through which\n{@link IShoppingChannel channel} a listing {@link IShoppingSale } is sold.\n\nAlso, if {@link IShoppingChannelCategory categories} are specified, it also\nmeans that the sale be sold. Otherwise, none of the categories of the channel\nbeing specified, it means that every categories of the channel is listing the\ntarget sale." + "description": "Creation information of the seller criteria." }, - "IShoppingSaleUnit.ISummary": { + "IShoppingCouponSaleCriteria.ICreate": { "type": "object", "properties": { - "price_range": { - "$ref": "#/components/schemas/IShoppingSalePriceRange" - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "name": { - "type": "string", - "title": "Representative name of the unit", - "description": "Representative name of the unit." + "sale_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "minItems": 1, + "title": "List of target sale's {@link IShoppingSale.id}s", + "description": "List of target sale's {@link IShoppingSale.id}s." }, - "primary": { - "type": "boolean", - "title": "Whether the unit is primary or not", - "description": "Whether the unit is primary or not.\n\nJust a labeling value." + "type": { + "const": "sale" }, - "required": { - "type": "boolean", - "title": "Whether the unit is required or not", - "description": "Whether the unit is required or not.\n\nWhen the unit is required, the customer must select the unit. If do not\nselect, customer can't buy it.\n\nFor example, if there's a sale \"Macbook Set\" and one of the unit is the\n\"Main Body\", is it possible to buy the \"Macbook Set\" without the\n\"Main Body\" unit? This property is for that case." + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] } }, "required": [ - "price_range", - "id", - "name", - "primary", - "required" - ] + "sale_ids", + "type", + "direction" + ], + "description": "Creation information of the sale criteria." }, - "IShoppingCouponFunnelCriteria": { + "IShoppingCouponFunnelCriteria.ICreate": { "type": "object", "properties": { "funnels": { @@ -9918,9 +12512,7 @@ "description": "List of target funnels." }, "type": { - "const": "funnel", - "title": "Descrimanator type", - "description": "Descrimanator type." + "const": "funnel" }, "direction": { "oneOf": [ @@ -9930,9 +12522,7 @@ { "const": "exclude" } - ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." + ] } }, "required": [ @@ -9940,87 +12530,7 @@ "type", "direction" ], - "description": "Limit the funnel of discount coupons.\n\n`ishoppingcouponfunnelcriteria` is a subtype entity of\n{@link IShoppingCouponCriteria }, and is used when you want to issue or\nexclude discount coupons only to {@link IShoppingCustomer customers} who\ncame from a specific path.\n\nAnd funnel restrictions are possible in 3 ways: The first is\n{@link IShoppingCustomer.referrer }, and by parsing\n{@link IShoppingCustomer.href }, which records the customer's access\naddress, restrictions can be made in units of specific URLs or variables." - }, - "IShoppingCouponDiscount": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingCouponDiscount.IAmount" - }, - { - "$ref": "#/components/schemas/IShoppingCouponDiscount.IPercent" - } - ], - "description": "Discount information of the coupon.\n\n`IShoppingCouponDiscount` is a type representing the discount information\nof a {@link IShoppingCoupon }. Also, it is an union type that divided\nby the {@link unit } of the discount value, `amount` or `percent`." - }, - "IShoppingCoupon.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingCoupon.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-coupon.name" - }, - { - "const": "-coupon.unit" - }, - { - "const": "-coupon.value" - }, - { - "const": "-coupon.created_at" - }, - { - "const": "-coupon.opened_at" - }, - { - "const": "-coupon.closed_at" - }, - { - "const": "+coupon.name" - }, - { - "const": "+coupon.unit" - }, - { - "const": "+coupon.value" - }, - { - "const": "+coupon.created_at" - }, - { - "const": "+coupon.opened_at" - }, - { - "const": "+coupon.closed_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - } - }, - "IShoppingCoupon.IRequest.ISearch": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - } + "description": "Creation information of the funnel criteria." }, "IPageIShoppingCoupon": { "type": "object", @@ -10066,7 +12576,7 @@ "pages": { "type": "integer", "title": "Total pages", - "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + "description": "Total pages.\n\nEqual to {@link records} / {@link limit} with ceiling." } }, "required": [ @@ -10077,69 +12587,111 @@ ], "description": "Page information." }, - "IShoppingDeposit.IRequest": { + "IShoppingCoupon.IRequest": { "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest.ISearch" + } + ] }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-deposit.source" - }, - { - "const": "-deposit.code" - }, - { - "const": "-deposit.direction" - }, - { - "const": "+deposit.source" - }, - { - "const": "+deposit.code" - }, - { - "const": "+deposit.direction" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-coupon.name" + }, + { + "const": "-coupon.unit" + }, + { + "const": "-coupon.value" + }, + { + "const": "-coupon.created_at" + }, + { + "const": "-coupon.opened_at" + }, + { + "const": "-coupon.closed_at" + }, + { + "const": "+coupon.name" + }, + { + "const": "+coupon.unit" + }, + { + "const": "+coupon.value" + }, + { + "const": "+coupon.created_at" + }, + { + "const": "+coupon.opened_at" + }, + { + "const": "+coupon.closed_at" + } + ] } - ] - } + } + ] }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } - } + }, + "required": [] }, - "IShoppingDeposit.IRequest.ISearch": { + "IShoppingCoupon.IRequest.ISearch": { "type": "object", "properties": { - "source": { - "type": "string" - }, - "code": { - "type": "string" - }, - "direction": { + "name": { "oneOf": [ { - "const": -1 + "type": "null" }, { - "const": 1 + "type": "string" } ] } - } + }, + "required": [] }, "IPageIShoppingDeposit": { "type": "object", @@ -10175,37 +12727,6 @@ "type": "string", "format": "date-time" }, - "code": { - "type": "string" - }, - "source": { - "type": "string" - }, - "direction": { - "$ref": "#/components/schemas/IShoppingDeposit.Direction" - } - }, - "required": [ - "id", - "created_at", - "code", - "source", - "direction" - ] - }, - "IShoppingDeposit.Direction": { - "oneOf": [ - { - "const": 1 - }, - { - "const": -1 - } - ] - }, - "IShoppingDeposit.ICreate": { - "type": "object", - "properties": { "code": { "type": "string" }, @@ -10224,65 +12745,113 @@ } }, "required": [ + "id", + "created_at", "code", "source", "direction" ] }, - "IShoppingMileage.IRequest": { + "IShoppingDeposit.IRequest": { "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + } + ] }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-mileage.source" - }, - { - "const": "-mileage.code" - }, - { - "const": "-mileage.direction" - }, - { - "const": "+mileage.source" - }, - { - "const": "+mileage.code" - }, - { - "const": "+mileage.direction" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-deposit.source" + }, + { + "const": "-deposit.code" + }, + { + "const": "-deposit.direction" + }, + { + "const": "+deposit.source" + }, + { + "const": "+deposit.code" + }, + { + "const": "+deposit.direction" + } + ] } - ] - } + } + ] }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } - } + }, + "required": [] }, - "IShoppingMileage.IRequest.ISearch": { + "IShoppingDeposit.IRequest.ISearch": { "type": "object", "properties": { "source": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "code": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "direction": { "oneOf": [ + { + "type": "null" + }, { "const": -1 }, @@ -10291,27 +12860,54 @@ } ] } - } + }, + "required": [] }, - "IPageIShoppingMileage": { + "IShoppingDeposit.ICreate": { "type": "object", "properties": { - "pagination": { - "$ref": "#/components/schemas/IPage.IPagination", - "title": "Page information", - "description": "Page information." + "code": { + "type": "string" }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingMileage" - }, - "title": "List of records", - "description": "List of records." - } - }, - "required": [ - "pagination", + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "code", + "source", + "direction" + ] + }, + "IPageIShoppingMileage": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileage" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", "data" ], "description": "A page.\n\nCollection of records with pagination indformation." @@ -10344,7 +12940,14 @@ "type": "string" }, "direction": { - "$ref": "#/components/schemas/IShoppingMileage.Direction" + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] } }, "required": [ @@ -10356,15 +12959,116 @@ "direction" ] }, - "IShoppingMileage.Direction": { - "oneOf": [ - { - "const": 1 + "IShoppingMileage.IRequest": { + "type": "object", + "properties": { + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + } + ] }, - { - "const": -1 + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-mileage.source" + }, + { + "const": "-mileage.code" + }, + { + "const": "-mileage.direction" + }, + { + "const": "+mileage.source" + }, + { + "const": "+mileage.code" + }, + { + "const": "+mileage.direction" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." } - ] + }, + "required": [] + }, + "IShoppingMileage.IRequest.ISearch": { + "type": "object", + "properties": { + "source": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "code": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "direction": { + "oneOf": [ + { + "type": "null" + }, + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [] }, "IShoppingMileage.ICreate": { "type": "object", @@ -10403,85 +13107,6 @@ "value" ] }, - "IShoppingMileageDonation.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingMileageDonation.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-donation.created_at" - }, - { - "const": "-donation.value" - }, - { - "const": "-donation.reason" - }, - { - "const": "+donation.created_at" - }, - { - "const": "+donation.value" - }, - { - "const": "+donation.reason" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - } - }, - "IShoppingMileageDonation.IRequest.ISearch": { - "type": "object", - "properties": { - "citizen": { - "$ref": "#/components/schemas/IShoppingCitizen.IRequest.ISearch" - }, - "minimum": { - "type": "number", - "minimum": 0 - }, - "maximum": { - "type": "number", - "minimum": 0 - }, - "from": { - "type": "string", - "format": "date-time" - }, - "to": { - "type": "string", - "format": "date-time" - } - } - }, - "IShoppingCitizen.IRequest.ISearch": { - "type": "object", - "properties": { - "mobile": { - "type": "string", - "pattern": "^[0-9]*$" - }, - "name": { - "type": "string" - } - } - }, "IPageIShoppingMileageDonation": { "type": "object", "properties": { @@ -10538,230 +13163,184 @@ "created_at" ] }, - "IShoppingMileageDonation.ICreate": { + "IShoppingMileageDonation.IRequest": { "type": "object", "properties": { - "citizen_id": { - "type": "string", - "format": "uuid" + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMileageDonation.IRequest.ISearch" + } + ] }, - "value": { - "type": "number" + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-donation.created_at" + }, + { + "const": "-donation.value" + }, + { + "const": "-donation.reason" + }, + { + "const": "+donation.created_at" + }, + { + "const": "+donation.value" + }, + { + "const": "+donation.reason" + } + ] + } + } + ] }, - "reason": { - "type": "string" + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." } }, - "required": [ - "citizen_id", - "value", - "reason" - ] - }, - "IShoppingOrder.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingOrder.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-order.price" - }, - { - "const": "-order.quantity" - }, - { - "const": "-order.created_at" - }, - { - "const": "-order.publish.paid_at" - }, - { - "const": "+order.price" - }, - { - "const": "+order.quantity" - }, - { - "const": "+order.created_at" - }, - { - "const": "+order.publish.paid_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "description": "Request of orders with pagination and searching/sorting conditions." + "required": [] }, - "IShoppingOrder.IRequest.ISearch": { + "IShoppingMileageDonation.IRequest.ISearch": { "type": "object", "properties": { - "min_price": { - "type": "number" - }, - "max_price": { - "type": "number" - }, - "paid": { + "citizen": { "oneOf": [ { "type": "null" }, { - "type": "boolean" + "$ref": "#/components/schemas/IShoppingCitizen.IRequest.ISearch" } ] }, - "sale": { - "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" - } - } - }, - "IShoppingSale.IRequest.ISearch": { - "type": "object", - "properties": { - "show_paused": { - "type": "boolean" - }, - "show_suspended": { + "minimum": { "oneOf": [ { - "const": "only" + "type": "null" }, { - "type": "boolean" + "type": "number", + "minimum": 0 } ] }, - "title": { - "type": "string" - }, - "content": { - "type": "string" - }, - "title_or_content": { - "type": "string" - }, - "price": { - "$ref": "#/components/schemas/IShoppingPrice.ISearch" - }, - "review": { - "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch" - }, - "section_codes": { - "type": "array", - "items": { - "type": "string" - } - }, - "channel_codes": { - "type": "array", - "items": { - "type": "string" - } - }, - "channel_category_ids": { - "type": "array", - "items": { - "type": "string" - } - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "seller": { - "$ref": "#/components/schemas/IShoppingSeller.IRequest.ISearch" - } - } - }, - "IShoppingPrice.ISearch": { - "type": "object", - "properties": { - "minimum": { - "type": "number" - }, "maximum": { - "type": "number" - } - } - }, - "IShoppingSaleReview.IInvertSearch": { - "type": "object", - "properties": { - "score": { - "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.IScoreRange" + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ] }, - "count": { - "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.ICountRange" - } - } - }, - "IShoppingSaleReview.IInvertSearch.IScoreRange": { - "type": "object", - "properties": { - "minimum": { - "type": "number", - "minimum": 0, - "maximum": 100 + "from": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, - "maximum": { - "type": "number", - "minimum": 0, - "maximum": 100 + "to": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] } - } + }, + "required": [] }, - "IShoppingSaleReview.IInvertSearch.ICountRange": { + "IShoppingCitizen.IRequest.ISearch": { "type": "object", "properties": { - "minimum": { - "type": "integer" + "mobile": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "pattern": "^[0-9]*$" + } + ] }, - "maximum": { - "type": "integer" + "name": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] } - } + }, + "required": [] }, - "IShoppingSeller.IRequest.ISearch": { + "IShoppingMileageDonation.ICreate": { "type": "object", "properties": { - "id": { + "citizen_id": { "type": "string", "format": "uuid" }, - "mobile": { - "type": "string", - "pattern": "^[0-9]*$" - }, - "name": { - "type": "string" - }, - "email": { - "type": "string", - "format": "email" + "value": { + "type": "number" }, - "nickname": { + "reason": { "type": "string" } - } + }, + "required": [ + "citizen_id", + "value", + "reason" + ] }, "IPageIShoppingOrder": { "type": "object", @@ -10792,9 +13371,16 @@ "id": { "type": "string", "format": "uuid", + "x-wrtn-payment-order-id": true, "title": "Primary Key", "description": "Primary Key." }, + "name": { + "type": "string", + "x-wrtn-payment-order-name": true, + "title": "Representative name of the order", + "description": "Representative name of the order." + }, "customer": { "$ref": "#/components/schemas/IShoppingCustomer", "title": "Customer who've applied for the order", @@ -10812,7 +13398,7 @@ "price": { "$ref": "#/components/schemas/IShoppingOrderPrice", "title": "Price information including discounts", - "description": "Price information including discounts.\n\nFor reference, this price value has multiplied by the {@link volume } value.\nTherefore, even if {@link volume } value is equal to the target\n{@link IShoppingCartCommodity.volume }, this price value can be different\nwith the {@link IShoppingCartCommodity.price } value." + "description": "Price information including discounts.\n\nFor reference, this price value has multiplied by the {@link volume} value.\nTherefore, even if {@link volume} value is equal to the target\n{@link IShoppingCartCommodity.volume}, this price value can be different\nwith the {@link IShoppingCartCommodity.price} value." }, "publish": { "oneOf": [ @@ -10835,13 +13421,14 @@ }, "required": [ "id", + "name", "customer", "goods", "price", "publish", "created_at" ], - "description": "Order application information.\n\n`IShoppingOrder` is an entity that embodies {@link IShoppingCustomer customer}'s\norder application information. However, please note that at this time, you are\nstill at the \"order application\" stage and not the \"order confirmation\" stage.\n\nAnd as soon as a customer applies for an order, all\n{@link IShoppingCartCommodity commodities} in the target shopping cart are\npromoted to {@link IShoppingOrderGood goods}, and those good records are created\nunder this `IShoppingOrder`.\n\nOf course, not all commodities in the target shopping cart become\n{@link IShoppingOrderGood }, but only those selected by the customer become the\n{@link IShoppingOrderGood }." + "description": "Order application information.\n\n`IShoppingOrder` is an entity that embodies {@link IShoppingCustomer customer}'s\norder application information. However, please note that at this time, you are\nstill at the \"order application\" stage and not the \"order confirmation\" stage.\n\nAnd as soon as a customer applies for an order, all\n{@link IShoppingCartCommodity commodities} in the target shopping cart are\npromoted to {@link IShoppingOrderGood goods}, and those good records are created\nunder this `IShoppingOrder`.\n\nOf course, not all commodities in the target shopping cart become\n{@link IShoppingOrderGood}, but only those selected by the customer become the\n{@link IShoppingOrderGood}." }, "IShoppingCustomer": { "type": "object", @@ -10902,7 +13489,7 @@ "type": "string", "format": "uri", "title": "Connection address", - "description": "Connection address.\n\nSame with {@link window.location.href } of client." + "description": "Connection address.\n\nSame with {@link window.location.href} of client." }, "referrer": { "oneOf": [ @@ -10912,10 +13499,14 @@ { "type": "string", "format": "uri" + }, + { + "type": "string", + "maxLength": 0 } ], "title": "Referrer address", - "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + "description": "Referrer address.\n\nSame with {@link window.document.referrer} of client." }, "ip": { "oneOf": [ @@ -10950,7 +13541,7 @@ "ip", "created_at" ], - "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen}, {@link IShoppingMember}, and\n{@link IShoppingExternalUser}. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." }, "IShoppingMember": { "type": "object", @@ -11026,7 +13617,7 @@ "emails", "created_at" ], - "description": "Member Account.\n\n`IShoppingMember` is an entity that symbolizes the case when a\n{@link IShoppingCustomer } signs up as a member of this shopping mall\nsystem.\n\nIf a `IShoppingMember` has seller or administrator property. it means that\nthe {@link IShoppingCustomer } has acting as a {@link IShoppingSeller seller}\nor {@link IShoppingAdministrator administrator} at the same time." + "description": "Member Account.\n\n`IShoppingMember` is an entity that symbolizes the case when a\n{@link IShoppingCustomer} signs up as a member of this shopping mall\nsystem.\n\nIf a `IShoppingMember` has seller or administrator property. it means that\nthe {@link IShoppingCustomer} has acting as a {@link IShoppingSeller seller}\nor {@link IShoppingAdministrator administrator} at the same time." }, "IShoppingOrderGood": { "type": "object", @@ -11045,7 +13636,7 @@ "volume": { "type": "integer", "title": "Volume of the good", - "description": "Volume of the good.\n\nThe value multiplied to {@link IShoppingCartCommodityStock.quantity }.\nIt's purpose is exactly same with {@link IShoppingCartCommodity.volume },\nbut rewritten because the {@link IShoppingCartCommodity } records are reusable\nuntil payment." + "description": "Volume of the good.\n\nThe value multiplied to {@link IShoppingCartCommodityStock.quantity}.\nIt's purpose is exactly same with {@link IShoppingCartCommodity.volume},\nbut rewritten because the {@link IShoppingCartCommodity} records are reusable\nuntil payment." }, "price": { "$ref": "#/components/schemas/IShoppingOrderPrice.ISummary", @@ -11104,7 +13695,7 @@ "state", "confirmed_at" ], - "description": "Information about the individual goods that make up your order.\n\n`IShoppingOrderGood` is an entity that represents each good ordered by a\n{@link IShoppingCustomer customer}, and the record is created in the process\nof upgrading the product {@link IShoppingCartCommodity commodity} in the\nshopping cart to a good due to the customer's {@link IShoppingOrder order}\nrequest.\n\nAnd `IShoppingOrderGood`, like {@link IShoppingCartCommodity }, is a concept\nthat corresponds to the listing {@link IShoppingSaleSnapshot sale snapshot}.\n\nFor reference, `IShoppingOrderGood` also contains {@link volume } information\nseparately from the belonging {@link IShoppingCartCommodity.volume }. This is\nbecause there are some cases where you put 3 books in your shopping cart and\nthen change them to 4 during the actual order application process. This is to\nincrease the reusability of the shopping cart by changing the volume attribute\nof the current entity rather than directly changing the commodity information.\n\nIn addition, `IShoppingOrderGood` becomes the most basic unit for the post-order\nprocess, that is, after service (A/S). For example, after receiving a\ncustomer's product, confirming the order is recorded in the {@link confirmed_at }\nattribute. Additionally, `IShoppingOrderGood` is the unit in which customers\nissues or request exchanges or refunds for ordered products." + "description": "Information about the individual goods that make up your order.\n\n`IShoppingOrderGood` is an entity that represents each good ordered by a\n{@link IShoppingCustomer customer}, and the record is created in the process\nof upgrading the product {@link IShoppingCartCommodity commodity} in the\nshopping cart to a good due to the customer's {@link IShoppingOrder order}\nrequest.\n\nAnd `IShoppingOrderGood`, like {@link IShoppingCartCommodity}, is a concept\nthat corresponds to the listing {@link IShoppingSaleSnapshot sale snapshot}.\n\nFor reference, `IShoppingOrderGood` also contains {@link volume} information\nseparately from the belonging {@link IShoppingCartCommodity.volume}. This is\nbecause there are some cases where you put 3 books in your shopping cart and\nthen change them to 4 during the actual order application process. This is to\nincrease the reusability of the shopping cart by changing the volume attribute\nof the current entity rather than directly changing the commodity information.\n\nIn addition, `IShoppingOrderGood` becomes the most basic unit for the post-order\nprocess, that is, after service (A/S). For example, after receiving a\ncustomer's product, confirming the order is recorded in the {@link confirmed_at}\nattribute. Additionally, `IShoppingOrderGood` is the unit in which customers\nissues or request exchanges or refunds for ordered products." }, "IShoppingCartCommodity": { "type": "object", @@ -11134,12 +13725,12 @@ "type": "integer", "minimum": 1, "title": "Volume of the commodity to purchase", - "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity} values." }, "price": { "$ref": "#/components/schemas/IShoppingPrice", "title": "Price of the commodity", - "description": "Price of the commodity.\n\nFor reference, this price value has not been multiplied by the\n{@link volume } value. It just sumed up the prices of the children\n{@link IShoppingSaleUnitStock.IInvert.price } values." + "description": "Price of the commodity.\n\nFor reference, this price value has not been multiplied by the\n{@link volume} value. It just sumed up the prices of the children\n{@link IShoppingSaleUnitStock.IInvert.price} values." }, "created_at": { "type": "string", @@ -11157,7 +13748,7 @@ "price", "created_at" ], - "description": "Item in a shopping cart.\n\n`IShoppingCartCommodity` is an entity that represents a\n{@link IShoppingSaleSnapshot snapshot} of the items that\n{@link IShoppingCustomer customer} has placed into his shopping cart with a\n{@link IShoppingOrder purchase} in mind. And if the customer continues this\ninto an actual order in the future, `IShoppingCartCommodity` be changed to\n{@link IShoppingOrderGood }.\n\nAnd while adding a sale snapshot to the shopping cart, the customer inevitably\nselects specific {@link IShoppingSaleUnit units} and\n{@link IShoppingSaleUnitStock final stocks} within the listing snapshot.\nInformation about these units and stocks is recorded in the subsidiary entity\n{@link IShoppingCartCommodityStock }. Also, there is an attribute {@link volume }\nthat indicates how many sets of snapshots of the target commodity will be\npurchased. This \"volume\" is a value that will be multiplied by\n{@link IShoppingSaleUnitStock.IInvert.quantity }, the quantity for each\ncomponent." + "description": "Item in a shopping cart.\n\n`IShoppingCartCommodity` is an entity that represents a\n{@link IShoppingSaleSnapshot snapshot} of the items that\n{@link IShoppingCustomer customer} has placed into his shopping cart with a\n{@link IShoppingOrder purchase} in mind. And if the customer continues this\ninto an actual order in the future, `IShoppingCartCommodity` be changed to\n{@link IShoppingOrderGood}.\n\nAnd while adding a sale snapshot to the shopping cart, the customer inevitably\nselects specific {@link IShoppingSaleUnit units} and\n{@link IShoppingSaleUnitStock final stocks} within the listing snapshot.\nInformation about these units and stocks is recorded in the subsidiary entity\n{@link IShoppingCartCommodityStock}. Also, there is an attribute {@link volume}\nthat indicates how many sets of snapshots of the target commodity will be\npurchased. This \"volume\" is a value that will be multiplied by\n{@link IShoppingSaleUnitStock.IInvert.quantity}, the quantity for each\ncomponent." }, "IShoppingSaleSnapshot.IInvert": { "type": "object", @@ -11224,7 +13815,7 @@ "type": "string", "format": "date-time", "title": "Creation time of the record", - "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at },\nwhich means the timepoint of the sale is opened." + "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at},\nwhich means the timepoint of the sale is opened." }, "updated_at": { "type": "string", @@ -11302,7 +13893,7 @@ "opened_at", "closed_at" ], - "description": "Invert information of the sale snapshot, in the perspective of commodity.\n\n`IShoppingSaleSnapshot.IInvert` is a structure used to represent a\nsnapshot in the perspective of a {@link IShoppingCommodity }, corresponding\nto an {@link IShoppingCartCommodityStock } entity.\n\nTherefore, `IShoppingSaleSnapshot.IInvert` does not contain every\n{@link IShoppingSaleUnit units} and {@link IShoppingSaleUnitStock stocks}\nof the snapshot records, but only some of the records which are put\ninto the {@link IShoppingCartCommodity shopping cart}." + "description": "Invert information of the sale snapshot, in the perspective of commodity.\n\n`IShoppingSaleSnapshot.IInvert` is a structure used to represent a\nsnapshot in the perspective of a {@link IShoppingCommodity}, corresponding\nto an {@link IShoppingCartCommodityStock} entity.\n\nTherefore, `IShoppingSaleSnapshot.IInvert` does not contain every\n{@link IShoppingSaleUnit units} and {@link IShoppingSaleUnitStock stocks}\nof the snapshot records, but only some of the records which are put\ninto the {@link IShoppingCartCommodity shopping cart}." }, "IShoppingSaleUnit.IInvert": { "type": "object", @@ -11425,7 +14016,14 @@ "description": "Primary Key." }, "option": { - "$ref": "#/components/schemas/IShoppingSaleUnitOption.IInvert", + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.IInvert" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ], "title": "Target option", "description": "Target option." }, @@ -11468,17 +14066,6 @@ ], "description": "Invert information from the cart." }, - "IShoppingSaleUnitOption.IInvert": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.IInvert" - }, - { - "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" - } - ], - "description": "Inversely referenced information of the option." - }, "IShoppingSaleUnitSelectableOption.IInvert": { "type": "object", "properties": { @@ -11575,6 +14162,7 @@ "cash": { "type": "number", "minimum": 0, + "x-wrtn-payment-price": true, "title": "Amount of the cash payment", "description": "Amount of the cash payment." }, @@ -11633,6 +14221,7 @@ "cash": { "type": "number", "minimum": 0, + "x-wrtn-payment-price": true, "title": "Amount of the cash payment", "description": "Amount of the cash payment." }, @@ -11704,7 +14293,7 @@ "ticket", "created_at" ], - "description": "Discount coupon ticket payment details.\n\n`IShoppingCouponTicketPayment` is an entity that embodies the payment\ninformation for the {@link IShoppingOrder order} of\n{@link IShoppingCouponTicket }, and is used when a consumer uses the\ndiscount coupon ticket he or she was issued to order and has the payment\namount deducted.\n\nAnd since {@link IShoppingOrder } itself is not an entity used in\nsituations where an order is completed, but rather an entity designed to\nexpress an order request, the creation of this\n`IShoppingCouponTicketPayment` record does not actually mean that the\nattached ticket disappears. Until the {@link IShoppingCustomer customer}\n{@link IShoppingOrderPublish.paid_at completes the payment} and confirms\nthe order, the ticket can be understood as a kind of deposit.\n\nAdditionally, this record can be deleted by the customer reversing the\npayment of the ticket, but it can also be deleted when the attribution\norder itself is cancelled." + "description": "Discount coupon ticket payment details.\n\n`IShoppingCouponTicketPayment` is an entity that embodies the payment\ninformation for the {@link IShoppingOrder order} of\n{@link IShoppingCouponTicket}, and is used when a consumer uses the\ndiscount coupon ticket he or she was issued to order and has the payment\namount deducted.\n\nAnd since {@link IShoppingOrder} itself is not an entity used in\nsituations where an order is completed, but rather an entity designed to\nexpress an order request, the creation of this\n`IShoppingCouponTicketPayment` record does not actually mean that the\nattached ticket disappears. Until the {@link IShoppingCustomer customer}\n{@link IShoppingOrderPublish.paid_at completes the payment} and confirms\nthe order, the ticket can be understood as a kind of deposit.\n\nAdditionally, this record can be deleted by the customer reversing the\npayment of the ticket, but it can also be deleted when the attribution\norder itself is cancelled." }, "IShoppingCouponTicket": { "type": "object", @@ -11766,26 +14355,48 @@ "description": "List of deliveries.\n\nAn {@link IShoppingOrder order} can be delivered in multiple times.\nOf course, the opposite case is also possible, that a\n{@link IShoppingDelivery delivery} can be composed of multiple orders." }, "state": { - "$ref": "#/components/schemas/IShoppingDelivery.State", - "title": "State of the order, about the deliveries", - "description": "State of the order, about the deliveries." - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of the record", - "description": "Creation time of the record." - }, - "paid_at": { "oneOf": [ { - "type": "null" + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "State of the order, about the deliveries", + "description": "State of the order, about the deliveries." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "paid_at": { + "oneOf": [ + { + "type": "null" }, { "type": "string", @@ -11823,7 +14434,7 @@ "cancelled_at", "address" ], - "description": "Order completion and payment information.\n\n`IShoppingOrderPublish` is an entity that embodies the series of processes\nin which a {@link IShoppingCustomer customer} pays for his or her\n{@link IShoppingOrder order}, thereby completing the order. And only after\nthe order is {@link paid_at completed}, can the {@link IShoppingSeller seller}\nrecognize that the customer has purchased his product.\n\nBy the way, please note that just because the `IShoppingOrderPublish` record\nexists, it does not mean that the payment has been completed. Of course, with\n\"credit cards\" and \"Google Pay\", payment application and payment occur at the\nsame time. However, there are some cases where payment is made after the\npayment application, such as \"bank transfer\" or \"virtual account payment\".\nTherefore, to see the completion of payment, be sure to check the\n{@link paid_at } property.\n\nIn addition, even after payment has been made, there may be cases where it is\nsuddenly cancelled, so please be aware of this as well." + "description": "Order completion and payment information.\n\n`IShoppingOrderPublish` is an entity that embodies the series of processes\nin which a {@link IShoppingCustomer customer} pays for his or her\n{@link IShoppingOrder order}, thereby completing the order. And only after\nthe order is {@link paid_at completed}, can the {@link IShoppingSeller seller}\nrecognize that the customer has purchased his product.\n\nBy the way, please note that just because the `IShoppingOrderPublish` record\nexists, it does not mean that the payment has been completed. Of course, with\n\"credit cards\" and \"Google Pay\", payment application and payment occur at the\nsame time. However, there are some cases where payment is made after the\npayment application, such as \"bank transfer\" or \"virtual account payment\".\nTherefore, to see the completion of payment, be sure to check the\n{@link paid_at} property.\n\nIn addition, even after payment has been made, there may be cases where it is\nsuddenly cancelled, so please be aware of this as well." }, "IShoppingDelivery": { "type": "object", @@ -11865,7 +14476,29 @@ "description": "List of shippers of the delivery." }, "state": { - "$ref": "#/components/schemas/IShoppingDelivery.State", + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], "title": "State of the delivery", "description": "State of the delivery." }, @@ -11885,7 +14518,7 @@ "state", "created_at" ], - "description": "Delivery information.\n\nWhen delivering {@link IShoppingOrderGood goods} to\n{@link IShoppingCustomer customer}, {@link IShoppingSeller seller} can deliver\nmultiple {@link IShoppingSaleUnitStock stocks}, goods at once. Also, it is\npossible to deliver a stock or good in multiple times due to physical restriction\nlike volume or weight problem.\n\nAs you can see from above, the relationship between delivery with\n{@link IShoppingOrder order} (or {@link IShoppingOrderGood good}) is not 1: 1 or\nN: 1, but M: N. Entity `IShoppingDelivery` has been designed to represent such\nrelationship, by referencing target stocks or goods through subsidiary entity\n{@link IShoppingDeliveryPiece }.\n\nAlso, delivery does not end with only one step. It has multiple processes like\nmanufacturing, planning, shipping and delivering. Those steps are represented by\nanother subsidiary entity {@link IShoppingDeliveryJourney }." + "description": "Delivery information.\n\nWhen delivering {@link IShoppingOrderGood goods} to\n{@link IShoppingCustomer customer}, {@link IShoppingSeller seller} can deliver\nmultiple {@link IShoppingSaleUnitStock stocks}, goods at once. Also, it is\npossible to deliver a stock or good in multiple times due to physical restriction\nlike volume or weight problem.\n\nAs you can see from above, the relationship between delivery with\n{@link IShoppingOrder order} (or {@link IShoppingOrderGood good}) is not 1: 1 or\nN: 1, but M: N. Entity `IShoppingDelivery` has been designed to represent such\nrelationship, by referencing target stocks or goods through subsidiary entity\n{@link IShoppingDeliveryPiece}.\n\nAlso, delivery does not end with only one step. It has multiple processes like\nmanufacturing, planning, shipping and delivering. Those steps are represented by\nanother subsidiary entity {@link IShoppingDeliveryJourney}." }, "IShoppingDeliveryJourney": { "type": "object", @@ -11916,7 +14549,20 @@ "description": "Deletion time of the record." }, "type": { - "$ref": "#/components/schemas/IShoppingDeliveryJourney.Type", + "oneOf": [ + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + } + ], "title": "Type of journey", "description": "Type of journey.\n\n- preparing\n- manufacturing\n- shipping\n- delivering" }, @@ -11981,23 +14627,7 @@ "started_at", "completed_at" ], - "description": "Journey of delivery.\n\n`IShoppingDeliveryJourney` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing each journey of the delivery. For reference, the word journey\nmeans each step of the delivery process, such as preparing, shipping, and\ndelivering {@link IShoppingOrderGood goods} to the\n{@link IShoppingCustomer customer}." - }, - "IShoppingDeliveryJourney.Type": { - "oneOf": [ - { - "const": "preparing" - }, - { - "const": "manufacturing" - }, - { - "const": "shipping" - }, - { - "const": "delivering" - } - ] + "description": "Journey of delivery.\n\n`IShoppingDeliveryJourney` is a subsidiary entity of {@link IShoppingDelivery},\ndescribing each journey of the delivery. For reference, the word journey\nmeans each step of the delivery process, such as preparing, shipping, and\ndelivering {@link IShoppingOrderGood goods} to the\n{@link IShoppingCustomer customer}." }, "IShoppingDeliveryPiece": { "type": "object", @@ -12011,20 +14641,20 @@ "publish_id": { "type": "string", "format": "uuid", - "title": "Target order's {@link IShoppingOrderPublish.id }", - "description": "Target order's {@link IShoppingOrderPublish.id }." + "title": "Target order's {@link IShoppingOrderPublish.id}", + "description": "Target order's {@link IShoppingOrderPublish.id}." }, "good_id": { "type": "string", "format": "uuid", - "title": "Target good's {@link IShoppingOrderGood.id }", - "description": "Target good's {@link IShoppingOrderGood.id }." + "title": "Target good's {@link IShoppingOrderGood.id}", + "description": "Target good's {@link IShoppingOrderGood.id}." }, "stock_id": { "type": "string", "format": "uuid", - "title": "Target stock's {@link IShoppingSaleUnitStock.id }", - "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + "title": "Target stock's {@link IShoppingSaleUnitStock.id}", + "description": "Target stock's {@link IShoppingSaleUnitStock.id}." }, "quantity": { "type": "number", @@ -12040,7 +14670,7 @@ "stock_id", "quantity" ], - "description": "Which stocks are delivered.\n\n`IShoppingDeliveryPiece` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing how much quantity is delivered for each\n{@link IShoppingSaleUnitStock stock} in {@link IShoppingOrder }.\n\nFor reference, as an order can be delivered in multiple times due to volume\nor weight problem, it is possible to have multiple `IShoppingDeliveryPiece`\nrecords for a single stock." + "description": "Which stocks are delivered.\n\n`IShoppingDeliveryPiece` is a subsidiary entity of {@link IShoppingDelivery},\ndescribing how much quantity is delivered for each\n{@link IShoppingSaleUnitStock stock} in {@link IShoppingOrder}.\n\nFor reference, as an order can be delivered in multiple times due to volume\nor weight problem, it is possible to have multiple `IShoppingDeliveryPiece`\nrecords for a single stock." }, "IShoppingDeliveryShipper": { "type": "object", @@ -12078,32 +14708,6 @@ "mobile" ] }, - "IShoppingDelivery.State": { - "oneOf": [ - { - "const": "none" - }, - { - "const": "underway" - }, - { - "const": "preparing" - }, - { - "const": "manufacturing" - }, - { - "const": "shipping" - }, - { - "const": "delivering" - }, - { - "const": "arrived" - } - ], - "description": "State of delivery\n\n- `none`: No delivery or journey record\n- `underway`: Some pieces are over preparing, but others are not\n- `preparing`: At least preparing\n- `manufacturing`: At least manufacturing\n- `shipping`: At least shipping\n- `delivering`: At least delivering\n- `arrived`: Every pieces are arrived" - }, "IShoppingAddress": { "type": "object", "properties": { @@ -12188,155 +14792,617 @@ ], "description": "The address information." }, - "IShoppingSale.IRequest": { + "IShoppingOrder.IRequest": { "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch", - "title": "Search conditions", - "description": "Search conditions." + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrder.IRequest.ISearch" + } + ] }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-seller.created_at" - }, - { - "const": "-seller.goods.payments.real" - }, - { - "const": "-seller.goods.publish_count" - }, - { - "const": "-seller.reviews.average" - }, - { - "const": "-seller.reviews.count" - }, - { - "const": "-goods.publish_count" - }, - { - "const": "-goods.payments.real" - }, - { - "const": "-reviews.average" - }, - { - "const": "-reviews.count" - }, - { - "const": "-sale.created_at" - }, - { - "const": "-sale.updated_at" - }, - { - "const": "-sale.opened_at" - }, - { - "const": "-sale.closed_at" - }, - { - "const": "-sale.content.title" - }, - { - "const": "-sale.price_range.lowest.real" - }, - { - "const": "-sale.price_range.highest.real" - }, - { - "const": "+seller.created_at" - }, - { - "const": "+seller.goods.payments.real" - }, - { - "const": "+seller.goods.publish_count" - }, - { - "const": "+seller.reviews.average" - }, - { - "const": "+seller.reviews.count" - }, - { - "const": "+goods.publish_count" - }, - { - "const": "+goods.payments.real" - }, - { - "const": "+reviews.average" - }, - { - "const": "+reviews.count" - }, - { - "const": "+sale.created_at" - }, - { - "const": "+sale.updated_at" - }, - { - "const": "+sale.opened_at" - }, - { - "const": "+sale.closed_at" - }, - { - "const": "+sale.content.title" - }, - { - "const": "+sale.price_range.lowest.real" - }, - { - "const": "+sale.price_range.highest.real" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-order.price" + }, + { + "const": "-order.quantity" + }, + { + "const": "-order.created_at" + }, + { + "const": "-order.publish.paid_at" + }, + { + "const": "+order.price" + }, + { + "const": "+order.quantity" + }, + { + "const": "+order.created_at" + }, + { + "const": "+order.publish.paid_at" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [], + "description": "Request of orders with pagination and searching/sorting conditions." + }, + "IShoppingOrder.IRequest.ISearch": { + "type": "object", + "properties": { + "min_price": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "max_price": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "paid": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "sale": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + ] + } + }, + "required": [] + }, + "IShoppingSale.IRequest.ISearch": { + "type": "object", + "properties": { + "show_paused": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "show_suspended": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "only" + }, + { + "type": "boolean" + } + ] + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "content": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "title_or_content": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "price": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingPrice.ISearch" + } + ] + }, + "review": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch" + } + ] + }, + "section_codes": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "channel_codes": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "channel_category_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "tags": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "seller": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSeller.IRequest.ISearch" + } + ] + } + }, + "required": [] + }, + "IShoppingPrice.ISearch": { + "type": "object", + "properties": { + "minimum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "maximum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + } + }, + "required": [] + }, + "IShoppingSaleReview.IInvertSearch": { + "type": "object", + "properties": { + "score": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.IScoreRange" + } + ] + }, + "count": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.ICountRange" + } + ] + } + }, + "required": [] + }, + "IShoppingSaleReview.IInvertSearch.IScoreRange": { + "type": "object", + "properties": { + "minimum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0, + "maximum": 100 + } + ] + }, + "maximum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0, + "maximum": 100 + } + ] + } + }, + "required": [] + }, + "IShoppingSaleReview.IInvertSearch.ICountRange": { + "type": "object", + "properties": { + "minimum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ] + }, + "maximum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ] + } + }, + "required": [] + }, + "IShoppingSeller.IRequest.ISearch": { + "type": "object", + "properties": { + "id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "mobile": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "pattern": "^[0-9]*$" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "email": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "email" + } + ] + }, + "nickname": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + } + }, + "required": [] + }, + "IPageIShoppingSale.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSale.ISummary" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSale.IRequest": { + "type": "object", + "properties": { + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + ], + "title": "Search conditions", + "description": "Search conditions." + }, + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-seller.created_at" + }, + { + "const": "-seller.goods.payments.real" + }, + { + "const": "-seller.goods.publish_count" + }, + { + "const": "-seller.reviews.average" + }, + { + "const": "-seller.reviews.count" + }, + { + "const": "-goods.publish_count" + }, + { + "const": "-goods.payments.real" + }, + { + "const": "-reviews.average" + }, + { + "const": "-reviews.count" + }, + { + "const": "-sale.created_at" + }, + { + "const": "-sale.updated_at" + }, + { + "const": "-sale.opened_at" + }, + { + "const": "-sale.closed_at" + }, + { + "const": "-sale.content.title" + }, + { + "const": "-sale.price_range.lowest.real" + }, + { + "const": "-sale.price_range.highest.real" + }, + { + "const": "+seller.created_at" + }, + { + "const": "+seller.goods.payments.real" + }, + { + "const": "+seller.goods.publish_count" + }, + { + "const": "+seller.reviews.average" + }, + { + "const": "+seller.reviews.count" + }, + { + "const": "+goods.publish_count" + }, + { + "const": "+goods.payments.real" + }, + { + "const": "+reviews.average" + }, + { + "const": "+reviews.count" + }, + { + "const": "+sale.created_at" + }, + { + "const": "+sale.updated_at" + }, + { + "const": "+sale.opened_at" + }, + { + "const": "+sale.closed_at" + }, + { + "const": "+sale.content.title" + }, + { + "const": "+sale.price_range.lowest.real" + }, + { + "const": "+sale.price_range.highest.real" + } + ] } - ] - }, + } + ], "title": "Sorting conditions", "description": "Sorting conditions." }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } }, + "required": [], "description": "Request of summarized sales with pagination and searching/sorting options." }, - "IPageIShoppingSale.ISummary": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/IPage.IPagination", - "title": "Page information", - "description": "Page information." - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSale.ISummary" - }, - "title": "List of records", - "description": "List of records." - } - }, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." - }, "IShoppingSale": { "type": "object", "properties": { @@ -12402,7 +15468,7 @@ "type": "string", "format": "date-time", "title": "Creation time of the record", - "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at },\nwhich means the timepoint of the sale is opened." + "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at},\nwhich means the timepoint of the sale is opened." }, "updated_at": { "type": "string", @@ -12480,7 +15546,7 @@ "opened_at", "closed_at" ], - "description": "Seller sales products.\n\n`IShoppingSale` is an entity that embodies \"product sales\" (sales)\ninformation registered by the {@link ISoppingSeller seller}. And the main\ninformation of the sale is recorded in the sub {@link IShoppingSaleSnapshot },\nnot in the main `IShoppingSale`. When a seller changes a previously registered\nitem, the existing `IShoppingSale` record is not changed, but a new\n{@link IShoppingSaleSnapshot snapshot} record be created.\n\nThis is to preserve the {@link IShoppingCustomer customer}'s\n{@link IShoppingOrder purchase history} flawlessly after the customer\npurchases a specific item, even if the seller changes the components or\nprice of the item. It is also intended to support sellers in so-called A/B\ntesting, which involves changing components or prices and measuring the\nperformance in each case." + "description": "Seller sales products.\n\n`IShoppingSale` is an entity that embodies \"product sales\" (sales)\ninformation registered by the {@link ISoppingSeller seller}. And the main\ninformation of the sale is recorded in the sub {@link IShoppingSaleSnapshot},\nnot in the main `IShoppingSale`. When a seller changes a previously registered\nitem, the existing `IShoppingSale` record is not changed, but a new\n{@link IShoppingSaleSnapshot snapshot} record be created.\n\nThis is to preserve the {@link IShoppingCustomer customer}'s\n{@link IShoppingOrder purchase history} flawlessly after the customer\npurchases a specific item, even if the seller changes the components or\nprice of the item. It is also intended to support sellers in so-called A/B\ntesting, which involves changing components or prices and measuring the\nperformance in each case." }, "IShoppingSaleContent": { "type": "object", @@ -12497,7 +15563,17 @@ "description": "Title of the content." }, "format": { - "$ref": "#/components/schemas/IShoppingSaleContent.Type", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of the body content", "description": "Format of the body content.\n\nSame meaning with file extension like `html`, `md`, and `txt`." }, @@ -12531,20 +15607,7 @@ "files", "thumbnails" ], - "description": "Content information of sale snapshot.\n\n`IShoppingSaleContent` is an entity embodies the description contents\nof {@link IShoppingSale }." - }, - "IShoppingSaleContent.Type": { - "oneOf": [ - { - "const": "html" - }, - { - "const": "md" - }, - { - "const": "txt" - } - ] + "description": "Content information of sale snapshot.\n\n`IShoppingSaleContent` is an entity embodies the description contents\nof {@link IShoppingSale}." }, "IShoppingSaleUnit": { "type": "object", @@ -12552,7 +15615,14 @@ "options": { "type": "array", "items": { - "$ref": "#/components/schemas/IShoppingSaleUnitOption" + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ] }, "title": "List of options", "description": "List of options." @@ -12596,18 +15666,7 @@ "primary", "required" ], - "description": "Product composition information handled in the sale.\n\n`IShoppingSaleUnit` is an entity that embodies the \"individual product\"\ninformation handled in the {@link IShoppingSale sale}.\n\nFor reference, the reason why `IShoppingSaleUnit` is separated from\n{@link IShoppingSaleSnapshot } by an algebraic relationship of 1: N is because\nthere are some cases where multiple products are sold in one listing. This is\nthe case with so-called \"bundled products\".\n\n- Bundle from regular product (Mackbook Set)\n - Main Body\n - Keyboard\n - Mouse\n - Apple Care (Free A/S Voucher)\n\nAnd again, `IShoppingSaleUnit` does not in itself refer to the\n{@link IShoppingSaleUnitStock final stock} that the\n{@link IShoppingCustomer customer} will {@link IShoppingOrder purchase}.\nThe final stock can be found only after selecting all given\n{@link IShoppingSaleUnitOption options} and their\n{@link IShoppingSaleUnitOptionCandidate candidate values}.\n\nFor example, even if you buy a Macbook, the final stocks are determined only\nafter selecting all the options (CPU / RAM / SSD), etc." - }, - "IShoppingSaleUnitOption": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" - }, - { - "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption" - } - ], - "description": "Individual option information on units for sale.\n\n`IShoppingSaleUnitOption` is a subsidiary entity of\n{@link IShoppingSaleUnit } that represents individual products in the\n{@link IShoppingSale sale}, and is an entity designed to represent individual\noption information for the unit.\n\nAlso, `IShoppingSaleUnitOption` is an union type of two entities,\n{@link IShoppingSaleUnitSelectableOption } and\n{@link IShoppingSaleUnitDescriptiveOption }. To specify the detailed type of\nthem, just use the `if` statement to the {@link type } property like below:\n\n```typescript\nif (option.type === \"select\")\n option.candidates; // IShoppingSaleUnitSelectableOption\n```\n\n- Examples of Options\n - selectable options\n - Computer: CPU, RAM, SSD, etc.\n - Clothes: size, color, style, etc.\n - descriptive options\n - Engrave\n - Simple question\n\nIf the type of option is a variable value in \"select\", the final stock that the\n{@link IShoppingCustomer customer} will purchase changes depending on the\nselection of the {@link IShoppingSaleUnitOptionCandidate candidate value}.\n\nConversely, if it is a type other than \"select\", or if the type is \"select\" but\nvariable is false, this is an option that has no meaning beyond simple information\ntransfer. Therefore, no matter what value the customer enters and chooses when\npurchasing it, the option in this case does not affect the\n{@link IShoppingSaleUnitStock final stock}." + "description": "Product composition information handled in the sale.\n\n`IShoppingSaleUnit` is an entity that embodies the \"individual product\"\ninformation handled in the {@link IShoppingSale sale}.\n\nFor reference, the reason why `IShoppingSaleUnit` is separated from\n{@link IShoppingSaleSnapshot} by an algebraic relationship of 1: N is because\nthere are some cases where multiple products are sold in one listing. This is\nthe case with so-called \"bundled products\".\n\n- Bundle from regular product (Mackbook Set)\n - Main Body\n - Keyboard\n - Mouse\n - Apple Care (Free A/S Voucher)\n\nAnd again, `IShoppingSaleUnit` does not in itself refer to the\n{@link IShoppingSaleUnitStock final stock} that the\n{@link IShoppingCustomer customer} will {@link IShoppingOrder purchase}.\nThe final stock can be found only after selecting all given\n{@link IShoppingSaleUnitOption options} and their\n{@link IShoppingSaleUnitOptionCandidate candidate values}.\n\nFor example, even if you buy a Macbook, the final stocks are determined only\nafter selecting all the options (CPU / RAM / SSD), etc." }, "IShoppingSaleUnitSelectableOption": { "type": "object", @@ -12650,7 +15709,7 @@ "name", "variable" ], - "description": "Individual option information on units for sale.\n\n`IShoppingSaleUnitSelectableOption` is a subsidiary entity of\n{@link IShoppingSaleUnit } that represents individual products in the\n{@link IShoppingSale sale}, and is an entity designed to represent individual\nselectable option information for the unit.\n\n- Examples of Options\n - selectable options\n - Computer: CPU, RAM, SSD, etc.\n - Clothes: size, color, style, etc.\n - descriptive options\n - Engrave\n - Simple question\n\nIf the {@link variable } property value is `true`, the final stock that the\n{@link IShoppingCustomer customer} will purchase changes depending on the\nselection of the {@link IShoppingSaleUnitOptionCandidate candidate value}.\n\nConversely, if it is a type other than \"select\", or if the {@link variable }\nproperty value is \"false\", , this is an option that has no meaning beyond\nsimple information transfer. Therefore, no matter what value the customer\nchooses when purchasing it, the option in this case does not affect the\n{@link IShoppingSaleUnitStock final stock}." + "description": "Individual option information on units for sale.\n\n`IShoppingSaleUnitSelectableOption` is a subsidiary entity of\n{@link IShoppingSaleUnit} that represents individual products in the\n{@link IShoppingSale sale}, and is an entity designed to represent individual\nselectable option information for the unit.\n\n- Examples of Options\n - selectable options\n - Computer: CPU, RAM, SSD, etc.\n - Clothes: size, color, style, etc.\n - descriptive options\n - Engrave\n - Simple question\n\nIf the {@link variable} property value is `true`, the final stock that the\n{@link IShoppingCustomer customer} will purchase changes depending on the\nselection of the {@link IShoppingSaleUnitOptionCandidate candidate value}.\n\nConversely, if it is a type other than \"select\", or if the {@link variable}\nproperty value is \"false\", , this is an option that has no meaning beyond\nsimple information transfer. Therefore, no matter what value the customer\nchooses when purchasing it, the option in this case does not affect the\n{@link IShoppingSaleUnitStock final stock}." }, "IShoppingSaleUnitStock": { "type": "object", @@ -12692,7 +15751,7 @@ "inventory", "choices" ], - "description": "Final component information on units for sale.\n\n`IShoppingSaleUnitStock` is a subsidiary entity of {@link IShoppingSaleUnit }\nthat represents a product catalog for sale, and is a kind of final stock that is\nconstructed by selecting all {@link IShoppingSaleUnitSelectableOption options}\n(variable \"select\" type) and their\n{@link IShoppingSaleUnitOptionCandidate candidate} values in the belonging unit.\nIt is the \"good\" itself that customers actually purchase.\n\n- Product Name) MacBook\n - Options\n - CPU: { i3, i5, i7, i9 }\n - RAM: { 8GB, 16GB, 32GB, 64GB, 96GB }\n - SSD: { 256GB, 512GB, 1TB }\n - Number of final stocks: 4 * 5 * 3 = 60\n\nFor reference, the total number of `IShoppingSaleUnitStock` records in an\nattribution unit can be obtained using Cartesian Product. In other words, the\nvalue obtained by multiplying all the candidate values that each\n(variable \"select\" type) option can have by the number of cases is the total\nnumber of final stocks in the unit.\n\nOf course, without a single variable \"select\" type option, the final stocks\ncount in the unit is only 1." + "description": "Final component information on units for sale.\n\n`IShoppingSaleUnitStock` is a subsidiary entity of {@link IShoppingSaleUnit}\nthat represents a product catalog for sale, and is a kind of final stock that is\nconstructed by selecting all {@link IShoppingSaleUnitSelectableOption options}\n(variable \"select\" type) and their\n{@link IShoppingSaleUnitOptionCandidate candidate} values in the belonging unit.\nIt is the \"good\" itself that customers actually purchase.\n\n- Product Name) MacBook\n - Options\n - CPU: { i3, i5, i7, i9 }\n - RAM: { 8GB, 16GB, 32GB, 64GB, 96GB }\n - SSD: { 256GB, 512GB, 1TB }\n - Number of final stocks: 4 * 5 * 3 = 60\n\nFor reference, the total number of `IShoppingSaleUnitStock` records in an\nattribution unit can be obtained using Cartesian Product. In other words, the\nvalue obtained by multiplying all the candidate values that each\n(variable \"select\" type) option can have by the number of cases is the total\nnumber of final stocks in the unit.\n\nOf course, without a single variable \"select\" type option, the final stocks\ncount in the unit is only 1." }, "IShoppingSaleUnitStockChoice": { "type": "object", @@ -12706,12 +15765,12 @@ "option_id": { "type": "string", "format": "uuid", - "description": "Target option's {@link IShoppingSaleUnitOption.id }" + "description": "Target option's {@link IShoppingSaleUnitOption.id}" }, "candidate_id": { "type": "string", "format": "uuid", - "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }" + "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id}" } }, "required": [ @@ -12721,52 +15780,6 @@ ], "description": "Selection information of final stock.\n\n`IShoppingSaleUnitStockChoice` is an entity that represents which\n{@link IShoppingSaleUnitSelectableOption option} of each variable \"select\"\ntype was selected for each {@link IShoppingSaleUnitStock stock} and which\n{@link IShoppingSaleUnitOptionCandidate candidate value} was selected within\nit.\n\nOf course, if the bound {@link IShoppingSaleUnit unit} does not have any\noptions, this entity can also be ignored." }, - "IShoppingSaleInquiryComment.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-created_at" - }, - { - "const": "+created_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "description": "Request of the comments with pagination and searching/sorting options." - }, - "IShoppingSaleInquiryComment.IRequest.ISearch": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "nickname": { - "type": "string" - }, - "body": { - "type": "string" - } - } - }, "IPageIShoppingSaleInquiryComment": { "type": "object", "properties": { @@ -12794,7 +15807,25 @@ "type": "object", "properties": { "writer": { - "$ref": "#/components/schemas/IShoppingActorEntity", + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + }, + { + "$ref": "#/components/schemas/IShoppingCustomer" + }, + { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "administrator": "#/components/schemas/IShoppingAdministrator.IInvert", + "customer": "#/components/schemas/IShoppingCustomer", + "seller": "#/components/schemas/IShoppingSeller.IInvert" + } + }, "title": "Writer of the comment", "description": "Writer of the comment.\n\nBoth customer and seller can write comment on the sale inquiry.\n\nBy the way, no restriction on the customer, but seller must be the\nperson who've registered the sale." }, @@ -12840,20 +15871,7 @@ "snapshots", "created_at" ], - "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." - }, - "IShoppingActorEntity": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" - }, - { - "$ref": "#/components/schemas/IShoppingSeller.IInvert" - }, - { - "$ref": "#/components/schemas/IShoppingCustomer" - } - ] + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment},\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." }, "IBbsArticleComment.ISnapshot": { "type": "object", @@ -12871,7 +15889,17 @@ "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." }, "format": { - "$ref": "#/components/schemas/IBbsArticleComment.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -12896,20 +15924,7 @@ "body", "files" ], - "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." - }, - "IBbsArticleComment.Format": { - "oneOf": [ - { - "const": "html" - }, - { - "const": "md" - }, - { - "const": "txt" - } - ] + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment}, designed to keep evidence\nand prevent fraud." }, "IAttachmentFile.ICreate": { "type": "object", @@ -12926,26 +15941,124 @@ "type": "null" }, { - "type": "string", - "minLength": 1, - "maxLength": 8 + "type": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "contentMediaType": "image/*", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "IShoppingSaleInquiryComment.IRequest": { + "type": "object", + "properties": { + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest.ISearch" + } + ] + }, + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [], + "description": "Request of the comments with pagination and searching/sorting options." + }, + "IShoppingSaleInquiryComment.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "nickname": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" } - ], - "title": "Extension", - "description": "Extension.\n\nPossible to omit like `README` case." + ] }, - "url": { - "type": "string", - "format": "uri", - "title": "URL path of the real file", - "description": "URL path of the real file." + "body": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] } }, - "required": [ - "name", - "extension", - "url" - ] + "required": [] }, "IShoppingSaleInquiryComment.ICreate": { "type": "object", @@ -13002,7 +16115,17 @@ "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." }, "format": { - "$ref": "#/components/schemas/IBbsArticleComment.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -13029,104 +16152,6 @@ ], "description": "Snapshot content of the comment." }, - "IShoppingSaleQuestion.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingSaleInquiry.IRequest.ISearch", - "title": "Search conditions", - "description": "Search conditions." - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-created_at" - }, - { - "const": "+created_at" - }, - { - "const": "-nickname" - }, - { - "const": "-answered_at" - }, - { - "const": "-title" - }, - { - "const": "-updated_at" - }, - { - "const": "+nickname" - }, - { - "const": "+answered_at" - }, - { - "const": "+title" - }, - { - "const": "+updated_at" - } - ] - }, - "title": "Sorting conditions", - "description": "Sorting conditions." - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "description": "Request of summarized informations with pagination searching/sorting options." - }, - "IShoppingSaleInquiry.IRequest.ISearch": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "nickname": { - "type": "string" - }, - "answered": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "boolean" - } - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "title_or_body": { - "type": "string" - }, - "from": { - "type": "string", - "format": "date-time" - }, - "to": { - "type": "string", - "format": "date-time" - } - } - }, "IPageIShoppingSaleQuestion.ISummary": { "type": "object", "properties": { @@ -13233,26 +16258,203 @@ "title": "Title of the last snapshot", "description": "Title of the last snapshot." }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of the article", - "description": "Creation time of the article." + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ] + }, + "IShoppingSaleQuestion.IRequest": { + "type": "object", + "properties": { + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiry.IRequest.ISearch" + } + ], + "title": "Search conditions", + "description": "Search conditions." + }, + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-nickname" + }, + { + "const": "-answered_at" + }, + { + "const": "-created_at" + }, + { + "const": "-updated_at" + }, + { + "const": "-title" + }, + { + "const": "+nickname" + }, + { + "const": "+answered_at" + }, + { + "const": "+created_at" + }, + { + "const": "+updated_at" + }, + { + "const": "+title" + } + ] + } + } + ], + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [], + "description": "Request of summarized informations with pagination searching/sorting options." + }, + "IShoppingSaleInquiry.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "nickname": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "answered": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "body": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "title_or_body": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "from": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Modification time of the article", - "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + "to": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] } }, - "required": [ - "seller", - "id", - "title", - "created_at", - "updated_at" - ] + "required": [] }, "IPageIShoppingSaleQuestion.IAbridge": { "type": "object", @@ -13331,7 +16533,17 @@ "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." }, "format": { - "$ref": "#/components/schemas/IBbsArticle.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -13394,7 +16606,17 @@ "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." }, "format": { - "$ref": "#/components/schemas/IBbsArticle.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -13423,19 +16645,6 @@ "files" ] }, - "IBbsArticle.Format": { - "oneOf": [ - { - "const": "html" - }, - { - "const": "md" - }, - { - "const": "txt" - } - ] - }, "IShoppingSaleQuestion": { "type": "object", "properties": { @@ -13447,7 +16656,7 @@ "type": { "const": "question", "title": "Type of the derived inquiry", - "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion}\n- `review`: {@link IShoppingSaleReview}" }, "customer": { "$ref": "#/components/schemas/IShoppingCustomer", @@ -13503,7 +16712,7 @@ "snapshots", "created_at" ], - "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret } attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." + "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry},\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret} attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." }, "IShoppingSaleInquiryAnswer": { "type": "object", @@ -13558,7 +16767,17 @@ "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." }, "format": { - "$ref": "#/components/schemas/IBbsArticle.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -13589,82 +16808,214 @@ "body", "files" ], - "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle}, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "IPageIShoppingSaleReview.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISummary" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleReview.ISummary": { + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who wrote the inquiry", + "description": "Customer who wrote the inquiry." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary" + } + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller." + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the review." }, "IShoppingSaleReview.IRequest": { "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingSaleReview.IRequest.ISearch", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest.ISearch" + } + ], "title": "Search conditions", "description": "Search conditions." }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-created_at" - }, - { - "const": "+created_at" - }, - { - "const": "-nickname" - }, - { - "const": "-answered_at" - }, - { - "const": "-title" - }, - { - "const": "-updated_at" - }, - { - "const": "+nickname" - }, - { - "const": "+answered_at" - }, - { - "const": "+title" - }, - { - "const": "+updated_at" - }, - { - "const": "-score" - }, - { - "const": "+score" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-nickname" + }, + { + "const": "-answered_at" + }, + { + "const": "-created_at" + }, + { + "const": "-updated_at" + }, + { + "const": "-title" + }, + { + "const": "-score" + }, + { + "const": "+nickname" + }, + { + "const": "+answered_at" + }, + { + "const": "+created_at" + }, + { + "const": "+updated_at" + }, + { + "const": "+title" + }, + { + "const": "+score" + } + ] } - ] - }, + } + ], "title": "Sorting conditions", "description": "Sorting conditions." }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } }, + "required": [], "description": "Request of summarized informations with pagination searching/sorting options." }, "IShoppingSaleReview.IRequest.ISearch": { "type": "object", "properties": { "name": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "nickname": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "answered": { "oneOf": [ @@ -13677,122 +17028,83 @@ ] }, "title": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "body": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "title_or_body": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "from": { - "type": "string", - "format": "date-time" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, "to": { - "type": "string", - "format": "date-time" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, "minimum": { - "type": "number", - "minimum": 0, - "maximum": 100 + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0, + "maximum": 100 + } + ] }, "maximum": { - "type": "number", - "minimum": 0, - "maximum": 100 - } - } - }, - "IPageIShoppingSaleReview.ISummary": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/IPage.IPagination", - "title": "Page information", - "description": "Page information." - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSaleReview.ISummary" - }, - "title": "List of records", - "description": "List of records." - } - }, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." - }, - "IShoppingSaleReview.ISummary": { - "type": "object", - "properties": { - "score": { - "type": "number", - "title": "Score of the review", - "description": "Score of the review." - }, - "customer": { - "$ref": "#/components/schemas/IShoppingCustomer", - "title": "Customer who wrote the inquiry", - "description": "Customer who wrote the inquiry." - }, - "answer": { "oneOf": [ { "type": "null" }, { - "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary" + "type": "number", + "minimum": 0, + "maximum": 100 } - ], - "title": "Formal answer for the inquiry by the seller", - "description": "Formal answer for the inquiry by the seller." - }, - "read_by_seller": { - "type": "boolean", - "title": "Whether the seller has viewed the inquiry or not", - "description": "Whether the seller has viewed the inquiry or not." - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "title": { - "type": "string", - "title": "Title of the last snapshot", - "description": "Title of the last snapshot." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of the article", - "description": "Creation time of the article." - }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Modification time of the article", - "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + ] } }, - "required": [ - "score", - "customer", - "answer", - "read_by_seller", - "id", - "title", - "created_at", - "updated_at" - ], - "description": "Summarized information of the review." + "required": [] }, "IPageIShoppingSaleReview.IAbridge": { "type": "object", @@ -13873,7 +17185,17 @@ "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." }, "format": { - "$ref": "#/components/schemas/IBbsArticle.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -13912,7 +17234,7 @@ "type": { "const": "review", "title": "Type of the derived inquiry", - "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion}\n- `review`: {@link IShoppingSaleReview}" }, "customer": { "$ref": "#/components/schemas/IShoppingCustomer", @@ -13967,7 +17289,7 @@ "snapshots", "created_at" ], - "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" + "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry},\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" }, "IShoppingSaleReview.ISnapshot": { "type": "object", @@ -13991,7 +17313,17 @@ "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." }, "format": { - "$ref": "#/components/schemas/IBbsArticle.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -14025,22 +17357,6 @@ ], "description": "Snapshot content of the review article." }, - "IPage.IRequest": { - "type": "object", - "properties": { - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "description": "Page request data" - }, "IPageIShoppingSaleSnapshot.ISummary": { "type": "object", "properties": { @@ -14133,6 +17449,37 @@ ], "description": "Summarized information of the sale snapshot." }, + "IPage.IRequest": { + "type": "object", + "properties": { + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [], + "description": "Page request data" + }, "IShoppingSaleSnapshot": { "type": "object", "properties": { @@ -14173,56 +17520,28 @@ "type": "string" }, "title": "List of search tags", - "description": "List of search tags." - }, - "units": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSaleUnit" - }, - "minItems": 1, - "title": "List of units", - "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." - } - }, - "required": [ - "id", - "snapshot_id", - "latest", - "content", - "channels", - "tags", - "units" - ], - "description": "Snapshot record of sale.\n\n`IShoppingSaleSnapshot` is an entity that embodies a snapshot of a sale,\nand the ERD (Entity Relationship Diagram) describes the role of the\n`shopping_sale_snapshots` table as follows:\n\n> {@link IShoppingSale shopping_sales} is an entity that embodies\n> \"product sales\" (sales) information registered by the\n> {@link IShoppingSeller seller}. And the main information of the sale is\n> recorded in the sub `shopping_sale_snapshots`, not in the main\n> {@link IShoppingSale shopping_sales}. When a seller changes a previously\n> registered item, the existing {@link IShoppingSale shopping_sales} record\n> is not changed, but a new snapshot record is created.\n>\n> This is to preserve the {@link IShoppingCustomer customer}'s\n> {@link IShoppingOrder purchase history} flawlessly after the customer\n> purchases a specific item, even if the seller changes the components or price\n> of the item. It is also intended to support sellers in so-called A/B testing,\n> which involves changing components or prices and measuring the performance\n> in each case.\n\nBy the way, DTO (Data Transfer Object) level used by the front-end developer,\nit does not distinguish {@link IShoppingSale } and `IShoppingSaleSnapshot`\nstrictly, and generally handles {@link IShoppingSale } and snapshot together.\n\nBut even though the DTO level does not strictly distinguish them, the word and\nconcept of \"snapshot\" is still important, so it is recommended to understand\nthe concept of \"snapshot\" properly." - }, - "IShoppingChannelCategory.ICreate": { - "type": "object", - "properties": { - "parent_id": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ], - "title": "Parent category's ID", - "description": "Parent category's ID." - }, - "name": { - "type": "string", - "title": "Representative name of the category", - "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + "description": "List of search tags." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit" + }, + "minItems": 1, + "title": "List of units", + "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." } }, "required": [ - "parent_id", - "name" + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units" ], - "description": "Creation information of the category." + "description": "Snapshot record of sale.\n\n`IShoppingSaleSnapshot` is an entity that embodies a snapshot of a sale,\nand the ERD (Entity Relationship Diagram) describes the role of the\n`shopping_sale_snapshots` table as follows:\n\n> {@link IShoppingSale shopping_sales} is an entity that embodies\n> \"product sales\" (sales) information registered by the\n> {@link IShoppingSeller seller}. And the main information of the sale is\n> recorded in the sub `shopping_sale_snapshots`, not in the main\n> {@link IShoppingSale shopping_sales}. When a seller changes a previously\n> registered item, the existing {@link IShoppingSale shopping_sales} record\n> is not changed, but a new snapshot record is created.\n>\n> This is to preserve the {@link IShoppingCustomer customer}'s\n> {@link IShoppingOrder purchase history} flawlessly after the customer\n> purchases a specific item, even if the seller changes the components or price\n> of the item. It is also intended to support sellers in so-called A/B testing,\n> which involves changing components or prices and measuring the performance\n> in each case.\n\nBy the way, DTO (Data Transfer Object) level used by the front-end developer,\nit does not distinguish {@link IShoppingSale} and `IShoppingSaleSnapshot`\nstrictly, and generally handles {@link IShoppingSale} and snapshot together.\n\nBut even though the DTO level does not strictly distinguish them, the word and\nconcept of \"snapshot\" is still important, so it is recommended to understand\nthe concept of \"snapshot\" properly." }, "IShoppingChannelCategory": { "type": "object", @@ -14253,6 +17572,11 @@ "title": "Primary Key", "description": "Primary Key." }, + "code": { + "type": "string", + "title": "Identifier code of the category", + "description": "Identifier code of the category.\n\nThe code must be unique in the channel." + }, "parent_id": { "oneOf": [ { @@ -14282,11 +17606,12 @@ "parent", "children", "id", + "code", "parent_id", "name", "created_at" ], - "description": "Category of channel.\n\n`IShoppingChannelCategory` is a concept that refers to classification\ncategories within a specific {@link IShoppingChannel channel}, and is exactly\nthe same as the concept commonly referred to as \"category\" in shopping malls.\n\nAnd `IShoppingChannelCategory` is different with {@link IShoppingSection }.\n{@link IShoppingSection } refers to a \"corner\" that is independent spatial\ninformation in the offline market, which cannot simultaneously classified in\na {@link IShoppingSale sale}. Besides, `IShoppingChannelCategory` can be\nclassified into multiple categories in a sale simultaneously.\n\nProduct\t| Section (corner) | Categories\n---------|------------------|-----------------------------------\nBeef\t | Butcher corner | Frozen food, Meat, Favorite food\nGrape | Fruit corner | Fresh food, Favorite food\n\nIn addition, as `IShoppingChannelCategory` has 1:N self recursive relationship,\nit is possible to express below hierarchical structures. Thus, each channel\ncan set their own category classification as they want.\n\n- Food > Meat > Frozen\n- Electronics > Notebook > 15 inches\n- Miscellaneous > Wallet\n\nFurthermore, `IShoppingChannelCategory` is designed to merge between themselves,\nso there is no burden to edit the category at any time." + "description": "Category of channel.\n\n`IShoppingChannelCategory` is a concept that refers to classification\ncategories within a specific {@link IShoppingChannel channel}, and is exactly\nthe same as the concept commonly referred to as \"category\" in shopping malls.\n\nAnd `IShoppingChannelCategory` is different with {@link IShoppingSection}.\n{@link IShoppingSection} refers to a \"corner\" that is independent spatial\ninformation in the offline market, which cannot simultaneously classified in\na {@link IShoppingSale sale}. Besides, `IShoppingChannelCategory` can be\nclassified into multiple categories in a sale simultaneously.\n\nProduct\t| Section (corner) | Categories\n---------|------------------|-----------------------------------\nBeef\t | Butcher corner | Frozen food, Meat, Favorite food\nGrape | Fruit corner | Fresh food, Favorite food\n\nIn addition, as `IShoppingChannelCategory` has 1:N self recursive relationship,\nit is possible to express below hierarchical structures. Thus, each channel\ncan set their own category classification as they want.\n\n- Food > Meat > Frozen\n- Electronics > Notebook > 15 inches\n- Miscellaneous > Wallet\n\nFurthermore, `IShoppingChannelCategory` is designed to merge between themselves,\nso there is no burden to edit the category at any time." }, "IShoppingChannelCategory.IHierarchical": { "type": "object", @@ -14305,6 +17630,11 @@ "title": "Primary Key", "description": "Primary Key." }, + "code": { + "type": "string", + "title": "Identifier code of the category", + "description": "Identifier code of the category.\n\nThe code must be unique in the channel." + }, "parent_id": { "oneOf": [ { @@ -14333,12 +17663,47 @@ "required": [ "children", "id", + "code", "parent_id", "name", "created_at" ], "description": "Hierarchical category information with children categories." }, + "IShoppingChannelCategory.ICreate": { + "type": "object", + "properties": { + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "Parent category's ID", + "description": "Parent category's ID." + }, + "code": { + "type": "string", + "title": "Identifier code of the category", + "description": "Identifier code of the category.\n\nThe code must be unique in the channel." + }, + "name": { + "type": "string", + "title": "Representative name of the category", + "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + } + }, + "required": [ + "parent_id", + "code", + "name" + ], + "description": "Creation information of the category." + }, "IRecordMerge": { "type": "object", "properties": { @@ -14346,7 +17711,7 @@ "type": "string", "format": "uuid", "title": "Target record to keep after merging", - "description": "Target record to keep after merging.\n\nAfter merge process, {@link absorbed } records would be merged into\nthis {@link keep } record." + "description": "Target record to keep after merging.\n\nAfter merge process, {@link absorbed} records would be merged into\nthis {@link keep} record." }, "absorbed": { "type": "array", @@ -14354,15 +17719,15 @@ "type": "string", "format": "uuid" }, - "title": "To be absorbed to {@link keep } after merging", - "description": "To be absorbed to {@link keep } after merging." + "title": "To be absorbed to {@link keep} after merging", + "description": "To be absorbed to {@link keep} after merging." } }, "required": [ "keep", "absorbed" ], - "description": "Record Merge DTO.\n\n`IRecordMerge` is a structure for merging records.\n\nThe `merge` means that merging multiple {@link IRecordMerge.absorbed }\nrecords into {@link IRecordMerge.keep } instead of deleting\n{@link IRecordMerge.absorbed } records.\n\nIf there're some dependent tables of the target `table` having\nunique constraint on foriegn key column, such dependent tables\nalso perform the merge process, too.\n\nOf course, if there're another dependent tables under those\ndependents, they also perform the merge process recursively as well.\nSuch recursive merge process still works for self-recursive\n(tree-structured) tables." + "description": "Record Merge DTO.\n\n`IRecordMerge` is a structure for merging records.\n\nThe `merge` means that merging multiple {@link IRecordMerge.absorbed}\nrecords into {@link IRecordMerge.keep} instead of deleting\n{@link IRecordMerge.absorbed} records.\n\nIf there're some dependent tables of the target `table` having\nunique constraint on foriegn key column, such dependent tables\nalso perform the merge process, too.\n\nOf course, if there're another dependent tables under those\ndependents, they also perform the merge process recursively as well.\nSuch recursive merge process still works for self-recursive\n(tree-structured) tables." }, "IShoppingChannel.ICreate": { "type": "object", @@ -14398,83 +17763,127 @@ ], "description": "Updating information of the channel." }, + "IPageIShoppingChannel": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannel" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, "IShoppingChannel.IRequest": { "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingChannel.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingChannel.IRequest.ISearch" + } + ] }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-channel.code" - }, - { - "const": "-channel.name" - }, - { - "const": "-channel.created_at" - }, - { - "const": "+channel.code" - }, - { - "const": "+channel.name" - }, - { - "const": "+channel.created_at" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-channel.code" + }, + { + "const": "-channel.name" + }, + { + "const": "-channel.created_at" + }, + { + "const": "+channel.code" + }, + { + "const": "+channel.name" + }, + { + "const": "+channel.created_at" + } + ] } - ] - } + } + ] }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } }, + "required": [], "description": "Request of the channels with pagination and searching/sorting options." }, "IShoppingChannel.IRequest.ISearch": { "type": "object", "properties": { "code": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "name": { - "type": "string" - } - } - }, - "IPageIShoppingChannel": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/IPage.IPagination", - "title": "Page information", - "description": "Page information." - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingChannel" - }, - "title": "List of records", - "description": "List of records." + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] } }, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." + "required": [] }, "IPageIShoppingChannel.IHierarchical": { "type": "object", @@ -14527,109 +17936,54 @@ "title": "Identifier code", "description": "Identifier code." }, - "name": { - "type": "string", - "title": "Name of the channel", - "description": "Name of the channel." - } - }, - "required": [ - "categories", - "id", - "created_at", - "code", - "name" - ], - "description": "Hierarchical channel information with children categories." - }, - "IShoppingSection.ICreate": { - "type": "object", - "properties": { - "code": { - "type": "string", - "title": "Identifier code", - "description": "Identifier code." - }, - "name": { - "type": "string", - "title": "Representative name of the section", - "description": "Representative name of the section." - } - }, - "required": [ - "code", - "name" - ], - "description": "Creation information of the section." - }, - "IShoppingSection.IUpdate": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "Representative name of the section", - "description": "Representative name of the section." - } - }, - "required": [ - "name" - ], - "description": "Updating information of the section." - }, - "IShoppingSection.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingSection.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-section.code" - }, - { - "const": "-section.name" - }, - { - "const": "-section.created_at" - }, - { - "const": "+section.code" - }, - { - "const": "+section.name" - }, - { - "const": "+section.created_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." } }, - "description": "Request of the sections with pagination and searching/sorting options." + "required": [ + "categories", + "id", + "created_at", + "code", + "name" + ], + "description": "Hierarchical channel information with children categories." }, - "IShoppingSection.IRequest.ISearch": { + "IShoppingSection.ICreate": { "type": "object", "properties": { "code": { - "type": "string" + "type": "string", + "title": "Identifier code", + "description": "Identifier code." }, "name": { - "type": "string" + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." } - } + }, + "required": [ + "code", + "name" + ], + "description": "Creation information of the section." + }, + "IShoppingSection.IUpdate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + } + }, + "required": [ + "name" + ], + "description": "Updating information of the section." }, "IPageIShoppingSection": { "type": "object", @@ -14654,16 +18008,104 @@ ], "description": "A page.\n\nCollection of records with pagination indformation." }, - "IShoppingCustomer.IRefresh": { + "IShoppingSection.IRequest": { "type": "object", "properties": { - "value": { - "type": "string" + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSection.IRequest.ISearch" + } + ] + }, + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-section.code" + }, + { + "const": "-section.name" + }, + { + "const": "-section.created_at" + }, + { + "const": "+section.code" + }, + { + "const": "+section.name" + }, + { + "const": "+section.created_at" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." } }, - "required": [ - "value" - ] + "required": [], + "description": "Request of the sections with pagination and searching/sorting options." + }, + "IShoppingSection.IRequest.ISearch": { + "type": "object", + "properties": { + "code": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + } + }, + "required": [] }, "IShoppingCustomer.IAuthorized": { "type": "object", @@ -14738,7 +18180,7 @@ "type": "string", "format": "uri", "title": "Connection address", - "description": "Connection address.\n\nSame with {@link window.location.href } of client." + "description": "Connection address.\n\nSame with {@link window.location.href} of client." }, "referrer": { "oneOf": [ @@ -14748,10 +18190,14 @@ { "type": "string", "format": "uri" + }, + { + "type": "string", + "maxLength": 0 } ], "title": "Referrer address", - "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + "description": "Referrer address.\n\nSame with {@link window.document.referrer} of client." }, "ip": { "oneOf": [ @@ -14814,11 +18260,24 @@ "refreshable_until" ] }, + "IShoppingCustomer.IRefresh": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + }, "IShoppingCustomer.ICreate": { "type": "object", "properties": { "channel_code": { - "type": "string" + "type": "string", + "title": "Belonged channel's {@link IShoppingChannel.code}", + "description": "Belonged channel's {@link IShoppingChannel.code}." }, "external_user": { "oneOf": [ @@ -14828,11 +18287,15 @@ { "$ref": "#/components/schemas/IShoppingExternalUser.ICreate" } - ] + ], + "title": "External user information", + "description": "External user information.\n\nWhen the customer has come frome an external service." }, "href": { "type": "string", - "format": "uri" + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href} of client." }, "referrer": { "oneOf": [ @@ -14842,11 +18305,20 @@ { "type": "string", "format": "uri" + }, + { + "type": "string", + "maxLength": 0 } - ] + ], + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer} of client." }, "ip": { "oneOf": [ + { + "type": "null" + }, { "type": "string", "format": "ipv4" @@ -14855,7 +18327,9 @@ "type": "string", "format": "ipv6" } - ] + ], + "title": "Connection IP Address", + "description": "Connection IP Address." } }, "required": [ @@ -14883,7 +18357,7 @@ "application": { "type": "string", "title": "Identifier code of the external service", - "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code} in common." }, "uid": { "type": "string", @@ -14920,11 +18394,13 @@ "mobile": { "type": "string", "pattern": "^[0-9]*$", + "x-wrtn-payment-order-mobile": true, "title": "Mobile number", "description": "Mobile number." }, "name": { "type": "string", + "x-wrtn-payment-order-citizen": true, "title": "Real name, or equivalent nickname", "description": "Real name, or equivalent nickname." } @@ -14995,40 +18471,6 @@ ], "description": "Request info of password change." }, - "IShoppingCouponTicket.IRequest": { - "type": "object", - "properties": { - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-ticket.created_at" - }, - { - "const": "-ticket.expired_at" - }, - { - "const": "+ticket.created_at" - }, - { - "const": "+ticket.expired_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - } - }, "IPageIShoppingCouponTicket": { "type": "object", "properties": { @@ -15052,129 +18494,72 @@ ], "description": "A page.\n\nCollection of records with pagination indformation." }, - "IShoppingCouponTicket.ICreate": { - "type": "object", - "properties": { - "coupon_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "coupon_id" - ] - }, - "IShoppingDepositCharge.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingDepositCharge.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-created_at" - }, - { - "const": "+created_at" - }, - { - "const": "-value" - }, - { - "const": "-publish.created_at" - }, - { - "const": "-publish.paid_at" - }, - { - "const": "+value" - }, - { - "const": "+publish.created_at" - }, - { - "const": "+publish.paid_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - } - }, - "IShoppingDepositCharge.IRequest.ISearch": { - "type": "object", - "properties": { - "from": { - "type": "string", - "format": "date-time" - }, - "to": { - "type": "string", - "format": "date-time" - }, - "minimum": { - "type": "number" - }, - "maximum": { - "type": "number" - }, - "state": { + "IShoppingCouponTicket.IRequest": { + "type": "object", + "properties": { + "sort": { "oneOf": [ { - "const": "pending" + "type": "null" }, { - "const": "published" - }, + "type": "array", + "items": { + "oneOf": [ + { + "const": "-ticket.created_at" + }, + { + "const": "-ticket.expired_at" + }, + { + "const": "+ticket.created_at" + }, + { + "const": "+ticket.expired_at" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ { - "const": "payed" + "type": "null" }, { - "const": "cancelled" + "type": "integer" } - ] + ], + "title": "Page number", + "description": "Page number." }, - "publish": { - "type": "object", - "properties": { - "from": { - "type": "string", - "format": "date-time" - }, - "to": { - "type": "string", - "format": "date-time" + "limit": { + "oneOf": [ + { + "type": "null" }, - "payment": { - "type": "object", - "properties": { - "from": { - "type": "string", - "format": "date-time" - }, - "to": { - "type": "string", - "format": "date-time" - } - } + { + "type": "integer" } - } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [] + }, + "IShoppingCouponTicket.ICreate": { + "type": "object", + "properties": { + "coupon_id": { + "type": "string", + "format": "uuid" } }, "required": [ - "state" + "coupon_id" ] }, "IPageIShoppingDepositCharge": { @@ -15277,116 +18662,466 @@ "cancelled_at" ] }, + "IShoppingDepositCharge.IRequest": { + "type": "object", + "properties": { + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDepositCharge.IRequest.ISearch" + } + ] + }, + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + }, + { + "const": "-value" + }, + { + "const": "-publish.created_at" + }, + { + "const": "-publish.paid_at" + }, + { + "const": "+value" + }, + { + "const": "+publish.created_at" + }, + { + "const": "+publish.paid_at" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [] + }, + "IShoppingDepositCharge.IRequest.ISearch": { + "type": "object", + "properties": { + "from": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "minimum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "maximum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "state": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "published" + }, + { + "const": "pending" + }, + { + "const": "payed" + }, + { + "const": "cancelled" + } + ] + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "object", + "properties": { + "from": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "payment": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "object", + "properties": { + "from": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + } + }, + "required": [] + } + ] + } + }, + "required": [] + } + ] + } + }, + "required": [ + "state" + ] + }, "IShoppingDepositCharge.ICreate": { "type": "object", "properties": { "value": { "type": "number" - } - }, - "required": [ - "value" - ] - }, - "IShoppingDepositChargePublish.ICreate": { - "type": "object", - "properties": { - "vendor": { - "type": "string" + } + }, + "required": [ + "value" + ] + }, + "IShoppingDepositChargePublish.ICreate": { + "type": "object", + "properties": { + "vendor": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "vendor", + "uid" + ] + }, + "IPageIShoppingDepositHistory": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDepositHistory" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingDepositHistory": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen" + }, + "deposit": { + "$ref": "#/components/schemas/IShoppingDeposit" + }, + "source_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" }, - "uid": { - "type": "string" + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" } }, "required": [ - "vendor", - "uid" + "id", + "citizen", + "deposit", + "source_id", + "value", + "balance", + "created_at" ] }, "IShoppingDepositHistory.IRequest": { "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingDepositHistory.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDepositHistory.IRequest.ISearch" + } + ] }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-deposit.source" - }, - { - "const": "-deposit.code" - }, - { - "const": "-deposit.direction" - }, - { - "const": "+deposit.source" - }, - { - "const": "+deposit.code" - }, - { - "const": "+deposit.direction" - }, - { - "const": "-history.value" - }, - { - "const": "-history.created_at" - }, - { - "const": "+history.value" - }, - { - "const": "+history.created_at" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-deposit.source" + }, + { + "const": "-deposit.code" + }, + { + "const": "-deposit.direction" + }, + { + "const": "+deposit.source" + }, + { + "const": "+deposit.code" + }, + { + "const": "+deposit.direction" + }, + { + "const": "-history.value" + }, + { + "const": "-history.created_at" + }, + { + "const": "+history.value" + }, + { + "const": "+history.created_at" + } + ] } - ] - } + } + ] }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } - } + }, + "required": [] }, "IShoppingDepositHistory.IRequest.ISearch": { "type": "object", "properties": { "deposit": { - "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + } + ] }, "citizen_id": { - "type": "string", - "format": "uuid" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] }, "from": { - "type": "string", - "format": "date-time" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, "to": { - "type": "string", - "format": "date-time" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, "minimum": { - "type": "number", - "minimum": 0 + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ] }, "maximum": { - "type": "number", - "minimum": 0 + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ] } - } + }, + "required": [] }, - "IPageIShoppingDepositHistory": { + "IPageIShoppingMileageHistory": { "type": "object", "properties": { "pagination": { @@ -15397,7 +19132,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/IShoppingDepositHistory" + "$ref": "#/components/schemas/IShoppingMileageHistory" }, "title": "List of records", "description": "List of records." @@ -15409,7 +19144,7 @@ ], "description": "A page.\n\nCollection of records with pagination indformation." }, - "IShoppingDepositHistory": { + "IShoppingMileageHistory": { "type": "object", "properties": { "id": { @@ -15419,8 +19154,8 @@ "citizen": { "$ref": "#/components/schemas/IShoppingCitizen" }, - "deposit": { - "$ref": "#/components/schemas/IShoppingDeposit" + "mileage": { + "$ref": "#/components/schemas/IShoppingMileage" }, "source_id": { "type": "string", @@ -15440,7 +19175,7 @@ "required": [ "id", "citizen", - "deposit", + "mileage", "source_id", "value", "balance", @@ -15451,86 +19186,158 @@ "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingMileageHistory.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMileageHistory.IRequest.ISearch" + } + ] }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-mileage.source" - }, - { - "const": "-mileage.code" - }, - { - "const": "-mileage.direction" - }, - { - "const": "+mileage.source" - }, - { - "const": "+mileage.code" - }, - { - "const": "+mileage.direction" - }, - { - "const": "-history.value" - }, - { - "const": "-history.created_at" - }, - { - "const": "+history.value" - }, - { - "const": "+history.created_at" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-mileage.source" + }, + { + "const": "-mileage.code" + }, + { + "const": "-mileage.direction" + }, + { + "const": "+mileage.source" + }, + { + "const": "+mileage.code" + }, + { + "const": "+mileage.direction" + }, + { + "const": "-history.value" + }, + { + "const": "-history.created_at" + }, + { + "const": "+history.value" + }, + { + "const": "+history.created_at" + } + ] } - ] - } + } + ] }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } - } + }, + "required": [] }, "IShoppingMileageHistory.IRequest.ISearch": { "type": "object", "properties": { "mileage": { - "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + } + ] }, "citizen_id": { - "type": "string", - "format": "uuid" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] }, "from": { - "type": "string", - "format": "date-time" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, "to": { - "type": "string", - "format": "date-time" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, "minimum": { - "type": "number", - "minimum": 0 + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ] }, "maximum": { - "type": "number", - "minimum": 0 + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ] } - } + }, + "required": [] }, - "IPageIShoppingMileageHistory": { + "IPageIShoppingCartCommodity": { "type": "object", "properties": { "pagination": { @@ -15541,7 +19348,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/IShoppingMileageHistory" + "$ref": "#/components/schemas/IShoppingCartCommodity" }, "title": "List of records", "description": "List of records." @@ -15553,44 +19360,6 @@ ], "description": "A page.\n\nCollection of records with pagination indformation." }, - "IShoppingMileageHistory": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "citizen": { - "$ref": "#/components/schemas/IShoppingCitizen" - }, - "mileage": { - "$ref": "#/components/schemas/IShoppingMileage" - }, - "source_id": { - "type": "string", - "format": "uuid" - }, - "value": { - "type": "number" - }, - "balance": { - "type": "number" - }, - "created_at": { - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "citizen", - "mileage", - "source_id", - "value", - "balance", - "created_at" - ] - }, "IShoppingCartCommodity.IRequest": { "type": "object", "properties": { @@ -15725,16 +19494,31 @@ } }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } - } + }, + "required": [] }, "IShoppingCartCommodity.IRequest.ISearch": { "type": "object", @@ -15754,30 +19538,8 @@ "sale": { "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" } - } - }, - "IPageIShoppingCartCommodity": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/IPage.IPagination", - "title": "Page information", - "description": "Page information." - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingCartCommodity" - }, - "title": "List of records", - "description": "List of records." - } }, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." + "required": [] }, "IShoppingCartCommodity.ICreate": { "type": "object", @@ -15785,8 +19547,8 @@ "sale_id": { "type": "string", "format": "uuid", - "title": "Target sale's {@link IShoppingSale.id }", - "description": "Target sale's {@link IShoppingSale.id }." + "title": "Target sale's {@link IShoppingSale.id}", + "description": "Target sale's {@link IShoppingSale.id}." }, "stocks": { "type": "array", @@ -15801,10 +19563,17 @@ "type": "integer", "minimum": 1, "title": "Volume of the commodity to purchase", - "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity} values." }, "accumulate": { - "type": "boolean", + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ], "title": "Whether to accumulate the volume or not", "description": "Whether to accumulate the volume or not.\n\nIf this attribute is not `false` and there's same commodity that\ncomposed with same stocks and options, then the volume will be\naccumulated to the existed one.\n\nOtherwise, duplicated commodity would be newly created." } @@ -15822,14 +19591,14 @@ "unit_id": { "type": "string", "format": "uuid", - "title": "Target unit's {@link IShoppingSaleUnit.id }", - "description": "Target unit's {@link IShoppingSaleUnit.id }." + "title": "Target unit's {@link IShoppingSaleUnit.id}", + "description": "Target unit's {@link IShoppingSaleUnit.id}." }, "stock_id": { "type": "string", "format": "uuid", - "title": "Target stock's {@link IShoppingSaleUnitStock.id }", - "description": "Target stock's {@link IShoppingSaleUnitStock.id }.\n\nIt must be matched with the {@link choices } property." + "title": "Target stock's {@link IShoppingSaleUnitStock.id}", + "description": "Target stock's {@link IShoppingSaleUnitStock.id}.\n\nIt must be matched with the {@link choices} property." }, "choices": { "type": "array", @@ -15843,7 +19612,7 @@ "type": "integer", "minimum": 1, "title": "Quantity of the stock to purchase", - "description": "Quantity of the stock to purchase.\n\nThis value is multiplied by the {@link IShoppingCartCommodity.volume }." + "description": "Quantity of the stock to purchase.\n\nThis value is multiplied by the {@link IShoppingCartCommodity.volume}." } }, "required": [ @@ -15852,7 +19621,7 @@ "choices", "quantity" ], - "description": "Creation information of the commodity stock of shopping cart.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleSnapshotUnit.IInvert } and\n{@link IShoppingSaleSnapshotUnitStock.IInvert }." + "description": "Creation information of the commodity stock of shopping cart.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleSnapshotUnit.IInvert} and\n{@link IShoppingSaleSnapshotUnitStock.IInvert}." }, "IShoppingCartCommodityStockChoice.ICreate": { "type": "object", @@ -15860,8 +19629,8 @@ "option_id": { "type": "string", "format": "uuid", - "title": "Target option's {@link IShoppingSaleUnitOption.id }", - "description": "Target option's {@link IShoppingSaleUnitOption.id }." + "title": "Target option's {@link IShoppingSaleUnitOption.id}", + "description": "Target option's {@link IShoppingSaleUnitOption.id}." }, "candidate_id": { "oneOf": [ @@ -15873,8 +19642,8 @@ "format": "uuid" } ], - "title": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }", - "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }.\n\nWhen target option's type is `select`, then this attribute is not\n`null` but has a value." + "title": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id}", + "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id}.\n\nWhen target option's type is `select`, then this attribute is not\n`null` but has a value." }, "value": { "oneOf": [ @@ -15900,7 +19669,7 @@ "candidate_id", "value" ], - "description": "Creation information of the choice for each option.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleUnitStockChoice.IInvert }." + "description": "Creation information of the choice for each option.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleUnitStockChoice.IInvert}." }, "IShoppingCartCommodity.IUpdate": { "type": "object", @@ -15909,7 +19678,7 @@ "type": "integer", "minimum": 1, "title": "Volume of the commodity to purchase", - "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity} values." } }, "required": [ @@ -15917,35 +19686,6 @@ ], "description": "Update information of a shopping cart commodity." }, - "IShoppingCartDiscountable.IRequest": { - "type": "object", - "properties": { - "commodity_ids": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - ] - }, - "pseudos": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" - } - } - }, - "required": [ - "commodity_ids", - "pseudos" - ] - }, "IShoppingCartDiscountable": { "type": "object", "properties": { @@ -16025,6 +19765,35 @@ "amount" ] }, + "IShoppingCartDiscountable.IRequest": { + "type": "object", + "properties": { + "commodity_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + ] + }, + "pseudos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + }, + "required": [ + "commodity_ids", + "pseudos" + ] + }, "IShoppingOrder.ICreate": { "type": "object", "properties": { @@ -16035,6 +19804,18 @@ }, "title": "List of goods in the order", "description": "List of goods in the order." + }, + "name": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Representative name of the order", + "description": "Representative name of the order.\n\nIf omit, the name will be generated automatically." } }, "required": [ @@ -16048,13 +19829,13 @@ "commodity_id": { "type": "string", "format": "uuid", - "title": "Target commodity's {@link IShoppingCartCommodity.id }", - "description": "Target commodity's {@link IShoppingCartCommodity.id }." + "title": "Target commodity's {@link IShoppingCartCommodity.id}", + "description": "Target commodity's {@link IShoppingCartCommodity.id}." }, "volume": { "type": "integer", "title": "Volume of the good", - "description": "Volume of the good.\n\nThe value multiplied to {@link IShoppingCartCommodityStock.quantity }.\nIt's purpose is exactly same with {@link IShoppingCartCommodity.volume },\nbut rewritten because the {@link IShoppingCartCommodity } records are reusable\nuntil payment." + "description": "Volume of the good.\n\nThe value multiplied to {@link IShoppingCartCommodityStock.quantity}.\nIt's purpose is exactly same with {@link IShoppingCartCommodity.volume},\nbut rewritten because the {@link IShoppingCartCommodity} records are reusable\nuntil payment." } }, "required": [ @@ -16063,28 +19844,6 @@ ], "description": "Creation information of the good." }, - "IShoppingOrderDiscountable.IRequest": { - "type": "object", - "properties": { - "good_ids": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - ] - } - }, - "required": [ - "good_ids" - ] - }, "IShoppingOrderDiscountable": { "type": "object", "properties": { @@ -16160,6 +19919,28 @@ "amount" ] }, + "IShoppingOrderDiscountable.IRequest": { + "type": "object", + "properties": { + "good_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + ] + } + }, + "required": [ + "good_ids" + ] + }, "IShoppingOrderPrice.ICreate": { "type": "object", "properties": { @@ -16183,28 +19964,32 @@ "coupon_ids" ] }, - "IShoppingOrderPublish.ICashCreate": { + "IShoppingOrderPublish.ICreate": { "type": "object", "properties": { - "type": { - "const": "cash" - }, "address": { - "$ref": "#/components/schemas/IShoppingAddress.ICreate" + "$ref": "#/components/schemas/IShoppingAddress.ICreate", + "title": "Address to receive", + "description": "Address to receive." }, "vendor": { - "type": "string" - }, - "uid": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish.IPaymentIdentifier" + } + ], + "title": "Payment identifier from the payment vendor service", + "description": "Payment identifier from the payment vendor service.\n\nIf the order has been discounted for entire order price, then no need\nto send payment vendor info. Instead, you just configure the `null`\nvalue to this property." } }, "required": [ - "type", "address", - "vendor", - "uid" - ] + "vendor" + ], + "description": "Creation info of the publish." }, "IShoppingAddress.ICreate": { "type": "object", @@ -16275,20 +20060,27 @@ "special_note" ] }, - "IShoppingOrderPublish.IZeroCreate": { + "IShoppingOrderPublish.IPaymentIdentifier": { "type": "object", "properties": { - "type": { - "const": "zero" + "code": { + "type": "string", + "x-wrtn-payment-vendor": true, + "title": "The vendor code who will receive the payment", + "description": "The vendor code who will receive the payment." }, - "address": { - "$ref": "#/components/schemas/IShoppingAddress.ICreate" + "uid": { + "type": "string", + "x-wrtn-payment-uid": true, + "title": "The payment uid", + "description": "The payment uid." } }, "required": [ - "type", - "address" - ] + "code", + "uid" + ], + "description": "Payment identifier from the payment vendor service." }, "IShoppingSaleQuestion.ICreate": { "type": "object", @@ -16392,8 +20184,8 @@ "good_id": { "type": "string", "format": "uuid", - "title": "Target good's {@link IShoppingOrderGood.id }", - "description": "Target good's {@link IShoppingOrderGood.id }." + "title": "Target good's {@link IShoppingOrderGood.id}", + "description": "Target good's {@link IShoppingOrderGood.id}." }, "score": { "type": "number", @@ -16501,35 +20293,8 @@ }, "IShoppingSeller.IJoin": { "type": "object", - "properties": {} - }, - "IShoppingDelivery.IRequest": { - "type": "object", - "properties": { - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-delivery.created_at" - }, - { - "const": "+delivery.created_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - } + "properties": {}, + "required": [] }, "IPageIShoppingDelivery.IInvert": { "type": "object", @@ -16603,7 +20368,29 @@ "description": "List of shippers of the delivery." }, "state": { - "$ref": "#/components/schemas/IShoppingDelivery.State", + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], "title": "State of the delivery", "description": "State of the delivery." }, @@ -16739,6 +20526,56 @@ ], "description": "Invert information from the delivery." }, + "IShoppingDelivery.IRequest": { + "type": "object", + "properties": { + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-delivery.created_at" + }, + { + "const": "+delivery.created_at" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [] + }, "IShoppingDelivery.ICreate": { "type": "object", "properties": { @@ -16781,20 +20618,20 @@ "publish_id": { "type": "string", "format": "uuid", - "title": "Target order's {@link IShoppingOrderPublish.id }", - "description": "Target order's {@link IShoppingOrderPublish.id }." + "title": "Target order's {@link IShoppingOrderPublish.id}", + "description": "Target order's {@link IShoppingOrderPublish.id}." }, "good_id": { "type": "string", "format": "uuid", - "title": "Target good's {@link IShoppingOrderGood.id }", - "description": "Target good's {@link IShoppingOrderGood.id }." + "title": "Target good's {@link IShoppingOrderGood.id}", + "description": "Target good's {@link IShoppingOrderGood.id}." }, "stock_id": { "type": "string", "format": "uuid", - "title": "Target stock's {@link IShoppingSaleUnitStock.id }", - "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + "title": "Target stock's {@link IShoppingSaleUnitStock.id}", + "description": "Target stock's {@link IShoppingSaleUnitStock.id}." }, "quantity": { "type": "number", @@ -16960,8 +20797,8 @@ "properties": { "section_code": { "type": "string", - "title": "Belonged section's {@link IShoppingSection.code }", - "description": "Belonged section's {@link IShoppingSection.code }." + "title": "Belonged section's {@link IShoppingSection.code}", + "description": "Belonged section's {@link IShoppingSection.code}." }, "status": { "oneOf": [ @@ -17086,22 +20923,21 @@ "properties": { "code": { "type": "string", - "title": "Target channel's {@link IShoppingChannel.code }", - "description": "Target channel's {@link IShoppingChannel.code }." + "title": "Target channel's {@link IShoppingChannel.code}", + "description": "Target channel's {@link IShoppingChannel.code}." }, - "category_ids": { + "category_codes": { "type": "array", "items": { - "type": "string", - "format": "uuid" + "type": "string" }, - "title": "List of target categories' {@link IShoppingChannelCategory.id }s", - "description": "List of target categories' {@link IShoppingChannelCategory.id }s.\n\nIf empty, it means all categories of the channel is listing the sale." + "title": "List of target categories' {@link IShoppingChannelCategory.code}s", + "description": "List of target categories' {@link IShoppingChannelCategory.code}s.\n\nIf empty, it means all categories of the channel is listing the sale." } }, "required": [ "code", - "category_ids" + "category_codes" ], "description": "Creation information of the target channel (and categories) of sale to sell." }, @@ -17113,10 +20949,10 @@ "items": { "oneOf": [ { - "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption.ICreate" + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.ICreate" }, { - "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.ICreate" + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption.ICreate" } ] }, @@ -17157,36 +20993,6 @@ ], "description": "Creation information of sale unit." }, - "IShoppingSaleUnitDescriptiveOption.ICreate": { - "type": "object", - "properties": { - "type": { - "oneOf": [ - { - "const": "string" - }, - { - "const": "number" - }, - { - "const": "boolean" - } - ], - "title": "Type of descriptive option", - "description": "Type of descriptive option.\n\nWhich typed value should be written when purchasing." - }, - "name": { - "type": "string", - "title": "Readable name of the option", - "description": "Readable name of the option." - } - }, - "required": [ - "type", - "name" - ], - "description": "Creation information of the descriptive option." - }, "IShoppingSaleUnitSelectableOption.ICreate": { "type": "object", "properties": { @@ -17237,6 +21043,36 @@ ], "description": "Creation information of the candidate value." }, + "IShoppingSaleUnitDescriptiveOption.ICreate": { + "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "const": "string" + }, + { + "const": "number" + }, + { + "const": "boolean" + } + ], + "title": "Type of descriptive option", + "description": "Type of descriptive option.\n\nWhich typed value should be written when purchasing." + }, + "name": { + "type": "string", + "title": "Readable name of the option", + "description": "Readable name of the option." + } + }, + "required": [ + "type", + "name" + ], + "description": "Creation information of the descriptive option." + }, "IShoppingSaleUnitStock.ICreate": { "type": "object", "properties": { @@ -17278,11 +21114,11 @@ "properties": { "option_index": { "type": "integer", - "description": "Target option's index number in\n{@link IShoppingSaleUnit.ICreate.options }." + "description": "Target option's index number in\n{@link IShoppingSaleUnit.ICreate.options}." }, "candidate_index": { "type": "integer", - "description": "Target candidate's index number in\n{@link IShoppingSaleUnitSelectableOption.ICreate.candidates }." + "description": "Target candidate's index number in\n{@link IShoppingSaleUnitSelectableOption.ICreate.candidates}." } }, "required": [ @@ -17376,7 +21212,17 @@ "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." }, "format": { - "$ref": "#/components/schemas/IBbsArticle.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -17408,37 +21254,6 @@ "files" ] }, - "IShoppingSaleUnitStockSupplement.IRequest": { - "type": "object", - "properties": { - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-created_at" - }, - { - "const": "+created_at" - } - ] - }, - "title": "Sortable columns", - "description": "Sortable columns." - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "description": "Request information of the stock supplement list." - }, "IPageIShoppingSaleUnitStockSupplement": { "type": "object", "properties": { @@ -17488,7 +21303,60 @@ "value", "created_at" ], - "description": "Supplementation of inventory quantity of stock.\n\nYou know what? If a {@link IShoppingSaleUnitStock stock} has been sold over\nits {@link IShoppingSaleUnitStock.ICreate.quantity initial inventory quantity},\nthe stock can't be sold anymore, because of out of stock. In that case, how the\n{@link IShoppingSeller } should do?\n\nWhen the sotck is sold out, seller can supplement the inventory record by\nregistering this `IShoppingSaleUnitStockSupplement` record. Right, this\n`IShoppingSaleUnitStockSupplement` is an entity that embodies the\nsupplementation of the inventory quantity of the belonged stock." + "description": "Supplementation of inventory quantity of stock.\n\nYou know what? If a {@link IShoppingSaleUnitStock stock} has been sold over\nits {@link IShoppingSaleUnitStock.ICreate.quantity initial inventory quantity},\nthe stock can't be sold anymore, because of out of stock. In that case, how the\n{@link IShoppingSeller} should do?\n\nWhen the sotck is sold out, seller can supplement the inventory record by\nregistering this `IShoppingSaleUnitStockSupplement` record. Right, this\n`IShoppingSaleUnitStockSupplement` is an entity that embodies the\nsupplementation of the inventory quantity of the belonged stock." + }, + "IShoppingSaleUnitStockSupplement.IRequest": { + "type": "object", + "properties": { + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + } + ] + } + } + ], + "title": "Sortable columns", + "description": "Sortable columns." + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [], + "description": "Request information of the stock supplement list." }, "IShoppingSaleUnitStockSupplement.ICreate": { "type": "object", @@ -17535,5 +21403,6 @@ { "name": "Section" } - ] + ], + "x-samchon-emended": true } \ No newline at end of file diff --git a/package.json b/package.json index b244c2a..9e80614 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@samchon/openapi", - "version": "2.2.1", + "version": "2.3.0", "description": "OpenAPI definitions and converters for 'typia' and 'nestia'.", "main": "./lib/index.js", "module": "./lib/index.mjs", diff --git a/src/HttpMigration.ts b/src/HttpMigration.ts index aabc96b..3328aa9 100644 --- a/src/HttpMigration.ts +++ b/src/HttpMigration.ts @@ -1,5 +1,5 @@ import { OpenApi } from "./OpenApi"; -import { MigrateConverter } from "./composers/migrate/MigrateConverter"; +import { HttpMigrateApplicationComposer } from "./composers/migrate/HttpMigrateApplicationComposer"; import { HttpMigrateRouteFetcher } from "./http/HttpMigrateRouteFetcher"; import { IHttpConnection } from "./structures/IHttpConnection"; import { IHttpMigrateApplication } from "./structures/IHttpMigrateApplication"; @@ -74,7 +74,8 @@ export namespace HttpMigration { */ export const application = ( document: OpenApi.IDocument, - ): IHttpMigrateApplication => MigrateConverter.convert(document); + ): IHttpMigrateApplication => + HttpMigrateApplicationComposer.compose(document); /** * Properties for the request to the HTTP server. diff --git a/src/OpenApi.ts b/src/OpenApi.ts index c8b2fb5..acc543a 100644 --- a/src/OpenApi.ts +++ b/src/OpenApi.ts @@ -451,6 +451,37 @@ export namespace OpenApi { * interface. */ "x-samchon-human"?: boolean; + + /** + * Accessor of the operation. + * + * If you configure this property, the assigned value would be used as + * {@link IHttpMigrateRoute.accessor}. Also, it also can be used as the + * {@link IHttpLlmFunction.name} by joininig with `.` character in the + * LLM function calling application. + * + * Note that, the `x-samchon-accessor` value must be unique in the entire + * OpenAPI document operations. If there're duplicated `x-samchon-accessor` + * values, {@link IHttpMigrateRoute.accessor} will ignore every duplicated + * `x-samchon-accessor` values and generate the + * {@link IHttpMigrateRoute.accessor} by itself. + */ + "x-samchon-accessor"?: string[]; + + /** + * Controller of the operation. + * + * If you configure this property, the assigned value would be utilized + * as the controller name in the OpenAPI generator library like + * [`@nestia/editor`](https://nestia.io/docs/editor/) and + * [`@nestia/migrate`](https://nestia.io/docs/migrate/). + * + * Also, if {@link x-samchon-accessor} has been configured, its last + * element would be used as the controller method (function) name. + * Of course, the OpenAPI document generator `@nestia/sdk` fills both of + * them. + */ + "x-samchon-controller"?: string; } export namespace IOperation { /** diff --git a/src/composers/HttpLlmApplicationComposer.ts b/src/composers/HttpLlmApplicationComposer.ts index b271c82..a313ec8 100644 --- a/src/composers/HttpLlmApplicationComposer.ts +++ b/src/composers/HttpLlmApplicationComposer.ts @@ -109,6 +109,7 @@ export namespace HttpLlmComposer { return result.value as ILlmSchema.ModelSchema[Model]; }; + // METADATA const endpoint: string = `$input.paths[${JSON.stringify(props.route.path)}][${JSON.stringify(props.route.method)}]`; const output: ILlmSchema.ModelSchema[Model] | null | undefined = props.route .success @@ -169,7 +170,21 @@ export namespace HttpLlmComposer { ] : []), ]; - if (output === null || properties.some(([_k, v]) => v === null)) + + // FUNTION NAME + const name: string = props.route.accessor.join("_"); + const isNameVariable: boolean = /^[a-zA-Z0-9_-]+$/.test(name); + const isNameStartsWithNumber: boolean = /^[0-9]/.test(name[0] ?? ""); + if (isNameVariable === false) + props.errors.push( + `Elements of path (separated by '/') must be composed with alphabets, numbers, underscores, and hyphens`, + ); + if ( + output === null || + properties.some(([_k, v]) => v === null) || + isNameVariable === false || + isNameStartsWithNumber === true + ) return null; // COMPOSE PARAMETERS @@ -189,7 +204,7 @@ export namespace HttpLlmComposer { return { method: props.route.method as "get", path: props.route.path, - name: props.route.accessor.join("_"), + name, parameters, separated: props.options.separate ? (LlmSchemaComposer.separateParameters(props.model)({ diff --git a/src/composers/migrate/MigrateConverter.ts b/src/composers/migrate/HttpMigrateApplicationComposer.ts similarity index 83% rename from src/composers/migrate/MigrateConverter.ts rename to src/composers/migrate/HttpMigrateApplicationComposer.ts index bb7ff87..7ef9377 100644 --- a/src/composers/migrate/MigrateConverter.ts +++ b/src/composers/migrate/HttpMigrateApplicationComposer.ts @@ -2,11 +2,11 @@ import { OpenApi } from "../../OpenApi"; import { IHttpMigrateApplication } from "../../structures/IHttpMigrateApplication"; import { IHttpMigrateRoute } from "../../structures/IHttpMigrateRoute"; import { EndpointUtil } from "../../utils/EndpointUtil"; -import { HttpMigrateApplicationComposer } from "../HttpMigrateApplicationComposer"; -import { MigrateRouteAccessor } from "./MigrateRouteAccessor"; +import { HttpMigrateRouteAccessor } from "./HttpMigrateRouteAccessor"; +import { HttpMigrateRouteComposer } from "./HttpMigrateRouteComposer"; -export namespace MigrateConverter { - export const convert = ( +export namespace HttpMigrateApplicationComposer { + export const compose = ( document: OpenApi.IDocument, ): IHttpMigrateApplication => { const errors: IHttpMigrateApplication.IError[] = []; @@ -20,7 +20,7 @@ export namespace MigrateConverter { .map((method) => { const operation: OpenApi.IOperation = collection[method]!; const migrated: IHttpMigrateRoute | string[] = - HttpMigrateApplicationComposer.application({ + HttpMigrateRouteComposer.compose({ document, method, path, @@ -43,7 +43,7 @@ export namespace MigrateConverter { const operations: IHttpMigrateRoute[] = entire.filter( (o): o is IHttpMigrateRoute => !!o, ); - MigrateRouteAccessor.overwrite(operations); + HttpMigrateRouteAccessor.overwrite(operations); return { document: () => document, routes: operations, diff --git a/src/composers/migrate/MigrateRouteAccessor.ts b/src/composers/migrate/HttpMigrateRouteAccessor.ts similarity index 78% rename from src/composers/migrate/MigrateRouteAccessor.ts rename to src/composers/migrate/HttpMigrateRouteAccessor.ts index 621e938..256b422 100644 --- a/src/composers/migrate/MigrateRouteAccessor.ts +++ b/src/composers/migrate/HttpMigrateRouteAccessor.ts @@ -3,8 +3,9 @@ import { EndpointUtil } from "../../utils/EndpointUtil"; import { Escaper } from "../../utils/Escaper"; import { MapUtil } from "../../utils/MapUtil"; -export namespace MigrateRouteAccessor { +export namespace HttpMigrateRouteAccessor { export const overwrite = (routes: IHttpMigrateRoute[]): void => { + const predefined: Map = getPredefinedAccessors(routes); const dict: Map = collect((op) => op.emendedPath .split("/") @@ -12,6 +13,7 @@ export namespace MigrateRouteAccessor { .map(EndpointUtil.normalize) .map((str) => (Escaper.variable(str) ? str : `_${str}`)), )(routes) as Map; + for (const props of dict.values()) props.entries.forEach((entry, i) => { entry.alias = EndpointUtil.escapeDuplicate( @@ -20,7 +22,6 @@ export namespace MigrateRouteAccessor { ...props.entries.filter((_, j) => i !== j).map((e) => e.alias), ].map(EndpointUtil.normalize), )(EndpointUtil.normalize(entry.alias)); - entry.route.accessor = [...props.namespace, entry.alias]; const parameters: { name: string; key: string }[] = [ ...entry.route.parameters, @@ -36,6 +37,12 @@ export namespace MigrateRouteAccessor { ...parameters.filter((_, j) => i !== j).map((y) => y.key), ])(p.key)), ); + + const accessor: string[] | undefined = + entry.route.operation()["x-samchon-accessor"]; + if (accessor !== undefined && predefined.get(accessor.join(".")) === 1) + entry.route.accessor = accessor; + else entry.route.accessor = [...props.namespace, entry.alias]; }); }; @@ -85,6 +92,19 @@ export namespace MigrateRouteAccessor { ); }; + const getPredefinedAccessors = ( + routes: IHttpMigrateRoute[], + ): Map => { + const dict: Map = new Map(); + for (const r of routes) { + const accessor = r.operation()["x-samchon-accessor"]?.join("."); + if (accessor === undefined) continue; + else if (dict.has(accessor)) dict.set(accessor, dict.get(accessor)! + 1); + else dict.set(accessor, 1); + } + return dict; + }; + interface IElement { namespace: string[]; entries: IEntry[]; diff --git a/src/composers/HttpMigrateApplicationComposer.ts b/src/composers/migrate/HttpMigrateRouteComposer.ts similarity index 97% rename from src/composers/HttpMigrateApplicationComposer.ts rename to src/composers/migrate/HttpMigrateRouteComposer.ts index dde0350..7c39c3c 100644 --- a/src/composers/HttpMigrateApplicationComposer.ts +++ b/src/composers/migrate/HttpMigrateRouteComposer.ts @@ -1,10 +1,10 @@ -import { OpenApi } from "../OpenApi"; -import { IHttpMigrateRoute } from "../structures/IHttpMigrateRoute"; -import { EndpointUtil } from "../utils/EndpointUtil"; -import { Escaper } from "../utils/Escaper"; -import { OpenApiTypeChecker } from "../utils/OpenApiTypeChecker"; +import { OpenApi } from "../../OpenApi"; +import { IHttpMigrateRoute } from "../../structures/IHttpMigrateRoute"; +import { EndpointUtil } from "../../utils/EndpointUtil"; +import { Escaper } from "../../utils/Escaper"; +import { OpenApiTypeChecker } from "../../utils/OpenApiTypeChecker"; -export namespace HttpMigrateApplicationComposer { +export namespace HttpMigrateRouteComposer { export interface IProps { document: OpenApi.IDocument; method: "head" | "get" | "post" | "put" | "patch" | "delete"; @@ -12,7 +12,7 @@ export namespace HttpMigrateApplicationComposer { emendedPath: string; operation: OpenApi.IOperation; } - export const application = (props: IProps): IHttpMigrateRoute | string[] => { + export const compose = (props: IProps): IHttpMigrateRoute | string[] => { //---- // REQUEST AND RESPONSE BODY //---- diff --git a/test/features/migrate/test_http_migrate_route_accessor.ts b/test/features/migrate/test_http_migrate_route_accessor.ts new file mode 100644 index 0000000..4b667c4 --- /dev/null +++ b/test/features/migrate/test_http_migrate_route_accessor.ts @@ -0,0 +1,29 @@ +import { TestValidator } from "@nestia/e2e"; +import { + HttpMigration, + IHttpMigrateApplication, + IHttpMigrateRoute, + OpenApi, +} from "@samchon/openapi"; +import fs from "fs"; + +import { TestGlobal } from "../../TestGlobal"; + +export const test_http_migrate_route_accessor = async (): Promise => { + const document: OpenApi.IDocument = OpenApi.convert( + JSON.parse( + await fs.promises.readFile( + `${TestGlobal.ROOT}/examples/v3.1/shopping.json`, + "utf8", + ), + ), + ); + const application: IHttpMigrateApplication = + HttpMigration.application(document); + const route: IHttpMigrateRoute | undefined = application.routes.find( + (r) => r.path === "/shoppings/sellers/sales" && r.method === "post", + ); + TestValidator.equals("accessor")(route?.accessor.join("."))( + "shoppings.sellers.sales.create", + ); +}; diff --git a/test/features/migrate/test_http_migrate_route_comment.ts b/test/features/migrate/test_http_migrate_route_comment.ts index 515a9cb..a3bf51c 100644 --- a/test/features/migrate/test_http_migrate_route_comment.ts +++ b/test/features/migrate/test_http_migrate_route_comment.ts @@ -39,10 +39,8 @@ The 2nd purpose is for the A/B tests. {@link IShoppingSeller Seller} needs to demonstrate operating performance by chaning price, content, and composition of the product. This snapshot concept would be helpful for it. -@param id Target sale's ID to update. - Note that, you have to specify only the sale ID of your own. -@param body New information of the sale. - Note that, your input data would entirely modify the sale, so that have to be careful if you only want the partial updating. +@param id Target sale's {@link IShoppingSale.id } +@param body New information of the sale\n@security bearer @tag Sale` .split("\r\n") .join("\n");