From 8846e0d6c671ae36c968734b696d07594aa2badb Mon Sep 17 00:00:00 2001 From: Jeongho Nam Date: Tue, 15 Oct 2024 20:43:40 +0900 Subject: [PATCH 1/2] initial commit --- .env | 1 + .gitignore | 7 + README.md | 41 + assets/input/bbs.article.json | 7 + assets/input/shopping.swagger.json | 18749 ++++++++++++++++++++++ assets/output/bbs.article.ar.json | 7 + assets/output/bbs.article.ja.json | 7 + assets/output/bbs.article.ko.json | 7 + assets/output/shopping.swagger.ar.json | 18749 ++++++++++++++++++++++ assets/output/shopping.swagger.ja.json | 18749 ++++++++++++++++++++++ assets/output/shopping.swagger.ko.json | 18749 ++++++++++++++++++++++ package.json | 53 + prettier.config.js | 14 + src/JsonTranslator.ts | 167 + src/index.ts | 1 + test/features/test_bbs_article.ts | 23 + test/features/test_connector_swagger.ts | 27 + test/features/test_shopping_swagger.ts | 27 + test/index.ts | 48 + test/tsconfig.json | 18 + tsconfig.json | 113 + 21 files changed, 75564 insertions(+) create mode 100644 .env create mode 100644 .gitignore create mode 100644 README.md create mode 100644 assets/input/bbs.article.json create mode 100644 assets/input/shopping.swagger.json create mode 100644 assets/output/bbs.article.ar.json create mode 100644 assets/output/bbs.article.ja.json create mode 100644 assets/output/bbs.article.ko.json create mode 100644 assets/output/shopping.swagger.ar.json create mode 100644 assets/output/shopping.swagger.ja.json create mode 100644 assets/output/shopping.swagger.ko.json create mode 100644 package.json create mode 100644 prettier.config.js create mode 100644 src/JsonTranslator.ts create mode 100644 src/index.ts create mode 100644 test/features/test_bbs_article.ts create mode 100644 test/features/test_connector_swagger.ts create mode 100644 test/features/test_shopping_swagger.ts create mode 100644 test/index.ts create mode 100644 test/tsconfig.json create mode 100644 tsconfig.json diff --git a/.env b/.env new file mode 100644 index 0000000..c3f6008 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +CREDENTIALS='{"type":"service_account","project_id":"","private_key_id":"","private_key":"","client_email":"","client_id":"","auth_uri":"","token_uri":"","auth_provider_x509_cert_url":"","client_x509_cert_url":"","universe_domain":""}' \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e018f7e --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +bin/ +lib/ +node_modules/ + +package-lock.json +pnpm-lock.yaml +env.ts \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5dc3ae2 --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +# `@samchon/json-translator` +[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/samchon/json-translator/blob/master/LICENSE) +[![npm version](https://img.shields.io/npm/v/@samchon/json-translator.svg)](https://www.npmjs.com/package/@samchon/json-translator) +[![Downloads](https://img.shields.io/npm/dm/@samchon/json-translator.svg)](https://www.npmjs.com/package/@samchon/json-translator) +[![Build Status](https://github.com/samchon/json-translator/workflows/build/badge.svg)](https://github.com/samchon/json-translator/actions?query=workflow%3Abuild) + +Translate JSON file via Google Translate API. + +`@samchon/json-translate` is a wrapper library that translates JSON files using the Google Translate API. It has optimization logic that reduces costs and elapsed time by minimizing the number of API calls. + +Here is an example code translating `swagger.json` file. + +```typescript +import { OpenApi } from "@samchon/openapi"; +import { JsonTranslator } from "@samchon/json-translator"; + +const fetchOpenApiDocument = async (): Promise => { + const response: Response = await fetch( + "https://raw.githubusercontent.com/samchon/shopping-backend/refs/heads/master/packages/api/swagger.json", + ); + return response.json(); +} + +const main = async (): Promise => { + const translator: JsonTranslator = new JsonTranslator({ + credentials: { ... }, + }); + const input: OpenApi.IDocument = await fetchOpenApiDocument(); + const output: OpenApi.IDocument = await translator.translate({ + input, + to: "ko", + filter: (explore) => + explore.key === "title" || + explore.key === "description" || + explore.key === "summary" || + explore.key === "x-wrtn-placeholder", + }); + console.log(output); +}; +main().catch(console.error); +``` \ No newline at end of file diff --git a/assets/input/bbs.article.json b/assets/input/bbs.article.json new file mode 100644 index 0000000..ed98e6a --- /dev/null +++ b/assets/input/bbs.article.json @@ -0,0 +1,7 @@ +{ + "id": "c1cbfc65-51fe-4cc3-b162-568fdedb1c41", + "title": "[Article] Hello, nice to meet you.", + "body": "Nice to meet you translate-json users.\n\nThis is an example JSON file embodying a BBS article.\n\nLet's see how this content be translated into other languages.", + "created_at": "2024-09-26T19:45:47.145Z", + "updated_at": "2024-10-22T03:49:25.790Z" +} diff --git a/assets/input/shopping.swagger.json b/assets/input/shopping.swagger.json new file mode 100644 index 0000000..0b93b9f --- /dev/null +++ b/assets/input/shopping.swagger.json @@ -0,0 +1,18749 @@ +{ + "openapi": "3.1.0", + "servers": [ + { + "url": "http://localhost:37001", + "description": "Local Server" + } + ], + "info": { + "version": "0.5.0", + "title": "@samchon/shopping-backend", + "description": "Backend for shopping", + "license": { + "name": "MIT" + } + }, + "paths": { + "/monitors/health": { + "get": { + "summary": "Health check API", + "description": "Health check API.", + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + } + } + }, + "/monitors/performance": { + "get": { + "summary": "Get performance information", + "description": "Get performance information.\n\nGet perofmration information composed with CPU, memory and resource usage.", + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "Performance info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPerformance" + } + } + } + } + } + } + }, + "/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" + ], + "parameters": [], + "responses": { + "200": { + "description": "System info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ISystem" + } + } + } + } + } + } + }, + "/monitors/system/internal_server_error": { + "get": { + "tags": [], + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + } + } + }, + "/monitors/system/uncaught_exception": { + "get": { + "tags": [], + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + } + } + }, + "/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" + ], + "parameters": [], + "responses": { + "200": { + "description": "Admin info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Joining request info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Administrator info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Login request info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Administrator info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/coupons/{id}/destroy": { + "delete": { + "tags": [], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the coupon", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created coupon", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated coupons", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "description": "Coupon info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated deposit metadata list", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Creation information of deposit metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created deposit metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target deposit's {@link IShoppingDeposit.id }" + } + ], + "responses": { + "200": { + "description": "Deposit metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target deposit's {@link IShoppingDeposit.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Deposit metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated mileage metadata list", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Creation information of mileage metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created mileage metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target mileage's {@link IShoppingMileage.id }" + } + ], + "responses": { + "200": { + "description": "Mileage metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target mileage's {@link IShoppingMileage.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Mileage metadata", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated mileage donation history list", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileageDonation" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of mileage donation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Mileage donation history", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target history's {@link IShoppingMileageDonation.id }" + } + ], + "responses": { + "200": { + "description": "Mileage donation history", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated orders", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "Order info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated sales with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "description": "Detailed sale information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated inquiry comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "Creation info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "Detailed inquiry comment info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "Update info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated questions with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated questions with abridged information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" + } + ], + "responses": { + "200": { + "description": "Detailed question info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated inquiry comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "Creation info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "Detailed inquiry comment info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "Update info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated reviews with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated reviews with abridged information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" + } + ], + "responses": { + "200": { + "description": "Detailed review info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Requestion info of pagination", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated snapshots with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "Detailed information of the snapshot", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "Detailed sale information in the snapshot side", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" + } + ], + "requestBody": { + "description": "Creation info of the category", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created category", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "Paginated categories with children categories", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" + } + ], + "requestBody": { + "description": "Update info of the category", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "Detailed category info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" + } + ], + "requestBody": { + "description": "Merge info of the categories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "Detailed category info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the channel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created channel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated channels", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target channel's {@link IShoppingChannel.code }" + } + ], + "requestBody": { + "description": "Update info of the channel", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target channel's {@link IShoppingChannel.id }" + } + ], + "responses": { + "200": { + "description": "Detailed channel info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of the merge", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated channels with nested categories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target channel's {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "Detailed channel info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the section", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created section", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated sections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target section's {@link IShoppingSection.code }" + } + ], + "requestBody": { + "description": "Update info of the section", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "Get a section info", + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information.", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target section's {@link IShoppingSection.id }" + } + ], + "responses": { + "200": { + "description": "Detailed section info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "input Request info of the merge", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target section's {@link IShoppingSection.code }" + } + ], + "responses": { + "200": { + "description": "Detailed section info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Refresh token.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IRefresh" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Customer information with new token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IAuthorized" + } + } + } + } + } + } + }, + "/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" + ], + "parameters": [], + "responses": { + "200": { + "description": "Current customer information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Creation information of the customer.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created customer information with token.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IAuthorized" + } + } + } + } + } + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Join information of the member", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Joined customer information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Login request info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Logged in Customer information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Activation information of the citizenship", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Activated customer information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Enroll information of the external user", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingExternalUser.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "External user enrolled customer information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "New password and current password", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.IPasswordChange" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated coupons", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "description": "Coupon info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated coupon tickets", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCouponTicket" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of coupon ticket", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created coupon ticket", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target coupon ticket's {@link IShoppingCouponTicket.id }" + } + ], + "responses": { + "200": { + "description": "Coupon ticket info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated deposit charges", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDepositCharge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the deposit charge", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created deposit charge", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target deposit charge's {@link IShoppingDepositCharge.id }" + } + ], + "responses": { + "200": { + "description": "Deposit charge info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target deposit charge's {@link IShoppingDepositCharge.id }" + } + ], + "requestBody": { + "description": "Value to change", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target deposit charge's {@link IShoppingDepositCharge.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "chargeId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target charge's {@link IShoppingDepositCharge.id }" + } + ], + "responses": { + "200": { + "description": "Whether the charge is publishable or not", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "chargeId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target charge's {@link IShoppingDepositCharge.id }" + } + ], + "requestBody": { + "description": "Creation info of the publish", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositChargePublish.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created publish", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositChargePublish" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositHistory.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated deposit histories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDepositHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "Deposit history info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "responses": { + "200": { + "description": "Balance of the deposit", + "content": { + "application/json": { + "schema": { + "type": "number" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageHistory.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated mileage histories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileageHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target mileage history's {@link IShoppingMileageHistory.id }" + } + ], + "responses": { + "200": { + "description": "Mileage history info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "responses": { + "200": { + "description": "Balance of the mileage", + "content": { + "application/json": { + "schema": { + "type": "number" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/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\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.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": " Belonged cart's ID" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated commodities", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCartCommodity" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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\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.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": " Belonged cart's ID" + } + ], + "requestBody": { + "description": "Creation info of the commodity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created commodity", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities/{id}": { + "get": { + "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.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": " Belonged cart's ID" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target commodity's {@link IShoppingCartCommodity.id }" + } + ], + "responses": { + "200": { + "description": "Detailed commodity info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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 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.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": " Belonged cart's ID" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target commodity's {@link IShoppingCartCommodity.id }" + } + ], + "requestBody": { + "description": "Update info of the commodity (volume)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + } + ] + }, + "required": true, + "description": " Belonged cart's ID" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target commodity's {@link IShoppingCartCommodity.id }" + } + ], + "responses": { + "200": { + "description": "Newly created commodity", + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/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\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.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": " Belonged cart's ID" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target commodity's {@link IShoppingCartCommodity.id }" + } + ], + "responses": { + "200": { + "description": "Creation info of the commodity for replication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/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\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.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": " Belonged cart's ID" + } + ], + "requestBody": { + "description": "Request info for discountable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Discountable info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartDiscountable" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the order", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created order", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated orders", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "Order info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "Detailed price info with discount", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" + } + ], + "requestBody": { + "description": "Request info for discountable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Discountable info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" + } + ], + "requestBody": { + "description": "Discount info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Detailed price info with discount", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged order's {@link IShoppingOrder.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target good's {@link IShoppingOrderGood.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "Whether the order is publishable or not", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" + } + ], + "requestBody": { + "description": "Creation info of the publish", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingOrderPublish.ICashCreate" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish.IZeroCreate" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "cash": "#/components/schemas/IShoppingOrderPublish.ICashCreate", + "zero": "#/components/schemas/IShoppingOrderPublish.IZeroCreate" + } + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created publish", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPublish" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated sales with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "description": "Detailed sale information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated inquiry comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "Creation info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "Detailed inquiry comment info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "Update info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Creation info of the question", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created question", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated questions with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" + } + ], + "requestBody": { + "description": "Update info of the question", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created snapshot record of the question", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" + } + ], + "responses": { + "200": { + "description": "Detailed question info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated questions with abridged information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated inquiry comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "Creation info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "Detailed inquiry comment info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "Update info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Creation info of the review", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created review", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated reviews with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" + } + ], + "requestBody": { + "description": "Update info of the review", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created snapshot record of the review", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" + } + ], + "responses": { + "200": { + "description": "Detailed review info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated reviews with abridged information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Requestion info of pagination", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated snapshots with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "Detailed information of the snapshot", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "Detailed sale information in the snapshot side", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "Paginated categories with children categories", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "Detailed category info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "Detailed category info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated channels", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated channels with nested categories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target channel's {@link IShoppingChannel.id }" + } + ], + "responses": { + "200": { + "description": "Detailed channel info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target channel's {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "Detailed channel info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated sections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target section's {@link IShoppingSection.id }" + } + ], + "responses": { + "200": { + "description": "Detailed section info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target section's {@link IShoppingSection.code }" + } + ], + "responses": { + "200": { + "description": "Detailed section info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "responses": { + "200": { + "description": "Seller info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Joining request info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Seller info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Login request info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Seller info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated deliveries", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDelivery.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of delivery", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created delivery", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target delivery's {@link IShoppingDelivery.id }" + } + ], + "responses": { + "200": { + "description": "Delivery info with target orders", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "List of target orders' ", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "List of incomplete pieces", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.ICreate" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged delivery's {@link IShoppingDelivery.id }" + } + ], + "requestBody": { + "description": "Creation info of the journey", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created journey", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged delivery's {@link IShoppingDelivery.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target journey's {@link IShoppingDeliveryJourney.id }" + } + ], + "requestBody": { + "description": "Completion time of the journey", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.IComplete" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged delivery's {@link IShoppingDelivery.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target journey's {@link IShoppingDeliveryJourney.id }" + } + ], + "responses": { + "200": { + "description": "Newly created journey", + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged delivery's {@link IShoppingDelivery.id }" + } + ], + "requestBody": { + "description": "Creation info of the shipper", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created shipper", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the coupon", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created coupon", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated coupons", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "description": "Coupon info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated orders", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "Order info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Creation info of the sale", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created sale", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated sales with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "New information of the sale", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Updated sale with new snapshot", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "description": "Detailed sale information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "New opening and closing time", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IUpdateOpeningTime" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" + } + ], + "responses": { + "201": { + "description": "Creation info of the sale for replication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "questionId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" + } + ], + "requestBody": { + "description": "Creation info of the answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "questionId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" + } + ], + "requestBody": { + "description": "Update info of the answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated inquiry comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "Creation info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "Detailed inquiry comment info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "Update info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated questions with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated questions with abridged information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" + } + ], + "responses": { + "200": { + "description": "Detailed question info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "reviewId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" + } + ], + "requestBody": { + "description": "Creation info of the answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "reviewId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" + } + ], + "requestBody": { + "description": "Update info of the answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the answer article", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated inquiry comments", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "Creation info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Newly created inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "Detailed inquiry comment info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "Update info of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Newly created snapshot record of the inquiry comment", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated reviews with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated reviews with abridged information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" + } + ], + "responses": { + "200": { + "description": "Detailed review info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "201": { + "description": "Creation info of the sale for replication", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "Requestion info of pagination", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated snapshots with summarized information", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "Detailed information of the snapshot", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "Detailed sale information in the snapshot side", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged unit's {@link IShoppingSaleUnit.id }" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target stock's {@link IShoppingSaleUnitStock.id }" + } + ], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated supplements", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleUnitStockSupplement" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged unit's {@link IShoppingSaleUnit.id }" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target stock's {@link IShoppingSaleUnitStock.id }" + } + ], + "requestBody": { + "description": "Ceate info of the supplement", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Created supplement", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged unit's {@link IShoppingSaleUnit.id }" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target stock's {@link IShoppingSaleUnitStock.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target supplement's {@link IShoppingSaleUnitStockSupplement.id }" + } + ], + "requestBody": { + "description": "Update info (quantity) of the supplement", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "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" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Belonged unit's {@link IShoppingSaleUnit.id }" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target stock's {@link IShoppingSaleUnitStock.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target supplement's {@link IShoppingSaleUnitStockSupplement.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "Paginated categories with children categories", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "Detailed category info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "Detailed category info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated channels", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated channels with nested categories", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target channel's {@link IShoppingChannel.id }" + } + ], + "responses": { + "200": { + "description": "Detailed channel info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target channel's {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "Detailed channel info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [], + "requestBody": { + "description": "Request info of pagination, searching and sorting", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Paginated sections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": " Target section's {@link IShoppingSection.id }" + } + ], + "responses": { + "200": { + "description": "Detailed section info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/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" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": " Target section's {@link IShoppingSection.code }" + } + ], + "responses": { + "200": { + "description": "Detailed section info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + } + }, + "components": { + "schemas": { + "IPerformance": { + "type": "object", + "properties": { + "cpu": { + "$ref": "#/components/schemas/process.global.NodeJS.CpuUsage" + }, + "memory": { + "$ref": "#/components/schemas/process.global.NodeJS.MemoryUsage" + }, + "resource": { + "$ref": "#/components/schemas/process.global.NodeJS.ResourceUsage" + } + }, + "required": [ + "cpu", + "memory", + "resource" + ] + }, + "process.global.NodeJS.CpuUsage": { + "type": "object", + "properties": { + "user": { + "type": "number" + }, + "system": { + "type": "number" + } + }, + "required": [ + "user", + "system" + ] + }, + "process.global.NodeJS.MemoryUsage": { + "type": "object", + "properties": { + "rss": { + "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", + "title": "Refers to V8's memory usage", + "description": "Refers to V8's memory usage." + }, + "heapUsed": { + "type": "number", + "title": "Refers to V8's memory usage", + "description": "Refers to V8's memory usage." + }, + "external": { + "type": "number" + }, + "arrayBuffers": { + "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": [ + "rss", + "heapTotal", + "heapUsed", + "external", + "arrayBuffers" + ] + }, + "process.global.NodeJS.ResourceUsage": { + "type": "object", + "properties": { + "fsRead": { + "type": "number" + }, + "fsWrite": { + "type": "number" + }, + "involuntaryContextSwitches": { + "type": "number" + }, + "ipcReceived": { + "type": "number" + }, + "ipcSent": { + "type": "number" + }, + "majorPageFault": { + "type": "number" + }, + "maxRSS": { + "type": "number" + }, + "minorPageFault": { + "type": "number" + }, + "sharedMemorySize": { + "type": "number" + }, + "signalsCount": { + "type": "number" + }, + "swappedOut": { + "type": "number" + }, + "systemCPUTime": { + "type": "number" + }, + "unsharedDataSize": { + "type": "number" + }, + "unsharedStackSize": { + "type": "number" + }, + "userCPUTime": { + "type": "number" + }, + "voluntaryContextSwitches": { + "type": "number" + } + }, + "required": [ + "fsRead", + "fsWrite", + "involuntaryContextSwitches", + "ipcReceived", + "ipcSent", + "majorPageFault", + "maxRSS", + "minorPageFault", + "sharedMemorySize", + "signalsCount", + "swappedOut", + "systemCPUTime", + "unsharedDataSize", + "unsharedStackSize", + "userCPUTime", + "voluntaryContextSwitches" + ] + }, + "ISystem": { + "type": "object", + "properties": { + "uid": { + "type": "number", + "title": "Random Unique ID", + "description": "Random Unique ID." + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "`process.argv`" + }, + "commit": { + "$ref": "#/components/schemas/ISystem.ICommit", + "title": "Git commit info", + "description": "Git commit info." + }, + "package": { + "$ref": "#/components/schemas/ISystem.IPackage", + "description": "`package.json`" + }, + "created_at": { + "type": "string", + "title": "Creation time of this server", + "description": "Creation time of this server." + } + }, + "required": [ + "uid", + "arguments", + "commit", + "package", + "created_at" + ], + "description": "System Information." + }, + "ISystem.ICommit": { + "type": "object", + "properties": { + "shortHash": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "hash": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "sanitizedSubject": { + "type": "string" + }, + "body": { + "type": "string" + }, + "author": { + "$ref": "#/components/schemas/ISystem.ICommit.IUser" + }, + "committer": { + "$ref": "#/components/schemas/ISystem.ICommit.IUser" + }, + "authored_at": { + "type": "string" + }, + "commited_at": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shortHash", + "branch", + "hash", + "subject", + "sanitizedSubject", + "body", + "author", + "committer", + "authored_at", + "commited_at", + "tags" + ], + "description": "Git commit info." + }, + "ISystem.ICommit.IUser": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "Git user account info." + }, + "ISystem.IPackage": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "description": { + "type": "string" + }, + "main": { + "type": "string" + }, + "typings": { + "type": "string" + }, + "scripts": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "repository": { + "type": "object", + "properties": { + "type": { + "const": "git" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ] + }, + "author": { + "type": "string" + }, + "license": { + "type": "string" + }, + "bugs": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ] + }, + "homepage": { + "type": "string" + }, + "devDependencies": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "dependencies": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "publishConfig": { + "type": "object", + "properties": { + "registry": { + "type": "string" + } + }, + "required": [ + "registry" + ] + }, + "files": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "version", + "description", + "scripts", + "repository", + "author", + "license", + "bugs", + "homepage", + "dependencies" + ], + "description": "NPM package info." + }, + "Recordstringstring": { + "type": "object", + "properties": {}, + "description": "Construct a type with a set of properties K of type T", + "additionalProperties": { + "type": "string" + } + }, + "IShoppingAdministrator.IInvert": { + "type": "object", + "properties": { + "type": { + "const": "administrator", + "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", + "title": "Primary Key", + "description": "Primary Key." + }, + "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": [ + "type", + "member", + "customer", + "citizen", + "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." + }, + "IShoppingMember.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMemberEmail" + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "id", + "nickname", + "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}" + }, + "IShoppingMemberEmail": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "string", + "format": "email", + "title": "Email address value", + "description": "Email address value." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "Email address of member.\n\nThis shopping mall system allows multiple email addresses to be\nregistered for one {@link IShoppingMember member}. If you don't have to\nplan such multiple email addresses, just use only one." + }, + "IShoppingCustomer.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "Belonged channel", + "description": "Belonged channel." + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "External user information", + "description": "External user information.\n\nWhen the customer has come frome an external service." + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href} of client." + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer} of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "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}" + }, + "IShoppingChannel": { + "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 record", + "description": "Creation time of record." + }, + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "Channel information.\n\n`IShoppingChannel` is a concept that shapes the distribution channel in the\nmarket. Therefore, the difference in the channel in this e-commerce system\nmeans that it is another site or application.\n\nBy the way, if your shopping mall system requires only one channel, then\njust use only one. This concept is designed to be expandable in the future." + }, + "IShoppingExternalUser": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "Citizen activation info", + "description": "Citizen activation info." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother word, first time when the external user connected." + }, + "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", + "description": "Nickname of external user in the external system." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "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." + }, + "IShoppingCitizen": { + "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 record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "id", + "created_at", + "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." + }, + "IShoppingAdministrator.IJoin": { + "type": "object", + "properties": {}, + "description": "Joining request info." + }, + "IShoppingMember.ILogin": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "Email address of member", + "description": "Email address of member.\n\nIf the member has multiple email addresses, just use one of them." + }, + "password": { + "type": "string", + "title": "Password of the member account", + "description": "Password of the member account." + } + }, + "required": [ + "email", + "password" + ], + "description": "Login request info." + }, + "IShoppingCoupon": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "designer": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingAdministrator" + }, + { + "$ref": "#/components/schemas/IShoppingSeller" + } + ], + "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": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSectionCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSellerCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSaleCriteria" + }, + { + "$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." + }, + "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", + "title": "Representative name of the coupon", + "description": "Representative name of the coupon." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the coupon", + "description": "Opening time of the coupon." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "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." + } + }, + "required": [ + "id", + "designer", + "inventory", + "criterias", + "discount", + "restriction", + "name", + "opened_at", + "closed_at", + "created_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." + }, + "IShoppingAdministrator": { + "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 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." + }, + "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": "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." + }, + "volume_per_citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "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": [ + "volume", + "volume_per_citizen" + ], + "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." + }, + "IShoppingCouponChannelCriteria": { + "type": "object", + "properties": { + "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." + }, + "type": { + "const": "channel", + "title": "Descrimanator type", + "description": "Descrimanator type." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." + } + }, + "required": [ + "channels", + "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." + }, + "IShoppingCouponChannelCriteria.IChannelTo": { + "type": "object", + "properties": { + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "Target channel", + "description": "Target channel." + }, + "categories": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "minItems": 1 + } + ], + "title": "List of target categories", + "description": "List of target categories." + } + }, + "required": [ + "channel", + "categories" + ] + }, + "IShoppingChannelCategory.IInvert": { + "type": "object", + "properties": { + "parent": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + ], + "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." + }, + "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." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "parent", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "Invert category information with parent category." + }, + "IShoppingCouponSectionCriteria": { + "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." + }, + "type": { + "const": "section", + "title": "Descrimanator type", + "description": "Descrimanator type." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "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." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." + } + }, + "required": [ + "sellers", + "type", + "direction" + ], + "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." + }, + "IShoppingCouponSaleCriteria": { + "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": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "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." + }, + "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": { + "$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." + }, + "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." + }, + "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": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "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\"." + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "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." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "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." + } + }, + "required": [ + "section", + "seller", + "price_range", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "Summarized information of sale.\n\nThis summarized information being used for pagination." + }, + "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", + "title": "Primary Key", + "description": "Primary Key." + }, + "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": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "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" + ] + }, + "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": { + "type": "string" + }, + "thumbnails": { + "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." + }, + "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": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "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" + ], + "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." + }, + "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." + }, + "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." + }, + "code": { + "type": "string", + "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": "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." + }, + "IShoppingSaleUnit.ISummary": { + "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." + }, + "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": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" + } + ] + }, + "minItems": 1, + "title": "List of target funnels", + "description": "List of target funnels." + }, + "type": { + "const": "funnel", + "title": "Descrimanator type", + "description": "Descrimanator type." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." + } + }, + "required": [ + "funnels", + "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." + }, + "IShoppingCouponFunnelCriteria.IValueFunnel": { + "type": "object", + "properties": { + "kind": { + "oneOf": [ + { + "const": "url" + }, + { + "const": "referrer" + } + ], + "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." + }, + "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" + }, + { + "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." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 + } + ], + "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." + } + }, + "required": [ + "unit", + "value", + "threshold", + "limit", + "multiplicative" + ], + "description": "Discount information with amount unit." + }, + "IShoppingCouponDiscount.IPercent": { + "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." + }, + "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." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 + } + ], + "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": [ + "unit", + "value", + "threshold", + "limit" + ], + "description": "Discount information with percent unit." + }, + "IShoppingCouponRestriction": { + "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." + }, + "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." + }, + "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." + }, + "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." + }, + "expired_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "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": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the coupon", + "description": "Opening time of the coupon." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "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." + } + }, + "required": [ + "discount", + "restriction", + "criterias", + "disposable_codes", + "name", + "opened_at", + "closed_at" + ], + "description": "Creation information of the coupon." + }, + "IShoppingCouponChannelCriteria.ICreate": { + "type": "object", + "properties": { + "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." + }, + "type": { + "const": "channel" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "channels", + "type", + "direction" + ], + "description": "Creation information of the channel criteria." + }, + "IShoppingCouponChannelCriteria.IChannelTo.ICreate": { + "type": "object", + "properties": { + "channel_code": { + "type": "string", + "title": "Target channel's {@link IShoppingChannel.code}", + "description": "Target channel's {@link IShoppingChannel.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." + } + }, + "required": [ + "channel_code", + "category_ids" + ], + "description": "Target channel and categories." + }, + "IShoppingCouponSectionCriteria.ICreate": { + "type": "object", + "properties": { + "section_codes": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "title": "List of target section's {@link IShoppingSection.code}s", + "description": "List of target section's {@link IShoppingSection.code}s." + }, + "type": { + "const": "section" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "section_codes", + "type", + "direction" + ], + "description": "Creation information of the section criteria." + }, + "IShoppingCouponSellerCriteria.ICreate": { + "type": "object", + "properties": { + "seller_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "minItems": 1, + "title": "List of target seller's {@link IShoppingSeller.id}s", + "description": "List of target seller's {@link IShoppingSeller.id}s." + }, + "type": { + "const": "seller" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "seller_ids", + "type", + "direction" + ], + "description": "Creation information of the seller criteria." + }, + "IShoppingCouponSaleCriteria.ICreate": { + "type": "object", + "properties": { + "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." + }, + "type": { + "const": "sale" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "sale_ids", + "type", + "direction" + ], + "description": "Creation information of the sale criteria." + }, + "IShoppingCouponFunnelCriteria.ICreate": { + "type": "object", + "properties": { + "funnels": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" + } + ] + }, + "minItems": 1, + "title": "List of target funnels", + "description": "List of target funnels." + }, + "type": { + "const": "funnel" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "funnels", + "type", + "direction" + ], + "description": "Creation information of the funnel criteria." + }, + "IPageIShoppingCoupon": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IPage.IPagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "Current page number", + "description": "Current page number." + }, + "limit": { + "type": "integer", + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + }, + "records": { + "type": "integer", + "title": "Total records in the database", + "description": "Total records in the database." + }, + "pages": { + "type": "integer", + "title": "Total pages", + "description": "Total pages.\n\nEqual to {@link records} / {@link limit} with ceiling." + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "Page information." + }, + "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" + } + } + }, + "IPageIShoppingDeposit": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeposit" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingDeposit": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "IShoppingDeposit.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingDeposit.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" + } + ] + } + }, + "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." + } + } + }, + "IShoppingDeposit.IRequest.ISearch": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + } + }, + "IShoppingDeposit.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "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." + }, + "IShoppingMileage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "IShoppingMileage.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingMileage.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" + } + ] + } + }, + "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." + } + } + }, + "IShoppingMileage.IRequest.ISearch": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + } + }, + "IShoppingMileage.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + } + }, + "required": [ + "code", + "source", + "direction", + "value" + ] + }, + "IPageIShoppingMileageDonation": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingMileageDonation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "administrator": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen" + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "administrator", + "citizen", + "value", + "reason", + "created_at" + ] + }, + "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" + } + } + }, + "IShoppingMileageDonation.ICreate": { + "type": "object", + "properties": { + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "citizen_id", + "value", + "reason" + ] + }, + "IPageIShoppingOrder": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrder" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingOrder": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who've applied for the order", + "description": "Customer who've applied for the order." + }, + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood" + }, + "minItems": 1, + "title": "List of goods in the order", + "description": "List of goods in the order." + }, + "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." + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish" + } + ], + "title": "Order completion and payment information", + "description": "Order completion and payment information." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "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}." + }, + "IShoppingCustomer": { + "type": "object", + "properties": { + "type": { + "const": "customer", + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMember" + } + ], + "title": "Membership information", + "description": "Membership information.\n\nIf the customer has joined as a member." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "Citizen information", + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "Belonged channel", + "description": "Belonged channel." + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "External user information", + "description": "External user information.\n\nWhen the customer has come frome an external service." + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href} of client." + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer} of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "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." + }, + "IShoppingMember": { + "type": "object", + "properties": { + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "Citizen information", + "description": "Citizen information.\n\nOnly when has verified as a citizen, with mobile number and real name.\n\nFor reference, if the member has signed up as a seller or administrator,\nthis citizen information must be." + }, + "seller": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSeller" + } + ], + "title": "Seller information", + "description": "Seller information.\n\nIf the member also signed up as a seller." + }, + "administrator": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingAdministrator" + } + ], + "title": "Administrator information", + "description": "Administrator information.\n\nIf the member also signed up as an administrator." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "emails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMemberEmail" + }, + "title": "List of emails", + "description": "List of emails." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the member has signed up." + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "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." + }, + "IShoppingOrderGood": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "commodity": { + "$ref": "#/components/schemas/IShoppingCartCommodity", + "title": "Commodity that is the basis of the good", + "description": "Commodity that is the basis of the good." + }, + "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." + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice.ISummary", + "title": "Price information including discounts and multipled volume", + "description": "Price information including discounts and multipled volume." + }, + "state": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "State of delivery about the good", + "description": "State of delivery about the good." + }, + "confirmed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Confirmation time of order good", + "description": "Confirmation time of order good.\n\nWhen be confirmed, customer can't request refund or exchange.\n\nThe confirmation be accomplished by following cases.\n\n- Customer does it directly.\n- 14 days after the delivery." + } + }, + "required": [ + "id", + "commodity", + "volume", + "price", + "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." + }, + "IShoppingCartCommodity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.IInvert", + "title": "Invert information of the sale (snapshot), in the perspective of commodity", + "description": "Invert information of the sale (snapshot), in the perspective of commodity." + }, + "orderable": { + "type": "boolean", + "title": "Whether current commodity is orderable or not", + "description": "Whether current commodity is orderable or not.\n\nIf this attribute is `false`, then the commodity is not orderable, because\nit has already been ordered." + }, + "pseudo": { + "type": "boolean", + "title": "Whether current commodity is pseudo or not", + "description": "Whether current commodity is pseudo or not.\n\nWhen this attribute is `true`, then the commodity is not the real one,\nbut just fake information only for calculating the discount effect by\n{@link IShoppingCoupon coupons}." + }, + "volume": { + "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." + }, + "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." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "sale", + "orderable", + "pseudo", + "volume", + "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." + }, + "IShoppingSaleSnapshot.IInvert": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "Belonged section's information", + "description": "Belonged section's information." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "Seller who've registered the sale", + "description": "Seller who've registered the sale." + }, + "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": { + "$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.IInvert" + }, + "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." + }, + "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." + }, + "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": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "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\"." + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "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." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "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." + } + }, + "required": [ + "section", + "seller", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "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}." + }, + "IShoppingSaleUnit.IInvert": { + "type": "object", + "properties": { + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock.IInvert" + }, + "minItems": 1, + "title": "List of final stocks", + "description": "List of final stocks." + }, + "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": [ + "stocks", + "id", + "name", + "primary", + "required" + ] + }, + "IShoppingSaleUnitStock.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "name": { + "type": "string", + "title": "Representative name of the stock", + "description": "Representative name of the stock." + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "Price of the stock", + "description": "Price of the stock." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "Quantity of the stock in the cart", + "description": "Quantity of the stock in the cart." + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockInventory", + "title": "Current inventory status of the stock", + "description": "Current inventory status of the stock." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice.IInvert" + }, + "title": "List of choices", + "description": "List of choices.\n\nWhich values being written for each option." + } + }, + "required": [ + "id", + "name", + "price", + "quantity", + "inventory", + "choices" + ], + "description": "Invert information from the cart." + }, + "IShoppingSaleUnitStockInventory": { + "type": "object", + "properties": { + "income": { + "type": "integer", + "title": "Total income quantity", + "description": "Total income quantity." + }, + "outcome": { + "type": "integer", + "title": "Total outcome quantity", + "description": "Total outcome quantity." + } + }, + "required": [ + "income", + "outcome" + ], + "description": "Inventory information of a final stock." + }, + "IShoppingSaleUnitStockChoice.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "option": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.IInvert" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ], + "title": "Target option", + "description": "Target option." + }, + "candidate": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate" + } + ], + "title": "Selected candidate value", + "description": "Selected candidate value." + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ], + "title": "Written value", + "description": "Written value." + } + }, + "required": [ + "id", + "option", + "candidate", + "value" + ], + "description": "Invert information from the cart." + }, + "IShoppingSaleUnitSelectableOption.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "type": { + "const": "select", + "title": "Discriminant for the type of selectable option", + "description": "Discriminant for the type of selectable option." + }, + "name": { + "type": "string", + "title": "Represents the name of the option", + "description": "Represents the name of the option." + }, + "variable": { + "type": "boolean", + "title": "Whether the option is variable or not", + "description": "Whether the option is variable or not.\n\nWhen type of current option is \"select\", this attribute means whether\nselecting different candidate value affects the final stock or not." + } + }, + "required": [ + "id", + "type", + "name", + "variable" + ] + }, + "IShoppingSaleUnitDescriptiveOption": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "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": [ + "id", + "type", + "name" + ], + "description": "Descriptive option.\n\nWhen type of the option not `\"select\"`, it means the option is descriptive\nthat requiring {@link IShoppingCustomer customers} to write some value to\n{@link IShoppingOrder purchase}. Also, whatever customer writes about the\noption, it does not affect the {@link IShoppingSaleUnitStock final stock}.\n\nAnother words, the descriptive option is just for information transfer." + }, + "IShoppingSaleUnitOptionCandidate": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "name": { + "type": "string", + "title": "Represents the name of the candidate value", + "description": "Represents the name of the candidate value." + } + }, + "required": [ + "id", + "name" + ], + "description": "Selectable candidate values within an option.\n\n`IShoppingSaleUnitOptionCandidate` is an entity that represents individual\ncandidate values that can be selected from\n{@link IShoppingSaleUnitSelectableOption options of the \"select\" type}.\n\n- Example\n - RAM: 8GB, 16GB, 32GB\n - GPU: RTX 3060, RTX 4080, TESLA\n - License: Private, Commercial, Educatiion\n\nBy the way, if belonged option is not \"select\" type, this entity never\nbeing used." + }, + "IShoppingOrderPrice.ISummary": { + "type": "object", + "properties": { + "cash": { + "type": "number", + "minimum": 0, + "title": "Amount of the cash payment", + "description": "Amount of the cash payment." + }, + "deposit": { + "type": "number", + "minimum": 0, + "title": "Amount of the deposit payment", + "description": "Amount of the deposit payment." + }, + "mileage": { + "type": "number", + "minimum": 0, + "title": "Amount of the mileage payment", + "description": "Amount of the mileage payment." + }, + "ticket": { + "type": "number", + "minimum": 0, + "title": "Amount of the discount coupon ticket payment", + "description": "Amount of the discount coupon ticket payment." + }, + "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": [ + "cash", + "deposit", + "mileage", + "ticket", + "nominal", + "real" + ], + "description": "Summarized information of the order price." + }, + "IShoppingOrderPrice": { + "type": "object", + "properties": { + "ticket_payments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicketPayment" + }, + "title": "List of discount coupon ticket payments", + "description": "List of discount coupon ticket payments." + }, + "cash": { + "type": "number", + "minimum": 0, + "title": "Amount of the cash payment", + "description": "Amount of the cash payment." + }, + "deposit": { + "type": "number", + "minimum": 0, + "title": "Amount of the deposit payment", + "description": "Amount of the deposit payment." + }, + "mileage": { + "type": "number", + "minimum": 0, + "title": "Amount of the mileage payment", + "description": "Amount of the mileage payment." + }, + "ticket": { + "type": "number", + "minimum": 0, + "title": "Amount of the discount coupon ticket payment", + "description": "Amount of the discount coupon ticket payment." + }, + "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": [ + "ticket_payments", + "cash", + "deposit", + "mileage", + "ticket", + "nominal", + "real" + ], + "description": "Price infromation of the order including discounts." + }, + "IShoppingCouponTicketPayment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "ticket": { + "$ref": "#/components/schemas/IShoppingCouponTicket", + "title": "Target ticket", + "description": "Target ticket." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "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." + }, + "IShoppingCouponTicket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who've taken the coupon ticket", + "description": "Customer who've taken the coupon ticket." + }, + "coupon": { + "$ref": "#/components/schemas/IShoppingCoupon", + "title": "Target coupon", + "description": "Target coupon." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "expired_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Expiration time of the ticket", + "description": "Expiration time of the ticket." + } + }, + "required": [ + "id", + "customer", + "coupon", + "created_at", + "expired_at" + ], + "description": "Discount coupon ticket issuance details.\n\n`IShoppingCouponTicket` is an entity that symbolizes\n{@link IShoppingCoupon discount coupon} tickets issued by\n{@link IShoppingCustomer customers}.\n\nAnd if the target discount coupon specification itself has an expiration\ndate, the expiration date is recorded in expired_at and is automatically\ndiscarded after that expiration date. Of course, it doesn't matter if you\nuse the discount coupon for your order within the deadline." + }, + "IShoppingOrderPublish": { + "type": "object", + "properties": { + "deliveries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDelivery" + }, + "title": "List of deliveries", + "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": { + "oneOf": [ + { + "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", + "format": "date-time" + } + ], + "title": "Time when the order was paid", + "description": "Time when the order was paid." + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Time when the payment was cancelled", + "description": "Time when the payment was cancelled." + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress", + "title": "Address where the {@link IShoppingOrderGood goods} to be delivered", + "description": "Address where the {@link IShoppingOrderGood goods} to be delivered." + } + }, + "required": [ + "deliveries", + "state", + "id", + "created_at", + "paid_at", + "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." + }, + "IShoppingDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "Seller who've delivered the goods", + "description": "Seller who've delivered the goods." + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + }, + "title": "List of journeys of the delivery", + "description": "List of journeys of the delivery." + }, + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece" + }, + "minItems": 1, + "title": "List of pieces of the delivery", + "description": "List of pieces of the delivery." + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + }, + "title": "List of shippers of the delivery", + "description": "List of shippers of the delivery." + }, + "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." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "seller", + "journeys", + "pieces", + "shippers", + "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}." + }, + "IShoppingDeliveryJourney": { + "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 the record", + "description": "Creation time of the record." + }, + "deleted_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Deletion time of the record", + "description": "Deletion time of the record." + }, + "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" + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "id", + "created_at", + "deleted_at", + "type", + "title", + "description", + "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}." + }, + "IShoppingDeliveryPiece": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "publish_id": { + "type": "string", + "format": "uuid", + "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}." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id}", + "description": "Target stock's {@link IShoppingSaleUnitStock.id}." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "Quantity of the stock", + "description": "Quantity of the stock.\n\nIt can be precision value to express splitted shipping." + } + }, + "required": [ + "id", + "publish_id", + "good_id", + "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." + }, + "IShoppingDeliveryShipper": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "company": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "id", + "created_at", + "company", + "name", + "mobile" + ] + }, + "IShoppingAddress": { + "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 record", + "description": "Creation time of record." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number to contact", + "description": "Mobile number to contact." + }, + "name": { + "type": "string", + "title": "Representative name of the address", + "description": "Representative name of the address.\n\nSometimes be receiver's name, and sometimes be place name." + }, + "country": { + "type": "string", + "title": "Country name", + "description": "Country name." + }, + "province": { + "type": "string", + "title": "Province name", + "description": "Province name." + }, + "city": { + "type": "string", + "title": "City name", + "description": "City name." + }, + "department": { + "type": "string", + "title": "Department name", + "description": "Department name." + }, + "possession": { + "type": "string", + "title": "Detailed address containing street name, building number, and room number", + "description": "Detailed address containing street name, building number, and room number." + }, + "zip_code": { + "type": "string", + "title": "Zip code, or postal code", + "description": "Zip code, or postal code." + }, + "special_note": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Special description if required", + "description": "Special description if required." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ], + "description": "The address information." + }, + "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." + }, + "IShoppingOrder.IRequest.ISearch": { + "type": "object", + "properties": { + "min_price": { + "type": "number" + }, + "max_price": { + "type": "number" + }, + "paid": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + } + }, + "IShoppingSale.IRequest.ISearch": { + "type": "object", + "properties": { + "show_paused": { + "type": "boolean" + }, + "show_suspended": { + "oneOf": [ + { + "const": "only" + }, + { + "type": "boolean" + } + ] + }, + "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" + }, + "count": { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.ICountRange" + } + } + }, + "IShoppingSaleReview.IInvertSearch.IScoreRange": { + "type": "object", + "properties": { + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "IShoppingSaleReview.IInvertSearch.ICountRange": { + "type": "object", + "properties": { + "minimum": { + "type": "integer" + }, + "maximum": { + "type": "integer" + } + } + }, + "IShoppingSeller.IRequest.ISearch": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "nickname": { + "type": "string" + } + } + }, + "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": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch", + "title": "Search conditions", + "description": "Search conditions." + }, + "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" + } + ] + }, + "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 sales with pagination and searching/sorting options." + }, + "IShoppingSale": { + "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." + }, + "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", + "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" + }, + "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." + }, + "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." + }, + "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": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "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\"." + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "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." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "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." + } + }, + "required": [ + "section", + "seller", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "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." + }, + "IShoppingSaleContent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the content", + "description": "Title of the content." + }, + "format": { + "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`." + }, + "body": { + "type": "string", + "title": "The main body content", + "description": "The main body content." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + }, + "title": "List of attached files", + "description": "List of attached files." + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + }, + "title": "List of thumbnails", + "description": "List of thumbnails." + } + }, + "required": [ + "id", + "title", + "format", + "body", + "files", + "thumbnails" + ], + "description": "Content information of sale snapshot.\n\n`IShoppingSaleContent` is an entity embodies the description contents\nof {@link IShoppingSale}." + }, + "IShoppingSaleUnit": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ] + }, + "title": "List of options", + "description": "List of options." + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock" + }, + "minItems": 1, + "title": "List of final stocks", + "description": "List of final stocks." + }, + "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": [ + "options", + "stocks", + "id", + "name", + "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." + }, + "IShoppingSaleUnitSelectableOption": { + "type": "object", + "properties": { + "candidates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate" + }, + "minItems": 1, + "title": "List of candidate values", + "description": "List of candidate values." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "type": { + "const": "select", + "title": "Discriminant for the type of selectable option", + "description": "Discriminant for the type of selectable option." + }, + "name": { + "type": "string", + "title": "Represents the name of the option", + "description": "Represents the name of the option." + }, + "variable": { + "type": "boolean", + "title": "Whether the option is variable or not", + "description": "Whether the option is variable or not.\n\nWhen type of current option is \"select\", this attribute means whether\nselecting different candidate value affects the final stock or not." + } + }, + "required": [ + "candidates", + "id", + "type", + "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}." + }, + "IShoppingSaleUnitStock": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "name": { + "type": "string", + "title": "Representative name of the stock", + "description": "Representative name of the stock." + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "Price of the stock", + "description": "Price of the stock." + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockInventory", + "title": "Current inventory status of the stock", + "description": "Current inventory status of the stock." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice" + }, + "title": "List of choices", + "description": "List of choices.\n\nWhich candidate values being chosen for each option." + } + }, + "required": [ + "id", + "name", + "price", + "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." + }, + "IShoppingSaleUnitStockChoice": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "option_id": { + "type": "string", + "format": "uuid", + "description": "Target option's {@link IShoppingSaleUnitOption.id}" + }, + "candidate_id": { + "type": "string", + "format": "uuid", + "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id}" + } + }, + "required": [ + "id", + "option_id", + "candidate_id" + ], + "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." + }, + "IPageIShoppingSaleInquiryComment": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleInquiryComment": { + "type": "object", + "properties": { + "writer": { + "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." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "Parent comment's ID", + "description": "Parent comment's ID." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticleComment.ISnapshot" + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when a comment being created, and is\naccumulated every time the comment is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of comment", + "description": "Creation time of comment." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "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." + }, + "IBbsArticleComment.ISnapshot": { + "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 snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "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`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "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." + }, + "IAttachmentFile.ICreate": { + "type": "object", + "properties": { + "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": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "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": [ + "name", + "extension", + "url" + ] + }, + "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" + } + } + }, + "IShoppingSaleInquiryComment.ICreate": { + "type": "object", + "properties": { + "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`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "Creation information of the comment." + }, + "IShoppingSaleInquiryComment.ISnapshot": { + "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 snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." + }, + "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`." + }, + "body": { + "type": "string", + "title": "Content body of comment", + "description": "Content body of comment." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "Snapshot content of the comment." + }, + "IPageIShoppingSaleQuestion.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.ISummary" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleQuestion.ISummary": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "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": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the question." + }, + "IShoppingSaleInquiryAnswer.ISummary": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "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": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ] + }, + "IShoppingSaleQuestion.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSaleInquiry.IRequest.ISearch", + "title": "Search conditions", + "description": "Search conditions." + }, + "sort": { + "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": { + "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.IAbridge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IAbridge" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleQuestion.IAbridge": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "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.IAbridge" + } + ], + "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." + }, + "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`." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the question." + }, + "IShoppingSaleInquiryAnswer.IAbridge": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "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." + }, + "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`." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ] + }, + "IShoppingSaleQuestion": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "type": { + "const": "question", + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion}\n- `review`: {@link IShoppingSaleReview}" + }, + "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" + } + ], + "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." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "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." + }, + "IShoppingSaleInquiryAnswer": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "Seller who've written the answer", + "description": "Seller who've written the answer." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "Answers to questions about sale snapshots.\n\n`IShoppingSaleInquiryAnswer` is an entity that embodies the official\nanswer written by the {@link IShoppingSeller seller} to the\n{@link IShoppingSaleInquiry inquiry} written by the\n{@link IShoppingCustomer customer}.\n\nOf course, in addition to writing an official response like this, it is\nalso possible for the seller to communicate with the inqjuiry written\ncustomer and multiple customers through\n{@link IShoppingSaleInquiryComment comments} in the attribution inquiry.\n\nFor refererence, it is not possible to write comments on this answer.\nEncourage people to write comments on the inquiry article. This is to\nprevent comments from being scattered in both inquiry and answer\narticles." + }, + "IBbsArticle.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "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`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "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." + }, + "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", + "title": "Search conditions", + "description": "Search conditions." + }, + "sort": { + "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", + "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." + }, + "IShoppingSaleReview.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" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "IPageIShoppingSaleReview.IAbridge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.IAbridge" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleReview.IAbridge": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "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.IAbridge" + } + ], + "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." + }, + "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`." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "Abridged information of the review." + }, + "IShoppingSaleReview": { + "type": "object", + "properties": { + "type": { + "const": "review", + "title": "Type of the derived inquiry", + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion}\n- `review`: {@link IShoppingSaleReview}" + }, + "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" + } + ], + "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." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISnapshot" + }, + "minItems": 1, + "title": "List of snapshot contents", + "description": "List of snapshot contents.\n\nIt is created for the first time when an article is created, and is\naccumulated every time the article is modified." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of article", + "description": "Creation time of article." + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "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?" + }, + "IShoppingSaleReview.ISnapshot": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "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`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "Snapshot content of the review article." + }, + "IPageIShoppingSaleSnapshot.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.ISummary" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleSnapshot.ISummary": { + "type": "object", + "properties": { + "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": { + "$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." + } + }, + "required": [ + "price_range", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units" + ], + "description": "Summarized information of the sale snapshot." + }, + "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" + }, + "IShoppingSaleSnapshot": { + "type": "object", + "properties": { + "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", + "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" + }, + "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": { + "type": "object", + "properties": { + "parent": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + ], + "title": "Parent category info", + "description": "Parent category info." + }, + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "List of children categories with hierarchical structure", + "description": "List of children categories with hierarchical structure." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "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." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "parent", + "children", + "id", + "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." + }, + "IShoppingChannelCategory.IHierarchical": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "List of children categories with hierarchical structure", + "description": "List of children categories with hierarchical structure." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "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." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." + } + }, + "required": [ + "children", + "id", + "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." + }, + "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", + "name" + ], + "description": "Creation information of the category." + }, + "IRecordMerge": { + "type": "object", + "properties": { + "keep": { + "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." + }, + "absorbed": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "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." + }, + "IShoppingChannel.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." + }, + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "code", + "name" + ], + "description": "Creation information of the channel." + }, + "IShoppingChannel.IUpdate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." + } + }, + "required": [ + "name" + ], + "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" + }, + "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" + } + ] + } + }, + "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 channels with pagination and searching/sorting options." + }, + "IShoppingChannel.IRequest.ISearch": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "IPageIShoppingChannel.IHierarchical": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingChannel.IHierarchical": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "Children categories with hierarchical structure", + "description": "Children categories with hierarchical structure." + }, + "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." + }, + "code": { + "type": "string", + "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." + }, + "IPageIShoppingSection": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSection" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "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." + } + }, + "description": "Request of the sections with pagination and searching/sorting options." + }, + "IShoppingSection.IRequest.ISearch": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "IShoppingCustomer.IAuthorized": { + "type": "object", + "properties": { + "setHeaders": { + "type": "object", + "properties": { + "Authorization": { + "type": "string" + } + }, + "required": [ + "Authorization" + ] + }, + "token": { + "$ref": "#/components/schemas/IShoppingCustomer.IToken" + }, + "type": { + "const": "customer", + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMember" + } + ], + "title": "Membership information", + "description": "Membership information.\n\nIf the customer has joined as a member." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "Citizen information", + "description": "Citizen information.\n\nIf the customer has verified his real name and mobile number." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "Belonged channel", + "description": "Belonged channel." + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "External user information", + "description": "External user information.\n\nWhen the customer has come frome an external service." + }, + "href": { + "type": "string", + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href} of client." + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer} of client." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "Connection IP Address", + "description": "Connection IP Address." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the connection record", + "description": "Creation time of the connection record." + } + }, + "required": [ + "setHeaders", + "token", + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ] + }, + "IShoppingCustomer.IToken": { + "type": "object", + "properties": { + "access": { + "type": "string" + }, + "refresh": { + "type": "string" + }, + "expired_at": { + "type": "string", + "format": "date-time" + }, + "refreshable_until": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "access", + "refresh", + "expired_at", + "refreshable_until" + ] + }, + "IShoppingCustomer.IRefresh": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + }, + "IShoppingCustomer.ICreate": { + "type": "object", + "properties": { + "channel_code": { + "type": "string" + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser.ICreate" + } + ] + }, + "href": { + "type": "string", + "format": "uri" + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ] + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ] + } + }, + "required": [ + "channel_code", + "external_user", + "href", + "referrer" + ] + }, + "IShoppingExternalUser.ICreate": { + "type": "object", + "properties": { + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + ], + "title": "Citizen activation info", + "description": "Citizen activation info." + }, + "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." + }, + "nickname": { + "type": "string", + "title": "Nickname of external user in the external system", + "description": "Nickname of external user in the external system." + }, + "password": { + "type": "string", + "title": "Password of external user from the external system", + "description": "Password of external user from the external system.\n\nThis is a password issued to the user by an external service,\nand is by no means the actual user password. However, for\n{@link IShoppingCustomer customers} who entered the same\napplication and code as the current external system user, this is\nto determine whether to view this as a correct external system\nuser or a violation." + }, + "data": { + "description": "Additional information about external user from the external\nsystem." + } + }, + "required": [ + "citizen", + "application", + "uid", + "nickname", + "password", + "data" + ], + "description": "Creation information of external user." + }, + "IShoppingCitizen.ICreate": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number", + "description": "Mobile number." + }, + "name": { + "type": "string", + "title": "Real name, or equivalent nickname", + "description": "Real name, or equivalent nickname." + } + }, + "required": [ + "mobile", + "name" + ], + "description": "Creation information of citizen verification." + }, + "IShoppingMember.IJoin": { + "type": "object", + "properties": { + "nickname": { + "type": "string", + "title": "Nickname that uniquely identifies the member", + "description": "Nickname that uniquely identifies the member." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + ], + "title": "Citizen information", + "description": "Citizen information." + }, + "email": { + "type": "string", + "format": "email", + "title": "Email address of member", + "description": "Email address of member.\n\nIf the member has multiple email addresses, just use one of them." + }, + "password": { + "type": "string", + "title": "Password of the member account", + "description": "Password of the member account." + } + }, + "required": [ + "nickname", + "citizen", + "email", + "password" + ], + "description": "Joining request info." + }, + "IShoppingMember.IPasswordChange": { + "type": "object", + "properties": { + "oldbie": { + "type": "string", + "title": "Current password", + "description": "Current password." + }, + "newbie": { + "type": "string", + "title": "The new password to change", + "description": "The new password to change." + } + }, + "required": [ + "oldbie", + "newbie" + ], + "description": "Request info of password change." + }, + "IPageIShoppingCouponTicket": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "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." + } + } + }, + "IShoppingCouponTicket.ICreate": { + "type": "object", + "properties": { + "coupon_id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "coupon_id" + ] + }, + "IPageIShoppingDepositCharge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingDepositCharge": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer" + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDepositChargePublish" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "customer", + "publish", + "created_at", + "value" + ] + }, + "IShoppingDepositChargePublish": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ] + }, + "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": { + "oneOf": [ + { + "const": "published" + }, + { + "const": "pending" + }, + { + "const": "payed" + }, + { + "const": "cancelled" + } + ] + }, + "publish": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "payment": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "required": [ + "state" + ] + }, + "IShoppingDepositCharge.ICreate": { + "type": "object", + "properties": { + "value": { + "type": "number" + } + }, + "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" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "deposit", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "IShoppingDepositHistory.IRequest": { + "type": "object", + "properties": { + "search": { + "$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" + } + ] + } + }, + "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." + } + } + }, + "IShoppingDepositHistory.IRequest.ISearch": { + "type": "object", + "properties": { + "deposit": { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "IPageIShoppingMileageHistory": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileageHistory" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "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" + ] + }, + "IShoppingMileageHistory.IRequest": { + "type": "object", + "properties": { + "search": { + "$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" + } + ] + } + }, + "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." + } + } + }, + "IShoppingMileageHistory.IRequest.ISearch": { + "type": "object", + "properties": { + "mileage": { + "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "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." + }, + "IShoppingCartCommodity.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingCartCommodity.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" + }, + { + "const": "-commodity.price" + }, + { + "const": "-commodity.volume" + }, + { + "const": "-commodity.volumed_price" + }, + { + "const": "-commodity.created_at" + }, + { + "const": "+commodity.price" + }, + { + "const": "+commodity.volume" + }, + { + "const": "+commodity.volumed_price" + }, + { + "const": "+commodity.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." + } + } + }, + "IShoppingCartCommodity.IRequest.ISearch": { + "type": "object", + "properties": { + "min_price": { + "type": "number" + }, + "max_price": { + "type": "number" + }, + "min_volumed_price": { + "type": "number" + }, + "max_volumed_price": { + "type": "number" + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + } + }, + "IShoppingCartCommodity.ICreate": { + "type": "object", + "properties": { + "sale_id": { + "type": "string", + "format": "uuid", + "title": "Target sale's {@link IShoppingSale.id}", + "description": "Target sale's {@link IShoppingSale.id}." + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodityStock.ICreate" + }, + "minItems": 1, + "title": "List of the stocks to be purchased", + "description": "List of the stocks to be purchased." + }, + "volume": { + "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." + }, + "accumulate": { + "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." + } + }, + "required": [ + "sale_id", + "stocks", + "volume" + ], + "description": "Creation information of a shopping cart commodity." + }, + "IShoppingCartCommodityStock.ICreate": { + "type": "object", + "properties": { + "unit_id": { + "type": "string", + "format": "uuid", + "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." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodityStockChoice.ICreate" + }, + "title": "Creation information of the choices for each option", + "description": "Creation information of the choices for each option." + }, + "quantity": { + "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}." + } + }, + "required": [ + "unit_id", + "stock_id", + "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}." + }, + "IShoppingCartCommodityStockChoice.ICreate": { + "type": "object", + "properties": { + "option_id": { + "type": "string", + "format": "uuid", + "title": "Target option's {@link IShoppingSaleUnitOption.id}", + "description": "Target option's {@link IShoppingSaleUnitOption.id}." + }, + "candidate_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "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." + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ], + "title": "Written value about the option", + "description": "Written value about the option.\n\nWhen target option's type is not `select`, but an atomic type value\nlike `boolean`, `number` or `string`, then this attribute is not\n`null` but has the matched atomic value." + } + }, + "required": [ + "option_id", + "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}." + }, + "IShoppingCartCommodity.IUpdate": { + "type": "object", + "properties": { + "volume": { + "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." + } + }, + "required": [ + "volume" + ], + "description": "Update information of a shopping cart commodity." + }, + "IShoppingCartDiscountable": { + "type": "object", + "properties": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "combinations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.ICombination" + } + } + }, + "required": [ + "deposit", + "mileage", + "combinations" + ] + }, + "IShoppingCartDiscountable.ICombination": { + "type": "object", + "properties": { + "coupons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + }, + "tickets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.IEntry" + } + }, + "amount": { + "type": "number" + } + }, + "required": [ + "coupons", + "tickets", + "entries", + "amount" + ] + }, + "IShoppingCartDiscountable.IEntry": { + "type": "object", + "properties": { + "commodity_id": { + "type": "string", + "format": "uuid" + }, + "pseudo": { + "type": "boolean" + }, + "coupon_id": { + "type": "string", + "format": "uuid" + }, + "amount": { + "type": "number" + } + }, + "required": [ + "commodity_id", + "pseudo", + "coupon_id", + "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": { + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood.ICreate" + }, + "title": "List of goods in the order", + "description": "List of goods in the order." + } + }, + "required": [ + "goods" + ], + "description": "Creation information of the order appliance." + }, + "IShoppingOrderGood.ICreate": { + "type": "object", + "properties": { + "commodity_id": { + "type": "string", + "format": "uuid", + "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." + } + }, + "required": [ + "commodity_id", + "volume" + ], + "description": "Creation information of the good." + }, + "IShoppingOrderDiscountable": { + "type": "object", + "properties": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "combinations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.ICombination" + } + } + }, + "required": [ + "deposit", + "mileage", + "combinations" + ] + }, + "IShoppingOrderDiscountable.ICombination": { + "type": "object", + "properties": { + "coupons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + }, + "tickets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.IEntry" + } + }, + "amount": { + "type": "number" + } + }, + "required": [ + "coupons", + "tickets", + "entries", + "amount" + ] + }, + "IShoppingOrderDiscountable.IEntry": { + "type": "object", + "properties": { + "good_id": { + "type": "string", + "format": "uuid" + }, + "coupon_id": { + "type": "string", + "format": "uuid" + }, + "amount": { + "type": "number" + } + }, + "required": [ + "good_id", + "coupon_id", + "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": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "coupon_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "deposit", + "mileage", + "coupon_ids" + ] + }, + "IShoppingOrderPublish.ICashCreate": { + "type": "object", + "properties": { + "type": { + "const": "cash" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress.ICreate" + }, + "vendor": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "type", + "address", + "vendor", + "uid" + ] + }, + "IShoppingAddress.ICreate": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "Mobile number to contact", + "description": "Mobile number to contact." + }, + "name": { + "type": "string", + "title": "Representative name of the address", + "description": "Representative name of the address.\n\nSometimes be receiver's name, and sometimes be place name." + }, + "country": { + "type": "string", + "title": "Country name", + "description": "Country name." + }, + "province": { + "type": "string", + "title": "Province name", + "description": "Province name." + }, + "city": { + "type": "string", + "title": "City name", + "description": "City name." + }, + "department": { + "type": "string", + "title": "Department name", + "description": "Department name." + }, + "possession": { + "type": "string", + "title": "Detailed address containing street name, building number, and room number", + "description": "Detailed address containing street name, building number, and room number." + }, + "zip_code": { + "type": "string", + "title": "Zip code, or postal code", + "description": "Zip code, or postal code." + }, + "special_note": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Special description if required", + "description": "Special description if required." + } + }, + "required": [ + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ] + }, + "IShoppingOrderPublish.IZeroCreate": { + "type": "object", + "properties": { + "type": { + "const": "zero" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress.ICreate" + } + }, + "required": [ + "type", + "address" + ] + }, + "IShoppingSaleQuestion.ICreate": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "Whether the question article is secret or not", + "description": "Whether the question article is secret or not.\n\nIf secret article, only the writer customer and related seller can see\nthe detailed content." + }, + "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`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "secret", + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the question." + }, + "IBbsArticle.ICreate": { + "type": "object", + "properties": { + "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`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the article." + }, + "IShoppingSaleReview.ICreate": { + "type": "object", + "properties": { + "good_id": { + "type": "string", + "format": "uuid", + "title": "Target good's {@link IShoppingOrderGood.id}", + "description": "Target good's {@link IShoppingOrderGood.id}." + }, + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "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`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "good_id", + "score", + "format", + "title", + "body", + "files" + ], + "description": "Creation information of the review." + }, + "IShoppingSaleReview.IUpdate": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Score of the review", + "description": "Score of the review." + }, + "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`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "score", + "format", + "title", + "body", + "files" + ], + "description": "Updating information of the review." + }, + "IShoppingSeller.IJoin": { + "type": "object", + "properties": {} + }, + "IPageIShoppingDelivery.IInvert": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDelivery.IInvert" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingDelivery.IInvert": { + "type": "object", + "properties": { + "orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrder.IInvertFromDelivery" + }, + "minItems": 1, + "title": "List of orders of the delivery", + "description": "List of orders of the delivery." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "Seller who've delivered the goods", + "description": "Seller who've delivered the goods." + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + }, + "title": "List of journeys of the delivery", + "description": "List of journeys of the delivery." + }, + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece" + }, + "minItems": 1, + "title": "List of pieces of the delivery", + "description": "List of pieces of the delivery." + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + }, + "title": "List of shippers of the delivery", + "description": "List of shippers of the delivery." + }, + "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." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "orders", + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "Invert information of the delivery." + }, + "IShoppingOrder.IInvertFromDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who've applied for the order", + "description": "Customer who've applied for the order." + }, + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood" + }, + "minItems": 1, + "title": "List of goods in the order", + "description": "List of goods in the order." + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice", + "title": "Price information including discounts", + "description": "Price information including discounts." + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish.IInvertFromDelivery" + } + ], + "title": "Order completion and payment information", + "description": "Order completion and payment information." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + } + }, + "required": [ + "id", + "customer", + "goods", + "price", + "publish", + "created_at" + ], + "description": "Invert information from delivery." + }, + "IShoppingOrderPublish.IInvertFromDelivery": { + "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 the record", + "description": "Creation time of the record." + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Time when the order was paid", + "description": "Time when the order was paid." + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Time when the payment was cancelled", + "description": "Time when the payment was cancelled." + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress", + "title": "Address where the {@link IShoppingOrderGood goods} to be delivered", + "description": "Address where the {@link IShoppingOrderGood goods} to be delivered." + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at", + "address" + ], + "description": "Invert information from the delivery." + }, + "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." + } + } + }, + "IShoppingDelivery.ICreate": { + "type": "object", + "properties": { + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.ICreate" + }, + "minItems": 1, + "title": "List of pieces of the delivery", + "description": "List of pieces of the delivery." + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.ICreate" + }, + "title": "List of journeys of the delivery", + "description": "List of journeys of the delivery.\n\nThis is initial data, and it is also possible to accumulate journey data\nafter the delivery creation." + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper.ICreate" + }, + "title": "List of shippers of the delivery", + "description": "List of shippers of the delivery." + } + }, + "required": [ + "pieces", + "journeys", + "shippers" + ], + "description": "Creation information of the delivery." + }, + "IShoppingDeliveryPiece.ICreate": { + "type": "object", + "properties": { + "publish_id": { + "type": "string", + "format": "uuid", + "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}." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "Target stock's {@link IShoppingSaleUnitStock.id}", + "description": "Target stock's {@link IShoppingSaleUnitStock.id}." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "Quantity of the stock", + "description": "Quantity of the stock.\n\nIt can be precision value to express splitted shipping." + } + }, + "required": [ + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "Creation information of the delivery piece." + }, + "IShoppingDeliveryJourney.ICreate": { + "type": "object", + "properties": { + "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" + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Title of journey", + "description": "Title of journey." + }, + "description": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Description of journey", + "description": "Description of journey." + }, + "started_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Start time of the journey", + "description": "Start time of the journey." + }, + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "Creation information of the delivery journey." + }, + "IShoppingDeliveryShipper.ICreate": { + "type": "object", + "properties": { + "company": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "company", + "name", + "mobile" + ] + }, + "IShoppingDeliveryPiece.IRequest": { + "type": "object", + "properties": { + "publish_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "publish_ids" + ] + }, + "IShoppingDeliveryJourney.IComplete": { + "type": "object", + "properties": { + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Completion time of the journey", + "description": "Completion time of the journey." + } + }, + "required": [ + "completed_at" + ], + "description": "Completion information of the delivery journey." + }, + "IShoppingSale.ICreate": { + "type": "object", + "properties": { + "section_code": { + "type": "string", + "title": "Belonged section's {@link IShoppingSection.code}", + "description": "Belonged section's {@link IShoppingSection.code}." + }, + "status": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "paused" + }, + { + "const": "suspended" + } + ], + "title": "Initial status of the sale", + "description": "Initial status of the sale.\n\n`null` or `undefined`: No restriction\n`paused`: Starts with {@link ITimestamps.paused_at paused} status\n`suspended`: Starts with {@link ITimestamps.suspended_at suspended} status" + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "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." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.ICreate" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel.ICreate" + } + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ICreate" + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "section_code", + "opened_at", + "closed_at", + "content", + "channels", + "units", + "tags" + ], + "description": "Creation information of sale." + }, + "IShoppingSaleContent.ICreate": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ] + }, + "body": { + "type": "string" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + } + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + } + } + }, + "required": [ + "title", + "format", + "body", + "files", + "thumbnails" + ] + }, + "IShoppingSaleChannel.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Target channel's {@link IShoppingChannel.code}", + "description": "Target channel's {@link IShoppingChannel.code}." + }, + "category_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "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." + } + }, + "required": [ + "code", + "category_ids" + ], + "description": "Creation information of the target channel (and categories) of sale to sell." + }, + "IShoppingSaleUnit.ICreate": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption.ICreate" + } + ] + }, + "title": "List of options", + "description": "List of options." + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock.ICreate" + }, + "minItems": 1, + "title": "List of final stocks", + "description": "List of final stocks." + }, + "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": [ + "options", + "stocks", + "name", + "primary", + "required" + ], + "description": "Creation information of sale unit." + }, + "IShoppingSaleUnitSelectableOption.ICreate": { + "type": "object", + "properties": { + "type": { + "const": "select", + "title": "Discriminant for the type of selectable option", + "description": "Discriminant for the type of selectable option." + }, + "name": { + "type": "string", + "title": "Represents the name of the option", + "description": "Represents the name of the option." + }, + "variable": { + "type": "boolean", + "title": "Whether the option is variable or not", + "description": "Whether the option is variable or not.\n\nWhen type of current option is \"select\", this attribute means whether\nselecting different candidate value affects the final stock or not." + }, + "candidates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate.ICreate" + }, + "minItems": 1, + "title": "List of candidate values", + "description": "List of candidate values." + } + }, + "required": [ + "type", + "name", + "variable", + "candidates" + ], + "description": "Creation information of the selectable option." + }, + "IShoppingSaleUnitOptionCandidate.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Represents the name of the candidate value", + "description": "Represents the name of the candidate value." + } + }, + "required": [ + "name" + ], + "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": { + "name": { + "type": "string", + "title": "Representative name of the stock", + "description": "Representative name of the stock." + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "Price of the stock", + "description": "Price of the stock." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "Initial inventory quantity", + "description": "Initial inventory quantity." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice.ICreate" + }, + "title": "List of choices", + "description": "List of choices.\n\nWhich candidate values being chosen for each option." + } + }, + "required": [ + "name", + "price", + "quantity", + "choices" + ], + "description": "Creation information of the stock." + }, + "IShoppingSaleUnitStockChoice.ICreate": { + "type": "object", + "properties": { + "option_index": { + "type": "integer", + "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}." + } + }, + "required": [ + "option_index", + "candidate_index" + ], + "description": "Creation information of stock choice." + }, + "IShoppingSaleSnapshot.ICreate": { + "type": "object", + "properties": { + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.ICreate" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel.ICreate" + } + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ICreate" + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "content", + "channels", + "units", + "tags" + ], + "description": "Creation information of the snapshot." + }, + "IShoppingSale.IUpdateOpeningTime": { + "type": "object", + "properties": { + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "Opening time of the sale", + "description": "Opening time of the sale." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "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." + } + }, + "required": [ + "opened_at", + "closed_at" + ], + "description": "Update opening time information of sale." + }, + "IShoppingSaleInquiryAnswer.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of snapshot record", + "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." + }, + "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`." + }, + "title": { + "type": "string", + "title": "Title of article", + "description": "Title of article." + }, + "body": { + "type": "string", + "title": "Content body of article", + "description": "Content body of article." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "List of attachment files", + "description": "List of attachment files." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ] + }, + "IPageIShoppingSaleUnitStockSupplement": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleUnitStockSupplement": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record.\n\nAnother words, the time when inventory of the stock being supplemented." + } + }, + "required": [ + "id", + "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." + }, + "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." + }, + "IShoppingSaleUnitStockSupplement.ICreate": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + } + }, + "required": [ + "value" + ], + "description": "Creation information of the supplement." + } + }, + "securitySchemes": { + "bearer": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } + }, + "tags": [ + { + "name": "Monitor" + }, + { + "name": "Authenticate" + }, + { + "name": "Discount" + }, + { + "name": "Order" + }, + { + "name": "Sale" + }, + { + "name": "Systematic" + }, + { + "name": "Section" + } + ], + "x-samchon-emended": true +} \ No newline at end of file diff --git a/assets/output/bbs.article.ar.json b/assets/output/bbs.article.ar.json new file mode 100644 index 0000000..af51531 --- /dev/null +++ b/assets/output/bbs.article.ar.json @@ -0,0 +1,7 @@ +{ + "id": "c1cbfc65-51fe-4cc3-b162-568fdedb1c41", + "title": "[مقال] مرحبًا، يسعدني أن ألتقي بكم.", + "body": "يسعدني أن ألتقي بكم مستخدمي translate-json.\n\nهذا ملف JSON مثال يجسد مقالة BBS.\n\nدعنا نرى كيف يمكن ترجمة هذا المحتوى إلى لغات أخرى.", + "created_at": "2024-09-26T19:45:47.145Z", + "updated_at": "2024-10-22T03:49:25.790Z" +} \ No newline at end of file diff --git a/assets/output/bbs.article.ja.json b/assets/output/bbs.article.ja.json new file mode 100644 index 0000000..9d15fe5 --- /dev/null +++ b/assets/output/bbs.article.ja.json @@ -0,0 +1,7 @@ +{ + "id": "c1cbfc65-51fe-4cc3-b162-568fdedb1c41", + "title": "[記事] こんにちは、初めまして。", + "body": "translate-json ユーザーの皆さん、初めまして。\n\nこれは BBS 記事を具体化した JSON ファイルの例です。\n\nこのコンテンツが他の言語にどのように翻訳されるかを見てみましょう。", + "created_at": "2024-09-26T19:45:47.145Z", + "updated_at": "2024-10-22T03:49:25.790Z" +} \ No newline at end of file diff --git a/assets/output/bbs.article.ko.json b/assets/output/bbs.article.ko.json new file mode 100644 index 0000000..438c4ec --- /dev/null +++ b/assets/output/bbs.article.ko.json @@ -0,0 +1,7 @@ +{ + "id": "c1cbfc65-51fe-4cc3-b162-568fdedb1c41", + "title": "[기사] 안녕하세요, 만나서 반갑습니다.", + "body": "translate-json 사용자 여러분, 만나서 반갑습니다.\n\n이것은 BBS 기사를 구현한 JSON 파일 예입니다.\n\n이 콘텐츠를 다른 언어로 어떻게 번역하는지 살펴보겠습니다.", + "created_at": "2024-09-26T19:45:47.145Z", + "updated_at": "2024-10-22T03:49:25.790Z" +} \ No newline at end of file diff --git a/assets/output/shopping.swagger.ar.json b/assets/output/shopping.swagger.ar.json new file mode 100644 index 0000000..34020df --- /dev/null +++ b/assets/output/shopping.swagger.ar.json @@ -0,0 +1,18749 @@ +{ + "openapi": "3.1.0", + "servers": [ + { + "url": "http://localhost:37001", + "description": "الخادم المحلي" + } + ], + "info": { + "version": "0.5.0", + "title": "@samchon/shopping-backend", + "description": "الواجهة الخلفية للتسوق", + "license": { + "name": "MIT" + } + }, + "paths": { + "/monitors/health": { + "get": { + "summary": "واجهة برمجة تطبيقات فحص الحالة", + "description": "واجهة برمجة تطبيقات فحص الحالة.", + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + } + } + }, + "/monitors/performance": { + "get": { + "summary": "الحصول على معلومات الأداء", + "description": "الحصول على معلومات الأداء.\n\nالحصول على معلومات الأداء المؤلفة من وحدة المعالجة المركزية والذاكرة واستخدام الموارد.", + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "معلومات الأداء", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPerformance" + } + } + } + } + } + } + }, + "/monitors/system": { + "get": { + "summary": "الحصول على معلومات النظام", + "description": "الحصول على معلومات النظام.\n\nالحصول على معلومات النظام مع معلومات الالتزام والحزمة.\n\nنظرًا لأن هذه المعلومات هي نوع من المعلومات الحساسة، فيجب تشفير الاستجابة.", + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "معلومات النظام", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ISystem" + } + } + } + } + } + } + }, + "/monitors/system/internal_server_error": { + "get": { + "tags": [], + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + } + } + }, + "/monitors/system/uncaught_exception": { + "get": { + "tags": [], + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + } + } + }, + "/shoppings/admins/authenticate": { + "get": { + "summary": "الحصول على معلومات المسؤول", + "description": "احصل على معلومات المسؤول.\n\nاحصل على معلومات {@link IShoppingAdministrator.IInvert المسؤول}\nلعميل {@link IShoppingCustomer} الحالي.\n\nإذا لم يكن {@link IShoppingMember member} الحالي مسؤولاً،\nفإنه يطرح استثناء 403 محظورًا.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "responses": { + "200": { + "description": "معلومات المسؤول", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "انضم كمسؤول", + "description": "انضم كمشرف.\n\nانضم كمشرف باستخدام {@link IShoppingAdministrator.IJoin join info}.\n\nلا يُسمح بهذه الطريقة إلا عندما يكون {@link IShoppingCustomer customer} قد انضم بالفعل إلى عضوية {@link IShoppingMember}. إذا لم يكن الأمر كذلك، فيجب عليه (عليها) أن ينجز ذلك من قبل. إذا لم يكن الأمر كذلك، فسيتم طرح استثناء 403 المحظور.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "معلومات طلب الانضمام", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "معلومات المشرف", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/authenticate/login": { + "put": { + "summary": "تسجيل الدخول كمشرف", + "description": "تسجيل الدخول كمسؤول.\n\nتسجيل الدخول كمسؤول باستخدام {@link IShoppingAdministrator.ILogin login info}.\n\nهذه الطريقة لها نفس التأثير تمامًا مع وظيفة\n{@link ShoppingApi.functional.customers.authenticate.login}، ولكن\nالنوع المُعاد مختلف قليلاً. تعيد الوظيفة المماثلة النوع\n{@link IShoppingCustomer} الذي يبدأ من معلومات العميل، بحيث\nيتعين عليك الوصول إلى معلومات المسؤول من خلال\n`customer.member.administrator`. وعلى النقيض من ذلك، تعيد هذه الطريقة النوع\n{@link IShoppingAdministrator.IInvert} الذي يبدأ من معلومات\nالمسؤول، بحيث\nيتسنى لك الوصول إلى معلومات العميل من خلال `administrator.customer`.\n\nبالطبع، لاستخدام هذه الوظيفة، كان عليك {@link join} كمسؤول\nمن قبل. وإلا، فسيتم طرح استثناء 403 المحظور،", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "معلومات طلب تسجيل الدخول", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "معلومات المسؤول", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/coupons/{id}/destroy": { + "delete": { + "tags": [], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/coupons": { + "post": { + "summary": "إنشاء قسيمة جديدة", + "description": "أنشئ قسيمة جديدة.\n\nأنشئ {@link IShoppingCoupon coupon} جديدة بالمعلومات المقدمة.\n\nبالمناسبة، إذا كنت بائعًا في {@link IShoppingSeller}، فيجب عليك\nإضافة شرط تضمين {@link IShoppingCouponSellerCriteria} أو\n{@link IShoppingCouponSaleCriteria} في اتجاه التضمين. وذلك لأن\n{@link IShoppingAdministrator officials} فقط هم من يمكنهم إنشاء قسيمة\nيمكن استخدامها في السوق بالكامل. يجب على البائع تحديد نطاق الاستخدام\nبواسطة {@link IShoppingSale sale(s)}.\n\nبالطبع، عندما يخطط المسؤول لإنشاء قسيمة عامة\nيمكن استخدامها في السوق بالكامل، يجب على المسؤول\n\nالحصول على موافقة البائعين الذين سيتأثرون.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "معلومات إنشاء القسيمة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "القسيمة التي تم إنشاؤها حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "قم بإدراج كل القسائم", + "description": "قم بإدراج كل الكوبونات.\n\nقم بإدراج كل {@link IShoppingCoupon coupons} مع الترقيم.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingCoupon.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nللإشارة، إذا كنت {@link IShoppingCustomer customer}، فسيتم إدراج {@link IShoppingCouponTicket ticketable} فقط.\nوإلا، فسيتم إدراج الكوبونات غير القابلة لحجز التذاكر أيضًا.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "كوبونات مقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/coupons/{id}": { + "delete": { + "summary": "مسح كوبون", + "description": "مسح كوبون.\n\nمسح كوبون {@link IShoppingCoupon} بالمعرف المحدد.\n\nللإشارة، إذا كان هناك بعض {@link IShoppingCouponTicket تذاكر}\nتم إصدارها بالفعل من الكوبون المستهدف، فلن تتأثر.\nتظل هذه التذاكر صالحة حتى تاريخ انتهاء صلاحيتها.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "كوبونات مستهدفة {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "الحصول على معلومات الكوبون", + "description": "احصل على معلومات القسيمة.\n\nاحصل على معلومات عن {@link IShoppingCoupon coupon}.\n\nإذا كنت عميلاً لدى {@link IShoppingCustomer}، فلن تكون هناك إمكانية للوصول إلا إلى القسائم\n{@link IShoppingCouponTicket القابلة للحجز}. القسائم غير\nالقابلة للحجز تتسبب في حدوث خطأ 410. وإلا إذا كنت بائعًا لدى {@link IShoppingSeller} أو {@link IShoppingAdministrator}، فستكون هناك إمكانية للوصول أيضًا إلى القسائم غير القابلة للحجز.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "القسائم المستهدفة {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "description": "معلومات القسيمة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/deposits": { + "patch": { + "summary": "احصل على قائمة بيانات التعريف الخاصة بالإيداع", + "description": "احصل على قائمة بيانات التعريف الخاصة بالإيداع.\n\nقم بإدراج كل معلومات بيانات التعريف الخاصة بإيداع {@link IShoppingDeposit}\nباستخدام {@link ترقيم الصفحات في IPage}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingDeposit.IRequest.search شرط البحث} في نص الطلب.\nكما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق تكوين\n{@link IShoppingDeposit.IRequest.sort شرط الفرز}.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قائمة بيانات التعريف الخاصة بالإيداع المقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "إنشاء بيانات تعريف إيداع جديدة", + "description": "إنشاء بيانات تعريف إيداع جديدة.\n\nإنشاء بيانات تعريف إيداع جديدة {@link IShoppingDeposit}.\n\nهذا الإجراء يعني إضافة سبب أصل جديد لدخل/نتيجة الإيداع.\nبالطبع، إنشاء سجل إيداع جديد لا يعني زيادة أو تقليل رصيد {@link IShoppingCustomer} تلقائيًا\nوفقًا لسبب السجل. يجب تطوير المنطق يدويًا\nفي الجانب الخلفي.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "إنشاء معلومات بيانات تعريف الإيداع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "بيانات تعريف الإيداع التي تم إنشاؤها حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/deposits/{id}": { + "get": { + "summary": "احصل على بيانات تعريف الإيداع", + "description": "احصل على بيانات تعريف الإيداع.\n\nاحصل على معلومات بيانات تعريف الإيداع {@link IShoppingDeposit} مع معرفها.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "إيداعات الهدف {@link IShoppingDeposit.id }" + } + ], + "responses": { + "200": { + "description": "بيانات تعريف الإيداع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "امسح بيانات تعريف الإيداع", + "description": "امسح بيانات تعريف الإيداع.\n\nامسح بيانات تعريف الإيداع {@link IShoppingDeposit}، بحيث لا يتم زيادة أو نقصان أي رصيد\n{@link IShoppingCustomer} بعد الآن بسبب الإيداع.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "إيداعات الهدف {@link IShoppingDeposit.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/deposits/{code}/get": { + "get": { + "summary": "احصل على بيانات تعريف الإيداع من خلال الكود الخاص بها", + "description": "احصل على بيانات تعريف الإيداع من خلال الكود الخاص بها.\n\nاحصل على معلومات تعريف الإيداع {@link IShoppingDeposit} من خلال الكود الخاص بها.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "بيانات تعريف الإيداع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages": { + "patch": { + "summary": "احصل على قائمة بيانات تعريف الأميال", + "description": "احصل على قائمة بيانات تعريف الأميال.\n\nقم بإدراج كل معلومات بيانات تعريف الأميال {@link IShoppingMileage}\nباستخدام {@link ترقيم الصفحات في IPage}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingMileage.IRequest.search شرط البحث} في نص الطلب.\nكما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق تكوين\n{@link IShoppingMileage.IRequest.sort شرط الفرز}.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قائمة بيانات تعريف الأميال المرقمة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "إنشاء بيانات تعريف جديدة للمسافة", + "description": "إنشاء بيانات تعريف جديدة للمسافة.\n\nإنشاء بيانات تعريف جديدة للمسافة {@link IShoppingMileage}.\n\nهذا الإجراء يعني إضافة سبب أصل جديد لدخل/نتيجة المسافة.\nبالطبع، إنشاء سجل مسافة جديد لا يعني زيادة أو تقليل رصيد {@link IShoppingCustomer} تلقائيًا\nوفقًا لسبب السجل. يجب تطوير المنطق يدويًا\nفي الجانب الخلفي.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "إنشاء معلومات بيانات تعريف المسافة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "بيانات تعريف المسافة المقطوعة التي تم إنشاؤها حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages/{id}": { + "get": { + "summary": "احصل على بيانات تعريف المسافة المقطوعة", + "description": "احصل على بيانات تعريف المسافة المقطوعة.\n\nاحصل على معلومات بيانات تعريف المسافة المقطوعة {@link IShoppingMileage} مع معرفها.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الأميال المستهدفة {@link IShoppingMileage.id }" + } + ], + "responses": { + "200": { + "description": "بيانات تعريف المسافة المقطوعة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "امسح بيانات تعريف المسافة المقطوعة", + "description": "امسح بيانات تعريف المسافة المقطوعة.\n\nامسح بيانات تعريف المسافة المقطوعة {@link IShoppingMileage}، بحيث لا يتم زيادة أو تقليل رصيد أي\n{@link IShoppingCustomer customer} بعد الآن بسبب المسافة المقطوعة.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الأميال المستهدفة {@link IShoppingMileage.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages/{code}/get": { + "get": { + "summary": "احصل على بيانات تعريفية للمسافة المقطوعة من خلال الكود الخاص بها", + "description": "احصل على بيانات تعريفية للمسافة المقطوعة من خلال الكود الخاص بها.\n\nاحصل على معلومات تعريفية للمسافة المقطوعة {@link IShoppingMileage} من خلال الكود الخاص بها.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "بيانات تعريفية للمسافة المقطوعة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages/donations": { + "patch": { + "summary": "قم بإدراج كل سجلات التبرع بالمسافة المقطوعة", + "description": "قم بإدراج كل سجلات التبرع بالمسافة المقطوعة.\n\nقم بإدراج كل {@link IShoppingMileageDonation mileage donation histories}\nباستخدام {@link iPage pagination}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingMileageDonation.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل\nالسجلات عن طريق تكوين {@link IShoppingMileageDonation.IRequest.sort sort}.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قائمة تاريخ التبرع بالأميال المقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileageDonation" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "تبرع بأميال لمواطن", + "description": "تبرع بأميال لمواطن.\n\nتبرع بأميال لمواطن {@link IShoppingCitizen} محدد من\n{@link IShoppingAdministrator المسؤول الحالي}، مع ذكر\nالسبب التفصيلي لذلك.\n\nلاحظ أنه نظرًا لأن التبرع بالأميال يؤثر على رصيد المواطن و\nالربح التشغيلي لمركز التسوق الحالي، فيجب على المسؤول أرشفة\nالسبب التفصيلي للتبرع بالأميال.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات التبرع بالأميال", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "سجل التبرع بالأميال", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages/donations/{id}": { + "get": { + "summary": "احصل على سجل التبرع بالأميال", + "description": "احصل على سجل التبرع بالأميال.\n\nاحصل على {@link IShoppingMileageDonation سجل التبرع بالأميال} مع معرفه.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "سجل الأهداف {@link IShoppingMileageDonation.id }" + } + ], + "responses": { + "200": { + "description": "سجل التبرع بالأميال", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/orders": { + "patch": { + "summary": "قم بإدراج كل الطلبات", + "description": "قم بإدراج كل الطلبات.\n\nقم بإدراج كل {@link IShoppingOrder orders} مع الترقيم.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingOrder.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingOrder.IRequest.sort sort condition}.\n\nللإشارة، إذا كنت {@link IShoppingCustomer customer}، فيمكنك إدراج طلباتك الخاصة، ولا يهم ما إذا كان\nالطلب قد تم {@link IShoppingOrderPublish.paid_atpaid} أم لا.\n\nوإلا إذا كنت {@link IShoppingSeller seller} أو\n{@link IShoppingAdministrator administration}، فيمكنك إدراج\nالطلبات المدفوعة فقط. أيضًا، في حالة البائع، سيتم إدراج\n{@link IShoppingOrder.goods goods} ذات الصلة فقط في الطلب.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "اطلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "الطلبات المقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/orders/{id}": { + "get": { + "summary": "احصل على معلومات الطلب", + "description": "احصل على معلومات الطلب.\n\nاحصل على معلومات تفصيلية عن {@link IShoppingOrder} للطلب.\n\nإذا لم تكن عميلاً لدى {@link IShoppingCustomer}، فلن تتمكن من\nالوصول إلى الطلب الذي لم يتم\n{@link IShoppingOrderPublish.paid_at} بعد. في هذه الحالة، سيتم طرح خطأ عدم العثور على 404.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الطلبات المستهدفة {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "معلومات الطلب", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales": { + "patch": { + "summary": "قم بإدراج كل المبيعات الملخصة", + "description": "قم بإدراج كل المبيعات الملخصة.\n\nقم بإدراج كل {@link IShoppingSale.ISummary summaryd sales}.\n\nكما ترى، يتم تلخيص المبيعات المرتجعة، وليس تفصيلها. إذا كنت تريد\nالحصول على معلومات مفصلة عن عملية بيع، فاستخدم الدالة {@link at} لكل عملية بيع.\n\nللمرجع، إذا كنت {@link IShoppingSeller seller}، يمكنك فقط\nالوصول إلى {@link IShoppingSale sales}. وإلا إذا كنت\n{@link IShoppingCustomer customer}، فيمكنك فقط رؤية المبيعات\nالجارية في السوق. لا يمكنك رؤية المبيعات\nغير المفتوحة أو المغلقة أو المعلقة.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSale.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingSale.IRequest.sort sort condition}.", + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "اطلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "مبيعات مقسمة إلى صفحات تحتوي على معلومات موجزة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{id}": { + "get": { + "summary": "احصل على معلومات عن المبيعات", + "description": "احصل على معلومات عن المبيعات.\n\nاحصل على {@link IShoppingSale sale} مع معلومات مفصلة.\n\nإذا كنت {@link IShoppingSeller seller}، يمكنك فقط الوصول إلى {@link IShoppingSale sale}\n\nالخاصة بك. وإلا إذا كنت\n{@link IShoppingCustomer customer}، فيمكنك الوصول فقط إلى المبيعات\nالجارية في السوق. لا يمكنك الوصول إلى المبيعات\nغير المفتوحة أو المغلقة أو المعلقة.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات الهدف {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن المبيعات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments": { + "patch": { + "summary": "قم بإدراج كل تعليقات الاستفسار", + "description": "قم بإدراج كل تعليقات الاستعلام.\n\nقم بإدراج كل {@link IShoppingSaleInquiryComment تعليقات الاستعلام} لـ\n{@link IShoppingSaleQuestion question} أو {@link IShoppingSaleReview review}\nمع {@link ترقيم الصفحات في IPage}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nبالمناسبة، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط الوصول\nإلى استفسارات {@link IShoppingSale sale} الخاصة بك. وإلا، يمكنك\nالوصول إلى كل استفسارات المبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات السلع المملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات السلع المملوكة {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "تعليقات الاستعلامات المرقمة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "إنشاء تعليق استعلام", + "description": "إنشاء تعليق استفسار.\n\nإنشاء تعليق استفسار {@link IShoppingSaleInquiryComment} لسؤال\n{@link IShoppingSaleQuestion} أو مراجعة {@link IShoppingSaleReview}.\n\nللمزيد من المعلومات، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nإنشاء تعليق استفسار لاستفسار {@link IShoppingSale sale} الخاص بك.\nوإلا، يمكنك إنشاء تعليق استفسار لكل استفسارات المبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات مستهدفة {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "معلومات إنشاء تعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "تعليق استفسار تم إنشاؤه حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments/{id}": { + "get": { + "summary": "الحصول على معلومات تعليق الاستفسار", + "description": "احصل على معلومات تعليق الاستفسار.\n\nاحصل على معلومات تفصيلية {@link IShoppingSaleInquiryComment تعليق الاستفسار}\nعن {@link IShoppingSaleQuestion question} أو\n{@link IShoppingSaleReview review}.\n\nللاطلاع، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى تعليق الاستفسار الخاص بـ {@link IShoppingSale sale} الخاص بك.\nوإلا، يمكنك الوصول إلى كل تعليقات الاستفسار الخاصة بالمبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات تابعة {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليقات الاستفسار المستهدفة {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "معلومات تفصيلية عن تعليقات الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "تحديث تعليق الاستفسار", + "description": "تحديث تعليق الاستفسار.\n\nتحديث {@link IShoppingSaleInquiryComment تعليق الاستفسار} إلى\n{@link IShoppingSaleQuestion question} أو {@link IShoppingSaleReview review} محدد.\n\nبالمناسبة، وفقًا للسياسة العامة لمركز التسوق هذا فيما يتعلق\nبالتعليقات، فإن تعديل التعليق لا يغير المحتوى الحالي فعليًا.\n\nيتم تجميع المحتوى المعدل وتسجيله في سجل التعليقات الحالي\nكصورة جديدة {@link IShoppingSaleInquiryComment.ISnapshot}. ويتم نشر ذلك\nللجميع، الذين يمكنهم قراءة تعليق الاستفسار هذا.\n\nوذلك لمنع العملاء أو البائعين من تعديل تعليقاتهم\nوالتلاعب بالظروف بسبب طبيعة التجارة الإلكترونية، حيث\nتنشأ النزاعات بسهولة. أي للحفاظ على الأدلة.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات مملوكة {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليق الاستفسار المستهدف {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "تحديث معلومات تعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "سجل لقطة تم إنشاؤه حديثًا لتعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions": { + "patch": { + "summary": "قم بإدراج كل الأسئلة المختصرة", + "description": "قم بإدراج جميع الأسئلة المختصرة.\n\nقم بإدراج جميع {@link IShoppingSaleQuestion.ISummary summaryd questions} من\n{@link IShoppingSale sale}.\n\nكما ترى، يتم تلخيص الأسئلة المُرجعة، وليس تفصيلها. إذا كنت تريد\nالحصول على معلومات تفصيلية عن سؤال، فاستخدم الدالة {@link adridges}\nأو الدالة {@link at} لكل مقال.\n\nكما أن السؤال المُرجع يحتوي على الخاصية {@link IShoppingSaleQuestion.ISummary.answer}\nالتي تعني الإجابة الرسمية من {@link IShoppingSeller}.\nبالإضافة إلى ذلك، يحتوي السؤال المُرجع على خاصية خاصة أخرى\n{@link IShoppingSaleQuestion.ISummary.secret} مع إخفاء خصائص رئيسية أخرى، وهذا يعني أن الجهات الفاعلة ذات الصلة فقط يمكنها {@link at قراءة}\nالسؤال.\n\nللمرجع، إذا كنت بائعًا {@link IShoppingSeller}، فيمكنك فقط\nالوصول إلى أسئلة {@link IShoppingSale sale} الخاصة بك. بخلاف ذلك،\nيمكنك الوصول إلى جميع أسئلة المبيعات.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleQuestion.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات السلع المملوكة {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "أسئلة مقسمة إلى صفحات تحتوي على معلومات موجزة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions/abridges": { + "patch": { + "summary": "قم بإدراج كل الأسئلة المختصرة", + "description": "قم بإدراج جميع الأسئلة المختصرة.\n\nقم بإدراج جميع {@link IShoppingSaleQuestion.IAbridge abridged questions} من\n{@link IShoppingSale sale}.\n\nكما ترى، الأسئلة التي تم إرجاعها مختصرة وليست مفصلة. إذا كنت تريد\nالحصول على معلومات مفصلة عن سؤال، فاستخدم الدالة {@link at}\nلكل مقال.\n\nكما أن السؤال الذي تم إرجاعه يحتوي على الخاصية {@link IShoppingSaleQuestion.IAridge.answer}\nوالتي تعني الإجابة الرسمية من {@link IShoppingSeller}.\n\nبالإضافة إلى ذلك، يحتوي السؤال الذي تم إرجاعه على خاصية خاصة أخرى\n{@link IShoppingSaleQuestion.IAridge.secret} مع إخفاء خصائص رئيسية أخرى، وهذا يعني أن الجهات الفاعلة ذات الصلة فقط يمكنها {@link at قراءة}\nالسؤال.\n\nللإشارة، إذا كنت بائعًا {@link IShoppingSeller}، فيمكنك فقط\nالوصول إلى أسئلة {@link IShoppingSale sale} الخاصة بك. بخلاف ذلك،\nيمكنك الوصول إلى جميع أسئلة المبيعات.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleQuestion.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات السلع المملوكة {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "أسئلة مقسمة إلى صفحات تحتوي على معلومات مختصرة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions/{id}": { + "get": { + "summary": "الحصول على معلومات السؤال", + "description": "احصل على معلومات عن سؤال.\n\nاحصل على معلومات تفصيلية عن {@link IShoppingSaleQuestion question} بشأن\n{@link IShoppingSale sale}.\n\nللاطلاع، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى سؤالك الخاص بـ {@link IShoppingSale sale}. وإلا\nفأنت عميل {@link IShoppingCustomer}، يمكنك الوصول إلى كل\nأسئلة المبيعات باستثناء قيمة {@link IShoppingSaleQuestion.secret}\n\"false\".", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "رقم المبيعات المملوكة {@link IShoppingSale.id}" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الأسئلة المستهدفة {@link IShoppingSaleQuestion.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن الأسئلة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments": { + "patch": { + "summary": "قم بإدراج كل تعليقات الاستفسار", + "description": "قم بإدراج كل تعليقات الاستعلام.\n\nقم بإدراج كل {@link IShoppingSaleInquiryComment تعليقات الاستعلام} لـ\n{@link IShoppingSaleQuestion question} أو {@link IShoppingSaleReview review}\nمع {@link ترقيم الصفحات في IPage}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nبالمناسبة، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط الوصول\nإلى استفسارات {@link IShoppingSale sale} الخاصة بك. وإلا، يمكنك\nالوصول إلى كل استفسارات المبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات السلع المملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات السلع المملوكة {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "تعليقات الاستعلامات المرقمة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "إنشاء تعليق استعلام", + "description": "إنشاء تعليق استفسار.\n\nإنشاء تعليق استفسار {@link IShoppingSaleInquiryComment} لسؤال\n{@link IShoppingSaleQuestion} أو مراجعة {@link IShoppingSaleReview}.\n\nللمزيد من المعلومات، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nإنشاء تعليق استفسار لاستفسار {@link IShoppingSale sale} الخاص بك.\nوإلا، يمكنك إنشاء تعليق استفسار لكل استفسارات المبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات مستهدفة {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "معلومات إنشاء تعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "تعليق استفسار تم إنشاؤه حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { + "get": { + "summary": "الحصول على معلومات تعليق الاستفسار", + "description": "احصل على معلومات تعليق الاستفسار.\n\nاحصل على معلومات تفصيلية {@link IShoppingSaleInquiryComment تعليق الاستفسار}\nعن {@link IShoppingSaleQuestion question} أو\n{@link IShoppingSaleReview review}.\n\nللاطلاع، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى تعليق الاستفسار الخاص بـ {@link IShoppingSale sale} الخاص بك.\nوإلا، يمكنك الوصول إلى كل تعليقات الاستفسار الخاصة بالمبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات تابعة {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليقات الاستفسار المستهدفة {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "معلومات تفصيلية عن تعليقات الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "تحديث تعليق الاستفسار", + "description": "تحديث تعليق الاستفسار.\n\nتحديث {@link IShoppingSaleInquiryComment تعليق الاستفسار} إلى\n{@link IShoppingSaleQuestion question} أو {@link IShoppingSaleReview review} محدد.\n\nبالمناسبة، وفقًا للسياسة العامة لمركز التسوق هذا فيما يتعلق\nبالتعليقات، فإن تعديل التعليق لا يغير المحتوى الحالي فعليًا.\n\nيتم تجميع المحتوى المعدل وتسجيله في سجل التعليقات الحالي\nكصورة جديدة {@link IShoppingSaleInquiryComment.ISnapshot}. ويتم نشر ذلك\nللجميع، الذين يمكنهم قراءة تعليق الاستفسار هذا.\n\nوذلك لمنع العملاء أو البائعين من تعديل تعليقاتهم\nوالتلاعب بالظروف بسبب طبيعة التجارة الإلكترونية، حيث\nتنشأ النزاعات بسهولة. أي للحفاظ على الأدلة.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "المبيعات المملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الاستفسارات المملوكة {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليقات الاستفسار المستهدفة {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "تحديث معلومات تعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "سجل لقطة تم إنشاؤه حديثًا لتعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews": { + "patch": { + "summary": "قم بإدراج كل المراجعات المختصرة", + "description": "قم بإدراج كل المراجعات المختصرة.\n\nقم بإدراج كل {@link IShoppingSaleReview.ISummary summaryd reviews} من\n{@link IShoppingSale sale}.\n\nكما ترى، المراجعات التي تم إرجاعها ملخصة، وليست مفصلة. إذا كنت تريد\nالحصول على معلومات مفصلة عن مراجعة، فاستخدم الدالة {@link adridges}\nأو الدالة {@link at} لكل مقال.\n\nكما أن المراجعة التي تم إرجاعها تحتوي على الخاصية {@link IShoppingSaleReview.ISummary.answer}\nالتي تعني الإجابة الرسمية من {@link IShoppingSeller}.\n\nللمرجع، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك\nالوصول فقط إلى مراجعات {@link IShoppingSale sale} الخاصة بك. وإلا،\nفيمكنك الوصول إلى كل مراجعات المبيعات.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleReview.IRequest.search search condition} في\nنص الطلب. من الممكن أيضًا تخصيص ترتيب تسلسل السجلات\nمن خلال تكوين {@link IShoppingSaleReview.IRequest.sort sort condition}.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات السلع المملوكة {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "مراجعات مقسمة إلى صفحات تحتوي على معلومات موجزة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews/abridges": { + "patch": { + "summary": "قم بإدراج كل المراجعات المختصرة", + "description": "قم بإدراج كل المراجعات المختصرة.\n\nقم بإدراج كل {@link IShoppingSaleReview.IAbridge abridged reviews} من\n{@link IShoppingSale sale}.\n\nكما ترى، المراجعات التي تم إرجاعها مختصرة وليست مفصلة. إذا كنت تريد\nالحصول على معلومات مفصلة عن مراجعة، فاستخدم الدالة {@link at}\nلكل مقال.\n\nكما أن المراجعة التي تم إرجاعها تحتوي على الخاصية {@link IShoppingSaleReview.IAridge.answer}\nوالتي تعني الإجابة الرسمية من {@link IShoppingSeller}.\n\nللمرجع، إذا كنت بائعًا في {@link IShoppingSeller}، فيمكنك\nالوصول فقط إلى مراجعات {@link IShoppingSale sale} الخاصة بك. وإلا،\nفيمكنك الوصول إلى كل مراجعات المبيعات.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleReview.IRequest.search search condition} في\nنص الطلب. من الممكن أيضًا تخصيص ترتيب تسلسل السجلات\nمن خلال تكوين {@link IShoppingSaleReview.IRequest.sort sort condition}.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات السلع المملوكة {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "مراجعات مقسمة إلى صفحات تحتوي على معلومات مختصرة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews/{id}": { + "get": { + "summary": "الحصول على معلومات المراجعة", + "description": "احصل على معلومات المراجعة.\n\nاحصل على معلومات تفصيلية عن {@link IShoppingSaleReview review}\n{@link IShoppingSale sale}.\n\nللمرجع، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى مراجعة {@link IShoppingSale sale} الخاصة بك. وإلا\nفأنت {@link IShoppingCustomer customer}، يمكنك الوصول إلى كل\nمراجعات المبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مراجعات مستهدفة {@link IShoppingSaleReview.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن المراجعة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/snapshots": { + "patch": { + "summary": "قم بإدراج كل لقطات", + "description": "قم بإدراج كل لقطات الشاشة.\n\nكلما قام {@link IShoppingSeller seller} بتحديث\n{@link IShoppingSale sale}، لا يتم تحديث سجل البيع ولكن يتم إنشاء سجل\n{@link IShoppingSaleSnapshot snapshot} جديد للحفاظ على\nسلامة سجل البيع. هذه الوظيفة API مخصصة لإدراج\nسجلات اللقطات الشاشة هذه.\n\nكما يمكنك أن ترى من نوع الإرجاع، فإن اللقطات الشاشة التي تم إرجاعها\nملخصة، وليست مفصلة. إذا كنت تريد الحصول على معلومات مفصلة\nللقطة شاشة، فاستخدم الوظيفة {@link at} أو {@link flipo} لكل لقطة شاشة.\n\nللمرجع، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى لقطات الشاشة الخاصة بـ {@link IShoppingSale sale} الخاصة بك. وإلا،\nيمكنك الوصول إلى كل لقطات الشاشة للمبيعات حتى لو تم إغلاق البيع أو تعليقه.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات الهدف {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "لقطات مقسمة إلى صفحات تحتوي على معلومات موجزة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/snapshots/{id}": { + "get": { + "summary": "الحصول على معلومات لقطة", + "description": "احصل على معلومات لقطة سريعة.\n\nاحصل على لقطة سريعة {@link IShoppingSaleSnapshot} تحتوي على معلومات مفصلة.\n\nكما ترى من نوع الإرجاع، لا تحتوي اللقطة السريعة المرتجعة على\nمعلومات {@link IShoppingSale sale}. إذا كنت تريد الحصول على معلومات البيع،\nاستخدم وظيفة {@link flip} بدلاً من ذلك.\n\nللمرجع، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى لقطات {@link IShoppingSale sale} الخاصة بك. بخلاف ذلك،\nيمكنك الوصول إلى كل لقطات المبيعات حتى لو تم إغلاق البيع أو تعليقه.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "لقطات الهدف {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن اللقطة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/snapshots/{id}/flip": { + "get": { + "summary": "احصل على معلومات اللقطة المقلوبة", + "description": "احصل على معلومات لقطة مقلوبة.\n\nاحصل على معلومات {@link IShoppingSale sale} للقطة مقلوبة.\n\nكما ترى من نوع الإرجاع، تعيد هذه الدالة معلومات\n{@link IShoppingSale sale}. بالمناسبة، معلومات اللقطة ليست الأحدث، بل هي معلومات مقلوبة في جانب اللقطة.\n\nأيضًا، إذا كنت بائعًا في {@link IShoppingSeller}، فيمكنك فقط الوصول إلى لقطات {@link IShoppingSale sale} الخاصة بك. بخلاف ذلك، يمكنك\nالوصول إلى كل لقطات اللقطة الخاصة بالمبيعات حتى لو تم إغلاق اللقطة أو تعليقها.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "المبيعات المملوكة {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "لقطات الهدف {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "معلومات المبيعات التفصيلية في جانب اللقطة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories": { + "post": { + "summary": "إنشاء فئة جديدة", + "description": "إنشاء فئة جديدة.\n\nإنشاء فئة {@link IShoppingChannelCategory} جديدة من\n{@link IShoppingChannel channel} باسم معين. إذا لزم الأمر، فمن الممكن\nتحديد الفئة الرئيسية من خلال معرفها.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "القنوات المملوكة {@link IShoppingChannel.code }" + } + ], + "requestBody": { + "description": "معلومات إنشاء الفئة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "الفئة التي تم إنشاؤها حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "قم بإدراج كل الفئات مع سجلات الأطفال", + "description": "قم بإدراج كل الفئات التي تحتوي على سجلات فرعية.\n\nقم بإدراج كل {@link IShoppingChannelCategory.IHierarchical categories}\nمن {@link IShoppingChannel channel} مع الترقيم الصفحي. تحتوي الفئات المُرجعة\nعلى فئات فرعية أيضًا.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingChannelCategory.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingChannelCategory.IRequest.sort sort condition}.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "القنوات التابعة {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "فئات مقسمة إلى صفحات تحتوي على فئات فرعية", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}": { + "put": { + "summary": "تحديث فئة", + "description": "تحديث فئة.\n\nتحديث اسم فئة {@link IShoppingChannelCategory}. إذا لزم الأمر،\nفمن الممكن تغيير الفئة الأصلية من خلال معرفها. بالطبع، من الممكن أيضًا فصلها\nعن الفئة الأصلية بحيث تصبح الفئة الأصلية.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "القنوات التابعة {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "الفئات المستهدفة {@link IShoppingChannelCategory.id }" + } + ], + "requestBody": { + "description": "تحديث معلومات الفئة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "الحصول على معلومات الفئة", + "description": "الحصول على معلومات الفئة.\n\nالحصول على معلومات تفصيلية عن {@link IShoppingChannelCategory category}.\n\nتحتوي الفئة التي تم إرجاعها على فئات فرعية هرمية، كما تحتوي أيضًا على فئات الوالدين المتكررة.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "القنوات التابعة {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الفئات المستهدفة {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "معلومات تفصيلية عن الفئة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories/merge": { + "delete": { + "summary": "دمج فئات متعددة في فئة واحدة", + "description": "دمج فئات متعددة في فئة واحدة.\n\nفي نظام مركز التسوق هذا، لا يمكن حذف فئة\n{@link IShoppingChannelCategory}، لأنها كيان منهجي\nيؤثر على جميع الكيانات الأساسية الأخرى مثل\n{@link IShoppingSale sales}. وبدلاً من الحذف، يمكنك دمج فئات\nمتعددة في فئة واحدة.\n\nإذا حددت فئة لاستيعاب فئات أخرى، فسيتم دمج جميع الفئات الأخرى\nفي الفئة المحددة. كما يمكن أيضًا دمج الكيانات الفرعية للفئات ودمج مراجعها بشكل متتالي.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "قنوات تابعة {@link IShoppingChannel.code }" + } + ], + "requestBody": { + "description": "دمج معلومات الفئات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}/invert": { + "get": { + "summary": "الحصول على معلومات فئة مقلوبة", + "description": "الحصول على معلومات فئة مقلوبة.\n\nالحصول على معلومات فئة مقلوبة {@link IShoppingChannelCategory.IInvert}.\n\nتحتوي الفئة المرتجعة على فئات الوالدين المتكررة، ولكنها لا تحتوي على\nفئات الأبناء الهرمية.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "قنوات تابعة {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "فئات مستهدفة {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "معلومات الفئة التفصيلية", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels": { + "post": { + "summary": "إنشاء قناة جديدة", + "description": "إنشاء قناة جديدة.\n\nإنشاء قناة {@link IShoppingChannel} جديدة باستخدام الكود والاسم المحددين.\n\nنظرًا لأن القناة تعني سوقًا فرديًا،\nيجب على {@link IShoppingAdministrator المسؤول} تنفيذ هذا الإجراء\nفقط عند تسجيل تطبيق جديد.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "معلومات إنشاء القناة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "القناة التي تم إنشاؤها حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "قم بإدراج كل القنوات", + "description": "قم بإدراج كل القنوات.\n\nقم بإدراج كل {@link IShoppingChannel channels} مع الترقيم.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingChannel.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingChannel.IRequest.sort sort condition}.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "القنوات المرقمة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{id}": { + "put": { + "summary": "تحديث قناة", + "description": "تحديث قناة.\n\nتحديث اسم قناة {@link IShoppingChannel}.\n\nلاحظ أنه لا يمكن تغيير كود القناة. إذا كنت تريد\nالقيام بذلك قسرًا، فقم {@link بإنشاء} قناة جديدة ودمجها معها.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استهداف {@link IShoppingChannel.code}" + } + ], + "requestBody": { + "description": "تحديث معلومات القناة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "الحصول على معلومات القناة", + "description": "احصل على معلومات القناة.\n\nاحصل على معلومات مفصلة عن {@link IShoppingChannel.IHierarchical channel}.\n\nتحتوي مثيلات القناة التي تم إرجاعها أيضًا على المعلومات المتداخلة\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "القنوات المستهدفة {@link IShoppingChannel.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن القناة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/merge": { + "delete": { + "summary": "دمج قنوات متعددة في قناة واحدة", + "description": "دمج قنوات متعددة في قناة واحدة.\n\nفي نظام مركز التسوق هذا، لا يمكن حذف قناة\n{@link IShoppingChannel}، لأنها كيان منهجي\nيؤثر على جميع الكيانات الأساسية الأخرى مثل العملاء والأعضاء والمبيعات. بدلاً من الحذف، يمكنك دمج قنوات متعددة في قناة واحدة.\n\nإذا حددت قناة لاستيعاب القنوات الأخرى، فسيتم دمج جميع القنوات الأخرى\nفي القناة المحددة. كما يمكن أيضًا دمج الكيانات الفرعية للقنوات ودمج مراجعها بشكل متتالي.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات حول الدمج", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/hierarchical": { + "patch": { + "summary": "قم بإدراج جميع القنوات ذات الفئات المتداخلة", + "description": "قم بإدراج جميع القنوات ذات الفئات المتداخلة.\n\nقم بإدراج كل {@link IShoppingChannel.IHierarchical channels} مع\n{@link IPage pagination}. تحتوي القنوات المسترجعة على فئات هرمية متداخلة\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingChannel.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingChannel.IRequest.sort sort condition}.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قنوات مقسمة إلى صفحات مع فئات متداخلة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{code}/get": { + "get": { + "summary": "الحصول على معلومات القناة من خلال الكود الخاص بها", + "description": "الحصول على معلومات القناة من خلال الكود الخاص بها.\n\nالحصول على معلومات مفصلة عن {@link IShoppingChannel.IHierarchical channel}\nمن خلال الكود الخاص بها.\n\nتحتوي مثيلات القناة المرتجعة أيضًا على المعلومات المتداخلة\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "القنوات المستهدفة {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن القناة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/sections": { + "post": { + "summary": "إنشاء قسم جديد", + "description": "إنشاء قسم جديد.\n\nإنشاء قسم جديد {@link IShoppingSection} بالرمز والاسم المحددين.\n\nنظرًا لأن القسم يعني وحدة مكانية للسوق تتعامل مع أنواع مختلفة من المنتجات مع قسم آخر، فيجب على {@link IShoppingAdministrator المسؤول}\nأن يقوم بهذا الإجراء فقط عند الحاجة إلى قسم جديد.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "معلومات إنشاء القسم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "القسم الذي تم إنشاؤه حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "قم بإدراج كل الأقسام", + "description": "قم بإدراج كل الأقسام.\n\nقم بإدراج كل {@link IShoppingSection sections} مع الترقيم الصفحي.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSection.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingSection.IRequest.sort sort condition}.", + "tags": [ + "Section" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم الصفحي والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "الأقسام المرقمة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/sections/{id}": { + "put": { + "summary": "تحديث قسم", + "description": "تحديث قسم.\n\nتحديث اسم قسم {@link IShoppingSection}.\n\nلاحظ أنه من غير الممكن تغيير كود القسم. إذا كنت تريد\nالقيام بذلك قسرًا، فقم بإنشاء {@link} قسم جديد ودمجه معه.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استهداف {@link IShoppingSection.code} القسم" + } + ], + "requestBody": { + "description": "تحديث معلومات القسم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "الحصول على معلومات القسم", + "description": "الحصول على معلومات القسم.\n\nالحصول على معلومات تفصيلية عن {@link IShoppingSection section}.", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استهداف {@link IShoppingSection.id} القسم" + } + ], + "responses": { + "200": { + "description": "معلومات تفصيلية عن القسم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/sections/merge": { + "delete": { + "summary": "دمج أقسام متعددة في قسم واحد", + "description": "دمج أقسام متعددة في قسم واحد.\n\nفي نظام مركز التسوق هذا، لا يمكن حذف قسم\n{@link IShoppingSection}، لأنه كيان منهجي\nيؤثر على جميع الكيانات الأساسية الأخرى مثل {@link IShoppingSale sales}.\nبدلاً من الحذف، يمكنك دمج أقسام متعددة في قسم واحد.\n\nإذا حددت قسمًا لاستيعاب أقسام أخرى، فسيتم دمج جميع الأقسام الأخرى\nفي القسم المحدد. كما يمكن أيضًا دمج الكيانات الفرعية\nللأقسام ودمج مراجعها بشكل متتالي.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "إدخال طلب معلومات الدمج", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/sections/{code}/get": { + "get": { + "summary": "الحصول على معلومات القسم من خلال الكود الخاص به", + "description": "الحصول على معلومات القسم من خلال الكود الخاص به.\n\nالحصول على معلومات مفصلة عن {@link IShoppingSection section} من خلال الكود الخاص به.", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "استهداف {@link IShoppingSection.code } للقسم" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن القسم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/refresh": { + "patch": { + "summary": "تحديث رمز المصادقة", + "description": "قم بتحديث رمز المصادقة.\n\nقم بإنشاء رمز وصول جديد {@link IShoppingCustomer.IToken.access} لعميل\n{@link IShoppingCustomer} باستخدام الرمز\n{@link IShoppingCustomer.IToken.refresh refresh} الذي تم إصداره مسبقًا.\n\nلاحظ أن هذه الوظيفة متاحة حتى قيمة\n{@link IShoppingCustomer.IToken.refreshable_until}.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "رمز التحديث.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IRefresh" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "معلومات العميل باستخدام الرمز الجديد", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IAuthorized" + } + } + } + } + } + } + }, + "/shoppings/customers/authenticate": { + "get": { + "summary": "احصل على معلومات العميل الحالية", + "description": "احصل على معلومات العميل الحالية.\n\nاحصل على معلومات العميل الحالية {@link IShoppingCustomer} من رمز الوصول\n{@link IShoppingCustomer.IToken.access}.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "responses": { + "200": { + "description": "معلومات العميل الحالية", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "إنشاء سجل عميل جديد", + "description": "إنشاء سجل عميل جديد.\n\nيحدد نظام مركز التسوق هذا كل من يشارك في هذا السوق باعتباره\n\"عميلًا\". ولا يتم أرشفة سجلات العملاء استنادًا إلى\n{@link IShoppingCitizen people} الفردية، بل استنادًا إلى وحدة الاتصال.\nلذلك، حتى لو كان الشخص هو نفسه، يتم إنشاء سجل {@link IShoppingCustomer}\nجديد في كل مرة يتم فيها إجراء اتصال.\n\nلذلك، يجب على جميع تطبيقات العميل التي تصل إلى هذه الخدمة استدعاء\nهذه الوظيفة أولاً، والإبلاغ عن مسار تدفق العميل إلى الخادم، وإنشاء\nرمز وصول {@link IShoppingCustomer.IToken.access}. إذا تخطيت استدعاء\nهذه الوظيفة، فسيتم حظر جميع وظائف واجهة برمجة التطبيقات الأخرى. لا يوجد\nاستثناء، حتى إذا كنت تريد {@link تنشيط} جنسيتك أو\n{@link تسجيل الدخول} باستخدام حساب عضو {@link IShoppingMember}. قبل\nالتحقق من هويتك أو تسجيل الدخول، تأكد من استدعاء هذه الوظيفة أولاً.\nينطبق هذا أيضًا عندما يقوم {@link IShoppingAdministrator Administrator} أو\n{@link IShoppingSeller seller} بتسجيل الدخول.\n\nكما أن رمز المصادقة له\n{@link IShoppingCustomer.IToken.expired_at expiration time}\nولا يمكن استخدامه بشكل دائم. للإشارة، رمز المصادقة صالح لمدة 3 ساعات، وإذا كنت تريد الحفاظ على مصادقة العميل حتى\nبعد 3 ساعات، فيجب عليك استدعاء وظيفة {@link refresh}.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "معلومات إنشاء العميل.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "تم إنشاء معلومات العميل باستخدام الرمز.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IAuthorized" + } + } + } + } + } + } + }, + "/shoppings/customers/authenticate/join": { + "post": { + "summary": "انضم إلى العضوية", + "description": "انضم إلى العضوية.\n\nيقوم {@link IShoppingCustomer Customer} بالتسجيل في\n{@link IShoppingMember membership} لنظام مركز التسوق الحالي.\n\nإذا كنت قد قمت أيضًا بتنفيذ {@link IShoppingCitizen citizen}\n{@link activate activation}، فيمكنك تخطي استدعاء وظيفة {@link activate}\nفي كل مرة تسجل فيها الدخول من الآن فصاعدًا. أيضًا، إذا كان الشخص قد قام بشراء {@link IShoppingOrder} باستخدام استدعاء وظيفة {@link activate} و{@link external}\n، فيمكنك أيضًا الوصول إلى سجل الطلبات أيضًا. بعبارة أخرى، يمكن أيضًا الوصول إلى تفاصيل النشاط قبل تسجيل العضوية\nباستمرارية.\n\nللمرجع، كما هو موضح في وظيفة {@link create}، قبل استدعاء\nوظيفة `join` هذه، يجب عليك أولاً إنشاء سجل عميل ورمز مميز عن طريق\nاستدعاء وظيفة {@link create}.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "معلومات الانضمام للعضو", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "معلومات العميل المنضم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/login": { + "put": { + "summary": "تسجيل الدخول للعضوية", + "description": "تسجيل الدخول للعضوية.\n\nيقوم {@link IShoppingCustomer Customer} بتسجيل الدخول باستخدام حسابه\n{@link IShoppingMember membership} باستخدام البريد الإلكتروني وكلمة المرور.\n\nإذا قام {@link IShoppingMember member} مسبقًا\n{@link activate citizen activation}، فسيتم ملء قيمة {@link IShoppingCustomer.citizen}\nوفقًا لذلك. وإذا قام العضو أيضًا بالتسجيل\nكمسؤول {@link IShoppingAdministrator} أو\n{@link IShoppingSeller seller}، فسيتم أيضًا إدخال المعلومات ذات الصلة\nوفقًا لذلك.\n\nللإشارة، كما هو موضح في وظيفة {@link create}، قبل استدعاء\nوظيفة `login` هذه، يجب عليك أولاً إنشاء سجل عميل ورمز مميز عن طريق\nاستدعاء وظيفة {@link create}.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "معلومات طلب تسجيل الدخول", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "تسجيل الدخول معلومات العميل", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/activate": { + "post": { + "summary": "تفعيل الجنسية", + "description": "تفعيل الجنسية.\n\nيقوم {@link IShoppingCustomer Customer} بتفعيل\n{@link IShoppingCitizen citizen} الخاص به/بها باستخدام رقم الهاتف المحمول والاسم الحقيقي.\n\nإذا كان العميل قد انضم بالفعل إلى\n{@link IShoppingMember membership}، فيمكنك تخطي استدعاء وظيفة الجنسية\n{@link activation} في كل مرة تسجل فيها الدخول من الآن فصاعدًا.\n\nبالطبع، ستكون هذه القصة مماثلة لوظيفة {@link external}.\n\nللمرجع، كما هو موضح في وظيفة {@link create}، قبل استدعاء\nوظيفة `التنشيط` هذه، يجب عليك أولاً إنشاء سجل ورمز عميل\nعن طريق استدعاء وظيفة {@link create}.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "معلومات تفعيل الجنسية", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "معلومات العميل المفعل", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/external": { + "post": { + "summary": "تسجيل معلومات المستخدم الخارجي", + "description": "تسجيل معلومات المستخدم الخارجي.\n\nيقوم {@link IShoppingCustomer Customer} بتسجيل معلوماته\n{@link IShoppingExternalUser external user} من خدمة أخرى.\n\nويكون له تأثير مماثل مع وظيفة {@link join membership join}،\nلذا إذا كنت قد قمت أيضًا بأداء وظيفة {@link IShoppingCitizen citizen}\n{@link activate activation}، فيمكنك تخطي استدعاء وظيفة {@link activate}\nفي كل مرة تستدعي فيها هذه الوظيفة `الخارجية` بنفس\nالمعلومات من الآن فصاعدًا. أيضًا، إذا كان الشخص قد قام بشراء {@link IShoppingOrder} باستخدام وظيفة {@link activate} ووظيفة {@link join}\n، فيمكنك أيضًا الوصول إلى سجل الطلبات أيضًا. بعبارة أخرى، يمكن أيضًا الوصول إلى تفاصيل النشاط قبل تسجيل الخادم الخارجي\nباستمرارية.\n\nللمرجع، كما هو موضح في وظيفة {@link create}، قبل استدعاء\nهذه الوظيفة `الخارجية`، يجب عليك أولاً إنشاء سجل ورمز عميل\nعن طريق استدعاء وظيفة {@link create}.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "تسجيل معلومات المستخدم الخارجي", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingExternalUser.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "معلومات العميل المسجل للمستخدم الخارجي", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/password/change": { + "put": { + "summary": "تغيير كلمة المرور", + "description": "تغيير كلمة المرور.\n\nتغيير كلمة مرور {@link IShoppingMember member} باستخدام كلمة المرور الحالية.\n\nسبب طلب كلمة المرور الحالية هو الأمان.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "كلمة المرور الجديدة وكلمة المرور الحالية", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.IPasswordChange" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/coupons": { + "patch": { + "summary": "قم بإدراج كل القسائم", + "description": "قم بإدراج كل الكوبونات.\n\nقم بإدراج كل {@link IShoppingCoupon coupons} مع الترقيم.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingCoupon.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nللإشارة، إذا كنت {@link IShoppingCustomer customer}، فسيتم إدراج {@link IShoppingCouponTicket ticketable} فقط.\nوإلا، فسيتم إدراج الكوبونات غير القابلة لحجز التذاكر أيضًا.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "اطلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "كوبونات مقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/coupons/{id}": { + "get": { + "summary": "احصل على معلومات عن الكوبون", + "description": "احصل على معلومات عن الكوبون.\n\nاحصل على معلومات عن {@link IShoppingCoupon coupon}.\n\nإذا كنت {@link IShoppingCustomer customer}، فلن تكون هناك إمكانية للوصول إلا إلى كوبونات\n{@link IShoppingCouponTicket القابلة للحجز}. الكوبونات غير\nالتي يمكن حجزها تتسبب في حدوث خطأ 410. وإلا إذا كنت\n{@link IShoppingSeller seller} أو {@link IShoppingAdministrator administration}، فلن تكون هناك إمكانية للوصول إلى الكوبونات غير\nالتي يمكن حجزها.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "كوبونات Target {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "description": "معلومات الكوبون", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/coupons/tickets": { + "patch": { + "summary": "قم بإدراج جميع تذاكر الكوبون", + "description": "قم بإدراج جميع تذاكر القسائم.\n\nقم بإدراج جميع {@link IShoppingCouponTicket coupon tickets} الخاصة بعميل\n{@link IShoppingCustomer} مع {@link IPage pagination}.\n\nللتوضيح، تعني تذكرة القسيمة أن {@link IShoppingCoupon coupon}\nقد تم أخذها من قبل أحد العملاء. إذا كانت القسيمة المستهدفة لها يوم أو تاريخ انتهاء صلاحية، فإن تذكرة القسيمة تحتوي أيضًا على\n{@link IShoppingCouponTicket.expired_at expiration time}، ولن يتم إدراج هذه التذاكر\nمنتهية الصلاحية. وبالمثل، لن يتم إدراج التذاكر المستخدمة\n{@link IShoppingCouponTicketPayment pay} لطلب {@link IShoppingOrder}\nأيضًا.\n\nبالإضافة إلى ذلك، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingCouponTicket.IRequest.search search condition} في\nنص الطلب. من الممكن أيضًا تخصيص ترتيب تسلسل السجلات من خلال\nتكوين {@link IShoppingCouponTicket.IRequest.sort sort condition}.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات حول الترقيم الصفحي والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "تذاكر قسيمة مقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCouponTicket" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "إنشاء تذكرة قسيمة جديدة", + "description": "أنشئ تذكرة قسيمة جديدة.\n\nأنشئ {@link IShoppingCouponTicket coupon ticket} جديدة لـ\n{@link IShoppingCoupon coupon} محددة للعميل {@link IShoppingCustomer}.\n\nبالمناسبة، إذا كانت القسيمة المستهدفة\n{@link IShoppingCoupon.expired_at expired} أو\n{@link IShoppingCoupon.IInventory.volume out of stock} أو\n{@link IShoppingCoupon.IInventory.volume_per_citizen exhausted for him/her}،\nفسيتم طرح استثناء 410 gone.\n\nأيضًا، حتى لو نجحت في إنشاء تذكرة قسيمة جديدة من القسيمة\nالمستهدفة، فإذا كانت القسيمة تحتوي على يوم أو تاريخ انتهاء صلاحية، فإن التذكرة التي تم إنشاؤها حديثًا\n\nتحتوي أيضًا على {@link IShoppingCouponTicket.expired_at expiration time}، وسيتم تعطيلها بعد انتهاء الصلاحية.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "معلومات إنشاء تذكرة القسيمة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "تذكرة قسيمة تم إنشاؤها حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/coupons/tickets/{id}": { + "get": { + "summary": "احصل على تذكرة قسيمة", + "description": "احصل على تذكرة قسيمة.\n\nاحصل على معلومات {@link IShoppingCouponTicket coupon ticket} مع معرفها.\n\nبالمناسبة، إذا كانت تذكرة القسيمة المستهدفة قد انتهت صلاحيتها\n{@link IShoppingCouponTicket.expired_at expired} أو تم استخدامها\n{@link IShoppingCouponTicketPayment pay} لطلب {@link IShoppingOrder}،\nفسيتم طرح استثناء 410 gone.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تذكرة القسيمة المستهدفة {@link IShoppingCouponTicket.id }" + } + ], + "responses": { + "200": { + "description": "معلومات تذكرة القسيمة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/charges": { + "patch": { + "summary": "قم بإدراج كل رسوم الإيداع", + "description": "قم بإدراج كل رسوم الإيداع.\n\nقم بإدراج كل {@link IShoppingDepositCharge رسوم الإيداع} الخاصة بعميل\n{@link IShoppingCustomer} باستخدام {@link IPage pagination}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingDepositCharge.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingDepositCharge.IRequest.sort sort condition}.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "رسوم الإيداع المقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDepositCharge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "إنشاء طلب رسوم إيداع جديد", + "description": "إنشاء تطبيق جديد لرسوم الإيداع.\n\nإنشاء تطبيق جديد لرسوم الإيداع {@link IShoppingDepositCharge}.\n\nبالمناسبة، هذه الوظيفة لا تعني إكمال رسوم الإيداع، بل\nتعني فقط أن {@link IShoppingCustomer customer} يطبق رسوم الإيداع.\nلا يمكن إكمال رسوم الإيداع إلا عندما يقوم العميل\n{@link IShoppingDepositChargePublish.publish} بدفع رسوم الإيداع.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "معلومات إنشاء رسوم الإيداع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "رسوم الإيداع التي تم إنشاؤها حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/charges/{id}": { + "get": { + "summary": "الحصول على معلومات رسوم الإيداع", + "description": "احصل على معلومات رسوم الإيداع.\n\nاحصل على معلومات رسوم الإيداع {@link IShoppingDepositCharge}.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "رسوم الإيداع المستهدفة {@link IShoppingDepositCharge.id }" + } + ], + "responses": { + "200": { + "description": "معلومات رسوم الإيداع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "تحديث طلب رسوم الإيداع", + "description": "تحديث تطبيق رسوم الإيداع.\n\nتحديث قيمة {@link IShoppingDepositCharge تطبيق رسوم الإيداع}\nالذي تم تطبيقه بواسطة {@link IShoppingCustomer}.\n\nإذا تم {@link IShoppingDepositChargePublish نشر}،\nفلن يكون من الممكن تحديث رسوم الإيداع. سيتم طرح استثناء 410 gone فقط.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "رسوم الإيداع المستهدفة {@link IShoppingDepositCharge.id }" + } + ], + "requestBody": { + "description": "القيمة التي سيتم تغييرها", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "مسح تطبيق رسوم الإيداع", + "description": "مسح طلب رسوم إيداع.\n\nمسح {@link IShoppingDepositCharge طلب رسوم إيداع} الذي\nتم تطبيقه بواسطة {@link IShoppingCustomer}.\n\nإذا تم {@link IShoppingDepositChargePublish نشر الرسوم}، فلن يكون من الممكن مسح رسوم الإيداع. في هذه الحالة، يجب عليك إلغاء\nالدفع عن طريق استدعاء وظيفة {@link publish.cancel}.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "Target deposit charge's {@link IShoppingDepositCharge.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/charges/{chargeId}/publish/able": { + "get": { + "summary": "Check publishable", + "description": "التحقق من إمكانية النشر.\n\nاختبار ما إذا كانت رسوم {@link IShoppingDepositCharge} قابلة للنشر أم لا.\n\nإذا لم يتم نشر الرسوم {@link IShoppingDepositChargePublish} ولم يتم حذفها بعد، فمن الممكن نشر الرسوم", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "chargeId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استهداف الرسوم {@link IShoppingDepositCharge.id }" + } + ], + "responses": { + "200": { + "description": "ما إذا كانت الرسوم قابلة للنشر أم لا", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/charges/{chargeId}/publish": { + "post": { + "summary": "نشر رسوم", + "description": "انشر رسومًا.\n\n{@link IShoppingDepositChargePublish} انشر\n{@link IShoppingDepositCharge} رسومًا تم تطبيقها بواسطة\n{@link IShoppingCustomer} باستخدام معلومات الدفع التي تم الحصول عليها من\nنظام بائع الدفع.\n\nكما يمكن أن يختلف وقت الدفع مع وقت النشر. على سبيل المثال،\nإذا كانت طريقة الدفع هي التحويل اليدوي إلى حساب مصرفي، فسيتم تأخير الدفع\nحتى يقوم العميل بتحويل الأموال فعليًا. في هذه\nالحالة، ستكون قيمة {@link IShoppingDepositChargePublish.paid_at} `null`،\nلذا يتعين عليك التحقق منها بعد استدعاء وظيفة النشر هذه.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "chargeId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "رسوم الهدف {@link IShoppingDepositCharge.id }" + } + ], + "requestBody": { + "description": "معلومات إنشاء المنشور", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositChargePublish.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "المنشور الذي تم إنشاؤه حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositChargePublish" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/histories": { + "patch": { + "summary": "قم بإدراج كل سجلات الإيداع", + "description": "قم بإدراج كل سجلات الإيداع.\n\nقم بإدراج كل {@link IShoppingDepositHistory deposit histories} الخاصة بـ\n{@link IShoppingCustomer customer} باستخدام {@link IPage pagination}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingDepositHistory.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingDepositHistory.IRequest.sort sort condition}.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "اطلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositHistory.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "سجلات الإيداع المقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDepositHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/histories/{id}": { + "get": { + "summary": "احصل على معلومات سجل الإيداع", + "description": "احصل على معلومات سجل الإيداع.\n\nاحصل على معلومات سجل الإيداع {@link IShoppingDepositHistory}.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "معلومات سجل الإيداع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/histories/balance": { + "get": { + "summary": "احصل على رصيد الإيداع", + "description": "احصل على رصيد الإيداع.\n\nاحصل على الرصيد الحالي للإيداع لعميل {@link IShoppingCustomer}.", + "tags": [ + "Discount" + ], + "parameters": [], + "responses": { + "200": { + "description": "رصيد الإيداع", + "content": { + "application/json": { + "schema": { + "type": "number" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/mileages/histories": { + "patch": { + "summary": "قم بإدراج سجلات كل الأميال", + "description": "قم بإدراج كل سجلات الأميال.\n\nقم بإدراج كل {@link IShoppingMileageHistory mileage histories} الخاصة بـ\n{@link IShoppingCustomer customer} باستخدام {@link IPage pagination}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingMileageHistory.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingMileageHistory.IRequest.sort sort condition}.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageHistory.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "سجلات الأميال المقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileageHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/mileages/histories/{id}": { + "get": { + "summary": "الحصول على معلومات سجل الأميال", + "description": "الحصول على معلومات سجل الأميال.\n\nالحصول على معلومات سجل الأميال {@link IShoppingMileageHistory}.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "سجلات الأميال المستهدفة {@link IShoppingMileageHistory.id }" + } + ], + "responses": { + "200": { + "description": "معلومات سجل الأميال", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/mileages/histories/balance": { + "get": { + "summary": "الحصول على رصيد الأميال", + "description": "الحصول على رصيد الأميال.\n\nالحصول على الرصيد الحالي لأميال العميل {@link IShoppingCustomer}.", + "tags": [ + "Discount" + ], + "parameters": [], + "responses": { + "200": { + "description": "رصيد الأميال", + "content": { + "application/json": { + "schema": { + "type": "number" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities": { + "patch": { + "summary": "قائمة بكل السلع", + "description": "قائمة بكل السلع.\n\nقم بإدراج كل {@link IShoppingCartCommodity goods} في\nعربة التسوق باستخدام {@link IPage pagination}.\n\nإذا لم يتم تحديد *cartId* ولكن تم تعيين قيمة `null`، فسيتم استهداف كل\nعربة التسوق. كما يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingCartCommodity.IRequest.search search condition} في\nنص الطلب. علاوة على ذلك، من الممكن تخصيص ترتيب تسلسل\nالسجلات عن طريق تكوين {@link IShoppingCartCommodity.IRequest.sort}.\n\nللإشارة، عندما يتم طلب بعض السلع {@link IShoppingOrder} و\n{@link IShoppingOrderPublish published}، فلن يتم عرضها في\nعربة التسوق بعد الآن. بخلاف ذلك، إذا لم يتم نشر الطلب بعد،\nفإنه سيُضاف إلى عربة التسوق وسيظل بإمكانك إنشاء تطبيق\n{@link IShoppingOrder order جديد} بنفس السلعة.\n\nبالطبع، إذا تم تعليق {@link IShoppingSale sale} المستهدف، أو\n{@link IShoppingSaleUnitStockInventory out of stock}، فلن يُضاف إلى عربة التسوق أيضًا.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "معرف عربة التسوق" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "السلع المقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCartCommodity" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "إنشاء سلعة جديدة", + "description": "إنشاء سلعة جديدة.\n\nإنشاء سلعة {@link IShoppingCartCommodity} جديدة في\nعربة تسوق معينة.\n\nإذا كانت {@link IShoppingCartCommodity.ICreate.accumulate} لها قيمة `true`\nوكانت هناك سلعة مماثلة مكونة من نفس\n{@link IShoppingSaleUnitStock.IInvert stocks and Quantitys}،\nفلن يتم إنشاء سلعة جديدة ولكن سيتم تجميع الحجم.\n\nأيضًا، إذا لم يتم تحديد *cartId* ولكن تم تعيين قيمة `null`، فسيتم استخدام\nعربة التسوق العادية أو إنشاء عربة تسوق جديدة مع الأخذ في الاعتبار\nوجود عربة التسوق السابقة.\n\nبالمناسبة، إذا تم تعليق {@link IShoppingSale sale} المستهدفة أو\n{@link IShoppingSaleUnitStockInventory out of stock}، فسيتم طرح خطأ 410 gone\n. لذلك، من الأفضل التحقق من حالة البيع المستهدف و\n{@link IShoppingSaleUnitStock stock} قبل ذلك.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "معرف عربة التسوق" + } + ], + "requestBody": { + "description": "معلومات إنشاء السلعة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "السلعة التي تم إنشاؤها حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities/{id}": { + "get": { + "summary": "الحصول على سلعة", + "description": "احصل على سلعة.\n\nاحصل على سجل {@link IShoppingCartCommodity goods} لعربة التسوق.\n\nإذا كان *cartId* مختلفًا عن معرف عربة التسوق التي تنتمي إليها، فسيتم طرح استثناء 404 not\nfound. وإلا، فإن *cartId* له قيمة `null`،\nوسيتم تخطي فحص التبعية هذا، ولكن ستظل الملكية\nمُثبتة.\n\nأيضًا، إذا تم تعليق {@link IShoppingSale sale} المستهدف أو\n{@link IShoppingSaleUnitStockInventory out of stock}، فسيتم طرح خطأ 410 gone\n. لذلك، حتى إذا قمت بإنشاء سلعة بنجاح\nباستخدام طريقة {@link create}، فما زال من الممكن أن تفشل عند الوصول إلى السلعة باستخدام طريقة {@link at} هذه.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "معرف عربة التسوق" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "السلع المستهدفة {@link IShoppingCartCommodity.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن السلعة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "تحديث سلعة (حجم)", + "description": "تحديث سلعة (حجم).\n\nتحديث حجم سلعة {@link IShoppingCartCommodity} في\nعربة التسوق.\n\nإذا كان *cartId* مختلفًا عن معرف عربة التسوق التي تنتمي إليها، فسيتم طرح استثناء 404 not\nfound. وإلا، فإن *cartId* له قيمة `null`،\nسيتم تخطي فحص التبعية هذا، ولكن سيتم التحقق من الملكية.\n\nأيضًا، إذا تم تعليق {@link IShoppingSale sale} المستهدفة أو\n{@link IShoppingSaleUnitStockInventory out of stock} فجأة، فسيتم طرح خطأ 410\ngone أيضًا.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "معرف عربة التسوق" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "السلع المستهدفة {@link IShoppingCartCommodity.id }" + } + ], + "requestBody": { + "description": "تحديث معلومات السلعة (الحجم)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "مسح سلعة", + "description": "امسح سلعة.\n\nامسح سلعة {@link IShoppingCartCommodity} من عربة التسوق.\n\nإذا كانت السلعة في عملية {@link IShoppingOrder}، فلن يكون من الممكن\nمسحها. بدلاً من ذلك، إذا تم نشر الطلب\n{@link IShoppingOrderPublish}، فلن يتم عرضه في عربة التسوق بعد الآن. إذا تم مسح الطلب، فيمكنك أيضًا\nمتابعة مسح السلعة، ولا شيء غير ذلك.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "معرف عربة التسوق" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "السلع المستهدفة {@link IShoppingCartCommodity.id }" + } + ], + "responses": { + "200": { + "description": "سلعة تم إنشاؤها حديثًا", + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities/{id}/replica": { + "get": { + "summary": "الحصول على نسخة طبق الأصل من سلعة", + "description": "احصل على نسخة طبق الأصل من سلعة ما.\n\nاحصل على معلومات مكتوبة {@link IShoppingCartCommodity.ICreate} للسلعة المستهدفة\nللنسخ المتماثل.\n\nبالمناسبة، إذا كان *cartId* مختلفًا عن معرف عربة التسوق التي تنتمي إليها،\nفسيتم طرح استثناء 404 not found. وإلا، فإن *cartId*\nيحتوي على قيمة `null`، وسيتم تخطي فحص التبعية هذا، ولكن لا يزال\nيتم التحقق من الملكية.\n\nأيضًا، إذا تم تعليق {@link IShoppingSale sale} المستهدفة أو\n{@link IShoppingSaleUnitStockInventory out of stock} فجأة،\nفسيتم طرح خطأ 410 gone أيضًا.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "معرف عربة التسوق" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "السلع المستهدفة {@link IShoppingCartCommodity.id }" + } + ], + "responses": { + "200": { + "description": "معلومات إنشاء السلعة للتكرار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities/discountable": { + "patch": { + "summary": "الحصول على معلومات الخصم", + "description": "احصل على معلومات قابلة للخصم.\n\nاحسب الميزات القابلة للخصم حول\n{@link IShoppingCartCommodity عربة التسوق} بما في ذلك\nالمبيعات غير المدرجة في عربة التسوق {@link IShoppingSale}.\n\nتتضمن {@link IShoppingCartDiscountable} المرتجعة\nمجموعات من {@link IShoppingCoupon} القابلة للتعديل، و{@link IShoppingDepositHistory الودائع القابلة للسحب} و{@link IShoppingMileageHistory الأميال}.\n\nأيضًا، إذا كنت تريد معرفة المعلومات القابلة للخصم حول بعض\nالمبيعات المحددة التي لم يتم إضافتها إلى عربة التسوق بعد، فحدد المبيعات\nلخاصية {@link IShoppingCartDiscountable.pseudos} مع تكوين\n{@link IShoppingCartCommodity.ICreate معلومات إنشاء السلع}.\nبعد ذلك، سيتم تضمينها في المعلومات القابلة للخصم.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "معرف عربة التسوق" + } + ], + "requestBody": { + "description": "طلب معلومات عن المنتجات التي يمكن خصمها", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "معلومات المنتجات التي يمكن خصمها", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartDiscountable" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders": { + "post": { + "summary": "إنشاء طلب جديد", + "description": "إنشاء تطبيق طلب جديد.\n\nإنشاء {@link IShoppingOrder application طلب جديد} من\n{@link IShoppingCartCommodity shopping cart} التي تم تأليفها بواسطة\n{@link IShoppingCustomer}. بالطبع، ليس من الضروري وضع كل السلع\nفي الطلب، ولكن من الممكن أن يختار العميل بعضها.\n\nبالمناسبة، هذه الوظيفة لا تعني إكمال الطلب، بل تعني\nأن العميل فقط هو الذي يطبق الطلب. لا يتم إكمال الطلب إلا عندما يقوم العميل\n{@link IShoppingOrderPublish.paid_at بدفع} الطلب.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "معلومات إنشاء الطلب", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "الطلب الذي تم إنشاؤه حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "قم بإدراج كل الطلبات", + "description": "قم بإدراج كل الطلبات.\n\nقم بإدراج كل {@link IShoppingOrder orders} مع الترقيم.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingOrder.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingOrder.IRequest.sort sort condition}.\n\nللإشارة، إذا كنت {@link IShoppingCustomer customer}، فيمكنك إدراج طلباتك الخاصة، ولا يهم ما إذا كان\nالطلب قد تم {@link IShoppingOrderPublish.paid_atpaid} أم لا.\n\nوإلا إذا كنت {@link IShoppingSeller seller} أو\n{@link IShoppingAdministrator administration}، فيمكنك إدراج\nالطلبات المدفوعة فقط. أيضًا، في حالة البائع، سيتم إدراج\n{@link IShoppingOrder.goods goods} ذات الصلة فقط في الطلب.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "الطلبات المقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{id}": { + "delete": { + "summary": "مسح تطبيق الطلب", + "description": "مسح تطبيق الطلب.\n\nمسح تطبيق الطلب الذي تم تطبيقه بواسطة\n{@link IShoppingCustomer}.\n\nإذا تم نشر الطلب {@link IShoppingOrderPublish}، فلن يكون من الممكن مسح الطلب. في هذه الحالة، يجب عليك إلغاء\nالدفع عن طريق استدعاء الدالة {@link publish.cancel}.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الطلبات المستهدفة {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "الحصول على معلومات الطلب", + "description": "احصل على معلومات الطلب.\n\nاحصل على معلومات تفصيلية عن {@link IShoppingOrder order}.\n\nإذا لم تكن عميلاً لدى {@link IShoppingCustomer}، فلن تتمكن من\nالوصول إلى الطلب الذي لم يتم\n{@link IShoppingOrderPublish.paid_atpaid} بعد. في هذه الحالة،\nسيتم طرح خطأ 404 not found.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "Target order's {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "Order info", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{id}/price": { + "get": { + "summary": "Get price of the order", + "description": "احصل على سعر الطلب.\n\nاحصل على معلومات تفصيلية عن سعر الطلب {@link IShoppingOrder}.\n\nلا تحتوي معلومات السعر المرتجع على مبلغ الطلب فحسب، بل تحتوي أيضًا على\nمبلغ الخصم من خلال {@link IShoppingCoupono coupons} و\n{@link IShoppingDepositHistory deposits} و\n{@link IShoppingMileageHistory mileages}.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "Target order's {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "معلومات تفصيلية عن السعر مع الخصم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{id}/discountable": { + "patch": { + "summary": "احصل على معلومات قابلة للخصم", + "description": "احصل على معلومات قابلة للخصم.\n\nاحسب الميزات القابلة للخصم حول {@link IShoppingOrder}.\n\nيتضمن {@link IShoppingOrderDiscountable} المُعاد\nتضمين\nمجموعات من {@link IShoppingCoupon} القابلة للتعديل، و{@link IShoppingDepositHistory الإيداعات القابلة للسحب}\nو{@link IShoppingMileageHistory الأميال}.\n\nبالطبع، تكون الميزات المُعاد صالحة فقط عندما لا يكون الطلب\nقد تم {@link IShoppingOrderPublish نشره} بعد. إذا كان الطلب\nقد تم نشره بالفعل، فلا توجد طريقة لتخفيض السعر أكثر.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "طلب هدف {@link IShoppingOrder.id }" + } + ], + "requestBody": { + "description": "طلب معلومات عن الخصم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "معلومات الخصم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{id}/discount": { + "put": { + "summary": "خصم الطلب", + "description": "خصم الطلب.\n\nخصم السعر الإجمالي لـ {@link IShoppingOrder} عن طريق تعديل\n{@link IShoppingCoupon coupons} و{@link IShoppingDepositHistory deposits}\nو{@link IShoppingMileageHistory milesages}. إذا كان عدد ميزات الخصم\nمساويا للسعر الإجمالي للطلب، فمن الممكن\n{@link IShoppingOrderPublish} نشره دون أي نقود.\n\nبالمناسبة، يجب أن تكون ميزات الخصم صالحة. وإلا، فسيتم طرح خطأ الكيان غير القابل للمعالجة 428. لمعرفة الميزات\nالقابلة للتعديل أو السحب، اتصل بوظيفة {@link discountable}\nقبل ذلك.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "طلبات الهدف {@link IShoppingOrder.id }" + } + ], + "requestBody": { + "description": "معلومات الخصم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "معلومات تفصيلية عن السعر مع الخصم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{orderId}/goods/{id}/confirm": { + "put": { + "summary": "تأكيد الطلب جيد", + "description": "تأكيد طلب سلعة.\n\nتأكيد طلب {@link IShoppingOrderGood سلعة} تم\n\nإكماله {@link IShoppingDelivery تسليم} إلى\n{@link IShoppingCustomer customer}.\n\nبعبارة أخرى، يجب أن يكون {@link IShoppingOrder order} التابع\n{@link IShoppingPublish.paid_at published,paid} ويجب أن يكون تسليم\nالسلعة {@link IShoppingDeliveryJourney reaching}\nإلى\nالعميل. إذا لم يكن الأمر كذلك، فسيتم طرح خطأ كيان غير قابل للمعالجة 428.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الطلبات التابعة {@link IShoppingOrder.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "السلع المستهدفة {@link IShoppingOrderGood.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{orderId}/publish/able": { + "get": { + "summary": "تحقق من إمكانية النشر", + "description": "تحقق من إمكانية النشر.\n\nاختبر ما إذا كان {@link IShoppingOrder} قابلاً للنشر أم لا.\n\nإذا لم يتم نشر الطلب {@link IShoppingOrderPublish} ولم يتم\nحذفه بعد، فمن الممكن نشر الطلب. حتى لو تم تعليق\nالمبيعات المستهدفة {@link IShoppingSale} أو\n{@link IShoppingSaleUnitStockInventory نفاد المخزون}، فما زال من الممكن\nنشره لأن الطلب قد تم تطبيقه بالفعل.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "طلبات الهدف {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "ما إذا كان الطلب قابلاً للنشر أم لا", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{orderId}/publish": { + "post": { + "summary": "نشر طلب", + "description": "انشر طلبًا.\n\n{@link IShoppingOrderPublish انشر} طلبًا {@link IShoppingOrder}\nتم تطبيقه بواسطة {@link IShoppingCustomer}\nمع\n{@link IShoppingAddress address} على معلومات التسليم والدفع التي تم الحصول عليها\nمن نظام بائع الدفع.\n\nإذا تم خصم سعر الطلب بالكامل، فلا داعي\nلإرسال معلومات بائع الدفع. بدلاً من ذلك، مطلوب معلومات العنوان فقط.\n\nكما يمكن أن يختلف وقت الدفع مع وقت النشر. على سبيل المثال،\nإذا كانت طريقة الدفع هي التحويل اليدوي إلى حساب مصرفي، فسيتم تأخير الدفع\nحتى يقوم العميل بتحويل الأموال بالفعل. في هذه\nالحالة، ستكون قيمة {@link IShoppingOrderPublish.paid_at} `null`، لذا\nيتعين عليك التحقق منها بعد استدعاء وظيفة النشر هذه.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "طلبات الهدف {@link IShoppingOrder.id }" + } + ], + "requestBody": { + "description": "معلومات إنشاء النشر", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingOrderPublish.ICashCreate" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish.IZeroCreate" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "cash": "#/components/schemas/IShoppingOrderPublish.ICashCreate", + "zero": "#/components/schemas/IShoppingOrderPublish.IZeroCreate" + } + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "نشر تم إنشاؤه حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPublish" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "إلغاء النشر (الدفع)", + "description": "إلغاء النشر (الدفع).\n\nإلغاء دفع طلب {@link IShoppingOrder} الذي تم نشره\n{@link IShoppingOrderPublish}.\n\nإذا كانت طريقة الدفع الخاصة بطلب النشر المستهدف هي التحويل المصرفي اليدوي،\nفسيتم إلغاؤه مباشرةً. إذا لم يكن الأمر كذلك، فسيتم إرسال طلب إلغاء الدفع\nإلى نظام بائع الدفع.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "طلبات الهدف {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales": { + "patch": { + "summary": "قم بإدراج كل المبيعات المختصرة", + "description": "قم بإدراج كل المبيعات الملخصة.\n\nقم بإدراج كل {@link IShoppingSale.ISummary summaryd sales}.\n\nكما ترى، يتم تلخيص المبيعات المرتجعة، وليس تفصيلها. إذا كنت تريد\nالحصول على معلومات مفصلة عن عملية بيع، فاستخدم الدالة {@link at} لكل عملية بيع.\n\nللمرجع، إذا كنت {@link IShoppingSeller seller}، يمكنك فقط\nالوصول إلى {@link IShoppingSale sales}. وإلا إذا كنت\n{@link IShoppingCustomer customer}، فيمكنك فقط رؤية المبيعات\nالجارية في السوق. لا يمكنك رؤية المبيعات\nغير المفتوحة أو المغلقة أو المعلقة.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSale.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingSale.IRequest.sort sort condition}.", + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "اطلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "مبيعات مقسمة إلى صفحات تحتوي على معلومات موجزة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{id}": { + "get": { + "summary": "احصل على معلومات عن المبيعات", + "description": "احصل على معلومات عن المبيعات.\n\nاحصل على {@link IShoppingSale sale} مع معلومات مفصلة.\n\nإذا كنت {@link IShoppingSeller seller}، يمكنك فقط الوصول إلى {@link IShoppingSale sale}\n\nالخاصة بك. وإلا إذا كنت\n{@link IShoppingCustomer customer}، فيمكنك الوصول فقط إلى المبيعات\nالجارية في السوق. لا يمكنك الوصول إلى المبيعات\nغير المفتوحة أو المغلقة أو المعلقة.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات الهدف {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن المبيعات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments": { + "patch": { + "summary": "قم بإدراج كل تعليقات الاستفسار", + "description": "قم بإدراج كل تعليقات الاستعلام.\n\nقم بإدراج كل {@link IShoppingSaleInquiryComment تعليقات الاستعلام} لـ\n{@link IShoppingSaleQuestion question} أو {@link IShoppingSaleReview review}\nمع {@link ترقيم الصفحات في IPage}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nبالمناسبة، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط الوصول\nإلى استفسارات {@link IShoppingSale sale} الخاصة بك. وإلا، يمكنك\nالوصول إلى كل استفسارات المبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات السلع المملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات السلع المملوكة {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "تعليقات الاستعلامات المرقمة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "إنشاء تعليق استعلام", + "description": "إنشاء تعليق استفسار.\n\nإنشاء تعليق استفسار {@link IShoppingSaleInquiryComment} لسؤال\n{@link IShoppingSaleQuestion} أو مراجعة {@link IShoppingSaleReview}.\n\nللمزيد من المعلومات، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nإنشاء تعليق استفسار لاستفسار {@link IShoppingSale sale} الخاص بك.\nوإلا، يمكنك إنشاء تعليق استفسار لكل استفسارات المبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات مستهدفة {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "معلومات إنشاء تعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "تعليق استفسار تم إنشاؤه حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { + "get": { + "summary": "الحصول على معلومات تعليق الاستفسار", + "description": "احصل على معلومات تعليق الاستفسار.\n\nاحصل على معلومات تفصيلية {@link IShoppingSaleInquiryComment تعليق الاستفسار}\nعن {@link IShoppingSaleQuestion question} أو\n{@link IShoppingSaleReview review}.\n\nللاطلاع، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى تعليق الاستفسار الخاص بـ {@link IShoppingSale sale} الخاص بك.\nوإلا، يمكنك الوصول إلى كل تعليقات الاستفسار الخاصة بالمبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات تابعة {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليقات الاستفسار المستهدفة {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "معلومات تفصيلية عن تعليقات الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "تحديث تعليق الاستفسار", + "description": "تحديث تعليق الاستفسار.\n\nتحديث {@link IShoppingSaleInquiryComment تعليق الاستفسار} إلى\n{@link IShoppingSaleQuestion question} أو {@link IShoppingSaleReview review} محدد.\n\nبالمناسبة، وفقًا للسياسة العامة لمركز التسوق هذا فيما يتعلق\nبالتعليقات، فإن تعديل التعليق لا يغير المحتوى الحالي فعليًا.\n\nيتم تجميع المحتوى المعدل وتسجيله في سجل التعليقات الحالي\nكصورة جديدة {@link IShoppingSaleInquiryComment.ISnapshot}. ويتم نشر ذلك\nللجميع، الذين يمكنهم قراءة تعليق الاستفسار هذا.\n\nوذلك لمنع العملاء أو البائعين من تعديل تعليقاتهم\nوالتلاعب بالظروف بسبب طبيعة التجارة الإلكترونية، حيث\nتنشأ النزاعات بسهولة. أي للحفاظ على الأدلة.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات مملوكة {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليق الاستفسار المستهدف {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "تحديث معلومات تعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "سجل لقطة تم إنشاؤه حديثًا لتعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions": { + "post": { + "summary": "كتابة مقال سؤال", + "description": "اكتب مقالاً سؤالياً.\n\nعندما يرغب عميل {@link IShoppingCustomer} في طرح سؤال حول\nبيع {@link IShoppingSale} محدد، يمكنه طرح السؤال من خلال كتابة\nمقالة سؤال {@link IShoppingSaleQuestion جديدة}.\n\nإذا لم يرغب العميل في الكشف عن هويته وسؤاله،\nفيمكنه كتابة السؤال كمقالة سرية. في هذه الحالة، يمكن فقط للعميل والبائع {@link IShoppingSeller} المرتبط رؤية\n{@link at detailed content}. كما سيتم إخفاء عنوان هذا السؤال السري واسم كاتبه بأحرف `*` في\n{@link index pagiation API}.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "المبيعات المملوكة {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "معلومات إنشاء السؤال", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "سؤال تم إنشاؤه حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "قم بإدراج جميع الأسئلة المختصرة", + "description": "قم بإدراج جميع الأسئلة المختصرة.\n\nقم بإدراج جميع {@link IShoppingSaleQuestion.ISummary summaryd questions} من\n{@link IShoppingSale sale}.\n\nكما ترى، يتم تلخيص الأسئلة المُرجعة، وليس تفصيلها. إذا كنت تريد\nالحصول على معلومات تفصيلية عن سؤال، فاستخدم الدالة {@link adridges}\nأو الدالة {@link at} لكل مقال.\n\nكما أن السؤال المُرجع يحتوي على الخاصية {@link IShoppingSaleQuestion.ISummary.answer}\nالتي تعني الإجابة الرسمية من {@link IShoppingSeller}.\nبالإضافة إلى ذلك، يحتوي السؤال المُرجع على خاصية خاصة أخرى\n{@link IShoppingSaleQuestion.ISummary.secret} مع إخفاء خصائص رئيسية أخرى، وهذا يعني أن الجهات الفاعلة ذات الصلة فقط يمكنها {@link at قراءة}\nالسؤال.\n\nللمرجع، إذا كنت بائعًا {@link IShoppingSeller}، فيمكنك فقط\nالوصول إلى أسئلة {@link IShoppingSale sale} الخاصة بك. بخلاف ذلك،\nيمكنك الوصول إلى جميع أسئلة المبيعات.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleQuestion.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات السلع المملوكة {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "أسئلة مقسمة إلى صفحات تحتوي على معلومات موجزة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions/{id}": { + "post": { + "summary": "تحديث سؤال", + "description": "تحديث سؤال.\n\nتحديث محتوى سؤال {@link IShoppingSaleQuestion}.\n\nبالمناسبة، وكما هي السياسة العامة لمركز التسوق هذا فيما يتعلق\nبالمقالات، فإن تعديل مقالات السؤال لا يغير فعليًا\nالمحتوى الموجود. يتم تجميع المحتوى المعدل وتسجيله في\nسجل المقالة الموجودة كصورة جديدة\n{@link IShoppingSaleQuestion.ISnapshot}. ويتم نشر ذلك\nللجميع، بما في ذلك {@link IShoppingCustomer customer} و\n{@link IShoppingSeller seller}، ويمكن لأي شخص يمكنه عرض المقالة\nأن يعرض أيضًا سجلات التحرير بالكامل.\n\nوذلك لمنع العملاء أو البائعين من تعديل مقالاتهم\nوالتلاعب بالظروف بسبب طبيعة التجارة الإلكترونية، حيث\nتنشأ النزاعات بسهولة. أي للحفاظ على الأدلة.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الأسئلة المستهدفة {@link IShoppingSaleQuestion.id }" + } + ], + "requestBody": { + "description": "تحديث معلومات السؤال", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "سجل لقطة تم إنشاؤه حديثًا للسؤال", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "الحصول على معلومات السؤال", + "description": "احصل على معلومات عن سؤال.\n\nاحصل على معلومات تفصيلية عن {@link IShoppingSaleQuestion question} بشأن\n{@link IShoppingSale sale}.\n\nللاطلاع، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى سؤالك الخاص بـ {@link IShoppingSale sale}. وإلا\nفأنت عميل {@link IShoppingCustomer}، يمكنك الوصول إلى كل\nأسئلة المبيعات باستثناء قيمة {@link IShoppingSaleQuestion.secret}\n\"false\".", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "رقم المبيعات المملوكة {@link IShoppingSale.id}" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الأسئلة المستهدفة {@link IShoppingSaleQuestion.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن الأسئلة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions/abridges": { + "patch": { + "summary": "قم بإدراج كل الأسئلة المختصرة", + "description": "قم بإدراج جميع الأسئلة المختصرة.\n\nقم بإدراج جميع {@link IShoppingSaleQuestion.IAbridge abridged questions} من\n{@link IShoppingSale sale}.\n\nكما ترى، الأسئلة التي تم إرجاعها مختصرة وليست مفصلة. إذا كنت تريد\nالحصول على معلومات مفصلة عن سؤال، فاستخدم الدالة {@link at}\nلكل مقال.\n\nكما أن السؤال الذي تم إرجاعه يحتوي على الخاصية {@link IShoppingSaleQuestion.IAridge.answer}\nوالتي تعني الإجابة الرسمية من {@link IShoppingSeller}.\n\nبالإضافة إلى ذلك، يحتوي السؤال الذي تم إرجاعه على خاصية خاصة أخرى\n{@link IShoppingSaleQuestion.IAridge.secret} مع إخفاء خصائص رئيسية أخرى، وهذا يعني أن الجهات الفاعلة ذات الصلة فقط يمكنها {@link at قراءة}\nالسؤال.\n\nللإشارة، إذا كنت بائعًا {@link IShoppingSeller}، فيمكنك فقط\nالوصول إلى أسئلة {@link IShoppingSale sale} الخاصة بك. بخلاف ذلك،\nيمكنك الوصول إلى جميع أسئلة المبيعات.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleQuestion.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات السلع المملوكة {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "أسئلة مقسمة إلى صفحات تحتوي على معلومات مختصرة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments": { + "patch": { + "summary": "قم بإدراج كل تعليقات الاستفسار", + "description": "قم بإدراج كل تعليقات الاستعلام.\n\nقم بإدراج كل {@link IShoppingSaleInquiryComment تعليقات الاستعلام} لـ\n{@link IShoppingSaleQuestion question} أو {@link IShoppingSaleReview review}\nمع {@link ترقيم الصفحات في IPage}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nبالمناسبة، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط الوصول\nإلى استفسارات {@link IShoppingSale sale} الخاصة بك. وإلا، يمكنك\nالوصول إلى كل استفسارات المبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات السلع المملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات السلع المملوكة {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "تعليقات الاستعلامات المرقمة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "إنشاء تعليق استعلام", + "description": "إنشاء تعليق استفسار.\n\nإنشاء تعليق استفسار {@link IShoppingSaleInquiryComment} لسؤال\n{@link IShoppingSaleQuestion} أو مراجعة {@link IShoppingSaleReview}.\n\nللمزيد من المعلومات، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nإنشاء تعليق استفسار لاستفسار {@link IShoppingSale sale} الخاص بك.\nوإلا، يمكنك إنشاء تعليق استفسار لكل استفسارات المبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات مستهدفة {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "معلومات إنشاء تعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "تعليق استفسار تم إنشاؤه حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { + "get": { + "summary": "الحصول على معلومات تعليق الاستفسار", + "description": "احصل على معلومات تعليق الاستفسار.\n\nاحصل على معلومات تفصيلية {@link IShoppingSaleInquiryComment تعليق الاستفسار}\nعن {@link IShoppingSaleQuestion question} أو\n{@link IShoppingSaleReview review}.\n\nللاطلاع، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى تعليق الاستفسار الخاص بـ {@link IShoppingSale sale} الخاص بك.\nوإلا، يمكنك الوصول إلى كل تعليقات الاستفسار الخاصة بالمبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات تابعة {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليقات الاستفسار المستهدفة {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "معلومات تفصيلية عن تعليقات الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "تحديث تعليق الاستفسار", + "description": "تحديث تعليق الاستفسار.\n\nتحديث {@link IShoppingSaleInquiryComment تعليق الاستفسار} إلى\n{@link IShoppingSaleQuestion question} أو {@link IShoppingSaleReview review} محدد.\n\nبالمناسبة، وفقًا للسياسة العامة لمركز التسوق هذا فيما يتعلق\nبالتعليقات، فإن تعديل التعليق لا يغير المحتوى الحالي فعليًا.\n\nيتم تجميع المحتوى المعدل وتسجيله في سجل التعليقات الحالي\nكصورة جديدة {@link IShoppingSaleInquiryComment.ISnapshot}. ويتم نشر ذلك\nللجميع، الذين يمكنهم قراءة تعليق الاستفسار هذا.\n\nوذلك لمنع العملاء أو البائعين من تعديل تعليقاتهم\nوالتلاعب بالظروف بسبب طبيعة التجارة الإلكترونية، حيث\nتنشأ النزاعات بسهولة. أي للحفاظ على الأدلة.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استفسارات مملوكة {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليقات الاستفسار المستهدفة {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "تحديث معلومات تعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "سجل لقطة تم إنشاؤه حديثًا لتعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews": { + "post": { + "summary": "كتابة مقال مراجعة", + "description": "اكتب مقالة مراجعة.\n\nعندما يشتري عميل {@link IShoppingCustomer} منتجًا معينًا من منتجات\n{@link IShoppingSale sale} ويحصل على {@link IShoppingDelivery}،\n\nيمكنه كتابة مقالة {@link IShoppingSaleReview review} حول هذا المنتج.\n\nإذا حاولت كتابة مقالة مراجعة دون الشراء أو عدم اكتمال التسليم، فسيتم طرح خطأ الكيان غير القابل للمعالجة 428. كما يمكن للعميل كتابة مقالات مراجعة متعددة لكل طلب، ولكن يمكن كتابة المقال التالي بعد أسبوعين من المقال السابق. وإلا، فسيتم طرح خطأ الكيان غير القابل للمعالجة 428 أيضًا.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "المبيعات المملوكة {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "معلومات إنشاء المراجعة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "مراجعة تم إنشاؤها حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "قم بإدراج كل المراجعات المختصرة", + "description": "قم بإدراج كل المراجعات المختصرة.\n\nقم بإدراج كل {@link IShoppingSaleReview.ISummary summaryd reviews} من\n{@link IShoppingSale sale}.\n\nكما ترى، المراجعات التي تم إرجاعها ملخصة، وليست مفصلة. إذا كنت تريد\nالحصول على معلومات مفصلة عن مراجعة، فاستخدم الدالة {@link adridges}\nأو الدالة {@link at} لكل مقال.\n\nكما أن المراجعة التي تم إرجاعها تحتوي على الخاصية {@link IShoppingSaleReview.ISummary.answer}\nالتي تعني الإجابة الرسمية من {@link IShoppingSeller}.\n\nللمرجع، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك\nالوصول فقط إلى مراجعات {@link IShoppingSale sale} الخاصة بك. وإلا،\nفيمكنك الوصول إلى كل مراجعات المبيعات.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleReview.IRequest.search search condition} في\nنص الطلب. من الممكن أيضًا تخصيص ترتيب تسلسل السجلات\nمن خلال تكوين {@link IShoppingSaleReview.IRequest.sort sort condition}.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات السلع المملوكة {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "مراجعات مقسمة إلى صفحات تحتوي على معلومات موجزة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews/{id}": { + "post": { + "summary": "تحديث مراجعة", + "description": "تحديث مراجعة.\n\nتحديث محتوى ودرجة مراجعة {@link IShoppingSaleReview}.\n\nبالمناسبة، وكما هي السياسة العامة لمركز التسوق هذا فيما يتعلق\nبالمقالات، فإن تعديل المقالات التي بها أسئلة لا يغير فعليًا\nالمحتوى الموجود. يتم تجميع المحتوى المعدل وتسجيله في\nسجل المقالة الموجودة كصورة جديدة\n{@link IShoppingSaleReview.ISnapshot}. ويتم نشر ذلك\nللجميع، بما في ذلك {@link IShoppingCustomer customer} و\n{@link IShoppingSeller seller}، ويمكن لأي شخص يمكنه عرض المقالة\nأن يعرض أيضًا تاريخ التحرير بالكامل.\n\nوذلك لمنع العملاء أو البائعين من تعديل مقالاتهم\nوالتلاعب بالظروف بسبب طبيعة التجارة الإلكترونية، حيث\nتنشأ النزاعات بسهولة. أي للحفاظ على الأدلة.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مراجعات مستهدفة {@link IShoppingSaleReview.id }" + } + ], + "requestBody": { + "description": "تحديث معلومات المراجعة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "سجل لقطة تم إنشاؤه حديثًا للمراجعة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "الحصول على معلومات المراجعة", + "description": "احصل على معلومات المراجعة.\n\nاحصل على معلومات تفصيلية عن {@link IShoppingSaleReview review} لـ\n{@link IShoppingSale sale}.\n\nللمرجع، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى مراجعة {@link IShoppingSale sale} الخاصة بك. وإلا\nفأنت {@link IShoppingCustomer customer}، يمكنك الوصول إلى كل\nمراجعات المبيعات.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مراجعات مستهدفة {@link IShoppingSaleReview.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن المراجعة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews/abridges": { + "patch": { + "summary": "قم بإدراج كل المراجعات المختصرة", + "description": "قم بإدراج كل المراجعات المختصرة.\n\nقم بإدراج كل {@link IShoppingSaleReview.IAbridge abridged reviews} من\n{@link IShoppingSale sale}.\n\nكما ترى، المراجعات التي تم إرجاعها مختصرة وليست مفصلة. إذا كنت تريد\nالحصول على معلومات مفصلة عن مراجعة، فاستخدم الدالة {@link at}\nلكل مقال.\n\nكما أن المراجعة التي تم إرجاعها تحتوي على الخاصية {@link IShoppingSaleReview.IAridge.answer}\nوالتي تعني الإجابة الرسمية من {@link IShoppingSeller}.\n\nللمرجع، إذا كنت بائعًا في {@link IShoppingSeller}، فيمكنك\nالوصول فقط إلى مراجعات {@link IShoppingSale sale} الخاصة بك. وإلا،\nفيمكنك الوصول إلى كل مراجعات المبيعات.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleReview.IRequest.search search condition} في\nنص الطلب. من الممكن أيضًا تخصيص ترتيب تسلسل السجلات\nمن خلال تكوين {@link IShoppingSaleReview.IRequest.sort sort condition}.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات السلع المملوكة {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "مراجعات مقسمة إلى صفحات تحتوي على معلومات مختصرة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/snapshots": { + "patch": { + "summary": "قم بإدراج كل اللقطات", + "description": "قم بإدراج كل لقطات الشاشة.\n\nكلما قام {@link IShoppingSeller seller} بتحديث\n{@link IShoppingSale sale}، لا يتم تحديث سجل البيع ولكن يتم إنشاء سجل\n{@link IShoppingSaleSnapshot snapshot} جديد للحفاظ على\nسلامة سجل البيع. هذه الوظيفة API مخصصة لإدراج\nسجلات اللقطات الشاشة هذه.\n\nكما يمكنك أن ترى من نوع الإرجاع، فإن اللقطات الشاشة التي تم إرجاعها\nملخصة، وليست مفصلة. إذا كنت تريد الحصول على معلومات مفصلة\nللقطة شاشة، فاستخدم الوظيفة {@link at} أو {@link flipo} لكل لقطة شاشة.\n\nللمرجع، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى لقطات الشاشة الخاصة بـ {@link IShoppingSale sale} الخاصة بك. وإلا،\nيمكنك الوصول إلى كل لقطات الشاشة للمبيعات حتى لو تم إغلاق البيع أو تعليقه.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات الهدف {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "طلب معلومات الترقيم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "لقطات مقسمة إلى صفحات تحتوي على معلومات موجزة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/snapshots/{id}": { + "get": { + "summary": "الحصول على معلومات لقطة", + "description": "احصل على معلومات لقطة سريعة.\n\nاحصل على لقطة سريعة {@link IShoppingSaleSnapshot} تحتوي على معلومات مفصلة.\n\nكما ترى من نوع الإرجاع، لا تحتوي اللقطة السريعة المرتجعة على\nمعلومات {@link IShoppingSale sale}. إذا كنت تريد الحصول على معلومات البيع،\nاستخدم وظيفة {@link flip} بدلاً من ذلك.\n\nللمرجع، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى لقطات {@link IShoppingSale sale} الخاصة بك. بخلاف ذلك،\nيمكنك الوصول إلى كل لقطات المبيعات حتى لو تم إغلاق البيع أو تعليقه.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "لقطات الهدف {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن اللقطة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/snapshots/{id}/flip": { + "get": { + "summary": "احصل على معلومات اللقطة المقلوبة", + "description": "احصل على معلومات لقطة مقلوبة.\n\nاحصل على معلومات {@link IShoppingSale sale} من لقطة مقلوبة.\n\nكما ترى من نوع الإرجاع، تعيد هذه الدالة معلومات\n{@link IShoppingSale sale}. بالمناسبة، معلومات اللقطة ليست الأحدث، بل هي معلومات مقلوبة في جانب اللقطة.\n\nأيضًا، إذا كنت بائعًا في {@link IShoppingSeller}، فيمكنك فقط الوصول إلى لقطات {@link IShoppingSale sale} الخاصة بك. بخلاف ذلك، يمكنك\nالوصول إلى كل لقطات اللقطة الخاصة بالمبيعات حتى لو تم إغلاق اللقطة أو تعليقها.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات مملوكة {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "لقطات مستهدفة {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن المبيعات في جانب اللقطة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{channelCode}/categories": { + "patch": { + "summary": "قم بإدراج كل الفئات مع السجلات الفرعية", + "description": "قم بإدراج كل الفئات التي تحتوي على سجلات فرعية.\n\nقم بإدراج كل {@link IShoppingChannelCategory.IHierarchical categories}\nمن {@link IShoppingChannel channel} مع الترقيم الصفحي. تحتوي الفئات المُرجعة\nعلى فئات فرعية أيضًا.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingChannelCategory.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingChannelCategory.IRequest.sort sort condition}.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "القنوات التابعة {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "فئات مقسمة إلى صفحات تحتوي على فئات فرعية", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}": { + "get": { + "summary": "الحصول على معلومات الفئة", + "description": "الحصول على معلومات الفئة.\n\nالحصول على معلومات مفصلة عن {@link IShoppingChannelCategory category}.\n\nتحتوي الفئة التي تم إرجاعها على فئات فرعية هرمية، كما تحتوي أيضًا على فئات الوالدين المتكررة.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "القنوات التابعة {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الفئات المستهدفة {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "معلومات الفئة التفصيلية", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}/invert": { + "get": { + "summary": "الحصول على معلومات الفئة المقلوبة", + "description": "احصل على معلومات الفئة المعكوسة.\n\nاحصل على معلومات {@link IShoppingChannelCategory.IInvert category} المعكوسة.\n\nتحتوي الفئة التي تم إرجاعها على الفئات الأصلية المتكررة، ولكنها لا تحتوي على\nالفئات الفرعية الهرمية.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "القنوات التابعة {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الفئات المستهدفة {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن الفئة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels": { + "patch": { + "summary": "قم بإدراج كل القنوات", + "description": "قم بإدراج كل القنوات.\n\nقم بإدراج كل {@link IShoppingChannel channels} مع الترقيم.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingChannel.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingChannel.IRequest.sort sort condition}.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "القنوات المقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/hierarchical": { + "patch": { + "summary": "قم بإدراج كل القنوات مع الفئات المتداخلة", + "description": "قم بإدراج جميع القنوات ذات الفئات المتداخلة.\n\nقم بإدراج كل {@link IShoppingChannel.IHierarchical channels} مع\n{@link IPage pagination}. تحتوي القنوات المسترجعة على فئات هرمية متداخلة\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingChannel.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingChannel.IRequest.sort sort condition}.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قنوات مقسمة إلى صفحات تحتوي على فئات متداخلة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{id}": { + "get": { + "summary": "الحصول على معلومات القناة", + "description": "الحصول على معلومات القناة.\n\nالحصول على معلومات مفصلة عن {@link IShoppingChannel.IHierarchical channel}.\n\nتحتوي مثيلات القناة التي تم إرجاعها أيضًا على معلومات\n{@link IShoppingChannelCategory.IHierarchical hierarchical category} المتداخلة.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "القنوات المستهدفة {@link IShoppingChannel.id }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن القناة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{code}/get": { + "get": { + "summary": "الحصول على معلومات القناة من خلال الكود الخاص بها", + "description": "احصل على معلومات القناة من خلال الكود الخاص بها.\n\nاحصل على معلومات مفصلة عن {@link IShoppingChannel.IHierarchical channel}\nمن خلال الكود الخاص بها.\n\nتحتوي مثيلات القناة التي تم إرجاعها أيضًا على المعلومات المتداخلة\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\n.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "القنوات المستهدفة {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "معلومات مفصلة عن القناة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/sections": { + "patch": { + "summary": "قم بإدراج كل الأقسام", + "description": "قم بإدراج كل الأقسام.\n\nقم بإدراج كل {@link IShoppingSection sections} مع الترقيم الصفحي.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSection.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingSection.IRequest.sort sort condition}.", + "tags": [ + "Section" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم الصفحي والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "الأقسام المرقمة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/sections/{id}": { + "get": { + "summary": "الحصول على معلومات القسم", + "description": "احصل على معلومات القسم.\n\nاحصل على معلومات تفصيلية عن {@link IShoppingSection section}.", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "استهداف الأقسام {@link IShoppingSection.id }" + } + ], + "responses": { + "200": { + "description": "معلومات تفصيلية عن القسم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/sections/{code}/get": { + "get": { + "summary": "احصل على معلومات القسم من خلال الكود الخاص به", + "description": "احصل على معلومات القسم من خلال الكود الخاص به.\n\nاحصل على معلومات تفصيلية عن {@link IShoppingSection section} من خلال الكود الخاص به.", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "استهداف الأقسام {@link IShoppingSection.code }" + } + ], + "responses": { + "200": { + "description": "معلومات تفصيلية عن القسم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/authenticate": { + "get": { + "summary": "احصل على معلومات البائع", + "description": "احصل على معلومات البائع.\n\nاحصل على معلومات {@link IShoppingSeller.IInvert seller} الخاصة بـ\n{@link IShoppingCustomer customer} الحالي.\n\nإذا لم يكن {@link IShoppingMember member} الحالي بائعًا،\nفإنه يطرح استثناء 403 محظورًا.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "responses": { + "200": { + "description": "معلومات البائع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "انضم كبائع", + "description": "انضم كبائع.\n\nانضم كبائع باستخدام {@link IShoppingSeller.IJoin join info}.\n\nلا يُسمح بهذه الطريقة إلا عندما يكون العميل {@link IShoppingCustomer} قد انضم بالفعل إلى عضوية {@link IShoppingMember}. إذا لم يكن الأمر كذلك، فيجب عليه (عليها) أن ينجز ذلك من قبل. إذا لم يكن الأمر كذلك، فسيتم طرح استثناء 403 المحظور.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "معلومات طلب الانضمام", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "معلومات البائع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/authenticate/login": { + "put": { + "summary": "تسجيل الدخول كبائع", + "description": "تسجيل الدخول كبائع.\n\nتسجيل الدخول كبائع باستخدام {@link IShoppingSeller.ILogin معلومات تسجيل الدخول}.\n\nهذه الطريقة لها نفس التأثير تمامًا مع وظيفة\n{@link ShoppingApi.functional.customers.authenticate.login}، ولكن\nالنوع المُعاد مختلف قليلاً. تعيد الوظيفة المماثلة النوع\n{@link IShoppingCustomer} الذي يبدأ من معلومات العميل، بحيث\nيتعين عليك الوصول إلى معلومات البائع من خلال\n`customer.member.seller`. وعلى النقيض من ذلك، تعيد هذه الطريقة النوع\n{@link IShoppingSeller.IInvert} الذي يبدأ من\nمعلومات البائع، بحيث يمكنك الوصول إلى معلومات العميل من خلال `seller.customer`.\n\nبالطبع، لاستخدام هذه الوظيفة، كان عليك {@link join} كبائع\nمن قبل. وإلا، فسيتم طرح استثناء 403 محظور،", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "معلومات طلب تسجيل الدخول", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "معلومات البائع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries": { + "patch": { + "summary": "الحصول على قائمة التسليمات", + "description": "احصل على قائمة عمليات التسليم.\n\nاحصل على قائمة {@link IShoppingDelivery.IInvert deliveries} الخاصة ببائع\n{@link IShoppingSeller} الحالي مع {@link ترقيم الصفحات في IPage}.\n\nللإشارة، تحتوي عمليات التسليم المرتجعة على معلومات الطلب\n{@link IShoppingOrder.IInvertFromDelivery} المستهدف. بالطبع،\nيتم تضمين {@link IShoppingOrderGood goods} ذات الصلة فقط في الطلبات.\n\nبالإضافة إلى ذلك، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingDelivery.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingDelivery.IRequest.sort sort condition}.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "طلب معلومات الترقيم والبحث والفرز", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "عمليات التسليم المقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDelivery.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "إنشاء عملية تسليم", + "description": "إنشاء عملية تسليم.\n\nقم بإنشاء سجل {@link IShoppingDelivery delivery} يستهدف\n{@link IShoppingOrder orders}، و{@link IShoppingOrderGood goods} و{@link IShoppingSaleUnitStock stocks} ({@link IShoppingDeliveryPiece}) مع\n{@link IShoppingDeliveryJourney journeys} و{@link IShoppingDeliveryShipper shippingers}.\n\nلاحظ أن تكوين {@link IShoppingDeliveryPiece} يجب ألا يتجاوز\nالمطلوب. لتحديد القطع المطلوبة، نوصي باستدعاء\nدالة {@link incompletes} مع\n{@link IShoppingOrderPublish.id}s للطلبات المستهدفة قبل استدعاء هذه الدالة.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "معلومات إنشاء التسليم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "تم إنشاء التسليم حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{id}": { + "get": { + "summary": "احصل على التسليم", + "description": "احصل على التسليم.\n\nاحصل على معلومات {@link IShoppingDelivery.IInvert delivery} مع معرفها.\n\nللإشارة، يحتوي التسليم المرتجع على معلومات الطلب المستهدف\n{@link IShoppingOrder.IInvertFromDelivery}. بالطبع،\nيتم تضمين السلع ذات الصلة {@link IShoppingOrderGood} فقط في الطلبات.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "التسليم المستهدف {@link IShoppingDelivery.id }" + } + ], + "responses": { + "200": { + "description": "معلومات التسليم مع الطلبات المستهدفة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/incompletes": { + "patch": { + "summary": "احصل على قائمة بالقطع غير المكتملة", + "description": "احصل على قائمة بالقطع غير المكتملة.\n\nاحصل على قائمة {@link IShoppingDeliveryPiece القطع غير المكتملة} من {@link IShoppingOrderPublish.id}s الخاصة بالطلبات المستهدفة.\n\nإذا قمت بتحديد معرفات نشر الطلبات المستهدفة، فإن هذه الوظيفة تعيد\nالقطع غير المكتملة من الطلبات مع الحساب كمصفوفة من نوع\n{@link IShoppingDeliveryPiece.ICreate}.\n\nيمكنك استخدام النتيجة لإنشاء {@link IShoppingDelivery تسليم ضخم}\nللتسليم المتكامل، ومن الممكن أيضًا إجراء عمليات تسليم متعددة للتسليم\nالمقسم.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "قائمة الطلبات المستهدفة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قائمة القطع غير المكتملة", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.ICreate" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/journeys": { + "post": { + "summary": "إنشاء رحلة جديدة", + "description": "إنشاء رحلة جديدة.\n\nإنشاء رحلة {@link IShoppingDeliveryJourney جديدة} من\n{@link IShoppingDelivery delivery}.\n\nقد يؤدي هذا الإجراء إلى تغيير حالة {@link IShoppingOrderGood.state} المرتبطة.\n\nأيضًا، إذا كان نوع الرحلة المستهدفة هو \"delivering\"، فإن ما إذا كانت الخاصية\n{@link IShoppingDeliveryJourney.completed_at} فارغة أم لا يؤثر على\nحالات السلع المرتبطة. إذا لم تكن الخاصية فارغة، تصبح الحالة\n\"arrived\". وإلا، تصبح الحالة \"delivering\".", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات إنشاء الرحلة" + } + ], + "requestBody": { + "description": "رحلة تم إنشاؤها حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "أكمل رحلة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}/complete": { + "put": { + "summary": "أكمل رحلة.\n\nأكمل رحلة {@link IShoppingDeliveryJourney} من\n{@link IShoppingDelivery Delivery}. بعبارة أخرى، يملأ خاصية\n{@link IShoppingDeliveryJourney.completed_at} بالوقت الحالي.\n\nإذا كان نوع الرحلة المستهدفة هو \"تسليم\"، فقد يغير هذا الإجراء\nحالة البضائع {@link IShoppingOrderGood.state} ذات الصلة لتصبح \"وصلت\".", + "description": "عمليات التسليم التابعة {@link IShoppingDelivery.id }", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الرحلات المستهدفة {@link IShoppingDeliveryJourney.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "وقت إتمام الرحلة" + } + ], + "requestBody": { + "description": "مسح رحلة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.IComplete" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}": { + "delete": { + "summary": "مسح رحلة.\n\nمسح رحلة {@link IShoppingDeliveryJourney} من\n{@link IShoppingDelivery Delivery}.\n\nإذا كانت الرحلة التي تم مسحها هي الرحلة الأخيرة من عمليات التسليم التابعة، فقد يؤدي هذا الإجراء\nإلى تغيير حالة {@link IShoppingOrderGood.state} ذات الصلة. من خلال مسح الرحلة\nالأخيرة، تعود الحالة إلى السابقة.", + "description": "رحلات التوصيل المملوكة {@link IShoppingDelivery.id }", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "رحلات التوصيل المستهدفة {@link IShoppingDeliveryJourney.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "رحلة تم إنشاؤها حديثًا" + } + ], + "responses": { + "200": { + "description": "إنشاء شركة شحن جديدة", + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/shippers": { + "post": { + "summary": "إنشاء شركة شحن جديدة.\n\nإنشاء شركة شحن {@link IShoppingDeliveryShipper} جديدة لـ\n{@link IShoppingDelivery delivery}.\n\nلا يؤثر هذا الإجراء على طلبات {@link IShoppingOrder} أو\n{@link IShoppingOrderGood goods} ذات الصلة مثل {@link IShoppingDeliveryJourney}\nأو {@link IShoppingDeliveryPiece}، ولكنه يُعلم فقط\n{@link IShoppingCustomer customer}.", + "description": "Belonged delivery's {@link IShoppingDelivery.id }", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "Creation info of the company" + } + ], + "requestBody": { + "description": "Newly created company", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Create new coupon", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/coupons": { + "post": { + "summary": "أنشئ قسيمة جديدة.\n\nأنشئ {@link IShoppingCoupon coupon} جديدة بالمعلومات المقدمة.\n\nبالمناسبة، إذا كنت بائعًا في {@link IShoppingSeller}، فيجب عليك\nإضافة شرط تضمين {@link IShoppingCouponSellerCriteria} أو\n{@link IShoppingCouponSaleCriteria} في اتجاه التضمين. وذلك لأن\n{@link IShoppingAdministrator officials} فقط هم من يمكنهم إنشاء قسيمة\nيمكن استخدامها في السوق بالكامل. يجب على البائع تحديد نطاق الاستخدام\nبواسطة {@link IShoppingSale sale(s)}.\n\nبالطبع، عندما يخطط المسؤول لإنشاء قسيمة عامة\nيمكن استخدامها في السوق بالكامل، يجب على المسؤول\n\nالحصول على موافقة البائعين الذين سيتأثرون.", + "description": "معلومات إنشاء القسيمة", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "القسيمة التي تم إنشاؤها حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "قم بإدراج كل القسائم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "قم بإدراج كل الكوبونات.\n\nقم بإدراج كل {@link IShoppingCoupon coupons} مع الترقيم.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingCoupon.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nللإشارة، إذا كنت {@link IShoppingCustomer customer}، فسيتم إدراج {@link IShoppingCouponTicket ticketable} فقط.\nوإلا، فسيتم إدراج الكوبونات غير القابلة لحجز التذاكر أيضًا.", + "description": "طلب معلومات الترقيم والبحث والفرز", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "كوبونات مقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "مسح كوبون", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/coupons/{id}": { + "delete": { + "summary": "مسح كوبون.\n\nمسح كوبون {@link IShoppingCoupon} بالمعرف المحدد.\n\nللإشارة، إذا كان هناك بعض {@link IShoppingCouponTicket تذاكر}\nتم إصدارها بالفعل من الكوبون المستهدف، فلن تتأثر.\nتظل هذه التذاكر صالحة حتى تاريخ انتهاء صلاحيتها.", + "description": "كوبونات مستهدفة {@link IShoppingCoupon.id }", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "الحصول على معلومات الكوبون" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "احصل على معلومات القسيمة.\n\nاحصل على معلومات عن {@link IShoppingCoupon coupon}.\n\nإذا كنت عميلاً لدى {@link IShoppingCustomer}، فلن تكون هناك إمكانية للوصول إلا إلى القسائم\n{@link IShoppingCouponTicket القابلة للحجز}. القسائم غير\nالقابلة للحجز تتسبب في حدوث خطأ 410. وإلا إذا كنت بائعًا لدى {@link IShoppingSeller} أو {@link IShoppingAdministrator}، فستكون هناك إمكانية للوصول أيضًا إلى القسائم غير القابلة للحجز.", + "description": "قسائم Target {@link IShoppingCoupon.id }", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "معلومات القسيمة" + } + ], + "responses": { + "200": { + "description": "قم بإدراج كل الطلبات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/orders": { + "patch": { + "summary": "قم بإدراج كل الطلبات.\n\nقم بإدراج كل {@link IShoppingOrder orders} مع الترقيم.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingOrder.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingOrder.IRequest.sort sort condition}.\n\nللإشارة، إذا كنت {@link IShoppingCustomer customer}، فيمكنك إدراج طلباتك الخاصة، ولا يهم ما إذا كان\nالطلب قد تم {@link IShoppingOrderPublish.paid_atpaid} أم لا.\n\nوإلا إذا كنت {@link IShoppingSeller seller} أو\n{@link IShoppingAdministrator administration}، فيمكنك إدراج\nالطلبات المدفوعة فقط. أيضًا، في حالة البائع، سيتم إدراج\n{@link IShoppingOrder.goods goods} ذات الصلة فقط في الطلب.", + "description": "اطلب معلومات الترقيم والبحث والفرز", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "الطلبات المقسمة إلى صفحات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "احصل على معلومات الطلب", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/orders/{id}": { + "get": { + "summary": "احصل على معلومات الطلب.\n\nاحصل على معلومات تفصيلية عن {@link IShoppingOrder order}.\n\nإذا لم تكن عميلاً لدى {@link IShoppingCustomer}، فلن تتمكن من\nالوصول إلى الطلب الذي لم يتم\n{@link IShoppingOrderPublish.paid_atpaid} بعد. في هذه الحالة، سيتم طرح خطأ 404 not found.", + "description": "الطلبات المستهدفة {@link IShoppingOrder.id }", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات الطلب" + } + ], + "responses": { + "200": { + "description": "إنشاء عملية بيع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales": { + "post": { + "summary": "إنشاء عملية بيع.\n\nينشئ {@link IShoppingSeller Seller} {@link IShoppingSale} جديدة\nللعملية.\n\nللمرجع، فإن عملية البيع لها هيكل هرمي معقد يتألف\nمن {@link IShoppingSaleUnit units} و{@link IShoppingSaleOption options}\nو{@link IShoppingSaleUnitStock stocks}. لذلك، أوصيك\nبقراءة {@link IShoppingSale} ومستندات DTO ذات الصلة قبل إنشاء\nعملية بيع جديدة.\n\nكما أن مخطط العلاقات بين الكيانات (ERD) ووثيقة الوصف الخاصة به\nستكون مفيدة أيضًا.", + "description": "معلومات إنشاء البيع", + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "البيع الذي تم إنشاؤه حديثًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "قم بإدراج كل المبيعات الملخصة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "قم بإدراج كل المبيعات الملخصة.\n\nقم بإدراج كل {@link IShoppingSale.ISummary summaryd sales}.\n\nكما ترى، يتم تلخيص المبيعات المرتجعة، وليس تفصيلها. إذا كنت تريد\nالحصول على معلومات مفصلة عن عملية بيع، فاستخدم الدالة {@link at} لكل عملية بيع.\n\nللمرجع، إذا كنت {@link IShoppingSeller seller}، يمكنك فقط\nالوصول إلى {@link IShoppingSale sales}. وإلا إذا كنت\n{@link IShoppingCustomer customer}، فيمكنك فقط رؤية المبيعات\nالجارية في السوق. لا يمكنك رؤية المبيعات\nغير المفتوحة أو المغلقة أو المعلقة.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSale.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingSale.IRequest.sort sort condition}.", + "description": "طلب معلومات الترقيم والبحث والفرز", + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "مبيعات مقسمة إلى صفحات تحتوي على معلومات موجزة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "تحديث بيع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}": { + "put": { + "summary": "تحديث عملية بيع.\n\nتحديث عملية بيع {@link IShoppingSale} بمعلومات جديدة.\n\nبالمناسبة، لا يتم تعديل عملية البيع في الواقع، ولكن فقط قم بإنشاء سجل جديد\n{@link IShoppingSaleSnapshot snapshot} لعملية البيع. والغرض الأول\nمنه\nهو الحفاظ على سلامة عملية البيع، نظرًا لأن تعديل عملية البيع\nلا يجب أن يؤثر على {@link IShoppingOrder orders} التي تم\nتطبيقها بالفعل على عملية البيع.\n\nالغرض الثاني هو اختبارات A/B. يحتاج {@link IShoppingSeller Seller}\nإلى\nإثبات الأداء التشغيلي من خلال تغيير السعر والمحتوى وتركيبة المنتج. سيكون مفهوم اللقطة السريعة هذا مفيدًا له.", + "description": "مبيعات مستهدفة {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات جديدة عن المبيعات" + } + ], + "requestBody": { + "description": "تحديث المبيعات مع لقطة جديدة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "الحصول على معلومات المبيعات", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "الحصول على معلومات المبيعات.\n\nاحصل على {@link IShoppingSale sale} مع معلومات مفصلة.\n\nإذا كنت {@link IShoppingSeller seller}، يمكنك فقط الوصول إلى\nمبيعاتك {@link IShoppingSale sale}. وإلا إذا كنت\n{@link IShoppingCustomer customer}، فيمكنك الوصول فقط إلى المبيعات\nالجارية في السوق. لا يمكنك الوصول إلى المبيعات غير المفتوحة أو المغلقة أو المعلقة.", + "description": "مبيعات الهدف {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات مفصلة عن المبيعات" + } + ], + "responses": { + "200": { + "description": "تغيير وقت فتح وإغلاق عملية البيع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/open": { + "put": { + "summary": "تغيير وقت فتح وإغلاق عملية بيع.\n\nتحديث وقت فتح وإغلاق عملية بيع {@link IShoppingSale}.\n\nبالمناسبة، إذا كانت عملية البيع لا تزال مفتوحة أو مغلقة، فمن غير الممكن\nتغيير وقت الفتح. وعلى العكس من ذلك، إذا كانت عملية البيع قد تم فتحها بالفعل\nولكنها لم تُغلق بعد، فمن الممكن تغيير وقت الإغلاق.\n\nبالطبع، إذا كان وقت الإغلاق أقل من وقت الفتح أو لا، فسيتم طرح خطأ الكيان غير القابل للمعالجة 428.", + "description": "Target sale's {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "وقت افتتاح وإغلاق جديد" + } + ], + "requestBody": { + "description": "الحصول على نسخة من عملية بيع", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IUpdateOpeningTime" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/replica": { + "post": { + "summary": "الحصول على نسخة من عملية بيع.\n\nالحصول على {@link IShoppingSale.ICreate} معلومات مطبوعة لعملية البيع المستهدفة\nللتكرار.\n\nسيكون من المفيد إنشاء نسخة جديدة\n{@link IShoppingSale sale} بمعلومات مماثلة.", + "description": "{@link IShoppingSale.id} لعملية البيع المستهدفة", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات إنشاء عملية البيع للتكرار" + } + ], + "responses": { + "201": { + "description": "إيقاف عملية بيع مؤقتًا", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/pause": { + "delete": { + "summary": "إيقاف بيع مؤقتًا.\n\nإيقاف بيع {@link IShoppingSale} مؤقتًا من حالة {@link open opens}.\nلذلك، لا يمكن تشغيل البيع مرة أخرى حتى يتم\n{@link restore restored}. بالمناسبة، لا يزال بإمكان {@link IShoppingCustomer customer}\nالبيع من {@link index} و{@link at} دبابيس واجهة برمجة التطبيقات، ولكن سيتم إرفاق علامة \"paused\".\n\nكما لن يتمكن العميل من وضعه في عربة التسوق أيضًا.\nحتى لو تم وضع البيع بالفعل في عربة التسوق، فلن يتم إدراج\n{@link IShoppingCartCommodity goods} في\nعربة التسوق. كما أنه من غير الممكن تطبيق\n{@link IShoppingOrder order} مع سلعة البيع المتوقفة مؤقتًا أيضًا.\n\nبالمناسبة، إذا تم تطبيق البيع بالفعل على طلب، فيمكن نشر الطلب {@link IShoppingOrderPublish} ويجب على {@link IShoppingSeller seller} {@link IShoppingDelivery} تسليم البضاعة إلى العميل.", + "description": "مبيعات مستهدفة {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليق البيع" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/suspend": { + "delete": { + "summary": "تعليق عملية بيع.\n\nتعليق عملية بيع {@link IShoppingSale} من حالة {@link open opening}.\n\nلذلك، لا يمكن تشغيل عملية البيع مرة أخرى حتى يتم\n{@link restore restored} ولا يمكن لـ {@link IShoppingCustomer customer}\nرؤية عملية البيع من {@link index} و{@link at} API.\n\nكما لا يمكن للعميل أيضًا وضعها في عربة التسوق.\nحتى لو تم وضع عملية البيع بالفعل في عربة التسوق، فلن يتم إدراج\n{@link IShoppingCartCommodity goods} في\nعربة التسوق. كما أنه من غير الممكن تطبيق\n{@link IShoppingOrder order} على سلعة عملية البيع المعلقة.\n\nبالمناسبة، إذا تم تطبيق عملية البيع بالفعل على طلب، فيمكن\n{@link IShoppingOrderPublish published} الطلب\nويجب على\n{@link IShoppingSeller seller} {@link IShoppingDelivery} تسليم\nالسلعة إلى العميل.", + "description": "استعادة عملية بيع مستهدفة {@link IShoppingSale.id } //|-0-|\\\n\nاستعادة عملية بيع {@link IShoppingSale} من حالة {@link pause paused} أو\n{@link suspension suspended}\n\nلذلك، يمكن تنفيذ عملية البيع مرة أخرى إذا لم يتم الوصول إلى\n{@link IShoppingSale.closed_at closing time} الخاصة بها.\nأيضًا، إذا وضع عميل {@link IShoppingCustomer} عملية البيع في\nعربة التسوق أثناء إيقافها مؤقتًا أو تعليقها، فسيتم إدراج\n{@link IShoppingCartCommodity goods} مرة أخرى في\nعربة التسوق.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مبيعات الهدف {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/restore": { + "put": { + "description": "اكتب مقالاً للإجابة", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "اكتب مقالة إجابة.\n\nاكتب {@link IShoppingSaleInquiryAnswer answer article} رسميًا على\n{@link IShoppingSaleInquiry question article} محدد كتبه\n{@link IShoppingCustomer}.\n\nلاحظ أن هذه هي الإجابة الرسمية التي لا يمكن كتابتها إلا مرة واحدة لكل\nمقالة سؤال (لكن {@link update updatable}). لذلك، يجب أن\nترشد {@link IShoppingSeller seller} إلى كتابتها بعناية.\n\nكما أنه نظرًا لأن البائع يمكنه كتابة {@link IShoppingSaleInquiryComment comments} على\nمقالة السؤال بقدر ما يريد، فسيكون ذلك مفيدًا\nللتواصل الإضافي." + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{questionId}/answer": { + "post": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "الأسئلة المستهدفة {@link IShoppingSaleQuestion.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات إنشاء مقالة الإجابة" + }, + { + "name": "questionId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مقالة إجابة تم إنشاؤها حديثًا" + } + ], + "requestBody": { + "description": "تحديث مقالة إجابة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "تحديث مقالة إجابة.\n\nتحديث {@link IShoppingSaleInquiryAnswer answer article} رسمي إلى {@link IShoppingSaleInquiry question article} محدد كتبه\n{@link IShoppingCustomer}.\n\nبالمناسبة، وكما هي السياسة العامة لمركز التسوق هذا فيما يتعلق\nبالمقالات، فإن تعديل مقالات الأسئلة لا يغير فعليًا\nالمحتوى الموجود. يتم تجميع المحتوى المعدل وتسجيله في\nسجل المقالة الموجودة كصورة جديدة\n{@link IShoppingSaleInquiryAnswer.ISnapshot}. ويتم جعل هذا\nعامًا للجميع، بما في ذلك {@link IShoppingCustomer customer} و\n{@link IShoppingSeller seller}، ويمكن لأي شخص يمكنه عرض المقالة\n\nعرض سجلات التحرير بالكامل أيضًا.\n\nوذلك لمنع العملاء أو البائعين من تعديل مقالاتهم\nوالتلاعب بالظروف بسبب طبيعة التجارة الإلكترونية، حيث\nتنشأ النزاعات بسهولة. أي للحفاظ على الأدلة.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "الأسئلة المستهدفة {@link IShoppingSaleQuestion.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تحديث معلومات مقالة الإجابة" + }, + { + "name": "questionId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "سجل لقطة تم إنشاؤه حديثًا لمقالة الإجابة" + } + ], + "requestBody": { + "description": "قم بإدراج كل تعليقات الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قم بإدراج كل تعليقات الاستعلام.\n\nقم بإدراج كل {@link IShoppingSaleInquiryComment تعليقات الاستعلام} لـ\n{@link IShoppingSaleQuestion question} أو {@link IShoppingSaleReview review}\nمع {@link ترقيم الصفحات في IPage}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nبالمناسبة، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط الوصول\nإلى استفسارات {@link IShoppingSale sale} الخاصة بك. وإلا، يمكنك\nالوصول إلى كل استفسارات المبيعات.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments": { + "patch": { + "summary": "مبيعات السلع المملوكة {@link IShoppingSale.id }", + "description": "استفسارات السلع المملوكة {@link IShoppingSaleInquiry.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "طلب معلومات الترقيم والبحث والفرز" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليقات الاستعلامات المرقمة" + } + ], + "requestBody": { + "description": "إنشاء تعليق استعلام", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "إنشاء تعليق استفسار.\n\nإنشاء تعليق استفسار {@link IShoppingSaleInquiryComment} لسؤال\n{@link IShoppingSaleQuestion} أو مراجعة {@link IShoppingSaleReview}.\n\nللمزيد من المعلومات، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nإنشاء تعليق استفسار لاستفسار {@link IShoppingSale sale} الخاص بك.\nوإلا، يمكنك إنشاء تعليق استفسار لكل استفسارات المبيعات.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "استفسارات مستهدفة {@link IShoppingSaleInquiry.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات إنشاء تعليق الاستفسار" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليق استفسار تم إنشاؤه حديثًا" + } + ], + "requestBody": { + "description": "الحصول على معلومات تعليق الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "احصل على معلومات تعليق الاستفسار.\n\nاحصل على معلومات تفصيلية {@link IShoppingSaleInquiryComment تعليق الاستفسار}\nعن {@link IShoppingSaleQuestion question} أو\n{@link IShoppingSaleReview review}.\n\nللاطلاع، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى تعليق الاستفسار الخاص بـ {@link IShoppingSale sale} الخاص بك.\nوإلا، يمكنك الوصول إلى كل تعليقات الاستفسار الخاصة بالمبيعات.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { + "get": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "استفسارات تابعة {@link IShoppingSaleInquiry.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليقات الاستفسار المستهدفة {@link IShoppingSaleInquiryComment.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات تفصيلية عن تعليقات الاستفسار" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تحديث تعليق الاستفسار" + } + ], + "responses": { + "200": { + "description": "تحديث تعليق الاستفسار.\n\nتحديث {@link IShoppingSaleInquiryComment تعليق الاستفسار} إلى\n{@link IShoppingSaleQuestion question} أو {@link IShoppingSaleReview review} محدد.\n\nبالمناسبة، وفقًا للسياسة العامة لمركز التسوق هذا فيما يتعلق\nبالتعليقات، فإن تعديل التعليق لا يغير المحتوى الحالي فعليًا.\n\nيتم تجميع المحتوى المعدل وتسجيله في سجل التعليقات الحالي\nكصورة جديدة {@link IShoppingSaleInquiryComment.ISnapshot}. ويتم نشر ذلك\nللجميع، الذين يمكنهم قراءة تعليق الاستفسار هذا.\n\nوذلك لمنع العملاء أو البائعين من تعديل تعليقاتهم\nوالتلاعب بالظروف بسبب طبيعة التجارة الإلكترونية، حيث\nتنشأ النزاعات بسهولة. أي للحفاظ على الأدلة.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "استفسارات مملوكة {@link IShoppingSaleInquiry.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليق الاستفسار المستهدف {@link IShoppingSaleInquiryComment.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تحديث معلومات تعليق الاستفسار" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "سجل لقطة تم إنشاؤه حديثًا لتعليق الاستفسار" + } + ], + "requestBody": { + "description": "قم بإدراج كل الأسئلة المختصرة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قم بإدراج جميع الأسئلة المختصرة.\n\nقم بإدراج جميع {@link IShoppingSaleQuestion.ISummary summaryd questions} من\n{@link IShoppingSale sale}.\n\nكما ترى، يتم تلخيص الأسئلة المُرجعة، وليس تفصيلها. إذا كنت تريد\nالحصول على معلومات تفصيلية عن سؤال، فاستخدم الدالة {@link adridges}\nأو الدالة {@link at} لكل مقال.\n\nكما أن السؤال المُرجع يحتوي على الخاصية {@link IShoppingSaleQuestion.ISummary.answer}\nالتي تعني الإجابة الرسمية من {@link IShoppingSeller}.\nبالإضافة إلى ذلك، يحتوي السؤال المُرجع على خاصية خاصة أخرى\n{@link IShoppingSaleQuestion.ISummary.secret} مع إخفاء خصائص رئيسية أخرى، وهذا يعني أن الجهات الفاعلة ذات الصلة فقط يمكنها {@link at قراءة}\nالسؤال.\n\nللمرجع، إذا كنت بائعًا {@link IShoppingSeller}، فيمكنك فقط\nالوصول إلى أسئلة {@link IShoppingSale sale} الخاصة بك. بخلاف ذلك،\nيمكنك الوصول إلى جميع أسئلة المبيعات.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleQuestion.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions": { + "patch": { + "summary": "مبيعات السلع المملوكة {@link IShoppingSale.id }", + "description": "طلب معلومات الترقيم والبحث والفرز", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "أسئلة مقسمة إلى صفحات تحتوي على معلومات موجزة" + } + ], + "requestBody": { + "description": "قم بإدراج كل الأسئلة المختصرة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قم بإدراج جميع الأسئلة المختصرة.\n\nقم بإدراج جميع {@link IShoppingSaleQuestion.IAbridge abridged questions} من\n{@link IShoppingSale sale}.\n\nكما ترى، الأسئلة التي تم إرجاعها مختصرة وليست مفصلة. إذا كنت تريد\nالحصول على معلومات مفصلة عن سؤال، فاستخدم الدالة {@link at}\nلكل مقال.\n\nكما أن السؤال الذي تم إرجاعه يحتوي على الخاصية {@link IShoppingSaleQuestion.IAridge.answer}\nوالتي تعني الإجابة الرسمية من {@link IShoppingSeller}.\n\nبالإضافة إلى ذلك، يحتوي السؤال الذي تم إرجاعه على خاصية خاصة أخرى\n{@link IShoppingSaleQuestion.IAridge.secret} مع إخفاء خصائص رئيسية أخرى، وهذا يعني أن الجهات الفاعلة ذات الصلة فقط يمكنها {@link at قراءة}\nالسؤال.\n\nللإشارة، إذا كنت بائعًا {@link IShoppingSeller}، فيمكنك فقط\nالوصول إلى أسئلة {@link IShoppingSale sale} الخاصة بك. بخلاف ذلك،\nيمكنك الوصول إلى جميع أسئلة المبيعات.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleQuestion.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/abridges": { + "patch": { + "summary": "مبيعات السلع المملوكة {@link IShoppingSale.id }", + "description": "طلب معلومات الترقيم والبحث والفرز", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "أسئلة مقسمة إلى صفحات تحتوي على معلومات مختصرة" + } + ], + "requestBody": { + "description": "الحصول على معلومات السؤال", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "احصل على معلومات عن سؤال.\n\nاحصل على معلومات تفصيلية عن {@link IShoppingSaleQuestion question} بشأن\n{@link IShoppingSale sale}.\n\nللاطلاع، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى سؤالك الخاص بـ {@link IShoppingSale sale}. وإلا\nفأنت عميل {@link IShoppingCustomer}، يمكنك الوصول إلى كل\nأسئلة المبيعات باستثناء قيمة {@link IShoppingSaleQuestion.secret}\n\"false\".", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{id}": { + "get": { + "summary": "رقم المبيعات المملوكة {@link IShoppingSale.id}", + "description": "الأسئلة المستهدفة {@link IShoppingSaleQuestion.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات مفصلة عن السؤال" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "اكتب مقالاً للإجابة" + } + ], + "responses": { + "200": { + "description": "اكتب مقالة إجابة.\n\nاكتب {@link IShoppingSaleInquiryAnswer answer article} رسميًا على {@link IShoppingSaleInquiry review article}\nمحددة كتبها\n{@link IShoppingCustomer}.\n\nلاحظ أن هذه هي الإجابة الرسمية التي لا يمكن كتابتها إلا مرة واحدة لكل\nمقالة مراجعة (ولكن {@link update updatable}). لذلك، يجب أن\nترشد {@link IShoppingSeller seller} إلى كتابتها بعناية.\n\nكما أنه نظرًا لأن البائع يمكنه كتابة {@link IShoppingSaleInquiryComment comments}\nعلى\nمقالة المراجعة بقدر ما يريد، فسيكون ذلك مفيدًا\nللتواصل الإضافي.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{reviewId}/answer": { + "post": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "مراجعات مستهدفة {@link IShoppingSaleReview.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات إنشاء مقالة الإجابة" + }, + { + "name": "reviewId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مقالة إجابة تم إنشاؤها حديثًا" + } + ], + "requestBody": { + "description": "تحديث مقالة إجابة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "تحديث مقالة إجابة.\n\nتحديث {@link IShoppingSaleInquiryAnswer answer article} رسمي إلى {@link IShoppingSaleInquiry review article} محدد كتبه\n{@link IShoppingCustomer}.\n\nبالمناسبة، وكما هي السياسة العامة لمركز التسوق هذا فيما يتعلق\nبالمقالات، فإن تعديل مقالات المراجعة لا يغير فعليًا\nالمحتوى الموجود. يتم تجميع المحتوى المعدل وتسجيله في\nسجل المقالة الموجودة كصورة جديدة\n{@link IShoppingSaleInquiryAnswer.ISnapshot}. ويتم جعل هذا\nعامًا للجميع، بما في ذلك {@link IShoppingCustomer customer} و\n{@link IShoppingSeller seller}، ويمكن لأي شخص يمكنه عرض المقالة\n\nعرض سجلات التحرير بالكامل أيضًا.\n\nوذلك لمنع العملاء أو البائعين من تعديل مقالاتهم\nوالتلاعب بالظروف بسبب طبيعة التجارة الإلكترونية، حيث\nتنشأ النزاعات بسهولة. أي للحفاظ على الأدلة.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "مراجعات مستهدفة {@link IShoppingSaleReview.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تحديث معلومات مقالة الإجابة" + }, + { + "name": "reviewId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "سجل لقطة تم إنشاؤه حديثًا لمقالة الإجابة" + } + ], + "requestBody": { + "description": "قم بإدراج كل تعليقات الاستفسار", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قم بإدراج كل تعليقات الاستعلام.\n\nقم بإدراج كل {@link IShoppingSaleInquiryComment تعليقات الاستعلام} لـ\n{@link IShoppingSaleQuestion question} أو {@link IShoppingSaleReview review}\nمع {@link ترقيم الصفحات في IPage}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nبالمناسبة، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط الوصول\nإلى استفسارات {@link IShoppingSale sale} الخاصة بك. وإلا، يمكنك\nالوصول إلى كل استفسارات المبيعات.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments": { + "patch": { + "summary": "مبيعات السلع المملوكة {@link IShoppingSale.id }", + "description": "استفسارات السلع المملوكة {@link IShoppingSaleInquiry.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "طلب معلومات الترقيم والبحث والفرز" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليقات الاستعلامات المرقمة" + } + ], + "requestBody": { + "description": "إنشاء تعليق استعلام", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "إنشاء تعليق استفسار.\n\nإنشاء تعليق استفسار {@link IShoppingSaleInquiryComment} لسؤال\n{@link IShoppingSaleQuestion} أو مراجعة {@link IShoppingSaleReview}.\n\nللمزيد من المعلومات، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nإنشاء تعليق استفسار لاستفسار {@link IShoppingSale sale} الخاص بك.\nوإلا، يمكنك إنشاء تعليق استفسار لكل استفسارات المبيعات.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "استفسارات الهدف {@link IShoppingSaleInquiry.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات إنشاء تعليق الاستعلام" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليق الاستعلام الذي تم إنشاؤه حديثًا" + } + ], + "requestBody": { + "description": "الحصول على معلومات تعليق الاستعلام", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "احصل على معلومات تعليق الاستفسار.\n\nاحصل على معلومات تفصيلية {@link IShoppingSaleInquiryComment تعليق الاستفسار}\nعن {@link IShoppingSaleQuestion question} أو\n{@link IShoppingSaleReview review}.\n\nللاطلاع، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى تعليق الاستفسار الخاص بـ {@link IShoppingSale sale} الخاص بك.\nوإلا، يمكنك الوصول إلى كل تعليقات الاستفسار الخاصة بالمبيعات.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { + "get": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "استفسارات تابعة {@link IShoppingSaleInquiry.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليقات الاستفسار المستهدفة {@link IShoppingSaleInquiryComment.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات تفصيلية عن تعليقات الاستفسار" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تحديث تعليق الاستفسار" + } + ], + "responses": { + "200": { + "description": "تحديث تعليق الاستفسار.\n\nتحديث {@link IShoppingSaleInquiryComment تعليق الاستفسار} إلى\n{@link IShoppingSaleQuestion question} أو {@link IShoppingSaleReview review} محدد.\n\nبالمناسبة، وفقًا للسياسة العامة لمركز التسوق هذا فيما يتعلق\nبالتعليقات، فإن تعديل التعليق لا يغير المحتوى الحالي فعليًا.\n\nيتم تجميع المحتوى المعدل وتسجيله في سجل التعليقات الحالي\nكصورة جديدة {@link IShoppingSaleInquiryComment.ISnapshot}. ويتم نشر ذلك\nللجميع، الذين يمكنهم قراءة تعليق الاستفسار هذا.\n\nوذلك لمنع العملاء أو البائعين من تعديل تعليقاتهم\nوالتلاعب بالظروف بسبب طبيعة التجارة الإلكترونية، حيث\nتنشأ النزاعات بسهولة. أي للحفاظ على الأدلة.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "المبيعات المملوكة {@link IShoppingSale.id }", + "description": "الاستفسارات المملوكة {@link IShoppingSaleInquiry.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تعليقات الاستفسار المستهدفة {@link IShoppingSaleInquiryComment.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تحديث معلومات تعليق الاستفسار" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "سجل لقطة تم إنشاؤه حديثًا لتعليق الاستفسار" + } + ], + "requestBody": { + "description": "قم بإدراج كل المراجعات المختصرة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قم بإدراج كل المراجعات المختصرة.\n\nقم بإدراج كل {@link IShoppingSaleReview.ISummary summaryd reviews} من\n{@link IShoppingSale sale}.\n\nكما ترى، المراجعات التي تم إرجاعها ملخصة، وليست مفصلة. إذا كنت تريد\nالحصول على معلومات مفصلة عن مراجعة، فاستخدم الدالة {@link adridges}\nأو الدالة {@link at} لكل مقال.\n\nكما أن المراجعة التي تم إرجاعها تحتوي على الخاصية {@link IShoppingSaleReview.ISummary.answer}\nالتي تعني الإجابة الرسمية من {@link IShoppingSeller}.\n\nللمرجع، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك\nالوصول فقط إلى مراجعات {@link IShoppingSale sale} الخاصة بك. وإلا،\nفيمكنك الوصول إلى كل مراجعات المبيعات.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleReview.IRequest.search search condition} في\nنص الطلب. من الممكن أيضًا تخصيص ترتيب تسلسل السجلات\nمن خلال تكوين {@link IShoppingSaleReview.IRequest.sort sort condition}.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews": { + "patch": { + "summary": "مبيعات السلع المملوكة {@link IShoppingSale.id }", + "description": "طلب معلومات الترقيم والبحث والفرز", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مراجعات مقسمة إلى صفحات تحتوي على معلومات موجزة" + } + ], + "requestBody": { + "description": "قم بإدراج كل المراجعات المختصرة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قم بإدراج كل المراجعات المختصرة.\n\nقم بإدراج كل {@link IShoppingSaleReview.IAbridge abridged reviews} من\n{@link IShoppingSale sale}.\n\nكما ترى، المراجعات التي تم إرجاعها مختصرة وليست مفصلة. إذا كنت تريد\nالحصول على معلومات مفصلة عن مراجعة، فاستخدم الدالة {@link at}\nلكل مقال.\n\nكما أن المراجعة التي تم إرجاعها تحتوي على الخاصية {@link IShoppingSaleReview.IAridge.answer}\nوالتي تعني الإجابة الرسمية من {@link IShoppingSeller}.\n\nللمرجع، إذا كنت بائعًا في {@link IShoppingSeller}، فيمكنك\nالوصول فقط إلى مراجعات {@link IShoppingSale sale} الخاصة بك. وإلا،\nفيمكنك الوصول إلى كل مراجعات المبيعات.\n\nبالمناسبة، إذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleReview.IRequest.search search condition} في\nنص الطلب. من الممكن أيضًا تخصيص ترتيب تسلسل السجلات\nمن خلال تكوين {@link IShoppingSaleReview.IRequest.sort sort condition}.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/abridges": { + "patch": { + "summary": "مبيعات السلع المملوكة {@link IShoppingSale.id }", + "description": "طلب معلومات الترقيم والبحث والفرز", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مراجعات مقسمة إلى صفحات تحتوي على معلومات مختصرة" + } + ], + "requestBody": { + "description": "الحصول على معلومات المراجعة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "احصل على معلومات المراجعة.\n\nاحصل على معلومات تفصيلية {@link IShoppingSaleReview review} عن\n{@link IShoppingSale sale}.\n\nللمرجع، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى مراجعة {@link IShoppingSale sale} الخاصة بك. وإلا\nفأنت\n{@link IShoppingCustomer customer}، يمكنك الوصول إلى كل\nمراجعات المبيعات.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{id}": { + "get": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "مراجعات مستهدفة {@link IShoppingSaleReview.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات تفصيلية عن المراجعة" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "احصل على نسخة طبق الأصل من لقطة" + } + ], + "responses": { + "200": { + "description": "احصل على نسخة طبق الأصل من لقطة.\n\nاحصل على معلومات مكتوبة {@link IShoppingSale.ICreate} لسجل الهدف\n{@link IShoppingSaleSnapshot snapshot} للتكرار.\n\nسيكون من المفيد إنشاء نسخة طبق الأصل جديدة {@link IShoppingSale sale}\nمن اللقطة القديمة.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots/{id}/replica": { + "post": { + "summary": "Belonged sale's {@link IShoppingSale.id }", + "description": "Target snapshot's {@link IShoppingSaleSnapshot.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "Creation info of the sale for replication" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "List up all snapshots" + } + ], + "responses": { + "201": { + "description": "قم بإدراج كل لقطات الشاشة.\n\nكلما قام {@link IShoppingSeller seller} بتحديث\n{@link IShoppingSale sale}، لا يتم تحديث سجل البيع ولكن يتم إنشاء سجل\n{@link IShoppingSaleSnapshot snapshot} جديد للحفاظ على\nسلامة سجل البيع. هذه الوظيفة API مخصصة لإدراج\nسجلات اللقطات الشاشة هذه.\n\nكما يمكنك أن ترى من نوع الإرجاع، فإن اللقطات الشاشة التي تم إرجاعها\nملخصة، وليست مفصلة. إذا كنت تريد الحصول على معلومات مفصلة\nللقطة شاشة، فاستخدم الوظيفة {@link at} أو {@link flipo} لكل لقطة شاشة.\n\nللمرجع، إذا كنت بائعًا {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى لقطات الشاشة الخاصة بـ {@link IShoppingSale sale} الخاصة بك. وإلا،\nيمكنك الوصول إلى كل لقطات الشاشة للمبيعات حتى لو تم إغلاق البيع أو تعليقه.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots": { + "patch": { + "summary": "مبيعات الهدف {@link IShoppingSale.id }", + "description": "طلب معلومات الترقيم", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "لقطات مقسمة إلى صفحات تحتوي على معلومات موجزة" + } + ], + "requestBody": { + "description": "الحصول على معلومات لقطة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "احصل على معلومات لقطة سريعة.\n\nاحصل على لقطة سريعة {@link IShoppingSaleSnapshot} تحتوي على معلومات مفصلة.\n\nكما ترى من نوع الإرجاع، لا تحتوي اللقطة السريعة المرتجعة على\nمعلومات {@link IShoppingSale sale}. إذا كنت تريد الحصول على معلومات البيع،\nاستخدم وظيفة {@link flip} بدلاً من ذلك.\n\nللمرجع، إذا كنت بائعًا في {@link IShoppingSeller}، يمكنك فقط\nالوصول إلى لقطات {@link IShoppingSale sale} الخاصة بك. بخلاف ذلك،\nيمكنك الوصول إلى كل لقطات المبيعات حتى لو تم إغلاق البيع أو تعليقه.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots/{id}": { + "get": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "لقطات الهدف {@link IShoppingSaleSnapshot.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات مفصلة عن اللقطة" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "احصل على معلومات اللقطة المقلوبة" + } + ], + "responses": { + "200": { + "description": "احصل على معلومات لقطة مقلوبة.\n\nاحصل على معلومات {@link IShoppingSale sale} للقطة مقلوبة.\n\nكما ترى من نوع الإرجاع، تعيد هذه الدالة معلومات\n{@link IShoppingSale sale}. بالمناسبة، معلومات اللقطة ليست الأحدث، بل هي معلومات مقلوبة في جانب اللقطة.\n\nأيضًا، إذا كنت بائعًا في {@link IShoppingSeller}، فيمكنك فقط الوصول إلى لقطات {@link IShoppingSale sale} الخاصة بك. بخلاف ذلك، يمكنك\nالوصول إلى كل لقطات اللقطة الخاصة بالمبيعات حتى لو تم إغلاق اللقطة أو تعليقها.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots/{id}/flip": { + "get": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "لقطات الهدف {@link IShoppingSaleSnapshot.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "معلومات مفصلة عن المبيعات في جانب اللقطة" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "قم بإدراج كل المكملات" + } + ], + "responses": { + "200": { + "description": "قم بإدراج كل المكملات.\n\nقم بإدراج كل {@link IShoppingSaleUnitStockSupplement supplement histories}\nمن {@link IShoppingSaleUnitStock stock} محدد.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSaleUnitStockSupplement.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل\nالسجلات عن طريق تكوين الخاصية {@link IShoppingSaleUnitStockSupplement.IRequest.sort}.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements": { + "patch": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "الوحدات المملوكة {@link IShoppingSaleUnit.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "المخزون المستهدف {@link IShoppingSaleUnitStock.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "طلب معلومات الترقيم والبحث والفرز" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "المكملات المقسمة إلى صفحات" + } + ], + "requestBody": { + "description": "إنشاء ملحق", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "إنشاء ملحق.\n\nإنشاء {@link IShoppingSaleUnitStockSupplement supplement history} لسهم {@link IShoppingSaleUnitStock محدد}.\n\nوبالتالي، سيتم زيادة {@link IShoppingSaleUnitStockInventory.income inventory} للسهم\nالمستهدف بمقدار\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleUnitStockSupplement" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "Belonged sale's {@link IShoppingSale.id }", + "description": "Belonged unit's {@link IShoppingSaleUnit.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "Target stock's {@link IShoppingSaleUnitStock.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "Ceate information of the supplement" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تم إنشاء الملحق" + } + ], + "requestBody": { + "description": "تحديث الملحق", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "تحديث الملحق.\n\nتحديث قيمة الكمية لملحق {@link IShoppingSaleUnitStockSupplement}\nمن مخزون {@link IShoppingSaleUnitStock محدد}.\n\nوبالتالي، سيتم تغيير {@link IShoppingSaleUnitStockInventory.income inventory}\nمن المخزون المستهدف بقيمة الملحق\n{@link IShoppingSaleUnitStockSupplement.value}.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements/{id}": { + "put": { + "summary": "مبيعات مملوكة {@link IShoppingSale.id }", + "description": "وحدات مملوكة {@link IShoppingSaleUnit.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مخزون الهدف {@link IShoppingSaleUnitStock.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "مكملات الهدف {@link IShoppingSaleUnitStockSupplement.id }" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "تحديث معلومات (كمية) المكمل" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "حذف مكمل" + } + ], + "requestBody": { + "description": "حذف مكمل.\n\nحذف {@link IShoppingSaleUnitStockSupplement مكمل} لمخزون\n{@link IShoppingSaleUnitStock محدد}.\n\nوبالتالي، سيتم تخفيض {@link IShoppingSaleUnitStockInventory.income inventory}\nمن\nالمخزون المستهدف بمقدار\n{@link IShoppingSaleUnitStockSupplement.value مكمل}.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "المبيعات المملوكة {@link IShoppingSale.id }", + "description": "الوحدات المملوكة {@link IShoppingSaleUnit.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الأسهم المستهدفة {@link IShoppingSaleUnitStock.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "المكملات المستهدفة {@link IShoppingSaleUnitStockSupplement.id }" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "قم بإدراج كل الفئات مع السجلات الفرعية" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "قم بإدراج كل الفئات التي تحتوي على سجلات فرعية.\n\nقم بإدراج كل {@link IShoppingChannelCategory.IHierarchical categories}\nمن {@link IShoppingChannel channel} مع الترقيم الصفحي. تحتوي الفئات المُرجعة\nعلى فئات فرعية أيضًا.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingChannelCategory.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات\nعن طريق تكوين {@link IShoppingChannelCategory.IRequest.sort sort condition}." + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{channelCode}/categories": { + "patch": { + "summary": "القنوات التابعة {@link IShoppingChannel.code }", + "description": "فئات مقسمة إلى صفحات تحتوي على فئات فرعية", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "الحصول على معلومات الفئة" + } + ], + "responses": { + "200": { + "description": "الحصول على معلومات الفئة.\n\nالحصول على معلومات مفصلة عن {@link IShoppingChannelCategory category}.\n\nتحتوي الفئة التي تم إرجاعها على فئات فرعية هرمية، كما تحتوي أيضًا على فئات الوالدين المتكررة.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}": { + "get": { + "summary": "القنوات التابعة {@link IShoppingChannel.code }", + "description": "الفئات المستهدفة {@link IShoppingChannelCategory.id }", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "معلومات الفئة التفصيلية" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الحصول على معلومات الفئة المقلوبة" + } + ], + "responses": { + "200": { + "description": "احصل على معلومات الفئة المعكوسة.\n\nاحصل على معلومات {@link IShoppingChannelCategory.IInvert category} المعكوسة.\n\nتحتوي الفئة التي تم إرجاعها على الفئات الأصلية المتكررة، ولكنها لا تحتوي على\nالفئات الفرعية الهرمية.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}/invert": { + "get": { + "summary": "القنوات التابعة {@link IShoppingChannel.code }", + "description": "الفئات المستهدفة {@link IShoppingChannelCategory.id }", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "معلومات مفصلة عن الفئة" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "قم بإدراج كل القنوات" + } + ], + "responses": { + "200": { + "description": "قم بإدراج كل القنوات.\n\nقم بإدراج كل {@link IShoppingChannel channels} مع الترقيم.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingChannel.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingChannel.IRequest.sort sort condition}.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels": { + "patch": { + "summary": "طلب معلومات الترقيم والبحث والفرز", + "description": "القنوات المقسمة إلى صفحات", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "قم بإدراج كل القنوات مع الفئات المتداخلة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "قم بإدراج جميع القنوات ذات الفئات المتداخلة.\n\nقم بإدراج كل {@link IShoppingChannel.IHierarchical channels} مع\n{@link IPage pagination}. تحتوي القنوات المسترجعة على فئات هرمية متداخلة\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingChannel.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingChannel.IRequest.sort sort condition}.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/hierarchical": { + "patch": { + "summary": "طلب معلومات الترقيم والبحث والفرز", + "description": "قنوات مقسمة إلى صفحات تحتوي على فئات متداخلة", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "الحصول على معلومات القناة", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "الحصول على معلومات القناة.\n\nالحصول على معلومات مفصلة عن {@link IShoppingChannel.IHierarchical channel}.\n\nتحتوي مثيلات القناة التي تم إرجاعها أيضًا على معلومات\n{@link IShoppingChannelCategory.IHierarchical hierarchical category} المتداخلة.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{id}": { + "get": { + "summary": "القنوات المستهدفة {@link IShoppingChannel.id }", + "description": "معلومات مفصلة عن القناة", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "الحصول على معلومات القناة من خلال الكود الخاص بها" + } + ], + "responses": { + "200": { + "description": "احصل على معلومات القناة من خلال الكود الخاص بها.\n\nاحصل على معلومات مفصلة عن {@link IShoppingChannel.IHierarchical channel}\nمن خلال الكود الخاص بها.\n\nتحتوي مثيلات القناة التي تم إرجاعها أيضًا على المعلومات المتداخلة\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\n.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{code}/get": { + "get": { + "summary": "القنوات المستهدفة {@link IShoppingChannel.code }", + "description": "معلومات مفصلة عن القناة", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "قم بإدراج كل الأقسام" + } + ], + "responses": { + "200": { + "description": "قم بإدراج كل الأقسام.\n\nقم بإدراج كل {@link IShoppingSection sections} مع الترقيم الصفحي.\n\nإذا أردت، يمكنك تقييد النتيجة عن طريق تكوين\n{@link IShoppingSection.IRequest.search search condition} في\nنص الطلب. كما أنه من الممكن تخصيص ترتيب تسلسل السجلات عن طريق\nتكوين {@link IShoppingSection.IRequest.sort sort condition}.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/sections": { + "patch": { + "summary": "طلب معلومات الترقيم الصفحي والبحث والفرز", + "description": "الأقسام المرقمة", + "tags": [ + "Section" + ], + "parameters": [], + "requestBody": { + "description": "الحصول على معلومات القسم", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "احصل على معلومات القسم.\n\nاحصل على معلومات تفصيلية عن {@link IShoppingSection section}.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/sections/{id}": { + "get": { + "summary": "استهداف {@link IShoppingSection.id}", + "description": "معلومات تفصيلية عن القسم", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "احصل على معلومات القسم من خلال الكود الخاص به" + } + ], + "responses": { + "200": { + "description": "احصل على معلومات القسم من خلال الكود الخاص به.\n\nاحصل على معلومات تفصيلية عن {@link IShoppingSection section} من خلال الكود الخاص به.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/sections/{code}/get": { + "get": { + "summary": "استهداف {@link IShoppingSection.code}", + "description": "معلومات تفصيلية عن القسم", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "حجم المجموعة المقيمة هو مقدار المساحة المشغولة في جهاز الذاكرة الرئيسي (وهو جزء من إجمالي الذاكرة المخصصة) للعملية، بما في ذلك جميع كائنات وأكواد C++ وJavaScript." + } + ], + "responses": { + "200": { + "description": "يشير إلى استخدام الذاكرة في V8", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + } + }, + "components": { + "schemas": { + "IPerformance": { + "type": "object", + "properties": { + "cpu": { + "$ref": "#/components/schemas/process.global.NodeJS.CpuUsage" + }, + "memory": { + "$ref": "#/components/schemas/process.global.NodeJS.MemoryUsage" + }, + "resource": { + "$ref": "#/components/schemas/process.global.NodeJS.ResourceUsage" + } + }, + "required": [ + "cpu", + "memory", + "resource" + ] + }, + "process.global.NodeJS.CpuUsage": { + "type": "object", + "properties": { + "user": { + "type": "number" + }, + "system": { + "type": "number" + } + }, + "required": [ + "user", + "system" + ] + }, + "process.global.NodeJS.MemoryUsage": { + "type": "object", + "properties": { + "rss": { + "type": "number", + "description": "يشير إلى استخدام الذاكرة في V8." + }, + "heapTotal": { + "type": "number", + "title": "يشير إلى استخدام الذاكرة في V8", + "description": "يشير إلى استخدام الذاكرة في V8." + }, + "heapUsed": { + "type": "number", + "title": "يشير إلى الذاكرة المخصصة لـ `ArrayBuffer`s و`SharedArrayBuffer`s، بما في ذلك جميع مخازن Node.js. يتم تضمين هذا أيضًا\nفي القيمة الخارجية. عند استخدام Node.js كمكتبة مضمنة، قد تكون هذه القيمة `0` لأن التخصيصات لـ `ArrayBuffer`s\nقد لا يتم تتبعها في هذه الحالة.", + "description": "معرف فريد عشوائي" + }, + "external": { + "type": "number" + }, + "arrayBuffers": { + "type": "number", + "description": "معرف فريد عشوائي." + } + }, + "required": [ + "rss", + "heapTotal", + "heapUsed", + "external", + "arrayBuffers" + ] + }, + "process.global.NodeJS.ResourceUsage": { + "type": "object", + "properties": { + "fsRead": { + "type": "number" + }, + "fsWrite": { + "type": "number" + }, + "involuntaryContextSwitches": { + "type": "number" + }, + "ipcReceived": { + "type": "number" + }, + "ipcSent": { + "type": "number" + }, + "majorPageFault": { + "type": "number" + }, + "maxRSS": { + "type": "number" + }, + "minorPageFault": { + "type": "number" + }, + "sharedMemorySize": { + "type": "number" + }, + "signalsCount": { + "type": "number" + }, + "swappedOut": { + "type": "number" + }, + "systemCPUTime": { + "type": "number" + }, + "unsharedDataSize": { + "type": "number" + }, + "unsharedStackSize": { + "type": "number" + }, + "userCPUTime": { + "type": "number" + }, + "voluntaryContextSwitches": { + "type": "number" + } + }, + "required": [ + "fsRead", + "fsWrite", + "involuntaryContextSwitches", + "ipcReceived", + "ipcSent", + "majorPageFault", + "maxRSS", + "minorPageFault", + "sharedMemorySize", + "signalsCount", + "swappedOut", + "systemCPUTime", + "unsharedDataSize", + "unsharedStackSize", + "userCPUTime", + "voluntaryContextSwitches" + ] + }, + "ISystem": { + "type": "object", + "properties": { + "uid": { + "type": "number", + "title": "`process.argv`", + "description": "معلومات التزام Git" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "معلومات التزام Git." + }, + "commit": { + "$ref": "#/components/schemas/ISystem.ICommit", + "title": "`package.json`", + "description": "وقت إنشاء هذا الخادم" + }, + "package": { + "$ref": "#/components/schemas/ISystem.IPackage", + "description": "وقت إنشاء هذا الخادم." + }, + "created_at": { + "type": "string", + "title": "معلومات النظام.", + "description": "معلومات التزام Git." + } + }, + "required": [ + "uid", + "arguments", + "commit", + "package", + "created_at" + ], + "description": "معلومات حساب مستخدم Git." + }, + "ISystem.ICommit": { + "type": "object", + "properties": { + "shortHash": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "hash": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "sanitizedSubject": { + "type": "string" + }, + "body": { + "type": "string" + }, + "author": { + "$ref": "#/components/schemas/ISystem.ICommit.IUser" + }, + "committer": { + "$ref": "#/components/schemas/ISystem.ICommit.IUser" + }, + "authored_at": { + "type": "string" + }, + "commited_at": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shortHash", + "branch", + "hash", + "subject", + "sanitizedSubject", + "body", + "author", + "committer", + "authored_at", + "commited_at", + "tags" + ], + "description": "معلومات حزمة NPM." + }, + "ISystem.ICommit.IUser": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "إنشاء نوع بمجموعة من الخصائص K من النوع T" + }, + "ISystem.IPackage": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "description": { + "type": "string" + }, + "main": { + "type": "string" + }, + "typings": { + "type": "string" + }, + "scripts": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "repository": { + "type": "object", + "properties": { + "type": { + "const": "git" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ] + }, + "author": { + "type": "string" + }, + "license": { + "type": "string" + }, + "bugs": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ] + }, + "homepage": { + "type": "string" + }, + "devDependencies": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "dependencies": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "publishConfig": { + "type": "object", + "properties": { + "registry": { + "type": "string" + } + }, + "required": [ + "registry" + ] + }, + "files": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "version", + "description", + "scripts", + "repository", + "author", + "license", + "bugs", + "homepage", + "dependencies" + ], + "description": "مميز لنوع العميل" + }, + "Recordstringstring": { + "type": "object", + "properties": {}, + "description": "مميز لنوع العميل.", + "additionalProperties": { + "type": "string" + } + }, + "IShoppingAdministrator.IInvert": { + "type": "object", + "properties": { + "type": { + "const": "administrator", + "title": "معلومات الانضمام إلى العضوية", + "description": "معلومات الانضمام إلى العضوية." + }, + "member": { + "$ref": "#/components/schemas/IShoppingMember.IInvert", + "title": "العميل، معلومات الاتصال", + "description": "العميل، معلومات الاتصال." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer.IInvert", + "title": "معلومات مصادقة الاسم الحقيقي ورقم الهاتف المحمول", + "description": "معلومات مصادقة الاسم الحقيقي ورقم الهاتف المحمول." + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen", + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل.\n\nبكلمات أخرى، الوقت الذي قام فيه المسؤول بالتسجيل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "عكس المعلومات بدءًا من معلومات المسؤول.\n\nبدلاً من الوصول إلى معلومات المسؤول من\n{@link IShoppingCustomer.member} -> {@link IShoppingMember.administrator}،\nيبدأ `IShoppingAdministrator.IInvert` من معلومات المسؤول\nوالوصول إلى معلومات العميل والعضو و{@link IShoppingCitizen citizen}\nبشكل معاكس.", + "description": "مفتاح أساسي" + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "مفتاح أساسي." + }, + "IShoppingMember.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "الاسم المستعار الذي يحدد العضو بشكل فريد", + "description": "الاسم المستعار الذي يحدد العضو بشكل فريد." + }, + "nickname": { + "type": "string", + "title": "قائمة رسائل البريد الإلكتروني", + "description": "قائمة رسائل البريد الإلكتروني." + }, + "emails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMemberEmail" + }, + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل.\n\nبعبارة أخرى، الوقت الذي سجل فيه العضو." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "عكس معلومات العضو.\n\nتم تصميم معلومات العضو المعكوسة هذه لاستخدامها في\nعكس معلومات البائعين والمسؤولين الآخرين مثل ما يلي.\n\n- {@link IShoppingSeller.IInvert}\n- {@link IShoppingAdministrator.IInvert}", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingMemberEmail": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "قيمة عنوان البريد الإلكتروني", + "description": "قيمة عنوان البريد الإلكتروني." + }, + "value": { + "type": "string", + "format": "email", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "عنوان البريد الإلكتروني للعضو.\n\nيسمح نظام مركز التسوق هذا بتسجيل عناوين بريد إلكتروني متعددة لعضو {@link IShoppingMember واحد}. إذا لم يكن عليك\nالتخطيط لمثل هذه العناوين المتعددة للبريد الإلكتروني، فما عليك سوى استخدام عنوان واحد فقط.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingCustomer.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "القناة التابعة", + "description": "القناة التابعة." + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "معلومات المستخدم الخارجي", + "description": "معلومات المستخدم الخارجي.\n\nعندما يأتي العميل من خدمة خارجية." + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "عنوان الاتصال", + "description": "عنوان الاتصال.\n\nنفس الشيء مع {@link window.location.href} الخاص بالعميل." + }, + "href": { + "type": "string", + "format": "uri", + "title": "عنوان المرجع", + "description": "عنوان المرجع.\n\nنفس الشيء مع {@link window.document.referrer} الخاص بالعميل." + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "عنوان IP للاتصال", + "description": "عنوان IP للاتصال." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "وقت إنشاء سجل الاتصال", + "description": "وقت إنشاء سجل الاتصال." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "معلومات العميل المقلوبة.\n\nتم تصميم معلومات العميل المقلوبة هذه لاستخدامها\nلمعلومات مقلوبة أخرى للبائعين والمسؤولين مثل ما يلي.\n\n- {@link IShoppingSeller.IInvert}\n- {@link IShoppingAdministrator.IInvert}", + "description": "مفتاح أساسي" + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "مفتاح أساسي." + }, + "IShoppingChannel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "رمز التعريف", + "description": "رمز التعريف." + }, + "code": { + "type": "string", + "title": "اسم القناة", + "description": "اسم القناة." + }, + "name": { + "type": "string", + "title": "معلومات القناة.\n\n`IShoppingChannel` هو مفهوم يشكل قناة التوزيع في\nالسوق. لذلك، فإن الاختلاف في القناة في نظام التجارة الإلكترونية هذا\nيعني أنها موقع أو تطبيق آخر.\n\nبالمناسبة، إذا كان نظام مركز التسوق الخاص بك يتطلب قناة واحدة فقط، فما عليك سوى استخدام قناة واحدة فقط. تم تصميم هذا المفهوم ليكون قابلاً للتوسع في المستقبل.", + "description": "مفتاح أساسي" + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "مفتاح أساسي." + }, + "IShoppingExternalUser": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "معلومات تنشيط المواطن", + "description": "معلومات تنشيط المواطن." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل.\n\nكلمة أخرى، المرة الأولى التي يتصل فيها المستخدم الخارجي." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "مفتاح معرف المستخدم الخارجي من النظام الخارجي", + "description": "مفتاح معرف المستخدم الخارجي من النظام الخارجي." + }, + "uid": { + "type": "string", + "title": "رمز معرف الخدمة الخارجية", + "description": "رمز معرف الخدمة الخارجية.\n\nيمكن أن يكون هو نفسه {@link IShoppingChannel.code} بشكل مشترك." + }, + "application": { + "type": "string", + "title": "لقب المستخدم الخارجي في النظام الخارجي", + "description": "لقب المستخدم الخارجي في النظام الخارجي." + }, + "nickname": { + "type": "string", + "title": "معلومات إضافية حول المستخدم الخارجي من النظام الخارجي.", + "description": "معلومات المستخدم الخارجي.\n\n`IShoppingExternalUser` هو كيان مصمم عندما يحتاج هذا النظام\nإلى الاتصال بخدمات خارجية والترحيب بمستخدميها كعملاء\n{@link IShoppingCustomer} لهذه الخدمة.\n\nللإشارة، يجب أن يكون لدى العملاء الذين يتصلون من خدمة خارجية\nهذا السجل، ويتم تحديد مستخدم الخدمة الخارجية من خلال السمتين {@link application} و{@link uid}. إذا أكمل عميل متصل\nمن خدمة خارجية\n{@link IShoppingCitizen real-name authentication} من هذه الخدمة، ففي كل\nمرة يعيد فيها مستخدم الخدمة الخارجية الاتصال بهذه الخدمة ويصدر\nرمز مصادقة عميل جديد، تبدأ مصادقة الاسم الحقيقي بـ\nتم.\n\nو{@link password} هي كلمة المرور الصادرة للمستخدم بواسطة نظام الخدمة الخارجية (رمز مصادقة المستخدم الدائم)، ولا تكون كلمة مرور المستخدم الفعلية أبدًا. ومع ذلك، بالنسبة للعملاء الذين أدخلوا نفس التطبيق ومعرف المستخدم الخاص بمستخدم النظام الخارجي الحالي، فإن هذا لتحديد ما إذا كان سيتم عرض هذا كمستخدم نظام خارجي صحيح أم انتهاك.\n\nبالإضافة إلى ذلك، يمكن تسجيل المعلومات الإضافية المستلمة من الخدمات الخارجية في حقل البيانات بتنسيق JSON." + }, + "data": { + "description": "المفتاح الأساسي" + } + }, + "required": [ + "id", + "citizen", + "created_at", + "uid", + "application", + "nickname", + "data" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingCitizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "رقم الهاتف المحمول", + "description": "رقم الهاتف المحمول." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "الاسم الحقيقي، أو اللقب المكافئ", + "description": "الاسم الحقيقي، أو اللقب المكافئ." + }, + "name": { + "type": "string", + "title": "معلومات التحقق من المواطن.\n\n`IShoppingCitizen` هي كيان يسجل\n{@link name real name} ومعلومات الإدخال الخاصة بالمستخدم {@link mobile}.\n\nللمرجع، في كوريا الجنوبية، يلزم مصادقة الاسم الحقيقي\nللمشاركين في التجارة الإلكترونية، لذا فإن سمة الاسم مهمة. ومع ذلك، فإن\nالوضع مختلف في الخارج، لذا في الواقع، فإن سمات الهاتف المحمول هي\nالأكثر أهمية، ويتم تحديد هوية الشخص الفردي أيضًا بناءً على\nهذا الهاتف المحمول.\n\nبالطبع، يتم تشفير وتخزين معلومات مصادقة الاسم الحقيقي والهاتف المحمول.", + "description": "معلومات طلب الانضمام." + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "عنوان البريد الإلكتروني للعضو" + }, + "IShoppingAdministrator.IJoin": { + "type": "object", + "properties": {}, + "description": "عنوان البريد الإلكتروني للعضو.\n\nإذا كان للعضو عناوين بريد إلكتروني متعددة، فاستخدم واحدًا منها فقط." + }, + "IShoppingMember.ILogin": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "كلمة مرور حساب العضو", + "description": "كلمة مرور حساب العضو." + }, + "password": { + "type": "string", + "title": "معلومات طلب تسجيل الدخول.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "email", + "password" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingCoupon": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "المصمم الذي صنع القسيمة", + "description": "المصمم الذي صنع القسيمة." + }, + "designer": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingAdministrator" + }, + { + "$ref": "#/components/schemas/IShoppingSeller" + } + ], + "title": "معلومات المخزون", + "description": "معلومات المخزون." + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingCouponInventory", + "title": "قائمة معلومات المعايير", + "description": "قائمة معلومات المعايير." + }, + "criterias": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSectionCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSellerCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSaleCriteria" + }, + { + "$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": "معلومات الخصم", + "description": "معلومات الخصم." + }, + "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": "معلومات القيود", + "description": "معلومات التقييد." + }, + "restriction": { + "$ref": "#/components/schemas/IShoppingCouponRestriction", + "title": "اسم ممثل القسيمة", + "description": "اسم ممثل القسيمة." + }, + "name": { + "type": "string", + "title": "وقت فتح القسيمة", + "description": "وقت فتح القسيمة." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "وقت إغلاق القسيمة", + "description": "وقت إغلاق القسيمة.\n\nلا يمكن إصدار التذاكر بعد هذا الوقت.\n\nومع ذلك، لا يزال من الممكن استخدام التذاكر الصادرة مسبقًا حتى تاريخ انتهاء صلاحيتها." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "رابط إنشاء السجل", + "description": "رابط إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "كوبون الخصم.\n\n\"IShoppingCoupon\" هو كيان يرمز إلى كوبونات الخصم في\nمركز التسوق.\n\nلاحظ أن \"IShoppingCoupon\" يحتوي فقط على معلومات مواصفات\nحول كوبونات الخصم. يرجى وضع في اعتبارك أن هذا مفهوم مختلف\nعن {@link IShoppingCouponTicket}، الذي يشير إلى إصدار\nكوبون خصم، أو {@link IShoppingCouponTicketPayment}، الذي\nيشير إلى الدفع.\n\nبالإضافة إلى ذلك، يتم تطبيق كوبونات الخصم على أساس كل طلب على حدة،\nولكن لكل منها قيودها الفريدة. على سبيل المثال، قد يتم استخدام كوبون\n{@link IShoppingCouponSellerCriteria} أو لا يتم استخدامه فقط لـ {@link IShoppingSale} من القوائم المسجلة بواسطة {@link IShoppingSeller}.\nبالإضافة إلى ذلك، هناك قيود مثل\n{@link IShoppingCouponDiscount.threshold minimum amount restricts} لاستخدام كوبونات الخصم و\n{@link IShoppingCouponDiscount.limit maximum discount amount limit}.\n\nبالإضافة إلى ذلك، يمكنك تحديد ما إذا كنت تريد إصدار كوبونات الخصم علنًا أو\nإعطائها فقط للأشخاص الذين يعرفون رمز الإصدار المحدد. بالإضافة إلى ذلك،\nهناك قيود مثل كوبونات الخصم الصادرة التي لها تاريخ انتهاء صلاحية\n{@link IShoppingCouponRestriction.expired_at expiration date} أو\nإصدارها فقط للعملاء الذين دخلوا من خلال مسار\n{@link IShoppingCouponFunnelCriteria محدد}.\n\nلمزيد من المعلومات، يرجى الرجوع إلى الخصائص أدناه والكيانات الفرعية الموضحة لاحقًا.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "id", + "designer", + "inventory", + "criterias", + "discount", + "restriction", + "name", + "opened_at", + "closed_at", + "created_at" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingAdministrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل.\n\nبعبارة أخرى، الوقت الذي قام فيه المسؤول بالتسجيل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "حساب المسؤول.\n\n`IShoppingAdministrator` هو كيان يجسد شخصًا يدير\nنظام مركز التسوق، مع انضمام {@link IShoppingMember membership}.\n\nللمرجع، على عكس {@link IShoppingCustomer customers} الذين يمكنهم المشاركة\nحتى بدون الانضمام إلى العضوية، يجب على المسؤول الانضمام إلى العضوية لتشغيل\nالإدارات. كما يجب على المسؤول تنفيذ\n{@link IShoppingCitizen real-name and mobile authentication} أيضًا.", + "description": "Primary Key" + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Primary Key." + }, + "IShoppingSeller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل.\n\nبعبارة أخرى، الوقت الذي قام فيه البائع بالتسجيل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "معلومات البائع.\n\n`IShoppingSeller` هو كيان يجسد شخصًا يسجل\n{@link IShoppingSale sales} لتشغيل أنشطة البيع، مع انضمام\n{@link IShoppingMember membership}.\n\nللإشارة، على عكس {@link IShoppingCustomer customers} الذين يمكنهم\nالمشاركة حتى بدون الانضمام إلى العضوية، يجب على البائع الانضمام إلى العضوية\nلتشغيل المبيعات. كما يجب على البائع إجراء\n{@link IShoppingCitizen real-name and mobile authentication} أيضًا.", + "description": "الحجم المتبقي للجميع" + } + }, + "required": [ + "id", + "created_at" + ], + "description": "الحجم المتبقي للجميع.\n\nإذا كان هناك حد لكمية التذاكر الصادرة، يصبح من المستحيل\nإصدار تذاكر تتجاوز هذه القيمة.\n\nبعبارة أخرى، يتم إنشاء مفهوم إصدار N قسيمة على أساس أسبقية الحضور." + }, + "IShoppingCouponInventory": { + "type": "object", + "properties": { + "volume": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "الحجم المتبقي لكل مواطن", + "description": "الحجم المتبقي لكل مواطن.\n\nكحد لإجمالي المبلغ الصادر لكل شخص، من الشائع\nتعيين القيمة 1 للحد من الإصدار المكرر لنفس المواطن، أو استخدام قيمة\n`nul`` لعدم تعيين أي حد.\n\nبالطبع، من خلال تعيين قيمة N، يمكن تحديد المبلغ الإجمالي الصادر لنفس المواطن." + }, + "volume_per_citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "معلومات المخزون الخاصة بالكوبون.\n\nإذا تم تصميم {@link كوبون IShoppingCoupon} بمخزون محدود، فإن بنية `IShoppingCouponInventory` هذه تمثل\nمعلومات المخزون المتبقية.", + "description": "قائمة القنوات والفئات المستهدفة" + } + }, + "required": [ + "volume", + "volume_per_citizen" + ], + "description": "قائمة القنوات والفئات المستهدفة." + }, + "IShoppingCouponChannelCriteria": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo" + }, + "minItems": 1, + "title": "نوع الوصف", + "description": "نوع الوصف." + }, + "type": { + "const": "channel", + "title": "اتجاه المعايير", + "description": "اتجاه المعايير." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "شروط قنوات كوبونات الخصم.\n\n`ishoppingcouponchannelcriteria` هو كيان فرعي من\n{@link IShoppingCouponCriteriaBase} ويُستخدم عند تعيين الشروط على\n{@link IShoppingChannel channel} أو\n{@link IShoppingChannelCategory category} معينة من تلك القناة.\n\nإذا كانت قيمة {@link direction} هي \"include\"، فلا يمكن استخدام الكوبون إلا\nللقنوات (أو الفئات) المستهدفة. وعلى العكس من ذلك، إذا كانت \"exclude\"،\nفإنها قسيمة لا يمكن استخدامها.", + "description": "Target channel" + } + }, + "required": [ + "channels", + "type", + "direction" + ], + "description": "القناة المستهدفة." + }, + "IShoppingCouponChannelCriteria.IChannelTo": { + "type": "object", + "properties": { + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "قائمة الفئات المستهدفة", + "description": "قائمة الفئات المستهدفة." + }, + "categories": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "minItems": 1 + } + ], + "title": "معلومات الفئة الأصلية ذات البنية المتكررة", + "description": "معلومات الفئة الأصلية ذات البنية المتكررة.\n\nإذا لم يوجد أي فئة أصلية، فكن `null`." + } + }, + "required": [ + "channel", + "categories" + ] + }, + "IShoppingChannelCategory.IInvert": { + "type": "object", + "properties": { + "parent": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + ], + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "معرف الفئة الأصلية", + "description": "معرف الفئة الأصلية." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "الاسم التمثيلي للفئة", + "description": "الاسم التمثيلي للفئة.\n\nيجب أن يكون الاسم فريدًا داخل الفئة الأصلية. إذا لم يوجد أي فئة أصلية،\nفيجب أن يكون الاسم فريدًا داخل القناة بين عدم وجود فئات أصلية." + }, + "name": { + "type": "string", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "عكس معلومات الفئة مع الفئة الأصلية.", + "description": "الأقسام المستهدفة للتضمين أو الاستبعاد" + } + }, + "required": [ + "parent", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "الأقسام المستهدفة للتضمين أو الاستبعاد." + }, + "IShoppingCouponSectionCriteria": { + "type": "object", + "properties": { + "sections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSection" + }, + "minItems": 1, + "title": "نوع المعرّف", + "description": "نوع المعرّف." + }, + "type": { + "const": "section", + "title": "اتجاه المعايير", + "description": "اتجاه المعايير." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "شروط أقسام كوبونات الخصم.\n\n`IShoppingCouponSectionCriteria` هو كيان فرعي من\n{@link IShoppingCouponCriteriaBase} ويُستخدم عند تعيين الشروط\nلقسم {@link IShoppingSection} محدد.\n\nإذا كانت قيمة {@link direction} هي \"include\"، فلا يمكن استخدام الكوبون\nإلا لأقسام {@link} المستهدفة. وعلى العكس من ذلك، إذا كانت قيمة \"exclude\"، فلا يمكن استخدام الكوبون.", + "description": "مفتاح أساسي" + } + }, + "required": [ + "sections", + "type", + "direction" + ], + "description": "مفتاح أساسي." + }, + "IShoppingSection": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "رمز التعريف", + "description": "رمز التعريف." + }, + "code": { + "type": "string", + "title": "الاسم التمثيلي للقسم", + "description": "الاسم التمثيلي للقسم." + }, + "name": { + "type": "string", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "معلومات القسم.\n\n\"IShoppingSection\" هو مفهوم يشير إلى المعلومات المكانية\nللسوق.\n\nإذا قارنا القسم المذكور هنا بالسوق غير المتصلة بالإنترنت، فهذا يعني منطقة\nمنفصلة مكانيًا داخل المتجر، مثل \"ركن الفاكهة\" أو\n\"ركن الجزار\". لذلك، في كيان {@link IShoppingSale sale}، ليس من الممكن تصنيف أقسام متعددة في وقت واحد، ولكن يمكن تصنيف قسم واحد فقط.\n\nبالمناسبة، إذا كان نظام مركز التسوق الخاص بك يتطلب قسمًا واحدًا فقط، فما عليك سوى\nاستخدام قسم واحد فقط. تم تصميم هذا المفهوم ليكون قابلاً للتوسع في المستقبل.", + "description": "البائعون المستهدفون الذين سيتم تضمينهم أو استبعادهم" + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "البائعون المستهدفون الذين سيتم تضمينهم أو استبعادهم." + }, + "IShoppingCouponSellerCriteria": { + "type": "object", + "properties": { + "sellers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "minItems": 1, + "title": "نوع المعرّف", + "description": "نوع المعرّف." + }, + "type": { + "const": "seller", + "title": "اتجاه المعايير", + "description": "اتجاه المعايير." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "الشروط الخاصة ببائعي كوبونات الخصم.\n\n`IShoppingCouponSellerCriteria` هو كيان فرعي من\n{@link IShoppingCouponCriteriaBase} ويُستخدم عند تحديد الشروط\nلبائع {@link IShoppingSeller} محدد.\n\nإذا كانت قيمة {@link direction} هي \"include\"، فلا يمكن استخدام الكوبون\nإلا للبائعين {@link} المستهدفين. وعلى العكس من ذلك، إذا كانت القيمة \"exclude\"، فلا يمكن استخدام الكوبون.", + "description": "استهداف المبيعات المراد تضمينها أو استبعادها" + } + }, + "required": [ + "sellers", + "type", + "direction" + ], + "description": "استهداف المبيعات المراد تضمينها أو استبعادها." + }, + "IShoppingCouponSaleCriteria": { + "type": "object", + "properties": { + "sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSale.ISummary" + }, + "minItems": 1, + "title": "نوع Descrimanator", + "description": "نوع Descrimanator." + }, + "type": { + "const": "sale", + "title": "اتجاه المعايير", + "description": "اتجاه المعايير." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "شروط مبيعات كوبونات الخصم.\n\n`IShoppingCouponSaleCriteria` هو كيان فرعي من\n{@link IShoppingCouponCriteriaBase} ويُستخدم عند تعيين الشروط\nلبيع {@link IShoppingSale} محدد.\n\nإذا كانت قيمة {@link direction} هي \"include\"، فلا يمكن استخدام الكوبون\nإلا لمبيعات {@link المستهدفة}. وعلى العكس من ذلك، إذا كانت القيمة \"exclude\"، فلا يمكن استخدام الكوبون.", + "description": "قسم تابع" + } + }, + "required": [ + "sales", + "type", + "direction" + ], + "description": "قسم تابع." + }, + "IShoppingSale.ISummary": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "البائع الذي سجل البيع", + "description": "البائع الذي سجل البيع." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "نطاق سعر الوحدة", + "description": "نطاق سعر الوحدة." + }, + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange", + "title": "المفتاح الأساسي للبيع", + "description": "المفتاح الأساسي للبيع." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "المفتاح الأساسي للصورة", + "description": "المفتاح الأساسي للصورة." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "ما إذا كانت الصورة هي الأحدث أم لا", + "description": "ما إذا كانت الصورة هي الأحدث أم لا." + }, + "latest": { + "type": "boolean", + "title": "الوصف ومحتوى الصورة الذي يصف البيع", + "description": "الوصف ومحتوى الصورة الذي يصف البيع." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "قائمة القنوات والفئات", + "description": "قائمة القنوات والفئات.\n\nما هي القنوات والفئات التي تم تسجيل البيع فيها." + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "قائمة علامات البحث", + "description": "قائمة علامات البحث." + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "قائمة الوحدات", + "description": "قائمة الوحدات.\n\nسجلات حول معلومات تكوين المنتج الفردي التي يتم بيعها\nفي البيع. يحتوي كل سجل {@link IShoppingSaleUnit unit} على\n{@link IShoppingSaleUnitOption options}،\n{@link IShoppingSaleUnitOptionCandidate candidates} قيم قابلة للتكوين لكل\nخيار، و{@link IShoppingSaleUnitStock final stocks} يتم تحديدها\nمن خلال\nتحديد كل قيم المرشحين لكل خيار." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ISummary" + }, + "minItems": 1, + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل.\n\nلاحظ أن هذه الخاصية مختلفة عن {@link opens_at}،\nمما يعني أن نقطة زمنية البيع مفتوحة." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "وقت آخر تحديث للسجل", + "description": "وقت آخر تحديث للسجل.\n\nبمعنى آخر، وقت إنشاء آخر لقطة." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "وقت الإيقاف المؤقت للبيع", + "description": "تم إيقاف البيع مؤقتًا.\n\nتم إيقاف البيع مؤقتًا من قبل البائع لسبب ما.\n\nلا يزال بإمكان {@link IShoppingCustomer Customers} رؤية البيع في كل من صفحات القائمة والتفاصيل، ولكن البيع يحمل علامة تحذير\n\"تم إيقاف البيع مؤقتًا من قبل البائع\"." + }, + "paused_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "تم إيقاف البيع مؤقتًا", + "description": "وقت تعليق البيع.\n\nتم تعليق البيع من قبل البائع لسبب ما.\n\nلا يستطيع {@link IShoppingCustomer Customers} رؤية البيع في\nكل من صفحات القائمة والتفاصيل. الأمر مشابه تقريبًا للحذف الناعم،\nولكن هناك اختلاف بسيط وهو أن المالك\n{@link IShoppingSeller seller} لا يزال بإمكانه رؤية البيع واستئنافه.\n\nبالطبع، لا يزال بإمكان {@link IShoppingCustomer customers} الذين\nاشتروا البيع بالفعل رؤية البيع في صفحة\n{@link IShoppingOrder order}." + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "وقت افتتاح البيع", + "description": "وقت افتتاح البيع." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "وقت إغلاق البيع", + "description": "وقت إغلاق البيع.\n\nإذا كانت هذه القيمة `null`، فسيستمر البيع إلى الأبد." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "معلومات موجزة عن البيع.\n\nتُستخدم هذه المعلومات الموجزة للترقيم الصفحي.", + "description": "مميز لنوع العميل" + } + }, + "required": [ + "section", + "seller", + "price_range", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "مميز لنوع العميل." + }, + "IShoppingSeller.IInvert": { + "type": "object", + "properties": { + "type": { + "const": "seller", + "title": "معلومات الانضمام إلى العضوية", + "description": "معلومات الانضمام إلى العضوية." + }, + "member": { + "$ref": "#/components/schemas/IShoppingMember.IInvert", + "title": "العميل، معلومات الاتصال", + "description": "العميل، معلومات الاتصال." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer.IInvert", + "title": "معلومات مصادقة الاسم الحقيقي ورقم الهاتف المحمول", + "description": "معلومات مصادقة الاسم الحقيقي ورقم الهاتف المحمول." + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen", + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل.\n\nبعبارة أخرى، الوقت الذي سجل فيه البائع." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "عكس المعلومات بدءًا من معلومات البائع.\n\nبدلاً من الوصول إلى معلومات البائع من\n{@link IShoppingCustomer.member} -> {@link IShoppingMember.seller}،\n`IShoppingSeller.IInvert` يبدأ من معلومات البائع\nوالوصول إلى معلومات العميل والعضو و{@link IShoppingCitizen citizen}\nبشكل معاكس.", + "description": "السعر الاسمي" + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "السعر الاسمي.\n\nهذا ليس {@link السعر الحقيقي الحقيقي} الذي يجب دفعه، بل مجرد سعر اسمي يجب عرضه.\nإذا كانت هذه القيمة أكبر من {@link السعر الحقيقي الحقيقي}، فسيتم عرضها\nكما لو أن {@link IShoppingSeller seller} يقدم خصمًا." + }, + "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": "السعر الحقيقي الذي يجب دفعه", + "description": "السعر الحقيقي الذي يجب دفعه." + }, + "real": { + "type": "number", + "minimum": 0, + "title": "واجهة سعر التسوق.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "nominal", + "real" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingSaleContent.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + } + } + }, + "required": [ + "id", + "title", + "thumbnails" + ] + }, + "IAttachmentFile": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء ملف المرفق", + "description": "وقت إنشاء ملف المرفق." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "اسم الملف، باستثناء الامتداد", + "description": "اسم الملف، باستثناء الامتداد.\n\nإذا كان هناك ملف `.gitignore`، فإن اسمه عبارة عن سلسلة فارغة." + }, + "name": { + "type": "string", + "maxLength": 255, + "title": "Extension", + "description": "Extension.\n\nمن الممكن حذفه مثل حالة `README`." + }, + "extension": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "title": "مسار URL للملف الحقيقي", + "description": "مسار URL للملف الحقيقي." + }, + "url": { + "type": "string", + "format": "uri", + "title": "ملف المرفقات.\n\nجميع ملفات المرفقات التي تتم إدارتها في النظام الحالي.\n\nللإشارة، من الممكن حذف أحد الملفين {@link name}\nأو {@link extension} مثل حالة `.gitignore` أو `README`، ولكن من غير\nالممكن حذف كليهما.", + "description": "قائمة فئات القناة التي تسرد المبيعات" + } + }, + "required": [ + "id", + "created_at", + "name", + "extension", + "url" + ], + "description": "قائمة فئات القناة التي تسرد البيع.\n\nإذا كانت فارغة، فهذا يعني أن جميع فئات القناة تسرد البيع." + }, + "IShoppingSaleChannel": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "title": "مفتاح أساسي", + "description": "مفتاح أساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "رمز التعريف", + "description": "رمز التعريف." + }, + "code": { + "type": "string", + "title": "اسم القناة", + "description": "اسم القناة." + }, + "name": { + "type": "string", + "title": "القناة المستهدفة (والفئات) للبيع للبيع.\n\n`IShoppingSaleChannel` هي كيان يعبر عن الطريقة التي يتم من خلالها بيع قائمة {@link IShoppingChannel channel} {@link IShoppingSale}.\n\nأيضًا، إذا تم تحديد {@link IShoppingChannelCategory categories}، فهذا يعني أيضًا\nأن البيع سيتم بيعه. وإلا، إذا لم يتم تحديد أي من فئات القناة، فهذا يعني أن كل فئات القناة تسرد البيع\nالمستهدف.", + "description": "مفتاح أساسي" + } + }, + "required": [ + "categories", + "id", + "created_at", + "code", + "name" + ], + "description": "مفتاح أساسي." + }, + "IShoppingSaleUnit.ISummary": { + "type": "object", + "properties": { + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "اسم ممثل للوحدة", + "description": "الاسم التمثيلي للوحدة." + }, + "name": { + "type": "string", + "title": "سواء كانت الوحدة أساسية أم لا", + "description": "سواء كانت الوحدة أساسية أم لا.\n\nمجرد قيمة تسمية." + }, + "primary": { + "type": "boolean", + "title": "سواء كانت الوحدة مطلوبة أم لا", + "description": "سواء كانت الوحدة مطلوبة أم لا.\n\nعندما تكون الوحدة مطلوبة، يجب على العميل تحديد الوحدة. إذا لم يتم التحديد، فلن يتمكن العميل من شرائها.\n\nعلى سبيل المثال، إذا كان هناك \"مجموعة ماك بوك\" معروضة للبيع وكانت إحدى الوحدات هي\n\"الهيكل الرئيسي\"، فهل من الممكن شراء \"مجموعة ماك بوك\" بدون وحدة\n\"الهيكل الرئيسي\"؟ هذه الخاصية مخصصة لهذه الحالة." + }, + "required": { + "type": "boolean", + "title": "قائمة المسارات المستهدفة", + "description": "قائمة المسارات المستهدفة." + } + }, + "required": [ + "price_range", + "id", + "name", + "primary", + "required" + ] + }, + "IShoppingCouponFunnelCriteria": { + "type": "object", + "properties": { + "funnels": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" + } + ] + }, + "minItems": 1, + "title": "نوع المعرّف", + "description": "نوع المعرّف." + }, + "type": { + "const": "funnel", + "title": "اتجاه المعايير", + "description": "اتجاه المعايير." + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "تقييد مسار كوبونات الخصم.\n\n`ishoppingcouponfunnelcriteria` هو كيان فرعي من\n{@link IShoppingCouponCriteria}، ويُستخدم عندما تريد إصدار أو\nاستبعاد كوبونات الخصم فقط إلى {@link IShoppingCustomer customers} الذين\nجاءوا من مسار معين.\n\nويمكن فرض قيود على المسار بثلاث طرق: الأولى هي\n{@link IShoppingCustomer.referrer}، ومن خلال تحليل\n{@link IShoppingCustomer.href}، الذي يسجل عنوان وصول العميل، يمكن فرض قيود بوحدات عناوين URL أو متغيرات معينة.", + "description": "نوع من قيود القمع" + } + }, + "required": [ + "funnels", + "type", + "direction" + ], + "description": "نوع من قيود القمع." + }, + "IShoppingCouponFunnelCriteria.IValueFunnel": { + "type": "object", + "properties": { + "kind": { + "oneOf": [ + { + "const": "url" + }, + { + "const": "referrer" + } + ], + "title": "القيمة المستهدفة", + "description": "القيمة المستهدفة." + }, + "value": { + "type": "string", + "title": "نوع من قيود القمع بقيمة.", + "description": "نوع من قيود القمع" + } + }, + "required": [ + "kind", + "value" + ], + "description": "نوع من قيود القمع." + }, + "IShoppingCouponFunnelCriteria.IVariableFunnel": { + "type": "object", + "properties": { + "kind": { + "const": "variable", + "title": "مفتاح المتغير المستهدف", + "description": "مفتاح المتغير المستهدف." + }, + "key": { + "type": "string", + "title": "قيمة المتغير المستهدف", + "description": "قيمة المتغير المستهدف." + }, + "value": { + "type": "string", + "title": "نوع من قيود القمع بواسطة متغير.", + "description": "وحدة الخصم كمبلغ" + } + }, + "required": [ + "kind", + "key", + "value" + ], + "description": "وحدة الخصم كمبلغ.\n\nوهذا يعني أن سعر الطلب سيتم خصمه بقيمة المبلغ." + }, + "IShoppingCouponDiscount.IAmount": { + "type": "object", + "properties": { + "unit": { + "const": "amount", + "title": "قيمة الخصم كمبلغ", + "description": "قيمة الخصم كمبلغ." + }, + "value": { + "type": "number", + "title": "الحد الأدنى لمبلغ الشراء للخصم", + "description": "الحد الأدنى لمبلغ الشراء للخصم.\n\nعند تعيين هذه القيمة، لا يمكن تطبيق كوبونات الخصم على\nإجمالي الطلبات التي تقل عن هذه القيمة." + }, + "threshold": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ], + "title": "الحد الأقصى للمبلغ المتاح للخصم", + "description": "الحد الأقصى للمبلغ المتاح للخصم.\n\nعند تعيين هذه القيمة، لن يتم تقديم أي خصم إضافي\nبغض النظر عن كمية الطلب. ستكون هذه الخاصية ذات معنى\nفقط عندما يكون {@link multiplicative} `true`." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 + } + ], + "title": "مضاعف أم لا", + "description": "مضاعف أم لا.\n\nإذا كانت هذه الخاصية \"صحيحة\"، فسيتم ضرب قيمة الخصم\nفي قيمة {@link IShoppingCartCommodity.volume} أو\n{@link IShoppingOrderGood.volume}. وفي هذه الحالة أيضًا،\nستكون الخاصية {@link limit} مفيدة." + }, + "multiplicative": { + "type": "boolean", + "title": "معلومات الخصم مع وحدة المبلغ.", + "description": "وحدة الخصم كنسبة مئوية" + } + }, + "required": [ + "unit", + "value", + "threshold", + "limit", + "multiplicative" + ], + "description": "وحدة الخصم كنسبة مئوية.\n\nهذا يعني أن سعر الطلب سيتم خصمه بقيمة النسبة المئوية." + }, + "IShoppingCouponDiscount.IPercent": { + "type": "object", + "properties": { + "unit": { + "const": "percent", + "title": "قيمة الخصم كنسبة مئوية", + "description": "قيمة الخصم كنسبة مئوية." + }, + "value": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "الحد الأدنى لمبلغ الشراء للخصم", + "description": "الحد الأدنى لمبلغ الشراء للخصم.\n\nعند تعيين هذه القيمة، لا يمكن تطبيق كوبونات الخصم على\nإجمالي الطلبات التي تقل عن هذه القيمة." + }, + "threshold": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ], + "title": "الحد الأقصى للمبلغ المتاح للخصم", + "description": "الحد الأقصى للمبلغ المتاح للخصم.\n\nعند تعيين هذه القيمة، لن يتم تقديم أي خصم إضافي\nبغض النظر عن كمية الطلب." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 + } + ], + "title": "معلومات الخصم مع وحدة النسبة المئوية.", + "description": "مستوى الوصول إلى الكوبون" + } + }, + "required": [ + "unit", + "value", + "threshold", + "limit" + ], + "description": "مستوى الوصول إلى القسيمة.\n\n- عام: من الممكن العثور عليه من واجهة برمجة التطبيقات العامة\n- خاص: غير قادر على العثور عليه من واجهة برمجة التطبيقات العامة\n- يتم تعيينه بشكل تعسفي من قبل البائع أو المسؤول\n- يتم إصداره من رابط لمرة واحدة" + }, + "IShoppingCouponRestriction": { + "type": "object", + "properties": { + "access": { + "oneOf": [ + { + "const": "public" + }, + { + "const": "private" + } + ], + "title": "حصري أم لا", + "description": "الحصرية أم لا.\n\nتشير قسيمة الخصم الحصرية إلى قسيمة خصم لها علاقة حصرية بقسائم خصم أخرى ولا يمكن استخدامها إلا بمفردها. أي أنه عند استخدام قسيمة خصم حصرية، لا يمكن استخدام أي قسيمة خصم أخرى لنفس\n{@link IShoppingOrder order} أو {@link IShoppingOrderGood good}.\n\nيرجى ملاحظة أن هذه السمة الحصرية هي مفهوم مختلف تمامًا\nعن المضاعف، مما يعني ما إذا كان من الممكن\nضرب نفس القسيمة وتطبيقها على قسائم متعددة لنفس الطلب، لذا\nيرجى عدم الخلط بينهما." + }, + "exclusive": { + "type": "boolean", + "title": "تم إصدار كمية محدودة", + "description": "تم إصدار كمية محدودة.\n\nإذا كان هناك حد للكمية الصادرة، يصبح من المستحيل إصدار تذاكر تتجاوز هذه القيمة.\n\nبعبارة أخرى، تم إنشاء مفهوم إصدار N قسيمة على أساس أسبقية الحضور." + }, + "volume": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "تم إصدار كمية محدودة لكل شخص", + "description": "كمية محدودة صادرة لكل شخص.\n\nكحد لإجمالي المبلغ الصادر لكل شخص، من الشائع تعيين 1 للحد من الإصدار المكرر لنفس المواطن، أو استخدام قيمة NULL لعدم تعيين أي حد.\n\nبالطبع، من خلال تعيين قيمة N، يمكن تحديد إجمالي المبلغ الصادر لنفس المواطن." + }, + "volume_per_citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "قيمة يوم(أيام) انتهاء الصلاحية", + "description": "قيمة يوم(أيام) انتهاء الصلاحية.\n\nمفهوم انتهاء الصلاحية بعد N يوم من إصدار تذكرة قسيمة الخصم.\n\nلذلك، يجب على العملاء استخدام التذكرة خلال N يوم، إن أمكن، من وقت إصدارها." + }, + "expired_in": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "تاريخ انتهاء الصلاحية", + "description": "تاريخ انتهاء الصلاحية.\n\nمفهوم ينتهي بعد YYYY-MM-DD بعد إصدار تذكرة قسيمة الخصم.\n\nمن الممكن فرض قيود مزدوجة باستخدام expired_in، حيث يتم استخدام القيد الذي له تاريخ انتهاء صلاحية أقصر." + }, + "expired_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "معلومات القيد الخاصة بالقسيمة.", + "description": "معلومات الخصم" + } + }, + "required": [ + "access", + "exclusive", + "volume", + "volume_per_citizen", + "expired_in", + "expired_at" + ], + "description": "معلومات الخصم." + }, + "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": "معلومات التقييد", + "description": "معلومات التقييد." + }, + "restriction": { + "$ref": "#/components/schemas/IShoppingCouponRestriction", + "title": "اسم ممثل القسيمة", + "description": "اسم ممثل القسيمة." + }, + "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": "وقت فتح القسيمة", + "description": "وقت فتح القسيمة." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "وقت إغلاق القسيمة", + "description": "وقت إغلاق القسيمة.\n\nلا يمكن إصدار التذاكر بعد هذا الوقت.\n\nومع ذلك، لا يزال من الممكن استخدام التذاكر الصادرة مسبقًا حتى تاريخ انتهاء صلاحيتها." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "معلومات إنشاء القسيمة.", + "description": "قائمة القنوات والفئات المستهدفة" + } + }, + "required": [ + "discount", + "restriction", + "criterias", + "disposable_codes", + "name", + "opened_at", + "closed_at" + ], + "description": "قائمة القنوات والفئات المستهدفة." + }, + "IShoppingCouponChannelCriteria.ICreate": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo.ICreate" + }, + "minItems": 1, + "title": "معلومات إنشاء معايير القناة.", + "description": "القنوات المستهدفة {@link IShoppingChannel.code}" + }, + "type": { + "const": "channel" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "channels", + "type", + "direction" + ], + "description": "القنوات المستهدفة {@link IShoppingChannel.code}." + }, + "IShoppingCouponChannelCriteria.IChannelTo.ICreate": { + "type": "object", + "properties": { + "channel_code": { + "type": "string", + "title": "الفئات المستهدفة {@link IShoppingChannelCategory.id}", + "description": "الفئات المستهدفة {@link IShoppingChannelCategory.id}." + }, + "category_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + ], + "title": "القناة والفئات المستهدفة.", + "description": "قائمة الأقسام المستهدفة {@link IShoppingSection.code}" + } + }, + "required": [ + "channel_code", + "category_ids" + ], + "description": "قائمة الأقسام المستهدفة {@link IShoppingSection.code}." + }, + "IShoppingCouponSectionCriteria.ICreate": { + "type": "object", + "properties": { + "section_codes": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "title": "معلومات إنشاء معايير القسم.", + "description": "قائمة البائعين المستهدفين {@link IShoppingSeller.id}" + }, + "type": { + "const": "section" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "section_codes", + "type", + "direction" + ], + "description": "قائمة البائعين المستهدفين {@link IShoppingSeller.id}." + }, + "IShoppingCouponSellerCriteria.ICreate": { + "type": "object", + "properties": { + "seller_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "minItems": 1, + "title": "معلومات إنشاء معايير البائع.", + "description": "قائمة المبيعات المستهدفة {@link IShoppingSale.id}." + }, + "type": { + "const": "seller" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "seller_ids", + "type", + "direction" + ], + "description": "قائمة المبيعات المستهدفة {@link IShoppingSale.id}." + }, + "IShoppingCouponSaleCriteria.ICreate": { + "type": "object", + "properties": { + "sale_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "minItems": 1, + "title": "معلومات إنشاء معايير البيع.", + "description": "قائمة مسارات المبيعات المستهدفة" + }, + "type": { + "const": "sale" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "sale_ids", + "type", + "direction" + ], + "description": "قائمة مسارات المبيعات المستهدفة." + }, + "IShoppingCouponFunnelCriteria.ICreate": { + "type": "object", + "properties": { + "funnels": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" + } + ] + }, + "minItems": 1, + "title": "معلومات إنشاء معايير مسار المبيعات.", + "description": "معلومات الصفحة" + }, + "type": { + "const": "funnel" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "funnels", + "type", + "direction" + ], + "description": "معلومات الصفحة." + }, + "IPageIShoppingCoupon": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "رقم الصفحة الحالية" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "رقم الصفحة الحالية." + }, + "IPage.IPagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "الحد الأقصى لعدد السجلات في الصفحة", + "description": "الحد الأقصى لعدد السجلات في الصفحة." + }, + "limit": { + "type": "integer", + "title": "إجمالي السجلات في قاعدة البيانات", + "description": "إجمالي السجلات في قاعدة البيانات." + }, + "records": { + "type": "integer", + "title": "إجمالي الصفحات", + "description": "إجمالي الصفحات.\n\nيساوي {@link records} / {@link limit} مع الحد الأقصى." + }, + "pages": { + "type": "integer", + "title": "معلومات الصفحة.", + "description": "رقم الصفحة" + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "رقم الصفحة." + }, + "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": "الحد الأقصى لعدد السجلات في الصفحة", + "description": "الحد الأقصى لعدد السجلات في الصفحة." + }, + "limit": { + "type": "integer", + "title": "معلومات الصفحة", + "description": "معلومات الصفحة." + } + } + }, + "IShoppingCoupon.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "IPageIShoppingDeposit": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeposit" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "رقم الصفحة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "رقم الصفحة." + }, + "IShoppingDeposit": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "IShoppingDeposit.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingDeposit.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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "الحد الأقصى لعدد السجلات في الصفحة", + "description": "الحد من السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "معلومات الصفحة", + "description": "معلومات الصفحة." + } + } + }, + "IShoppingDeposit.IRequest.ISearch": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + } + }, + "IShoppingDeposit.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "code", + "source", + "direction" + ] + }, + "IPageIShoppingMileage": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileage" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "رقم الصفحة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "رقم الصفحة." + }, + "IShoppingMileage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "IShoppingMileage.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingMileage.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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "الحد من السجلات لكل صفحة", + "description": "الحد من السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "معلومات الصفحة", + "description": "معلومات الصفحة." + } + } + }, + "IShoppingMileage.IRequest.ISearch": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + } + }, + "IShoppingMileage.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + } + }, + "required": [ + "code", + "source", + "direction", + "value" + ] + }, + "IPageIShoppingMileageDonation": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "رقم الصفحة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "رقم الصفحة." + }, + "IShoppingMileageDonation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "administrator": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen" + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "administrator", + "citizen", + "value", + "reason", + "created_at" + ] + }, + "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": "الحد من السجلات لكل صفحة", + "description": "الحد من السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "معلومات الصفحة", + "description": "معلومات الصفحة." + } + } + }, + "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" + } + } + }, + "IShoppingMileageDonation.ICreate": { + "type": "object", + "properties": { + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "citizen_id", + "value", + "reason" + ] + }, + "IPageIShoppingOrder": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrder" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "مفتاح أساسي" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "مفتاح أساسي." + }, + "IShoppingOrder": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "العميل الذي تقدم بطلب للحصول على الطلب", + "description": "العميل الذي تقدم بطلب للحصول على الطلب." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "قائمة السلع في الطلب", + "description": "قائمة السلع في الطلب." + }, + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood" + }, + "minItems": 1, + "title": "معلومات الأسعار بما في ذلك الخصومات", + "description": "معلومات الأسعار بما في ذلك الخصومات.\n\nللمرجع، تم ضرب قيمة السعر هذه في قيمة {@link volume}.\nلذلك، حتى إذا كانت قيمة {@link volume} مساوية لقيمة\n{@link IShoppingCartCommodity.volume} المستهدفة، فقد تختلف قيمة السعر هذه\nمع قيمة {@link IShoppingCartCommodity.price}." + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice", + "title": "معلومات إتمام الطلب والدفع", + "description": "معلومات إتمام الطلب والدفع." + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish" + } + ], + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "معلومات طلب الطلب.\n\n`IShoppingOrder` هو كيان يجسد معلومات طلب طلب {@link IShoppingCustomer customer}. ومع ذلك، يرجى ملاحظة أنه في هذا الوقت، ما زلت في مرحلة \"طلب الطلب\" وليس مرحلة \"تأكيد الطلب\".\n\nوبمجرد أن يتقدم العميل بطلب للحصول على طلب، تتم ترقية جميع\n{@link IShoppingCartCommodity goods} في عربة التسوق المستهدفة إلى {@link IShoppingOrderGood goods}، ويتم إنشاء سجلات السلع هذه\nبموجب `IShoppingOrder` هذا.\n\nبالطبع، ليست كل السلع الموجودة في عربة التسوق المستهدفة تصبح\n{@link IShoppingOrderGood}، ولكن فقط تلك التي يختارها العميل تصبح\n{@link IShoppingOrderGood}.", + "description": "تمييز حسب نوع العميل" + } + }, + "required": [ + "id", + "customer", + "goods", + "price", + "publish", + "created_at" + ], + "description": "تمييز حسب نوع العميل." + }, + "IShoppingCustomer": { + "type": "object", + "properties": { + "type": { + "const": "customer", + "title": "معلومات العضوية", + "description": "معلومات العضوية.\n\nإذا انضم العميل كعضو." + }, + "member": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMember" + } + ], + "title": "معلومات المواطن", + "description": "معلومات المواطن.\n\nإذا قام العميل بالتحقق من اسمه الحقيقي ورقم هاتفه المحمول." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "القناة التابعة", + "description": "القناة التابعة." + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "معلومات المستخدم الخارجي", + "description": "معلومات المستخدم الخارجي.\n\nعندما يأتي العميل من خدمة خارجية." + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "عنوان الاتصال", + "description": "عنوان الاتصال.\n\nنفس الشيء مع {@link window.location.href} الخاص بالعميل." + }, + "href": { + "type": "string", + "format": "uri", + "title": "عنوان المرجع", + "description": "عنوان المرجع.\n\nنفس الشيء مع {@link window.document.referrer} الخاص بالعميل." + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "عنوان IP للاتصال", + "description": "عنوان IP للاتصال." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "وقت إنشاء سجل الاتصال", + "description": "وقت إنشاء سجل الاتصال." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "معلومات العميل، ولكن ليس شخصًا بل أساس اتصال.\n\n`IShoppingCustomer` هو كيان يجسد حرفيًا معلومات\nأولئك الذين شاركوا في السوق كعملاء. بالمناسبة، لا يعني ``IShoppingCustomer` شخصًا، بل أساس اتصال. لذلك،\nحتى إذا اتصل نفس الشخص بمركز التسوق، يتم إنشاء سجلات متعددة ومتعددة في `IShoppingCustomer`.\n\nالغرض الأول من هذا هو تتبع مسار تدفق العميل بالتفصيل،\nوهو في الحالات التي يدخل فيها نفس الشخص كغير عضو،\n\n{@link IShoppingCartCommodity يضع العناصر في عربة التسوق} مسبقًا،\nولا يصادق إلا على {@link IShoppingCitizen الاسم الحقيقي} أو\nيسجل/يسجل الدخول في لحظة {@link IShoppingOrderPublish payment}.\nإنه الغرض الثاني. أخيرًا، يتعلق الأمر بتتبع الأنشطة التي يقوم بها شخص ما في مركز التسوق بدقة بطرق مختلفة كما هو موضح أدناه.\n\n- يأتي نفس الشخص من خدمة خارجية {@link IShoppingExternalUser}\n- ينشئ نفس الشخص حسابات متعددة\n- يقوم نفس الشخص بعملية شراء {@link IShoppingOrderPublish} بصفته غير عضو باستخدام {@link IShoppingCitizen real name authentication} فقط\n- يتصرف نفس الشخص بصفته {@link IShoppingSeller seller} و{@link IShoppingAdministrator admin} في نفس الوقت\n\nلذلك، يمكن أن يكون لدى `IShoppingCustomer` سجلات متعددة بنفس\n{@link IShoppingCitizen} و{@link IShoppingMember} و\n{@link IShoppingExternalUser}. بالإضافة إلى ذلك، إذا قام العميل بالتسجيل للحصول على\nالعضوية بعد التحقق من اسمه الحقيقي أو التسجيل في خدمتنا بعد\nأن يكون مستخدمًا لخدمة خارجية، فسيتم تغيير جميع السجلات ذات الصلة مرة واحدة.\nلذلك، يمكن تحديد هوية العملاء وتتبعهم بشكل منهجي للغاية.", + "description": "معلومات المواطن" + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "معلومات المواطن.\n\nفقط عندما يتم التحقق من هويته كمواطن، مع رقم الهاتف المحمول والاسم الحقيقي.\n\nللمرجع، إذا سجل العضو كبائع أو مسؤول،\nيجب أن تكون معلومات المواطن هذه." + }, + "IShoppingMember": { + "type": "object", + "properties": { + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "معلومات البائع", + "description": "معلومات البائع.\n\nإذا سجل العضو أيضًا كبائع." + }, + "seller": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSeller" + } + ], + "title": "معلومات المسؤول", + "description": "معلومات المسؤول.\n\nإذا سجل العضو أيضًا كمسؤول." + }, + "administrator": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingAdministrator" + } + ], + "title": "مفتاح أساسي", + "description": "مفتاح أساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "لقب يحدد العضو بشكل فريد", + "description": "الاسم المستعار الذي يحدد العضو بشكل فريد." + }, + "nickname": { + "type": "string", + "title": "قائمة رسائل البريد الإلكتروني", + "description": "قائمة رسائل البريد الإلكتروني." + }, + "emails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMemberEmail" + }, + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل.\n\nبعبارة أخرى، الوقت الذي سجل فيه العضو." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "حساب العضو.\n\n`IShoppingMember` هو كيان يرمز إلى الحالة عندما يقوم\n{@link IShoppingCustomer} بالتسجيل كعضو في نظام مركز التسوق\nهذا.\n\nإذا كان لدى `IShoppingMember` خاصية بائع أو مسؤول، فهذا يعني أن\n{@link IShoppingCustomer} يعمل كـ {@link IShoppingSeller بائع}\nأو {@link IShoppingAdministrator مسؤول} في نفس الوقت.", + "description": "مفتاح أساسي" + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "مفتاح أساسي." + }, + "IShoppingOrderGood": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "سلعة تشكل أساس السلعة", + "description": "سلعة تشكل أساس السلعة." + }, + "commodity": { + "$ref": "#/components/schemas/IShoppingCartCommodity", + "title": "حجم السلعة", + "description": "حجم السلعة.\n\nالقيمة مضروبة في {@link IShoppingCartCommodityStock.quantity}.\nالغرض منها هو نفسه تمامًا مع {@link IShoppingCartCommodity.volume}،\nولكن تمت إعادة كتابتها لأن سجلات {@link IShoppingCartCommodity} قابلة لإعادة الاستخدام\nحتى الدفع." + }, + "volume": { + "type": "integer", + "title": "معلومات السعر بما في ذلك الخصومات والحجم المضاعف", + "description": "معلومات السعر بما في ذلك الخصومات والحجم المضاعف." + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice.ISummary", + "title": "حالة التسليم الخاصة بالسلعة", + "description": "حالة التسليم الخاصة بالسلعة." + }, + "state": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "وقت تأكيد طلب السلعة", + "description": "وقت تأكيد الطلب جيد.\n\nعند التأكيد، لا يمكن للعميل طلب استرداد أو استبدال.\n\nيتم التأكيد في الحالات التالية.\n\n- يقوم العميل بذلك مباشرة.\n- 14 يومًا بعد التسليم." + }, + "confirmed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "معلومات حول السلع الفردية التي تشكل طلبك.\n\n`IShoppingOrderGood` هو كيان يمثل كل سلعة يطلبها\n{@link IShoppingCustomer customer}، ويتم إنشاء السجل في عملية\nترقية المنتج {@link IShoppingCartCommodity goods} في\nعربة التسوق إلى سلعة بسبب طلب العميل {@link IShoppingOrder order}.\n\nو`IShoppingOrderGood`، مثل {@link IShoppingCartCommodity}، هو مفهوم\nيتوافق مع القائمة {@link IShoppingSaleSnapshot sale snapshot}.\n\nللإشارة، يحتوي `IShoppingOrderGood` أيضًا على معلومات {@link volume}\nبشكل منفصل عن {@link IShoppingCartCommodity.volume}. وذلك\nلأن هناك بعض الحالات التي تضع فيها 3 كتب في عربة التسوق الخاصة بك\nثم تغيرها إلى 4 أثناء عملية تقديم الطلب الفعلية. هذا لزيادة إمكانية إعادة استخدام عربة التسوق عن طريق تغيير سمة الحجم\nللكيان الحالي بدلاً من تغيير معلومات السلعة مباشرةً.\n\nبالإضافة إلى ذلك، يصبح `IShoppingOrderGood` الوحدة الأساسية لعملية ما بعد الطلب، أي خدمة ما بعد الطلب (A/S). على سبيل المثال، بعد استلام منتج\nالعميل، يتم تسجيل تأكيد الطلب في سمة {@link confirmed_at}\n. بالإضافة إلى ذلك، `IShoppingOrderGood` هي الوحدة التي يصدر فيها العملاء أو يطلبون استبدال المنتجات المطلوبة أو استرداد الأموال.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "id", + "commodity", + "volume", + "price", + "state", + "confirmed_at" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingCartCommodity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "عكس معلومات البيع (الصورة)، في منظور السلعة", + "description": "عكس معلومات البيع (الصورة)، في منظور السلعة." + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.IInvert", + "title": "ما إذا كانت السلعة الحالية قابلة للطلب أم لا", + "description": "ما إذا كانت السلعة الحالية قابلة للطلب أم لا.\n\nإذا كانت هذه الخاصية `false`، فإن السلعة غير قابلة للطلب، لأنها\nتم طلبها بالفعل." + }, + "orderable": { + "type": "boolean", + "title": "ما إذا كانت السلعة الحالية زائفة أم لا", + "description": "سواء كانت السلعة الحالية وهمية أم لا.\n\nعندما تكون هذه السمة \"صحيحة\"، فإن السلعة ليست السلعة الحقيقية،\nولكنها مجرد معلومات مزيفة فقط لحساب تأثير الخصم بواسطة\n{@link IShoppingCoupon coupons}." + }, + "pseudo": { + "type": "boolean", + "title": "حجم السلعة المراد شراؤها", + "description": "حجم السلعة المراد شراؤها.\n\nقيمة تشير إلى عدد المجموعات التي سيتم ضربها في قيم\n{@link IShoppingSaleUnitStock.IInvert.quantity} الفرعية." + }, + "volume": { + "type": "integer", + "minimum": 1, + "title": "سعر السلعة", + "description": "سعر السلعة.\n\nللمرجع، لم يتم ضرب قيمة السعر هذه بقيمة\n{@link volume}. بل تم جمع أسعار القيم الفرعية\n{@link IShoppingSaleUnitStock.IInvert.price} فقط." + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "عنصر في عربة التسوق.\n\n`IShoppingCartCommodity` هو كيان يمثل\n{@link IShoppingSaleSnapshot snapshot} للعناصر التي وضعها\n{@link IShoppingCustomer customer} في عربة التسوق الخاصة به مع وضع\n{@link IShoppingOrder} في الاعتبار. وإذا واصل العميل ذلك\nفي طلب فعلي في المستقبل، فسيتم تغيير `IShoppingCartCommodity` إلى\n{@link IShoppingOrderGood}.\n\nوأثناء إضافة لقطة بيع إلى عربة التسوق، يختار العميل حتمًا\n{@link IShoppingSaleUnit units} و\n{@link IShoppingSaleUnitStock final stocks} ضمن لقطة القائمة.\nيتم تسجيل المعلومات حول هذه الوحدات والمخزونات في الكيان الفرعي\n{@link IShoppingCartCommodityStock}. هناك أيضًا سمة {@link volume}\nتشير إلى عدد مجموعات الصور الفوتوغرافية للسلعة المستهدفة التي سيتم شراؤها. هذا \"الحجم\" عبارة عن قيمة سيتم ضربها في\n{@link IShoppingSaleUnitStock.IInvert.quantity}، وهي الكمية لكل\nمكون.", + "description": "معلومات القسم المملوك" + } + }, + "required": [ + "id", + "sale", + "orderable", + "pseudo", + "volume", + "price", + "created_at" + ], + "description": "معلومات القسم المملوك." + }, + "IShoppingSaleSnapshot.IInvert": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "البائع الذي سجل البيع", + "description": "البائع الذي سجل البيع." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "المفتاح الأساسي للبيع", + "description": "المفتاح الأساسي للبيع." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "المفتاح الأساسي للصورة", + "description": "المفتاح الأساسي للصورة." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "ما إذا كانت الصورة هي الأحدث أم لا", + "description": "ما إذا كانت الصورة هي الأحدث أم لا." + }, + "latest": { + "type": "boolean", + "title": "الوصف ومحتوى الصورة الذي يصف البيع", + "description": "الوصف ومحتوى الصورة الذي يصف البيع." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "قائمة القنوات والفئات", + "description": "قائمة القنوات والفئات.\n\nما هي القنوات والفئات التي تم تسجيل البيع فيها." + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "قائمة علامات البحث", + "description": "قائمة علامات البحث." + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "قائمة الوحدات", + "description": "قائمة الوحدات.\n\nسجلات حول معلومات تكوين المنتج الفردي التي يتم بيعها\nفي البيع. يحتوي كل سجل {@link IShoppingSaleUnit unit} على\n{@link IShoppingSaleUnitOption options}،\n{@link IShoppingSaleUnitOptionCandidate candidates} قيم قابلة للتكوين لكل\nخيار، و{@link IShoppingSaleUnitStock final stocks} يتم تحديدها\nمن خلال\nتحديد كل قيم المرشحين لكل خيار." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.IInvert" + }, + "minItems": 1, + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل.\n\nلاحظ أن هذه الخاصية مختلفة عن {@link opens_at}،\nمما يعني أن نقطة زمنية البيع مفتوحة." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "وقت آخر تحديث للسجل", + "description": "وقت آخر تحديث للسجل.\n\nبمعنى آخر، وقت إنشاء آخر لقطة." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "وقت الإيقاف المؤقت للبيع", + "description": "تم إيقاف البيع مؤقتًا.\n\nتم إيقاف البيع مؤقتًا من قبل البائع لسبب ما.\n\nلا يزال بإمكان {@link IShoppingCustomer Customers} رؤية البيع في كل من صفحات القائمة والتفاصيل، ولكن البيع يحمل علامة تحذير\n\"تم إيقاف البيع مؤقتًا من قبل البائع\"." + }, + "paused_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "تم إيقاف البيع مؤقتًا", + "description": "وقت تعليق البيع.\n\nتم تعليق البيع من قبل البائع لسبب ما.\n\nلا يستطيع {@link IShoppingCustomer Customers} رؤية البيع في\nكل من صفحات القائمة والتفاصيل. الأمر مشابه تقريبًا للحذف الناعم،\nولكن هناك اختلاف بسيط وهو أن المالك\n{@link IShoppingSeller seller} لا يزال بإمكانه رؤية البيع واستئنافه.\n\nبالطبع، لا يزال بإمكان {@link IShoppingCustomer customers} الذين\nاشتروا البيع بالفعل رؤية البيع في صفحة\n{@link IShoppingOrder order}." + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "وقت افتتاح البيع", + "description": "وقت افتتاح البيع." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "وقت إغلاق البيع", + "description": "وقت إغلاق البيع.\n\nإذا كانت هذه القيمة `null`، فسوف يستمر البيع إلى الأبد." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "عكس معلومات لقطة البيع، من منظور السلعة.\n\n`IShoppingSaleSnapshot.IInvert` هو بنية تستخدم لتمثيل لقطة\nمن منظور {@link IShoppingCommodity}، والتي تتوافق\nمع كيان {@link IShoppingCartCommodityStock}.\n\nلذلك، لا يحتوي `IShoppingSaleSnapshot.IInvert` على كل\n{@link IShoppingSaleUnit units} و{@link IShoppingSaleUnitStock stocks}\nمن سجلات اللقطة، ولكن فقط بعض السجلات التي يتم وضعها\nفي {@link IShoppingCartCommodity} عربة التسوق.", + "description": "قائمة المخزونات النهائية" + } + }, + "required": [ + "section", + "seller", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "قائمة المخزونات النهائية." + }, + "IShoppingSaleUnit.IInvert": { + "type": "object", + "properties": { + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock.IInvert" + }, + "minItems": 1, + "title": "مفتاح أساسي", + "description": "مفتاح أساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "اسم ممثل للوحدة", + "description": "اسم ممثل للوحدة." + }, + "name": { + "type": "string", + "title": "سواء كانت الوحدة أساسية أم لا", + "description": "سواء كانت الوحدة أساسية أم لا.\n\nمجرد قيمة تسمية." + }, + "primary": { + "type": "boolean", + "title": "سواء كانت الوحدة مطلوبة أم لا", + "description": "سواء كانت الوحدة مطلوبة أم لا.\n\nعندما تكون الوحدة مطلوبة، يجب على العميل تحديد الوحدة. إذا لم يتم التحديد، فلن يتمكن العميل من شرائها.\n\nعلى سبيل المثال، إذا كان هناك عرض \"Macbook Set\" وكانت إحدى الوحدات هي\n\"Main Body\"، فهل من الممكن شراء \"Macbook Set\" بدون\n\"Main Body\" الوحدة؟ هذه الخاصية مخصصة لهذه الحالة." + }, + "required": { + "type": "boolean", + "title": "مفتاح أساسي", + "description": "مفتاح أساسي." + } + }, + "required": [ + "stocks", + "id", + "name", + "primary", + "required" + ] + }, + "IShoppingSaleUnitStock.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "اسم ممثل للسهم", + "description": "اسم ممثل للسهم." + }, + "name": { + "type": "string", + "title": "سعر السهم", + "description": "سعر السهم." + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "كمية السهم في سلة التسوق", + "description": "كمية المخزون في عربة التسوق." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "حالة المخزون الحالية للمخزون", + "description": "حالة المخزون الحالية للمخزون." + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockInventory", + "title": "قائمة الخيارات", + "description": "قائمة الخيارات.\n\nما هي القيم التي تتم كتابتها لكل خيار." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice.IInvert" + }, + "title": "عكس المعلومات من عربة التسوق.", + "description": "كمية الدخل الإجمالية" + } + }, + "required": [ + "id", + "name", + "price", + "quantity", + "inventory", + "choices" + ], + "description": "كمية الدخل الإجمالية." + }, + "IShoppingSaleUnitStockInventory": { + "type": "object", + "properties": { + "income": { + "type": "integer", + "title": "كمية النتيجة الإجمالية", + "description": "كمية النتيجة الإجمالية." + }, + "outcome": { + "type": "integer", + "title": "معلومات المخزون للمخزون النهائي.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "income", + "outcome" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingSaleUnitStockChoice.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "خيار الهدف", + "description": "خيار الهدف." + }, + "option": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.IInvert" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ], + "title": "قيمة المرشح المحددة", + "description": "قيمة المرشح المحددة." + }, + "candidate": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate" + } + ], + "title": "قيمة مكتوبة", + "description": "قيمة مكتوبة." + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ], + "title": "عكس المعلومات من العربة.", + "description": "مفتاح أساسي" + } + }, + "required": [ + "id", + "option", + "candidate", + "value" + ], + "description": "مفتاح أساسي." + }, + "IShoppingSaleUnitSelectableOption.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "مميز لنوع الخيار القابل للتحديد", + "description": "مميز لنوع الخيار القابل للتحديد." + }, + "type": { + "const": "select", + "title": "يمثل اسم الخيار", + "description": "يمثل اسم الخيار." + }, + "name": { + "type": "string", + "title": "ما إذا كان الخيار متغيرًا أم لا", + "description": "ما إذا كان الخيار متغيرًا أم لا.\n\nعندما يكون نوع الخيار الحالي هو \"select\"، فإن هذه الخاصية تعني ما إذا كان\nتحديد قيمة مرشحة مختلفة يؤثر على المخزون النهائي أم لا." + }, + "variable": { + "type": "boolean", + "title": "مفتاح أساسي", + "description": "مفتاح أساسي." + } + }, + "required": [ + "id", + "type", + "name", + "variable" + ] + }, + "IShoppingSaleUnitDescriptiveOption": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "نوع الخيار الوصفي", + "description": "نوع الخيار الوصفي.\n\nما هي القيمة المكتوبة التي يجب كتابتها عند الشراء." + }, + "type": { + "oneOf": [ + { + "const": "string" + }, + { + "const": "number" + }, + { + "const": "boolean" + } + ], + "title": "اسم قابل للقراءة للخيار", + "description": "اسم قابل للقراءة للخيار." + }, + "name": { + "type": "string", + "title": "خيار وصفي.\n\nعندما لا يكون نوع الخيار \"select\"، فهذا يعني أن الخيار وصفي\nيتطلب من {@link IShoppingCustomer customers} كتابة بعض القيم في\n{@link IShoppingOrder purchase}. أيضًا، مهما كتب العميل عن\nالخيار، فإنه لا يؤثر على {@link IShoppingSaleUnitStock المخزون النهائي}.\n\nبعبارة أخرى، الخيار الوصفي مخصص فقط لنقل المعلومات.", + "description": "مفتاح أساسي" + } + }, + "required": [ + "id", + "type", + "name" + ], + "description": "مفتاح أساسي." + }, + "IShoppingSaleUnitOptionCandidate": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "يمثل اسم القيمة المرشحة", + "description": "يمثل اسم القيمة المرشحة." + }, + "name": { + "type": "string", + "title": "قيم مرشحة قابلة للاختيار ضمن خيار.\n\n`IShoppingSaleUnitOptionCandidate` هو كيان يمثل قيم مرشحة فردية يمكن اختيارها من بين\n{@link خيارات IShoppingSaleUnitSelectableOption من نوع \"select\"}.\n\n- مثال\n- ذاكرة الوصول العشوائي: 8 جيجابايت، 16 جيجابايت، 32 جيجابايت\n- وحدة معالجة الرسومات: RTX 3060، RTX 4080، TESLA\n- الترخيص: خاص، تجاري، تعليمي\n\nبالمناسبة، إذا لم يكن الخيار التابع من نوع \"select\"، فلن يتم استخدام هذا الكيان أبدًا.", + "description": "مبلغ الدفع النقدي" + } + }, + "required": [ + "id", + "name" + ], + "description": "مبلغ الدفع النقدي." + }, + "IShoppingOrderPrice.ISummary": { + "type": "object", + "properties": { + "cash": { + "type": "number", + "minimum": 0, + "title": "مبلغ الدفع المقدم", + "description": "مبلغ الدفع المقدم." + }, + "deposit": { + "type": "number", + "minimum": 0, + "title": "مبلغ الدفع مقابل المسافة المقطوعة", + "description": "مبلغ الدفع مقابل المسافة المقطوعة." + }, + "mileage": { + "type": "number", + "minimum": 0, + "title": "مبلغ الدفع مقابل تذكرة قسيمة الخصم", + "description": "مبلغ الدفع مقابل تذكرة قسيمة الخصم." + }, + "ticket": { + "type": "number", + "minimum": 0, + "title": "السعر الاسمي", + "description": "السعر الاسمي.\n\nهذا ليس {@link real real price} الذي يجب دفعه، بل هو مجرد سعر اسمي يجب عرضه.\nإذا كانت هذه القيمة أكبر من {@link real real price}، فسيتم عرضها\nكما لو أن {@link IShoppingSeller seller} يقدم خصمًا." + }, + "nominal": { + "type": "number", + "minimum": 0, + "title": "السعر الحقيقي الذي يجب دفعه", + "description": "السعر الحقيقي الذي يجب دفعه." + }, + "real": { + "type": "number", + "minimum": 0, + "title": "معلومات موجزة عن سعر الطلب.", + "description": "قائمة مدفوعات تذاكر كوبونات الخصم" + } + }, + "required": [ + "cash", + "deposit", + "mileage", + "ticket", + "nominal", + "real" + ], + "description": "قائمة مدفوعات تذاكر كوبونات الخصم." + }, + "IShoppingOrderPrice": { + "type": "object", + "properties": { + "ticket_payments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicketPayment" + }, + "title": "مبلغ الدفع النقدي", + "description": "مبلغ الدفع النقدي." + }, + "cash": { + "type": "number", + "minimum": 0, + "title": "مبلغ الدفع المقدم", + "description": "مبلغ الدفع المقدم." + }, + "deposit": { + "type": "number", + "minimum": 0, + "title": "مبلغ دفع الأميال", + "description": "مبلغ دفع الأميال." + }, + "mileage": { + "type": "number", + "minimum": 0, + "title": "مبلغ دفع تذكرة كوبون الخصم", + "description": "مبلغ دفع تذكرة كوبون الخصم." + }, + "ticket": { + "type": "number", + "minimum": 0, + "title": "السعر الاسمي", + "description": "السعر الاسمي.\n\nهذا ليس {@link السعر الحقيقي الحقيقي} الذي يجب دفعه، بل مجرد سعر اسمي يجب عرضه.\nإذا كانت هذه القيمة أكبر من {@link السعر الحقيقي الحقيقي}، فسيتم عرضها\nكما لو أن {@link IShoppingSeller seller} يقدم خصمًا." + }, + "nominal": { + "type": "number", + "minimum": 0, + "title": "السعر الحقيقي الذي يجب دفعه", + "description": "السعر الحقيقي الذي يجب دفعه." + }, + "real": { + "type": "number", + "minimum": 0, + "title": "معلومات سعر الطلب بما في ذلك الخصومات.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "ticket_payments", + "cash", + "deposit", + "mileage", + "ticket", + "nominal", + "real" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingCouponTicketPayment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "التذكرة المستهدفة", + "description": "التذكرة المستهدفة." + }, + "ticket": { + "$ref": "#/components/schemas/IShoppingCouponTicket", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "تفاصيل دفع تذكرة قسيمة الخصم.\n\n`IShoppingCouponTicketPayment` هو كيان يجسد\nمعلومات الدفع الخاصة بـ {@link IShoppingOrder order} من\n{@link IShoppingCouponTicket}، ويُستخدم عندما يستخدم المستهلك\nتذكرة قسيمة الخصم التي تم إصدارها له لطلبها ويتم خصم مبلغ الدفع\nمنها.\n\nوبما أن {@link IShoppingOrder} في حد ذاته ليس كيانًا يستخدم في\nالمواقف التي يتم فيها إكمال الطلب، بل هو كيان مصمم\nلإبداء طلب الطلب، فإن إنشاء سجل\n`IShoppingCouponTicketPayment` هذا لا يعني في الواقع أن\nالتذكرة المرفقة تختفي. حتى يكمل {@link IShoppingCustomer customer}\n{@link IShoppingOrderPublish.paid_at الدفع} ويؤكد\nالطلب، يمكن فهم التذكرة على أنها نوع من الإيداع.\n\nبالإضافة إلى ذلك، يمكن للعميل حذف هذا السجل عن طريق إلغاء دفع التذكرة، ولكن يمكن أيضًا حذفه عند إلغاء أمر الإسناد نفسه.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "id", + "ticket", + "created_at" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingCouponTicket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "العميل الذي حصل على تذكرة الكوبون", + "description": "العميل الذي حصل على تذكرة الكوبون." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "الكوبون المستهدف", + "description": "الكوبون المستهدف." + }, + "coupon": { + "$ref": "#/components/schemas/IShoppingCoupon", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "وقت انتهاء صلاحية التذكرة", + "description": "وقت انتهاء صلاحية التذكرة." + }, + "expired_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "تفاصيل إصدار تذكرة قسيمة الخصم.\n\n`IShoppingCouponTicket` هو كيان يرمز إلى\n{@link IShoppingCoupon discount coupon} التذاكر الصادرة عن\n{@link IShoppingCustomer customers}.\n\nوإذا كانت مواصفات قسيمة الخصم المستهدفة نفسها لها تاريخ انتهاء صلاحية، فسيتم تسجيل تاريخ انتهاء الصلاحية في expired_at ويتم التخلص منه تلقائيًا بعد تاريخ انتهاء الصلاحية هذا. بالطبع، لا يهم إذا كنت\nتستخدم قسيمة الخصم لطلبك في غضون الموعد النهائي.", + "description": "قائمة عمليات التسليم" + } + }, + "required": [ + "id", + "customer", + "coupon", + "created_at", + "expired_at" + ], + "description": "قائمة التسليمات.\n\nيمكن تسليم {@link IShoppingOrder order} في أوقات متعددة.\nبالطبع، الحالة المعاكسة ممكنة أيضًا، حيث يمكن أن يتكون\n{@link IShoppingDelivery delivery} من طلبات متعددة." + }, + "IShoppingOrderPublish": { + "type": "object", + "properties": { + "deliveries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDelivery" + }, + "title": "حالة الطلب، حول عمليات التسليم", + "description": "حالة الطلب، حول عمليات التسليم." + }, + "state": { + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "الوقت الذي تم فيه دفع الطلب", + "description": "الوقت الذي تم فيه دفع الطلب." + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "الوقت الذي تم فيه إلغاء الدفع", + "description": "الوقت الذي تم فيه إلغاء الدفع." + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "العنوان الذي سيتم تسليم {@link IShoppingOrderGood goods} إليه", + "description": "العنوان الذي سيتم تسليم {@link IShoppingOrderGood goods} إليه." + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress", + "title": "إتمام الطلب ومعلومات الدفع.\n\n`IShoppingOrderPublish` هو كيان يجسد سلسلة العمليات\nالتي يدفع فيها العميل {@link IShoppingCustomer} ثمن\n{@link IShoppingOrder}، وبالتالي إكمال الطلب. وفقط بعد\nإتمام الطلب {@link paid_at}، يمكن للبائع {@link IShoppingSeller}\nالتعرف على أن العميل قد اشترى منتجه.\n\nبالمناسبة، يرجى ملاحظة أنه لمجرد وجود سجل `IShoppingOrderPublish`\n، فهذا لا يعني أن الدفع قد اكتمل. بالطبع، مع\n\"بطاقات الائتمان\" و\"Google Pay\"، يحدث طلب الدفع والدفع في\nنفس الوقت. ومع ذلك، هناك بعض الحالات حيث يتم الدفع بعد\nطلب الدفع، مثل \"التحويل المصرفي\" أو \"الدفع من خلال الحساب الافتراضي\".\n\nلذلك، لمعرفة إتمام الدفع، تأكد من التحقق من خاصية\n{@link paid_at}.\n\nبالإضافة إلى ذلك، حتى بعد إجراء الدفع، قد تكون هناك حالات يتم فيها إلغاؤه فجأة، لذا يرجى الانتباه إلى هذا أيضًا.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "deliveries", + "state", + "id", + "created_at", + "paid_at", + "cancelled_at", + "address" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "البائع الذي سلّم البضاعة", + "description": "البائع الذي سلّم البضاعة." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "قائمة رحلات التسليم", + "description": "قائمة رحلات التسليم." + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + }, + "title": "قائمة قطع التسليم", + "description": "قائمة قطع التسليم." + }, + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece" + }, + "minItems": 1, + "title": "قائمة شاحني التسليم", + "description": "قائمة شاحني التسليم." + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + }, + "title": "حالة التسليم", + "description": "حالة التسليم." + }, + "state": { + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "معلومات التسليم.\n\nعند تسليم {@link IShoppingOrderGood goods} إلى\n{@link IShoppingCustomer customer}، يمكن لـ {@link IShoppingSeller seller} تسليم\nعدد {@link IShoppingSaleUnitStock stocks} من البضائع في وقت واحد. كما أنه من الممكن\nتسليم مخزون أو سلعة في أوقات متعددة بسبب القيود المادية\nمثل مشكلة الحجم أو الوزن.\n\nكما ترى من الأعلى، فإن العلاقة بين التسليم مع\n{@link IShoppingOrder order} (أو {@link IShoppingOrderGood good good}) ليست 1:1 أو\nN:1، بل M:N. تم تصميم الكيان `IShoppingDelivery` لتمثيل هذه\nالعلاقة، من خلال الإشارة إلى المخزونات أو البضائع المستهدفة من خلال الكيان الفرعي\n{@link IShoppingDeliveryPiece}.\n\nكما أن التسليم لا ينتهي بخطوة واحدة فقط. بل يتضمن عمليات متعددة مثل\nالتصنيع والتخطيط والشحن والتسليم. يتم تمثيل هذه الخطوات بواسطة\nكيان فرعي آخر {@link IShoppingDeliveryJourney}.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingDeliveryJourney": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "وقت حذف السجل", + "description": "وقت حذف السجل." + }, + "deleted_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "نوع الرحلة", + "description": "نوع الرحلة.\n\n- التحضير\n- التصنيع\n- الشحن\n- التسليم" + }, + "type": { + "oneOf": [ + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + } + ], + "title": "عنوان الرحلة", + "description": "عنوان الرحلة." + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "وصف الرحلة", + "description": "وصف الرحلة." + }, + "description": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "وقت بدء الرحلة", + "description": "وقت بدء الرحلة." + }, + "started_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "وقت إتمام الرحلة", + "description": "وقت إتمام الرحلة." + }, + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "رحلة التسليم.\n\n`IShoppingDeliveryJourney` هي كيان فرعي لـ {@link IShoppingDelivery}،\nتصف كل رحلة من رحلات التسليم. للإشارة، تعني كلمة الرحلة\nكل خطوة من خطوات عملية التسليم، مثل تحضير وشحن وتسليم {@link IShoppingOrderGood goods} إلى\n{@link IShoppingCustomer customer}.", + "description": "مفتاح أساسي" + } + }, + "required": [ + "id", + "created_at", + "deleted_at", + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "مفتاح أساسي." + }, + "IShoppingDeliveryPiece": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "الطلبات المستهدفة {@link IShoppingOrderPublish.id}", + "description": "الطلبات المستهدفة {@link IShoppingOrderPublish.id}." + }, + "publish_id": { + "type": "string", + "format": "uuid", + "title": "السلع المستهدفة {@link IShoppingOrderGood.id}", + "description": "السلع المستهدفة {@link IShoppingOrderGood.id}." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "المخزون المستهدف {@link IShoppingSaleUnitStock.id}.", + "description": "المخزون المستهدف {@link IShoppingSaleUnitStock.id}." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "كمية المخزون", + "description": "كمية المخزون.\n\nيمكن أن تكون قيمة دقيقة للتعبير عن الشحن المقسم." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "ما هي المخزونات التي يتم تسليمها.\n\n`IShoppingDeliveryPiece` هي كيان تابع لـ {@link IShoppingDelivery}،\nتصف كمية المخزون التي يتم تسليمها لكل\n{@link IShoppingSaleUnitStock stock} في {@link IShoppingOrder}.\n\nللمرجع، نظرًا لأنه يمكن تسليم الطلب في أوقات متعددة بسبب مشكلة الحجم\nأو الوزن، فمن الممكن أن يكون لديك سجلات `IShoppingDeliveryPiece`\nمتعددة لمخزون واحد.", + "description": "مفتاح أساسي" + } + }, + "required": [ + "id", + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "مفتاح أساسي." + }, + "IShoppingDeliveryShipper": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "company": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "id", + "created_at", + "company", + "name", + "mobile" + ] + }, + "IShoppingAddress": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "رقم الجوال للتواصل", + "description": "رقم الجوال للتواصل." + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "اسم ممثل العنوان", + "description": "اسم ممثل العنوان.\n\nيكون أحيانًا اسم المستلم، وأحيانًا يكون اسم المكان." + }, + "name": { + "type": "string", + "title": "اسم الدولة", + "description": "اسم الدولة." + }, + "country": { + "type": "string", + "title": "اسم المقاطعة", + "description": "اسم المقاطعة." + }, + "province": { + "type": "string", + "title": "اسم المدينة", + "description": "اسم المدينة." + }, + "city": { + "type": "string", + "title": "اسم القسم", + "description": "اسم القسم." + }, + "department": { + "type": "string", + "title": "عنوان مفصل يحتوي على اسم الشارع ورقم المبنى ورقم الغرفة", + "description": "عنوان مفصل يحتوي على اسم الشارع ورقم المبنى ورقم الغرفة." + }, + "possession": { + "type": "string", + "title": "الرمز البريدي أو الرمز البريدي", + "description": "الرمز البريدي أو الرمز البريدي." + }, + "zip_code": { + "type": "string", + "title": "وصف خاص إذا لزم الأمر", + "description": "وصف خاص إذا لزم الأمر." + }, + "special_note": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "معلومات العنوان.", + "description": "رقم الصفحة" + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ], + "description": "رقم الصفحة." + }, + "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": "تحديد عدد السجلات لكل صفحة", + "description": "تحديد عدد السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "طلب أوامر مع شروط الترقيم والبحث/الفرز.", + "description": "معلومات الصفحة" + } + }, + "description": "معلومات الصفحة." + }, + "IShoppingOrder.IRequest.ISearch": { + "type": "object", + "properties": { + "min_price": { + "type": "number" + }, + "max_price": { + "type": "number" + }, + "paid": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + } + }, + "IShoppingSale.IRequest.ISearch": { + "type": "object", + "properties": { + "show_paused": { + "type": "boolean" + }, + "show_suspended": { + "oneOf": [ + { + "const": "only" + }, + { + "type": "boolean" + } + ] + }, + "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" + }, + "count": { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.ICountRange" + } + } + }, + "IShoppingSaleReview.IInvertSearch.IScoreRange": { + "type": "object", + "properties": { + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "IShoppingSaleReview.IInvertSearch.ICountRange": { + "type": "object", + "properties": { + "minimum": { + "type": "integer" + }, + "maximum": { + "type": "integer" + } + } + }, + "IShoppingSeller.IRequest.ISearch": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "nickname": { + "type": "string" + } + } + }, + "IPageIShoppingSale.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSale.ISummary" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "شروط البحث" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "شروط البحث." + }, + "IShoppingSale.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch", + "title": "شروط الفرز", + "description": "شروط الفرز." + }, + "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" + } + ] + }, + "title": "رقم الصفحة", + "description": "رقم الصفحة." + }, + "page": { + "type": "integer", + "title": "تحديد عدد السجلات لكل صفحة", + "description": "تحديد عدد السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "طلب ملخص المبيعات مع خيارات الترقيم والبحث/الفرز.", + "description": "القسم المملوك" + } + }, + "description": "القسم المملوك." + }, + "IShoppingSale": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "البائع الذي سجل البيع", + "description": "البائع الذي سجل البيع." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "المفتاح الأساسي للبيع", + "description": "المفتاح الأساسي للبيع." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "المفتاح الأساسي للصورة", + "description": "المفتاح الأساسي للصورة." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "ما إذا كانت الصورة هي الأحدث أم لا", + "description": "ما إذا كانت الصورة هي الأحدث أم لا." + }, + "latest": { + "type": "boolean", + "title": "الوصف ومحتوى الصورة الذي يصف البيع", + "description": "الوصف ومحتوى الصورة التي تصف البيع" + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent", + "title": "قائمة القنوات والفئات", + "description": "قائمة القنوات والفئات.\n\nالقنوات والفئات التي تم تسجيل البيع فيها" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "قائمة علامات البحث", + "description": "قائمة علامات البحث" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "قائمة الوحدات", + "description": "قائمة الوحدات.\n\nسجلات حول معلومات تكوين المنتج الفردي التي يتم بيعها\nفي البيع. يحتوي كل سجل {@link IShoppingSaleUnit unit} على\n{@link IShoppingSaleUnitOption options}،\n{@link IShoppingSaleUnitOptionCandidate candidates} قيم قابلة للتكوين لكل\nخيار، و{@link IShoppingSaleUnitStock final stocks} يتم تحديدها\nمن خلال\nتحديد كل قيم المرشحين لكل خيار." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit" + }, + "minItems": 1, + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل.\n\nلاحظ أن هذه الخاصية مختلفة عن {@link opens_at}،\nمما يعني أن نقطة زمنية البيع مفتوحة." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "وقت آخر تحديث للسجل", + "description": "وقت آخر تحديث للسجل.\n\nبمعنى آخر، وقت إنشاء آخر لقطة." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "وقت الإيقاف المؤقت للبيع", + "description": "تم إيقاف البيع مؤقتًا.\n\nتم إيقاف البيع مؤقتًا من قبل البائع لسبب ما.\n\nلا يزال بإمكان {@link IShoppingCustomer Customers} رؤية البيع في كل من صفحات القائمة والتفاصيل، ولكن البيع يحمل علامة تحذير\n\"تم إيقاف البيع مؤقتًا من قبل البائع\"." + }, + "paused_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "تم إيقاف البيع مؤقتًا", + "description": "وقت تعليق البيع.\n\nتم تعليق البيع من قبل البائع لسبب ما.\n\nلا يستطيع {@link IShoppingCustomer Customers} رؤية البيع في\nكل من صفحات القائمة والتفاصيل. الأمر مشابه تقريبًا للحذف الناعم،\nولكن هناك اختلاف بسيط وهو أن المالك\n{@link IShoppingSeller seller} لا يزال بإمكانه رؤية البيع واستئنافه.\n\nبالطبع، لا يزال بإمكان {@link IShoppingCustomer customers} الذين\nاشتروا البيع بالفعل رؤية البيع في صفحة\n{@link IShoppingOrder order}." + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "وقت افتتاح البيع", + "description": "وقت افتتاح البيع." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "وقت إغلاق البيع", + "description": "وقت إغلاق البيع.\n\nإذا كانت هذه القيمة `null`، فسوف يستمر البيع إلى الأبد." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "يقوم البائع ببيع المنتجات.\n\n`IShoppingSale` هو كيان يجسد معلومات \"مبيعات المنتج\" (المبيعات)\nالتي سجلها {@link IShoppingSeller seller}. ويتم تسجيل\nالمعلومات الرئيسية للبيع في {@link IShoppingSaleSnapshot} الفرعية،\nوليس في `IShoppingSale` الرئيسية. عندما يغير البائع عنصرًا مسجلاً مسبقًا، لا يتم تغيير سجل `IShoppingSale` الحالي، ولكن يتم إنشاء سجل \n{@link IShoppingSaleSnapshot snapshot} جديد.\n\nهذا للحفاظ على سجل شراء {@link IShoppingCustomer customer}\n{@link IShoppingOrder} بشكل لا تشوبه شائبة بعد أن يشتري العميل عنصرًا معينًا، حتى إذا قام البائع بتغيير مكونات أو\nسعر العنصر. كما يهدف أيضًا إلى دعم البائعين في ما يسمى باختبار A/B، والذي يتضمن تغيير المكونات أو الأسعار وقياس\nالأداء في كل حالة.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "section", + "seller", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingSaleContent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "عنوان المحتوى", + "description": "عنوان المحتوى." + }, + "title": { + "type": "string", + "title": "تنسيق محتوى النص", + "description": "تنسيق محتوى النص.\n\nنفس المعنى مع امتداد الملف مثل `html` و`md` و`txt`." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "محتوى النص الرئيسي", + "description": "محتوى النص الرئيسي." + }, + "body": { + "type": "string", + "title": "قائمة الملفات المرفقة", + "description": "قائمة الملفات المرفقة." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + }, + "title": "قائمة الصور المصغرة", + "description": "قائمة الصور المصغرة." + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + }, + "title": "معلومات محتوى لقطة البيع.\n\n`IShoppingSaleContent` هو كيان يجسد محتويات الوصف\nلـ {@link IShoppingSale}.", + "description": "قائمة الخيارات" + } + }, + "required": [ + "id", + "title", + "format", + "body", + "files", + "thumbnails" + ], + "description": "قائمة الخيارات." + }, + "IShoppingSaleUnit": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ] + }, + "title": "قائمة المخزونات النهائية", + "description": "قائمة المخزونات النهائية." + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock" + }, + "minItems": 1, + "title": "مفتاح أساسي", + "description": "مفتاح أساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "اسم ممثل للوحدة", + "description": "اسم ممثل للوحدة." + }, + "name": { + "type": "string", + "title": "سواء كانت الوحدة أساسية أم لا", + "description": "سواء كانت الوحدة أساسية أم لا.\n\nمجرد قيمة تسمية." + }, + "primary": { + "type": "boolean", + "title": "سواء كانت الوحدة مطلوبة أم لا", + "description": "سواء كانت الوحدة مطلوبة أم لا.\n\nعندما تكون الوحدة مطلوبة، يجب على العميل تحديد الوحدة. إذا لم يتم التحديد، فلن يتمكن العميل من شرائها.\n\nعلى سبيل المثال، إذا كان هناك عرض \"مجموعة ماك بوك\" وإحدى الوحدات هي\n\"الهيكل الرئيسي\"، فهل من الممكن شراء \"مجموعة ماك بوك\" بدون\n\"الهيكل الرئيسي\"؟ هذه الخاصية مخصصة لهذه الحالة." + }, + "required": { + "type": "boolean", + "title": "معلومات تكوين المنتج التي يتم التعامل معها في البيع.\n\n`IShoppingSaleUnit` هو كيان يجسد معلومات \"المنتج الفردي\"\nالتي يتم التعامل معها في بيع {@link IShoppingSale}.\n\nللمرجع، السبب وراء فصل `IShoppingSaleUnit` عن\n{@link IShoppingSaleSnapshot} بعلاقة جبرية 1: N هو أنه\nهناك بعض الحالات التي يتم فيها بيع منتجات متعددة في قائمة واحدة. هذه هي\nالحالة مع ما يسمى \"المنتجات المجمعة\".\n\n- حزمة من منتج عادي (مجموعة Mackbook)\n- الهيكل الرئيسي\n- لوحة المفاتيح\n- الماوس\n- Apple Care (قسيمة A/S مجانية)\n\nومرة أخرى، لا يشير `IShoppingSaleUnit` في حد ذاته إلى\n{@link IShoppingSaleUnitStock final stock} الذي سيقوم\n{@link IShoppingCustomer customer} {@link IShoppingOrder buy}.\nلا يمكن العثور على المخزون النهائي إلا بعد تحديد جميع خيارات\n{@link IShoppingSaleUnitOption} المحددة وقيمها المرشحة\n{@link IShoppingSaleUnitOptionCandidate}.\n\nعلى سبيل المثال، حتى إذا قمت بشراء جهاز Macbook، فإن المخزون النهائي لا يتم تحديده إلا\nبعد تحديد جميع الخيارات (وحدة المعالجة المركزية / ذاكرة الوصول العشوائي / SSD)، وما إلى ذلك.", + "description": "قائمة القيم المرشحة" + } + }, + "required": [ + "options", + "stocks", + "id", + "name", + "primary", + "required" + ], + "description": "قائمة القيم المرشحة." + }, + "IShoppingSaleUnitSelectableOption": { + "type": "object", + "properties": { + "candidates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate" + }, + "minItems": 1, + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "المميز لنوع الخيار القابل للتحديد", + "description": "المميز لنوع الخيار القابل للتحديد." + }, + "type": { + "const": "select", + "title": "يمثل اسم الخيار", + "description": "يمثل اسم الخيار." + }, + "name": { + "type": "string", + "title": "ما إذا كان الخيار متغيرًا أم لا", + "description": "ما إذا كان الخيار متغيرًا أم لا.\n\nعندما يكون نوع الخيار الحالي هو \"select\"، فإن هذه الخاصية تعني ما إذا كان\nتحديد قيمة مرشحة مختلفة يؤثر على المخزون النهائي أم لا." + }, + "variable": { + "type": "boolean", + "title": "معلومات الخيار الفردية للوحدات المعروضة للبيع.\n\n`IShoppingSaleUnitSelectableOption` هو كيان فرعي لـ\n{@link IShoppingSaleUnit} يمثل المنتجات الفردية في\n{@link IShoppingSale sale}، وهو كيان مصمم لتمثيل معلومات الخيار\nالفردية القابلة للاختيار للوحدة.\n\n- أمثلة على الخيارات\n- خيارات قابلة للاختيار\n- الكمبيوتر: وحدة المعالجة المركزية، ذاكرة الوصول العشوائي، SSD، إلخ.\n- الملابس: الحجم، اللون، الطراز، إلخ.\n- خيارات وصفية\n- النقش\n- سؤال بسيط\n\nإذا كانت قيمة خاصية المتغير {@link} صحيحة، فإن المخزون النهائي الذي سيشتريه العميل\n{@link IShoppingCustomer} يتغير وفقًا\nلاختيار {@link IShoppingSaleUnitOptionCandidate قيمة المرشح}.\n\nوعلى العكس من ذلك، إذا كان من نوع آخر غير \"select\"، أو إذا كانت قيمة الخاصية {@link variable}\n\"false\"، فهذا خيار لا معنى له بخلاف\nنقل المعلومات البسيط. لذلك، بغض النظر عن القيمة التي يختارها العميل\nعند شرائها، فإن الخيار في هذه الحالة لا يؤثر على\n{@link IShoppingSaleUnitStock المخزون النهائي}.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "candidates", + "id", + "type", + "name", + "variable" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingSaleUnitStock": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "الاسم التمثيلي للسهم", + "description": "الاسم التمثيلي للسهم." + }, + "name": { + "type": "string", + "title": "سعر السهم", + "description": "سعر السهم." + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "حالة المخزون الحالية للسهم", + "description": "حالة المخزون الحالية للسهم." + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockInventory", + "title": "قائمة الخيارات", + "description": "قائمة الخيارات.\n\nما هي قيم المرشحين التي يتم اختيارها لكل خيار." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice" + }, + "title": "معلومات المكونات النهائية للوحدات المعروضة للبيع.\n\n`IShoppingSaleUnitStock` هو كيان فرعي لـ {@link IShoppingSaleUnit}\nيمثل كتالوج منتجات للبيع، وهو نوع من المخزون النهائي الذي\nيتم إنشاؤه من خلال تحديد جميع {@link IShoppingSaleUnitSelectableOption options}\n(نوع المتغير \"select\") وقيمها\n{@link IShoppingSaleUnitOptionCandidate candidates} في الوحدة التابعة.\nإنه \"السلعة\" نفسها التي يشتريها العملاء بالفعل.\n\n- اسم المنتج) MacBook\n- الخيارات\n- وحدة المعالجة المركزية: { i3, i5, i7, i9 }\n- ذاكرة الوصول العشوائي: { 8 جيجابايت، 16 جيجابايت، 32 جيجابايت، 64 جيجابايت، 96 جيجابايت }\n- SSD: { 256 جيجابايت، 512 جيجابايت، 1 تيرابايت }\n- عدد المخزونات النهائية: 4 * 5 * 3 = 60\n\nللمرجع، يمكن الحصول على العدد الإجمالي لسجلات `IShoppingSaleUnitStock` في\nوحدة الإسناد باستخدام حاصل الضرب الديكارتي. بعبارة أخرى، فإن القيمة التي يتم الحصول عليها عن طريق ضرب جميع القيم المرشحة التي يمكن أن يحتوي عليها كل خيار\n(نوع \"select\") في عدد الحالات هي العدد الإجمالي للمخزونات النهائية في الوحدة.\n\nبالطبع، بدون خيار نوع \"select\" متغير واحد، يكون عدد المخزونات النهائية في الوحدة 1 فقط.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "id", + "name", + "price", + "inventory", + "choices" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingSaleUnitStockChoice": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "خيارات الهدف {@link IShoppingSaleUnitOption.id}", + "description": "المرشح المستهدف {@link IShoppingSaleUnitOptionCandidate.id}" + }, + "option_id": { + "type": "string", + "format": "uuid", + "description": "معلومات اختيار المخزون النهائي.\n\n`IShoppingSaleUnitStockChoice` هو كيان يمثل أي\n{@link IShoppingSaleUnitSelectableOption option} من كل متغير \"select\"\ntype تم اختياره لكل {@link IShoppingSaleUnitStock stock} وأي\n{@link IShoppingSaleUnitOptionCandidate candidates value} تم اختياره\nداخله.\n\nبالطبع، إذا لم يكن لدى {@link IShoppingSaleUnit unit} المرتبطة أي\nخيارات، فيمكن أيضًا تجاهل هذا الكيان." + }, + "candidate_id": { + "type": "string", + "format": "uuid", + "description": "معلومات الصفحة" + } + }, + "required": [ + "id", + "option_id", + "candidate_id" + ], + "description": "معلومات الصفحة." + }, + "IPageIShoppingSaleInquiryComment": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "كاتب التعليق" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "كاتب التعليق.\n\nيمكن لكل من العميل والبائع كتابة تعليق على استعلام البيع.\n\nبالمناسبة، لا يوجد قيد على العميل، ولكن يجب أن يكون البائع هو\nالشخص الذي سجل البيع." + }, + "IShoppingSaleInquiryComment": { + "type": "object", + "properties": { + "writer": { + "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": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "معرف التعليق الرئيسي", + "description": "معرف التعليق الرئيسي." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "قائمة محتويات الصورة", + "description": "قائمة محتويات اللقطة.\n\nيتم إنشاؤها لأول مرة عند إنشاء تعليق، ويتم\nتجميعها في كل مرة يتم فيها تعديل التعليق." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticleComment.ISnapshot" + }, + "minItems": 1, + "title": "وقت إنشاء التعليق", + "description": "وقت إنشاء التعليق." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "تعليق مكتوب على مقالة استعلام.\n\n`IShoppingSaleInquiryComment` هو كيان فرعي من {@link IBbsArticleComment}،\nويُستخدم عندما تريد التواصل مع عدة أشخاص حول\n{@link IShoppingSaleInquiry queries} التي كتبها\n{@link IShoppingCustomer customer}.\n\nللإشارة، يمكن للأطراف ذات الصلة فقط كتابة تعليقات لـ\n{@link IShoppingSellersellers}، ولكن لا يوجد حد لـ\n{@link IShoppingCustomer customers}. بعبارة أخرى، يمكن لأي عميل\nكتابة تعليق بحرية، حتى لو لم يكن الشخص الذي كتب الاستعلام.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "المفتاح الأساسي." + }, + "IBbsArticleComment.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء سجل لقطة", + "description": "وقت إنشاء سجل لقطة.\n\nبمعنى آخر، وقت الإنشاء أو وقت التحديث أو التعليق." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "تنسيق النص", + "description": "تنسيق النص.\n\nنفس المعنى مع الامتداد مثل `html` و`md` و`txt`." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "نص محتوى التعليق", + "description": "نص محتوى التعليق." + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "لقطة من التعليق.\n\n`IBbsArticleComment.ISnapshot` عبارة عن كيان لقطة يحتوي على\nمحتويات التعليق.\n\nكما هو مذكور في {@link IBbsArticleComment}، تم تصميمه للاحتفاظ بالأدلة\nومنع الاحتيال.", + "description": "اسم الملف، باستثناء الامتداد" + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "اسم الملف، باستثناء الامتداد.\n\nإذا كان هناك ملف `.gitignore`، فإن اسمه عبارة عن سلسلة فارغة." + }, + "IAttachmentFile.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "امتداد", + "description": "امتداد.\n\nمن الممكن حذفه مثل حالة `README`." + }, + "extension": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "title": "مسار عنوان URL للملف الحقيقي", + "description": "مسار عنوان URL للملف الحقيقي." + }, + "url": { + "type": "string", + "format": "uri", + "title": "رقم الصفحة", + "description": "رقم الصفحة." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "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": "حد السجلات لكل صفحة", + "description": "الحد من السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "طلب التعليقات مع خيارات الترقيم والبحث/الفرز.", + "description": "تنسيق النص" + } + }, + "description": "تنسيق النص.\n\nنفس المعنى مع الامتداد مثل `html` و`md` و`txt`." + }, + "IShoppingSaleInquiryComment.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "IShoppingSaleInquiryComment.ICreate": { + "type": "object", + "properties": { + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "محتوى نص التعليق", + "description": "محتوى نص التعليق." + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "معلومات إنشاء التعليق.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingSaleInquiryComment.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء سجل اللقطة", + "description": "وقت إنشاء سجل اللقطة.\n\nبمعنى آخر، وقت الإنشاء أو وقت التحديث أو التعليق." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "تنسيق النص", + "description": "تنسيق النص.\n\nنفس المعنى مع الامتداد مثل `html` و`md` و`txt`." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "نص محتوى التعليق", + "description": "نص محتوى التعليق." + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "لقطة من محتوى التعليق.", + "description": "معلومات الصفحة" + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "معلومات الصفحة." + }, + "IPageIShoppingSaleQuestion.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.ISummary" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "ما إذا كانت المقالة التي تم السؤال عنها سرية أم لا" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "سواء كانت المقالة السؤالية سرية أم لا.\n\nإذا كانت المقالة سرية، يمكن فقط للعميل الكاتب والبائع المرتبط رؤية\nالمحتوى التفصيلي." + }, + "IShoppingSaleQuestion.ISummary": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "العميل الذي كتب الاستفسار", + "description": "العميل الذي كتب الاستفسار." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "إجابة رسمية على الاستفسار من قبل البائع", + "description": "إجابة رسمية على الاستفسار من قبل البائع." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary" + } + ], + "title": "ما إذا كان البائع قد اطلع على الاستفسار أم لا", + "description": "ما إذا كان البائع قد اطلع على الاستفسار أم لا." + }, + "read_by_seller": { + "type": "boolean", + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "عنوان آخر لقطة", + "description": "عنوان آخر لقطة." + }, + "title": { + "type": "string", + "title": "وقت إنشاء المقالة", + "description": "وقت إنشاء المقال" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "وقت تعديل المقال", + "description": "وقت تعديل المقال.\n\nبمعنى آخر، الوقت الذي تم فيه إنشاء آخر لقطة." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "معلومات موجزة عن السؤال.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingSaleInquiryAnswer.ISummary": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "عنوان آخر لقطة", + "description": "عنوان آخر لقطة." + }, + "title": { + "type": "string", + "title": "وقت إنشاء المقال", + "description": "وقت إنشاء المقال." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "وقت تعديل المقال", + "description": "وقت تعديل المقال.\n\nبمعنى آخر، الوقت الذي تم فيه إنشاء آخر لقطة." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "شروط البحث", + "description": "شروط البحث." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ] + }, + "IShoppingSaleQuestion.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSaleInquiry.IRequest.ISearch", + "title": "شروط الفرز", + "description": "شروط الفرز." + }, + "sort": { + "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": "رقم الصفحة", + "description": "رقم الصفحة." + }, + "page": { + "type": "integer", + "title": "تحديد عدد السجلات في كل صفحة", + "description": "تحديد عدد السجلات في كل صفحة." + }, + "limit": { + "type": "integer", + "title": "طلب معلومات موجزة مع خيارات البحث/الفرز حسب الترقيم.", + "description": "معلومات الصفحة" + } + }, + "description": "معلومات الصفحة." + }, + "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.IAbridge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IAbridge" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "ما إذا كانت المقالة محل السؤال سرية أم لا" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "سواء كانت المقالة السؤالية سرية أم لا.\n\nإذا كانت المقالة سرية، يمكن فقط للعميل الكاتب والبائع المرتبط رؤية\nالمحتوى التفصيلي." + }, + "IShoppingSaleQuestion.IAbridge": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "العميل الذي كتب الاستفسار", + "description": "العميل الذي كتب الاستفسار." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "إجابة رسمية على الاستفسار من قبل البائع", + "description": "إجابة رسمية على الاستفسار من قبل البائع." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.IAbridge" + } + ], + "title": "ما إذا كان البائع قد اطلع على الاستفسار أم لا", + "description": "ما إذا كان البائع قد اطلع على الاستفسار أم لا." + }, + "read_by_seller": { + "type": "boolean", + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "عنوان آخر لقطة", + "description": "عنوان آخر لقطة." + }, + "title": { + "type": "string", + "title": "وقت إنشاء المقالة", + "description": "وقت إنشاء المقال" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "وقت تعديل المقال", + "description": "وقت تعديل المقال.\n\nبمعنى آخر، الوقت الذي تم فيه إنشاء آخر لقطة." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "تنسيق النص", + "description": "تنسيق النص.\n\nنفس المعنى مع الامتداد مثل `html` و`md` و`txt`." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "نص محتوى المقال", + "description": "نص محتوى المقال." + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "معلومات مختصرة عن السؤال.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingSaleInquiryAnswer.IAbridge": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "عنوان آخر لقطة", + "description": "عنوان آخر لقطة." + }, + "title": { + "type": "string", + "title": "وقت إنشاء المقال", + "description": "وقت إنشاء المقال" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "وقت تعديل المقال", + "description": "وقت تعديل المقال.\n\nبمعنى آخر، الوقت الذي تم فيه إنشاء آخر لقطة." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "تنسيق النص", + "description": "تنسيق النص.\n\nنفس المعنى مع الامتداد مثل `html` و`md` و`txt`." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "نص محتوى المقال", + "description": "نص محتوى المقال." + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "ما إذا كانت المقالة محل السؤال سرية أم لا", + "description": "سواء كانت المقالة السؤالية سرية أم لا.\n\nإذا كانت المقالة سرية، يمكن فقط للعميل الكاتب والبائع المرتبط به رؤية\nالمحتوى التفصيلي." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ] + }, + "IShoppingSaleQuestion": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "نوع الاستعلام المشتق", + "description": "نوع الاستعلام المشتق.\n\n- `question`: {@link IShoppingSaleQuestion}\n- `review`: {@link IShoppingSaleReview}" + }, + "type": { + "const": "question", + "title": "العميل الذي كتب الاستعلام", + "description": "العميل الذي كتب الاستعلام." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "إجابة رسمية على الاستفسار من قبل البائع", + "description": "إجابة رسمية على الاستفسار من قبل البائع." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + ], + "title": "ما إذا كان البائع قد اطلع على الاستفسار أم لا", + "description": "سواء قام البائع بعرض الاستعلام أم لا." + }, + "read_by_seller": { + "type": "boolean", + "title": "مفتاح أساسي", + "description": "مفتاح أساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "قائمة محتويات اللقطة", + "description": "قائمة محتويات اللقطة.\n\nيتم إنشاؤها لأول مرة عند إنشاء مقال، ويتم\nتجميعها في كل مرة يتم فيها تعديل المقال." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + }, + "minItems": 1, + "title": "وقت إنشاء المقال", + "description": "وقت إنشاء المقال." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "سؤال حول لقطة البيع.\n\n`IShoppingSaleQuestion` هو كيان فرعي من {@link IShoppingSaleInquiry}،\nويُستخدم عندما يرغب {@link IShoppingCustomer customer} في الاستفسار عن شيء\nحول {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} في\nالوقت) الذي سجله {@link IShoppingSeller seller}.\n\nومثل معظم مراكز التسوق، يوفر `IShoppingSaleQuestion` أيضًا\nسمة {@link secret}، مما يسمح لك بإنشاء \"رسالة سرية\" لا يمكن عرضها\nإلا بواسطة البائع والعميل الذي كتب السؤال.", + "description": "البائع الذي كتب الإجابة" + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "البائع الذي كتب الإجابة." + }, + "IShoppingSaleInquiryAnswer": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "قائمة محتويات اللقطة", + "description": "قائمة محتويات اللقطة.\n\nيتم إنشاؤها لأول مرة عند إنشاء مقال، ويتم\nتجميعها في كل مرة يتم فيها تعديل المقال." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + }, + "minItems": 1, + "title": "وقت إنشاء المقال", + "description": "وقت إنشاء المقال." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "إجابات على الأسئلة المتعلقة بلقطات المبيعات.\n\n`IShoppingSaleInquiryAnswer` هو كيان يجسد\nالإجابة الرسمية التي كتبها {@link IShoppingSeller seller} على\n{@link IShoppingSaleInquiry queries} التي كتبها\n{@link IShoppingCustomer customer}.\n\nبالطبع، بالإضافة إلى كتابة استجابة رسمية مثل هذه،\nمن الممكن أيضًا للبائع التواصل مع العميل الذي كتب الاستفسار والعملاء المتعددين من خلال\n{@link IShoppingSaleInquiryComment comments} في استفسار الإسناد.\n\nللإشارة، ليس من الممكن كتابة تعليقات على هذه الإجابة.\nشجع الأشخاص على كتابة تعليقات على مقال الاستفسار. وذلك لمنع تناثر التعليقات في كل من مقالات الاستفسار والإجابة.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "المفتاح الأساسي." + }, + "IBbsArticle.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "وقت إنشاء سجل لقطة", + "description": "وقت إنشاء سجل لقطة.\n\nبمعنى آخر، وقت الإنشاء أو وقت تحديث المقالة." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "تنسيق النص", + "description": "تنسيق النص.\n\nنفس المعنى مع الامتداد مثل `html` و`md` و`txt`." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "عنوان المقالة", + "description": "عنوان المقالة." + }, + "title": { + "type": "string", + "title": "نص محتوى المقالة", + "description": "نص محتوى المقالة." + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "لقطة من المقالة.\n\n`IBbsArticle.ISnapshot` عبارة عن كيان لقطة يحتوي على محتويات\nالمقالة، وكما هو مذكور في {@link IBbsArticle}، فإن محتويات المقالة\nمفصولة عن سجل المقالة للاحتفاظ بالأدلة ومنع الاحتيال.", + "description": "معلومات الصفحة" + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "معلومات الصفحة." + }, + "IPageIShoppingSaleReview.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISummary" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "درجة المراجعة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "درجة المراجعة." + }, + "IShoppingSaleReview.ISummary": { + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "العميل الذي كتب الاستفسار", + "description": "العميل الذي كتب الاستفسار." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "إجابة رسمية على استفسار البائع", + "description": "إجابة رسمية على استفسار البائع." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary" + } + ], + "title": "ما إذا كان البائع قد اطلع على الاستفسار أم لا", + "description": "ما إذا كان البائع قد اطلع على الاستفسار أم لا." + }, + "read_by_seller": { + "type": "boolean", + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "عنوان آخر لقطة", + "description": "عنوان آخر لقطة." + }, + "title": { + "type": "string", + "title": "وقت إنشاء المقال", + "description": "وقت إنشاء المقال." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "وقت تعديل المقال", + "description": "وقت تعديل المقال.\n\nبمعنى آخر، الوقت الذي تم فيه إنشاء آخر لقطة." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "معلومات موجزة عن المراجعة.", + "description": "شروط البحث" + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "شروط البحث." + }, + "IShoppingSaleReview.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest.ISearch", + "title": "شروط الفرز", + "description": "شروط الفرز." + }, + "sort": { + "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": "رقم الصفحة", + "description": "رقم الصفحة." + }, + "page": { + "type": "integer", + "title": "تحديد عدد السجلات في كل صفحة", + "description": "تحديد عدد السجلات في كل صفحة." + }, + "limit": { + "type": "integer", + "title": "طلب معلومات موجزة مع خيارات البحث/الفرز حسب الترقيم.", + "description": "معلومات الصفحة" + } + }, + "description": "معلومات الصفحة." + }, + "IShoppingSaleReview.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" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "IPageIShoppingSaleReview.IAbridge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.IAbridge" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "درجة المراجعة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "درجة المراجعة." + }, + "IShoppingSaleReview.IAbridge": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "العميل الذي كتب الاستفسار", + "description": "العميل الذي كتب الاستفسار." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "إجابة رسمية على استفسار البائع", + "description": "إجابة رسمية على استفسار البائع." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.IAbridge" + } + ], + "title": "ما إذا كان البائع قد اطلع على الاستفسار أم لا", + "description": "ما إذا كان البائع قد اطلع على الاستفسار أم لا." + }, + "read_by_seller": { + "type": "boolean", + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "عنوان آخر لقطة", + "description": "عنوان آخر لقطة." + }, + "title": { + "type": "string", + "title": "وقت إنشاء المقال", + "description": "وقت إنشاء المقال." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "وقت تعديل المقال", + "description": "وقت تعديل المقال.\n\nبمعنى آخر، الوقت الذي تم فيه إنشاء آخر لقطة." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "تنسيق النص", + "description": "تنسيق النص.\n\nنفس المعنى مع الامتداد مثل `html` و`md` و`txt`." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "نص محتوى المقالة", + "description": "نص محتوى المقالة." + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "معلومات مختصرة عن المراجعة.", + "description": "نوع الاستفسار المشتق" + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "نوع الاستفسار المشتق.\n\n- `question`: {@link IShoppingSaleQuestion}\n- `review`: {@link IShoppingSaleReview}" + }, + "IShoppingSaleReview": { + "type": "object", + "properties": { + "type": { + "const": "review", + "title": "العميل الذي كتب الاستفسار", + "description": "العميل الذي كتب الاستفسار." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "إجابة رسمية عن الاستفسار من قبل البائع", + "description": "إجابة رسمية عن الاستفسار من قبل البائع." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + ], + "title": "سواء كان البائع قد اطلع على الاستفسار أم لا", + "description": "سواء كان البائع قد اطلع على الاستفسار أم لا." + }, + "read_by_seller": { + "type": "boolean", + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "قائمة محتويات اللقطة", + "description": "قائمة محتويات اللقطة.\n\nيتم إنشاؤها لأول مرة عند إنشاء مقال، ويتم\nتجميعها في كل مرة يتم فيها تعديل المقال." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISnapshot" + }, + "minItems": 1, + "title": "وقت إنشاء المقال", + "description": "وقت إنشاء المقال." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "مراجعات لقطات البيع.\n\n`IShoppingSaleReview` هو كيان فرعي من {@link IShoppingSaleInquiry}،\nويُستخدم عندما يشتري {@link IShoppingCustomer customer}\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} في ذلك الوقت)\nالمسجل بواسطة {@link IShoppingSeller seller} كمنتج ويترك\nمراجعة وتقييمًا له.\n\nللمرجع، `IShoppingSaleReview` و\n{@link IShoppingOrderGod shopping_order_goods} لهما علاقة لوغاريتمية\nN: 1، ولكن هذا لا يعني أنه يمكن للعملاء الاستمرار في كتابة المراجعات\nلنفس المنتج إلى أجل غير مسمى. ألا توجد قيود، مثل\nإذا كتبت مراجعة مرة واحدة، فيمكنك كتابة مراجعة إضافية بعد شهر؟", + "description": "نتيجة المراجعة" + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "نتيجة المراجعة." + }, + "IShoppingSaleReview.ISnapshot": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "title": "وقت إنشاء سجل لقطة", + "description": "وقت إنشاء سجل لقطة.\n\nبمعنى آخر، وقت الإنشاء أو وقت تحديث المقالة." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "تنسيق النص", + "description": "تنسيق النص.\n\nنفس المعنى مع الامتداد مثل `html` و`md` و`txt`." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "عنوان المقالة", + "description": "عنوان المقالة." + }, + "title": { + "type": "string", + "title": "نص محتوى المقالة", + "description": "نص محتوى المقالة." + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "محتوى لقطة لمقالة المراجعة.", + "description": "معلومات الصفحة" + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "معلومات الصفحة." + }, + "IPageIShoppingSaleSnapshot.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.ISummary" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "نطاق سعر الوحدة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "نطاق سعر الوحدة." + }, + "IShoppingSaleSnapshot.ISummary": { + "type": "object", + "properties": { + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange", + "title": "المفتاح الأساسي للبيع", + "description": "المفتاح الأساسي للبيع." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "المفتاح الأساسي للصورة", + "description": "المفتاح الأساسي للصورة." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "ما إذا كانت الصورة هي الأحدث أم لا", + "description": "ما إذا كانت الصورة هي الأحدث أم لا." + }, + "latest": { + "type": "boolean", + "title": "الوصف ومحتوى الصورة الذي يصف البيع", + "description": "الوصف ومحتوى الصورة الذي يصف البيع." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "قائمة القنوات والفئات", + "description": "قائمة القنوات والفئات.\n\nما هي القنوات والفئات التي تم تسجيل البيع فيها." + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "قائمة علامات البحث", + "description": "قائمة علامات البحث." + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "قائمة الوحدات", + "description": "قائمة الوحدات.\n\nسجلات حول معلومات تكوين المنتج الفردي التي يتم بيعها\nفي البيع. يحتوي كل سجل {@link IShoppingSaleUnit unit} على\n{@link IShoppingSaleUnitOption options}،\n{@link IShoppingSaleUnitOptionCandidate candidates} قيم قابلة للتكوين لكل\nخيار، و{@link IShoppingSaleUnitStock final stocks} يتم تحديدها\nمن خلال\nتحديد كل قيمة مرشحة لكل خيار." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ISummary" + }, + "minItems": 1, + "title": "معلومات موجزة عن لقطة البيع.", + "description": "رقم الصفحة" + } + }, + "required": [ + "price_range", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units" + ], + "description": "رقم الصفحة." + }, + "IPage.IRequest": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "title": "حد السجلات لكل صفحة", + "description": "الحد من السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "بيانات طلب الصفحة", + "description": "المفتاح الأساسي للبيع" + } + }, + "description": "المفتاح الأساسي للبيع." + }, + "IShoppingSaleSnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "المفتاح الأساسي للصورة", + "description": "المفتاح الأساسي للصورة." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "ما إذا كانت الصورة هي الأحدث أم لا", + "description": "ما إذا كانت الصورة هي الأحدث أم لا." + }, + "latest": { + "type": "boolean", + "title": "الوصف ومحتوى الصورة الذي يصف البيع", + "description": "الوصف ومحتوى الصورة الذي يصف البيع." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent", + "title": "قائمة القنوات والفئات", + "description": "قائمة القنوات والفئات.\n\nالقنوات والفئات التي تم تسجيل البيع فيها." + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "قائمة علامات البحث", + "description": "قائمة علامات البحث." + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "قائمة الوحدات", + "description": "قائمة الوحدات.\n\nسجلات حول معلومات تكوين المنتج الفردي التي يتم بيعها\nفي البيع. يحتوي كل سجل {@link IShoppingSaleUnit unit} على\n{@link IShoppingSaleUnitOption options}،\n{@link IShoppingSaleUnitOptionCandidate candidates} قيم قابلة للتكوين لكل\nخيار، و{@link IShoppingSaleUnitStock final stocks} يتم تحديدها من خلال\nتحديد كل قيم المرشحين لكل خيار." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit" + }, + "minItems": 1, + "title": "سجل لقطة لعملية البيع.\n\n`IShoppingSaleSnapshot` هو كيان يجسد لقطة لعملية البيع،\nويصف مخطط العلاقات بين الكيانات (ERD) دور جدول\n`shopping_sale_snapshots` على النحو التالي:\n\n> {@link IShoppingSale shopping_sales} هو كيان يجسد\n> معلومات \"مبيعات المنتج\" (المبيعات) المسجلة بواسطة\n> {@link IShoppingSeller البائع}. والمعلومات الرئيسية لعملية البيع\n> مسجلة في `shopping_sale_snapshots` الفرعية، وليس في\n> {@link IShoppingSale shopping_sales}. عندما يغير البائع عنصرًا مسجلاً مسبقًا\n>، لا يتم تغيير السجل {@link IShoppingSale shopping_sales}\n> الحالي، ولكن يتم إنشاء سجل لقطة جديد.\n>\n> هذا للحفاظ على سجل شراء {@link IShoppingCustomer}\n> {@link IShoppingOrder} بشكل لا تشوبه شائبة بعد أن يشتري العميل\n> عنصرًا معينًا، حتى إذا قام البائع بتغيير مكونات أو سعر\n> العنصر. كما يهدف إلى دعم البائعين في ما يسمى باختبار A/B،\n> والذي يتضمن تغيير المكونات أو الأسعار وقياس الأداء\n> في كل حالة.\n\nبالمناسبة، مستوى DTO (كائن نقل البيانات) الذي يستخدمه مطور الواجهة الأمامية،\nلا يميز {@link IShoppingSale} و`IShoppingSaleSnapshot`\nبشكل صارم، ويتعامل بشكل عام مع {@link IShoppingSale} وsnapshot معًا.\n\nولكن على الرغم من أن مستوى DTO لا يميز بينهما بشكل صارم، فإن كلمة ومفهوم \"snapshot\" لا يزالان مهمين، لذا يوصى بفهم\nمفهوم \"snapshot\" بشكل صحيح.", + "description": "معلومات الفئة الأصلية" + } + }, + "required": [ + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units" + ], + "description": "معلومات الفئة الأصلية." + }, + "IShoppingChannelCategory": { + "type": "object", + "properties": { + "parent": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + ], + "title": "قائمة الفئات الفرعية ذات البنية الهرمية", + "description": "قائمة الفئات الفرعية ذات البنية الهرمية." + }, + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "معرف الفئة الأصلية", + "description": "معرف الفئة الأصلية." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "الاسم التمثيلي للفئة", + "description": "الاسم التمثيلي للفئة.\n\nيجب أن يكون الاسم فريدًا داخل الفئة الأصلية. إذا لم يكن هناك فئة أصلية،\nفيجب أن يكون الاسم فريدًا داخل القناة بين عدم وجود فئات أصلية." + }, + "name": { + "type": "string", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "فئة القناة.\n\n`IShoppingChannelCategory` هو مفهوم يشير إلى فئات التصنيف\nضمن {@link قناة IShoppingChannel} محددة، وهو نفس المفهوم\nالذي يشار إليه عادةً باسم \"الفئة\" في مراكز التسوق.\n\nويختلف `IShoppingChannelCategory` عن {@link IShoppingSection}.\n\nيشير {@link IShoppingSection} إلى \"زاوية\" تمثل معلومات مكانية مستقلة\nفي السوق غير المتصلة بالإنترنت، والتي لا يمكن تصنيفها في الوقت نفسه في {@link IShoppingSale sale}. بالإضافة إلى ذلك، يمكن تصنيف `IShoppingChannelCategory`\nإلى فئات متعددة في عملية بيع في الوقت نفسه.\n\nالمنتج | القسم (الزاوية) | الفئات\n---------|------------------|-----------------------------------\nلحوم البقر | ركن الجزار | الأطعمة المجمدة، اللحوم، الطعام المفضل\nالعنب | ركن الفاكهة | الأطعمة الطازجة، الأطعمة المفضلة\n\nبالإضافة إلى ذلك، نظرًا لأن `IShoppingChannelCategory` تتمتع بعلاقة تكرارية ذاتية 1:N،\nفمن الممكن التعبير عن الهياكل الهرمية أدناه. وبالتالي، يمكن لكل قناة\nتعيين تصنيف الفئة الخاص بها كما تريد.\n\n- الأطعمة > اللحوم > المجمدة\n- الإلكترونيات > أجهزة الكمبيوتر المحمولة > 15 بوصة\n- متفرقات > المحفظة\n\nوعلاوة على ذلك، تم تصميم `IShoppingChannelCategory` للدمج فيما بينها،\nلذا لا يوجد عبء لتحرير الفئة في أي وقت.", + "description": "قائمة الفئات الفرعية ذات البنية الهرمية" + } + }, + "required": [ + "parent", + "children", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "قائمة الفئات الفرعية ذات البنية الهرمية." + }, + "IShoppingChannelCategory.IHierarchical": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "معرف الفئة الأساسية", + "description": "معرف الفئة الأساسية." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "الاسم التمثيلي للفئة", + "description": "الاسم التمثيلي للفئة.\n\nيجب أن يكون الاسم فريدًا داخل الفئة الأساسية. إذا لم يكن هناك فئة أساسية،\nفيجب أن يكون الاسم فريدًا داخل القناة بين عدم وجود فئات أساسية." + }, + "name": { + "type": "string", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "معلومات الفئة الهرمية مع الفئات الفرعية.", + "description": "معرف الفئة الأصلية" + } + }, + "required": [ + "children", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "معرف الفئة الأصلية." + }, + "IShoppingChannelCategory.ICreate": { + "type": "object", + "properties": { + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "الاسم التمثيلي للفئة", + "description": "الاسم التمثيلي للفئة.\n\nيجب أن يكون الاسم فريدًا داخل الفئة الأصلية. إذا لم يكن هناك فئة أصلية،\nفيجب أن يكون الاسم فريدًا داخل القناة بين عدم وجود فئات أصلية." + }, + "name": { + "type": "string", + "title": "معلومات إنشاء الفئة.", + "description": "السجل المستهدف للاحتفاظ به بعد الدمج" + } + }, + "required": [ + "parent_id", + "name" + ], + "description": "سجل الهدف الذي سيتم الاحتفاظ به بعد الدمج.\n\nبعد عملية الدمج، سيتم دمج {@link absorption} سجل في\nهذا السجل {@link keep}." + }, + "IRecordMerge": { + "type": "object", + "properties": { + "keep": { + "type": "string", + "format": "uuid", + "title": "سيتم استيعابه في {@link keep} بعد الدمج", + "description": "سيتم استيعابه في {@link keep} بعد الدمج." + }, + "absorbed": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "دمج السجلات في DTO.\n\n`IRecordMerge` عبارة عن بنية لدمج السجلات.\n\nيعني `merge` دمج سجلات متعددة {@link IRecordMerge.absorbed}\nفي {@link IRecordMerge.keep} بدلاً من حذف سجلات\n{@link IRecordMerge.absorbed}.\n\nإذا كانت هناك بعض الجداول التابعة لـ `table` المستهدف التي تحتوي على\nقيد فريد على عمود مفتاح أجنبي، فإن هذه الجداول التابعة\nتنفذ عملية الدمج أيضًا.\n\nبالطبع، إذا كانت هناك جداول تابعة أخرى ضمن هذه الجداول التابعة، فإنها تنفذ عملية الدمج بشكل متكرر أيضًا.\nلا تزال عملية الدمج المتكررة هذه تعمل مع الجداول ذاتية التكرار\n(المنظمة على شكل شجرة).", + "description": "رمز المعرف" + } + }, + "required": [ + "keep", + "absorbed" + ], + "description": "رمز المعرف." + }, + "IShoppingChannel.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "اسم القناة", + "description": "اسم القناة." + }, + "name": { + "type": "string", + "title": "معلومات إنشاء القناة.", + "description": "اسم القناة" + } + }, + "required": [ + "code", + "name" + ], + "description": "اسم القناة." + }, + "IShoppingChannel.IUpdate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "تحديث معلومات القناة.", + "description": "معلومات الصفحة" + } + }, + "required": [ + "name" + ], + "description": "معلومات الصفحة." + }, + "IPageIShoppingChannel": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannel" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "رقم الصفحة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "رقم الصفحة." + }, + "IShoppingChannel.IRequest": { + "type": "object", + "properties": { + "search": { + "$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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "حد السجلات لكل صفحة", + "description": "حد السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "طلب القنوات مع خيارات الترقيم والبحث/الفرز.", + "description": "معلومات الصفحة" + } + }, + "description": "معلومات الصفحة." + }, + "IShoppingChannel.IRequest.ISearch": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "IPageIShoppingChannel.IHierarchical": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "فئات فرعية ذات بنية هرمية" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "فئات فرعية ذات بنية هرمية." + }, + "IShoppingChannel.IHierarchical": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "مفتاح أساسي", + "description": "مفتاح أساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "رمز التعريف", + "description": "رمز التعريف." + }, + "code": { + "type": "string", + "title": "اسم القناة", + "description": "اسم القناة." + }, + "name": { + "type": "string", + "title": "معلومات القناة الهرمية مع الفئات الفرعية.", + "description": "رمز التعريف" + } + }, + "required": [ + "categories", + "id", + "created_at", + "code", + "name" + ], + "description": "رمز التعريف." + }, + "IShoppingSection.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "الاسم التمثيلي للقسم", + "description": "الاسم التمثيلي للقسم." + }, + "name": { + "type": "string", + "title": "معلومات إنشاء القسم.", + "description": "الاسم التمثيلي للقسم" + } + }, + "required": [ + "code", + "name" + ], + "description": "الاسم التمثيلي للقسم." + }, + "IShoppingSection.IUpdate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "تحديث معلومات القسم.", + "description": "معلومات الصفحة" + } + }, + "required": [ + "name" + ], + "description": "معلومات الصفحة." + }, + "IPageIShoppingSection": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSection" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "رقم الصفحة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "رقم الصفحة." + }, + "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": "تحديد عدد السجلات لكل صفحة", + "description": "تحديد عدد السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "طلب الأقسام مع خيارات الترقيم والبحث/الفرز.", + "description": "تمييز حسب نوع العميل" + } + }, + "description": "تمييز حسب نوع العميل." + }, + "IShoppingSection.IRequest.ISearch": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "IShoppingCustomer.IAuthorized": { + "type": "object", + "properties": { + "setHeaders": { + "type": "object", + "properties": { + "Authorization": { + "type": "string" + } + }, + "required": [ + "Authorization" + ] + }, + "token": { + "$ref": "#/components/schemas/IShoppingCustomer.IToken" + }, + "type": { + "const": "customer", + "title": "معلومات العضوية", + "description": "معلومات العضوية.\n\nإذا انضم العميل كعضو." + }, + "member": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMember" + } + ], + "title": "معلومات المواطن", + "description": "معلومات المواطن.\n\nإذا قام العميل بالتحقق من اسمه الحقيقي ورقم هاتفه المحمول." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "القناة التابعة", + "description": "القناة التابعة." + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "معلومات المستخدم الخارجي", + "description": "معلومات المستخدم الخارجي.\n\nعندما يأتي العميل من خدمة خارجية." + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "عنوان الاتصال", + "description": "عنوان الاتصال.\n\nنفس الشيء مع {@link window.location.href} الخاص بالعميل." + }, + "href": { + "type": "string", + "format": "uri", + "title": "عنوان المرجع", + "description": "عنوان المرجع.\n\nنفس الشيء مع {@link window.document.referrer} الخاص بالعميل." + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "عنوان IP للاتصال", + "description": "عنوان IP للاتصال." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "وقت إنشاء سجل الاتصال", + "description": "وقت إنشاء سجل الاتصال." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "معلومات تنشيط المواطن", + "description": "معلومات تنشيط المواطن." + } + }, + "required": [ + "setHeaders", + "token", + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ] + }, + "IShoppingCustomer.IToken": { + "type": "object", + "properties": { + "access": { + "type": "string" + }, + "refresh": { + "type": "string" + }, + "expired_at": { + "type": "string", + "format": "date-time" + }, + "refreshable_until": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "access", + "refresh", + "expired_at", + "refreshable_until" + ] + }, + "IShoppingCustomer.IRefresh": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + }, + "IShoppingCustomer.ICreate": { + "type": "object", + "properties": { + "channel_code": { + "type": "string" + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser.ICreate" + } + ] + }, + "href": { + "type": "string", + "format": "uri" + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ] + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ] + } + }, + "required": [ + "channel_code", + "external_user", + "href", + "referrer" + ] + }, + "IShoppingExternalUser.ICreate": { + "type": "object", + "properties": { + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + ], + "title": "رمز معرف الخدمة الخارجية", + "description": "رمز معرف الخدمة الخارجية.\n\nيمكن أن يكون نفس الشيء مع {@link IShoppingChannel.code} بشكل مشترك." + }, + "application": { + "type": "string", + "title": "مفتاح معرف المستخدم الخارجي من النظام الخارجي", + "description": "مفتاح معرف المستخدم الخارجي من النظام الخارجي." + }, + "uid": { + "type": "string", + "title": "لقب المستخدم الخارجي في النظام الخارجي", + "description": "لقب المستخدم الخارجي في النظام الخارجي." + }, + "nickname": { + "type": "string", + "title": "كلمة مرور المستخدم الخارجي من النظام الخارجي", + "description": "كلمة مرور المستخدم الخارجي من النظام الخارجي.\n\nهذه كلمة مرور تم إصدارها للمستخدم بواسطة خدمة خارجية،\nولا تعد بأي حال من الأحوال كلمة مرور المستخدم الفعلية. ومع ذلك، بالنسبة إلى\n{@link IShoppingCustomer customers} الذين أدخلوا نفس\nالتطبيق والرمز كمستخدم النظام الخارجي الحالي، فإن هذا\nيهدف إلى تحديد ما إذا كان سيتم عرض هذا كمستخدم نظام خارجي صحيح أو انتهاك." + }, + "password": { + "type": "string", + "title": "معلومات إضافية حول المستخدم الخارجي من النظام الخارجي.", + "description": "معلومات إنشاء المستخدم الخارجي." + }, + "data": { + "description": "رقم الهاتف المحمول" + } + }, + "required": [ + "citizen", + "application", + "uid", + "nickname", + "password", + "data" + ], + "description": "رقم الهاتف المحمول." + }, + "IShoppingCitizen.ICreate": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "الاسم الحقيقي، أو اللقب المعادل له", + "description": "الاسم الحقيقي، أو اللقب المعادل له." + }, + "name": { + "type": "string", + "title": "معلومات إنشاء التحقق من المواطن.", + "description": "اللقب الذي يحدد العضو بشكل فريد" + } + }, + "required": [ + "mobile", + "name" + ], + "description": "اللقب الذي يحدد العضو بشكل فريد." + }, + "IShoppingMember.IJoin": { + "type": "object", + "properties": { + "nickname": { + "type": "string", + "title": "معلومات المواطن", + "description": "معلومات المواطن." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + ], + "title": "عنوان البريد الإلكتروني للعضو", + "description": "عنوان البريد الإلكتروني للعضو.\n\nإذا كان لدى العضو عناوين بريد إلكتروني متعددة، فاستخدم واحدًا منها فقط." + }, + "email": { + "type": "string", + "format": "email", + "title": "كلمة مرور حساب العضو", + "description": "كلمة مرور حساب العضو." + }, + "password": { + "type": "string", + "title": "معلومات طلب الانضمام.", + "description": "كلمة المرور الحالية" + } + }, + "required": [ + "nickname", + "citizen", + "email", + "password" + ], + "description": "كلمة المرور الحالية." + }, + "IShoppingMember.IPasswordChange": { + "type": "object", + "properties": { + "oldbie": { + "type": "string", + "title": "كلمة المرور الجديدة التي يجب تغييرها", + "description": "كلمة المرور الجديدة التي يجب تغييرها." + }, + "newbie": { + "type": "string", + "title": "طلب معلومات حول تغيير كلمة المرور.", + "description": "معلومات الصفحة" + } + }, + "required": [ + "oldbie", + "newbie" + ], + "description": "معلومات الصفحة." + }, + "IPageIShoppingCouponTicket": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + }, + "title": "صفحة.\n\nمجموعة سجلات تحتوي على معلومات الترقيم.", + "description": "رقم الصفحة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "رقم الصفحة." + }, + "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": "حد السجلات لكل صفحة", + "description": "حد السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "معلومات الصفحة", + "description": "معلومات الصفحة." + } + } + }, + "IShoppingCouponTicket.ICreate": { + "type": "object", + "properties": { + "coupon_id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "coupon_id" + ] + }, + "IPageIShoppingDepositCharge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + }, + "title": "صفحة.\n\nمجموعة سجلات تحتوي على معلومات الترقيم.", + "description": "رقم الصفحة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "رقم الصفحة." + }, + "IShoppingDepositCharge": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer" + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDepositChargePublish" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "customer", + "publish", + "created_at", + "value" + ] + }, + "IShoppingDepositChargePublish": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ] + }, + "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": "الحد من السجلات لكل صفحة", + "description": "الحد من السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "معلومات الصفحة", + "description": "معلومات الصفحة." + } + } + }, + "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": { + "oneOf": [ + { + "const": "published" + }, + { + "const": "pending" + }, + { + "const": "payed" + }, + { + "const": "cancelled" + } + ] + }, + "publish": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "payment": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "required": [ + "state" + ] + }, + "IShoppingDepositCharge.ICreate": { + "type": "object", + "properties": { + "value": { + "type": "number" + } + }, + "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": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDepositHistory" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "رقم الصفحة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "رقم الصفحة." + }, + "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" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "deposit", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "IShoppingDepositHistory.IRequest": { + "type": "object", + "properties": { + "search": { + "$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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "الحد من السجلات لكل صفحة", + "description": "الحد من السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "معلومات الصفحة", + "description": "معلومات الصفحة." + } + } + }, + "IShoppingDepositHistory.IRequest.ISearch": { + "type": "object", + "properties": { + "deposit": { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "IPageIShoppingMileageHistory": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileageHistory" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "رقم الصفحة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "رقم الصفحة." + }, + "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" + ] + }, + "IShoppingMileageHistory.IRequest": { + "type": "object", + "properties": { + "search": { + "$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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "حد السجلات لكل صفحة", + "description": "حد السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "معلومات الصفحة", + "description": "معلومات الصفحة." + } + } + }, + "IShoppingMileageHistory.IRequest.ISearch": { + "type": "object", + "properties": { + "mileage": { + "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "IPageIShoppingCartCommodity": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "رقم الصفحة" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "رقم الصفحة." + }, + "IShoppingCartCommodity.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingCartCommodity.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" + }, + { + "const": "-commodity.price" + }, + { + "const": "-commodity.volume" + }, + { + "const": "-commodity.volumed_price" + }, + { + "const": "-commodity.created_at" + }, + { + "const": "+commodity.price" + }, + { + "const": "+commodity.volume" + }, + { + "const": "+commodity.volumed_price" + }, + { + "const": "+commodity.created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "حد السجلات لكل صفحة", + "description": "حد السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "مبيعات مستهدفة {@link IShoppingSale.id}", + "description": "مبيعات مستهدفة {@link IShoppingSale.id}." + } + } + }, + "IShoppingCartCommodity.IRequest.ISearch": { + "type": "object", + "properties": { + "min_price": { + "type": "number" + }, + "max_price": { + "type": "number" + }, + "min_volumed_price": { + "type": "number" + }, + "max_volumed_price": { + "type": "number" + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + } + }, + "IShoppingCartCommodity.ICreate": { + "type": "object", + "properties": { + "sale_id": { + "type": "string", + "format": "uuid", + "title": "قائمة الأسهم المراد شراؤها", + "description": "قائمة الأسهم المراد شراؤها." + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodityStock.ICreate" + }, + "minItems": 1, + "title": "حجم السلعة المراد شراؤها", + "description": "حجم السلعة المراد شراؤها.\n\nقيمة تشير إلى عدد المجموعات التي سيتم ضربها في قيم\n{@link IShoppingSaleUnitStock.IInvert.quantity} الفرعية." + }, + "volume": { + "type": "integer", + "minimum": 1, + "title": "ما إذا كان سيتم تجميع الحجم أم لا", + "description": "ما إذا كان سيتم تجميع الحجم أم لا.\n\nإذا لم تكن هذه السمة \"false\" وكانت هناك نفس السلعة التي\nتتكون من نفس الأسهم والخيارات، فسيتم تجميع الحجم إلى السلعة الموجودة.\n\nوإلا، فسيتم إنشاء سلعة مكررة جديدة." + }, + "accumulate": { + "type": "boolean", + "title": "معلومات إنشاء سلعة عربة التسوق.", + "description": "وحدات مستهدفة {@link IShoppingSaleUnit.id}" + } + }, + "required": [ + "sale_id", + "stocks", + "volume" + ], + "description": "وحدات مستهدفة {@link IShoppingSaleUnit.id}." + }, + "IShoppingCartCommodityStock.ICreate": { + "type": "object", + "properties": { + "unit_id": { + "type": "string", + "format": "uuid", + "title": "مخزون مستهدف {@link IShoppingSaleUnitStock.id}", + "description": "مخزون مستهدف {@link IShoppingSaleUnitStock.id}.\n\nيجب أن يتطابق مع خاصية {@link options}." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "معلومات إنشاء الخيارات لكل خيار", + "description": "معلومات إنشاء الخيارات لكل خيار." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodityStockChoice.ICreate" + }, + "title": "كمية المخزون المراد شراؤه", + "description": "كمية المخزون المراد شراؤه.\n\nيتم ضرب هذه القيمة في {@link IShoppingCartCommodity.volume}." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "معلومات إنشاء مخزون السلع في عربة التسوق.\n\nعند إنشاء السجل، سيكون هيكله المقابل هو\n{@link IShoppingSaleSnapshotUnit.IInvert} و\n{@link IShoppingSaleSnapshotUnitStock.IInvert}.", + "description": "خيارات الهدف {@link IShoppingSaleUnitOption.id}" + } + }, + "required": [ + "unit_id", + "stock_id", + "choices", + "quantity" + ], + "description": "خيارات الهدف {@link IShoppingSaleUnitOption.id}." + }, + "IShoppingCartCommodityStockChoice.ICreate": { + "type": "object", + "properties": { + "option_id": { + "type": "string", + "format": "uuid", + "title": "مرشح الهدف {@link IShoppingSaleUnitOptionCandidate.id}", + "description": "المرشح المستهدف {@link IShoppingSaleUnitOptionCandidate.id}.\n\nعندما يكون نوع الخيار المستهدف هو `select`، فإن هذه الخاصية ليست\n`null` ولكنها تحتوي على قيمة." + }, + "candidate_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "قيمة مكتوبة حول الخيار", + "description": "قيمة مكتوبة حول الخيار.\n\nعندما لا يكون نوع الخيار المستهدف هو `select`، ولكنه قيمة من النوع الذري\nمثل `boolean` أو `number` أو `string`، فإن هذه الخاصية ليست\n`null` ولكنها تحتوي على القيمة الذرية المطابقة." + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ], + "title": "معلومات إنشاء الاختيار لكل خيار.\n\nعند إنشاء السجل، سيكون هيكله المقابل\n{@link IShoppingSaleUnitStockChoice.IInvert}.", + "description": "حجم السلعة المراد شراؤها" + } + }, + "required": [ + "option_id", + "candidate_id", + "value" + ], + "description": "حجم السلعة المراد شراؤها.\n\nقيمة تشير إلى عدد المجموعات التي سيتم ضربها في قيم\n{@link IShoppingSaleUnitStock.IInvert.quantity} الفرعية." + }, + "IShoppingCartCommodity.IUpdate": { + "type": "object", + "properties": { + "volume": { + "type": "integer", + "minimum": 1, + "title": "تحديث معلومات سلعة عربة التسوق.", + "description": "قائمة السلع في الطلب" + } + }, + "required": [ + "volume" + ], + "description": "قائمة السلع في الطلب." + }, + "IShoppingCartDiscountable": { + "type": "object", + "properties": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "combinations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.ICombination" + } + } + }, + "required": [ + "deposit", + "mileage", + "combinations" + ] + }, + "IShoppingCartDiscountable.ICombination": { + "type": "object", + "properties": { + "coupons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + }, + "tickets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.IEntry" + } + }, + "amount": { + "type": "number" + } + }, + "required": [ + "coupons", + "tickets", + "entries", + "amount" + ] + }, + "IShoppingCartDiscountable.IEntry": { + "type": "object", + "properties": { + "commodity_id": { + "type": "string", + "format": "uuid" + }, + "pseudo": { + "type": "boolean" + }, + "coupon_id": { + "type": "string", + "format": "uuid" + }, + "amount": { + "type": "number" + } + }, + "required": [ + "commodity_id", + "pseudo", + "coupon_id", + "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": { + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood.ICreate" + }, + "title": "معلومات إنشاء جهاز الطلب", + "description": "السلع المستهدفة {@link IShoppingCartCommodity.id}" + } + }, + "required": [ + "goods" + ], + "description": "السلع المستهدفة {@link IShoppingCartCommodity.id}." + }, + "IShoppingOrderGood.ICreate": { + "type": "object", + "properties": { + "commodity_id": { + "type": "string", + "format": "uuid", + "title": "حجم السلعة", + "description": "حجم السلعة.\n\nالقيمة مضروبة في {@link IShoppingCartCommodityStock.quantity}.\nالغرض منها هو نفس الغرض تمامًا {@link IShoppingCartCommodity.volume}،\nولكن تمت إعادة كتابتها لأن سجلات {@link IShoppingCartCommodity} قابلة لإعادة الاستخدام\nحتى الدفع." + }, + "volume": { + "type": "integer", + "title": "معلومات إنشاء السلعة.", + "description": "رقم الهاتف المحمول للتواصل" + } + }, + "required": [ + "commodity_id", + "volume" + ], + "description": "رقم الهاتف المحمول للتواصل." + }, + "IShoppingOrderDiscountable": { + "type": "object", + "properties": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "combinations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.ICombination" + } + } + }, + "required": [ + "deposit", + "mileage", + "combinations" + ] + }, + "IShoppingOrderDiscountable.ICombination": { + "type": "object", + "properties": { + "coupons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + }, + "tickets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.IEntry" + } + }, + "amount": { + "type": "number" + } + }, + "required": [ + "coupons", + "tickets", + "entries", + "amount" + ] + }, + "IShoppingOrderDiscountable.IEntry": { + "type": "object", + "properties": { + "good_id": { + "type": "string", + "format": "uuid" + }, + "coupon_id": { + "type": "string", + "format": "uuid" + }, + "amount": { + "type": "number" + } + }, + "required": [ + "good_id", + "coupon_id", + "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": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "coupon_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "deposit", + "mileage", + "coupon_ids" + ] + }, + "IShoppingOrderPublish.ICashCreate": { + "type": "object", + "properties": { + "type": { + "const": "cash" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress.ICreate" + }, + "vendor": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "type", + "address", + "vendor", + "uid" + ] + }, + "IShoppingAddress.ICreate": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "اسم ممثل العنوان", + "description": "اسم ممثل العنوان.\n\nيكون أحيانًا اسم المستلم، وأحيانًا يكون اسم المكان." + }, + "name": { + "type": "string", + "title": "اسم الدولة", + "description": "اسم الدولة." + }, + "country": { + "type": "string", + "title": "اسم المقاطعة", + "description": "اسم المقاطعة." + }, + "province": { + "type": "string", + "title": "اسم المدينة", + "description": "اسم المدينة." + }, + "city": { + "type": "string", + "title": "اسم القسم", + "description": "اسم القسم." + }, + "department": { + "type": "string", + "title": "عنوان مفصل يحتوي على اسم الشارع ورقم المبنى ورقم الغرفة", + "description": "عنوان مفصل يحتوي على اسم الشارع ورقم المبنى ورقم الغرفة." + }, + "possession": { + "type": "string", + "title": "الرمز البريدي أو الرمز البريدي", + "description": "الرمز البريدي أو الرمز البريدي." + }, + "zip_code": { + "type": "string", + "title": "وصف خاص إذا لزم الأمر", + "description": "وصف خاص إذا لزم الأمر." + }, + "special_note": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "سواء كانت المقالة السؤالية سرية أم لا", + "description": "سواء كانت المقالة السؤالية سرية أم لا.\n\nإذا كانت المقالة سرية، يمكن فقط للعميل الكاتب والبائع ذي الصلة رؤية\nالمحتوى التفصيلي." + } + }, + "required": [ + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ] + }, + "IShoppingOrderPublish.IZeroCreate": { + "type": "object", + "properties": { + "type": { + "const": "zero" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress.ICreate" + } + }, + "required": [ + "type", + "address" + ] + }, + "IShoppingSaleQuestion.ICreate": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "تنسيق النص", + "description": "تنسيق النص.\n\nنفس المعنى مع الامتداد مثل `html` و`md` و`txt`." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "عنوان المقالة", + "description": "عنوان المقالة." + }, + "title": { + "type": "string", + "title": "نص محتوى المقالة", + "description": "نص محتوى المقالة." + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "معلومات إنشاء السؤال.", + "description": "تنسيق النص" + } + }, + "required": [ + "secret", + "format", + "title", + "body", + "files" + ], + "description": "تنسيق النص.\n\nنفس المعنى مع الامتداد مثل `html`، `md`، `txt`." + }, + "IBbsArticle.ICreate": { + "type": "object", + "properties": { + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "عنوان المقالة", + "description": "عنوان المقالة." + }, + "title": { + "type": "string", + "title": "نص محتوى المقالة", + "description": "نص محتوى المقالة." + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "معلومات إنشاء المقالة.", + "description": "السلع المستهدفة {@link IShoppingOrderGood.id}" + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "السلع المستهدفة {@link IShoppingOrderGood.id}." + }, + "IShoppingSaleReview.ICreate": { + "type": "object", + "properties": { + "good_id": { + "type": "string", + "format": "uuid", + "title": "درجة المراجعة", + "description": "درجة المراجعة." + }, + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "تنسيق النص", + "description": "تنسيق النص.\n\nنفس المعنى مع الامتداد مثل `html`، `md`، `txt`." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "عنوان المقال", + "description": "عنوان المقال." + }, + "title": { + "type": "string", + "title": "نص محتوى المقالة", + "description": "نص محتوى المقالة" + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "معلومات إنشاء المراجعة.", + "description": "نتيجة المراجعة" + } + }, + "required": [ + "good_id", + "score", + "format", + "title", + "body", + "files" + ], + "description": "نتيجة المراجعة." + }, + "IShoppingSaleReview.IUpdate": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "تنسيق النص", + "description": "تنسيق النص.\n\nنفس المعنى مع امتداد مثل `html` و`md` و`txt`." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "عنوان المقالة", + "description": "عنوان المقالة." + }, + "title": { + "type": "string", + "title": "نص محتوى المقالة", + "description": "نص محتوى المقالة" + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "تحديث معلومات المراجعة.", + "description": "معلومات الصفحة" + } + }, + "required": [ + "score", + "format", + "title", + "body", + "files" + ], + "description": "معلومات الصفحة." + }, + "IShoppingSeller.IJoin": { + "type": "object", + "properties": {} + }, + "IPageIShoppingDelivery.IInvert": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDelivery.IInvert" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "قائمة طلبات التسليم" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "قائمة طلبات التسليم." + }, + "IShoppingDelivery.IInvert": { + "type": "object", + "properties": { + "orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrder.IInvertFromDelivery" + }, + "minItems": 1, + "title": "المفتاح الأساسي", + "description": "المفتاح الأساسي." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "البائع الذي سلم البضائع", + "description": "البائع الذي سلم البضائع." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "قائمة رحلات التسليم", + "description": "قائمة رحلات التسليم." + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + }, + "title": "قائمة قطع التسليم", + "description": "قائمة قطع التسليم." + }, + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece" + }, + "minItems": 1, + "title": "قائمة شاحني التسليم", + "description": "قائمة شاحني التسليم." + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + }, + "title": "حالة التسليم", + "description": "حالة التسليم." + }, + "state": { + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "عكس معلومات التسليم.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "orders", + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingOrder.IInvertFromDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "العميل الذي تقدم بطلب للحصول على الطلب", + "description": "العميل الذي تقدم بطلب للحصول على الطلب." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "قائمة البضائع في الطلب", + "description": "قائمة البضائع في الطلب." + }, + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood" + }, + "minItems": 1, + "title": "معلومات السعر بما في ذلك الخصومات", + "description": "معلومات السعر بما في ذلك الخصومات." + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice", + "title": "إكمال الطلب ومعلومات الدفع", + "description": "إكمال الطلب ومعلومات الدفع." + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish.IInvertFromDelivery" + } + ], + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "عكس المعلومات من التسليم.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "id", + "customer", + "goods", + "price", + "publish", + "created_at" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingOrderPublish.IInvertFromDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "الوقت الذي تم فيه دفع الطلب", + "description": "الوقت الذي تم فيه دفع الطلب." + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "الوقت الذي تم فيه إلغاء الدفع", + "description": "الوقت الذي تم فيه إلغاء الدفع." + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "العنوان الذي سيتم فيه تسليم {@link IShoppingOrderGood goods}", + "description": "العنوان الذي سيتم فيه تسليم {@link IShoppingOrderGood goods}." + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress", + "title": "عكس المعلومات من التسليم.", + "description": "رقم الصفحة" + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at", + "address" + ], + "description": "رقم الصفحة." + }, + "IShoppingDelivery.IRequest": { + "type": "object", + "properties": { + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-delivery.created_at" + }, + { + "const": "+delivery.created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "حد السجلات لكل صفحة", + "description": "حد السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "قائمة قطع التسليم", + "description": "قائمة قطع التسليم." + } + } + }, + "IShoppingDelivery.ICreate": { + "type": "object", + "properties": { + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.ICreate" + }, + "minItems": 1, + "title": "قائمة رحلات التسليم", + "description": "قائمة رحلات التسليم.\n\nهذه بيانات أولية، ومن الممكن أيضًا تجميع بيانات الرحلة\nبعد إنشاء التسليم." + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.ICreate" + }, + "title": "قائمة شركات شحن التسليم", + "description": "قائمة شركات شحن التسليم." + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper.ICreate" + }, + "title": "معلومات إنشاء التسليم.", + "description": "الطلبات المستهدفة {@link IShoppingOrderPublish.id}" + } + }, + "required": [ + "pieces", + "journeys", + "shippers" + ], + "description": "الطلبات المستهدفة {@link IShoppingOrderPublish.id}." + }, + "IShoppingDeliveryPiece.ICreate": { + "type": "object", + "properties": { + "publish_id": { + "type": "string", + "format": "uuid", + "title": "السلع المستهدفة {@link IShoppingOrderGood.id}", + "description": "السلع المستهدفة {@link IShoppingOrderGood.id}." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "مخزون الهدف {@link IShoppingSaleUnitStock.id}", + "description": "مخزون الهدف {@link IShoppingSaleUnitStock.id}." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "كمية المخزون", + "description": "كمية المخزون.\n\nيمكن أن تكون قيمة الدقة للتعبير عن الشحن المقسم." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "معلومات إنشاء قطعة التسليم.", + "description": "نوع الرحلة" + } + }, + "required": [ + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "نوع الرحلة.\n\n- التحضير\n- التصنيع\n- الشحن\n- التسليم" + }, + "IShoppingDeliveryJourney.ICreate": { + "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + } + ], + "title": "عنوان الرحلة", + "description": "عنوان الرحلة." + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "وصف الرحلة", + "description": "وصف الرحلة." + }, + "description": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "وقت بدء الرحلة", + "description": "وقت بدء الرحلة." + }, + "started_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "وقت إتمام الرحلة", + "description": "وقت إتمام الرحلة." + }, + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "معلومات إنشاء رحلة التسليم.", + "description": "وقت إتمام الرحلة" + } + }, + "required": [ + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "وقت إتمام الرحلة." + }, + "IShoppingDeliveryShipper.ICreate": { + "type": "object", + "properties": { + "company": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "company", + "name", + "mobile" + ] + }, + "IShoppingDeliveryPiece.IRequest": { + "type": "object", + "properties": { + "publish_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "publish_ids" + ] + }, + "IShoppingDeliveryJourney.IComplete": { + "type": "object", + "properties": { + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "معلومات إتمام رحلة التسليم.", + "description": "الأقسام المملوكة {@link IShoppingSection.code}" + } + }, + "required": [ + "completed_at" + ], + "description": "الأقسام المملوكة {@link IShoppingSection.code}." + }, + "IShoppingSale.ICreate": { + "type": "object", + "properties": { + "section_code": { + "type": "string", + "title": "الحالة الأولية للبيع", + "description": "الحالة الأولية للبيع.\n\n`null` أو `undefined`: لا يوجد قيد\n`paused`: يبدأ بحالة {@link ITimestamps.paused_at paused}\n`suspended`: يبدأ بحالة {@link ITimestamps.suspended_at suspended}" + }, + "status": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "paused" + }, + { + "const": "suspended" + } + ], + "title": "وقت افتتاح البيع", + "description": "وقت افتتاح البيع." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "وقت إغلاق البيع", + "description": "وقت إغلاق البيع.\n\nإذا كانت هذه القيمة `null`، فسيستمر البيع إلى الأبد." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "معلومات إنشاء البيع.", + "description": "القنوات المستهدفة {@link IShoppingChannel.code}" + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.ICreate" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel.ICreate" + } + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ICreate" + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "section_code", + "opened_at", + "closed_at", + "content", + "channels", + "units", + "tags" + ], + "description": "القنوات المستهدفة {@link IShoppingChannel.code}." + }, + "IShoppingSaleContent.ICreate": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ] + }, + "body": { + "type": "string" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + } + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + } + } + }, + "required": [ + "title", + "format", + "body", + "files", + "thumbnails" + ] + }, + "IShoppingSaleChannel.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "قائمة الفئات المستهدفة {@link IShoppingChannelCategory.id}s", + "description": "قائمة الفئات المستهدفة {@link IShoppingChannelCategory.id}.\n\nإذا كانت فارغة، فهذا يعني أن جميع فئات القناة تسرد البيع." + }, + "category_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "معلومات إنشاء القناة المستهدفة (والفئات) للبيع.", + "description": "قائمة الخيارات" + } + }, + "required": [ + "code", + "category_ids" + ], + "description": "قائمة الخيارات." + }, + "IShoppingSaleUnit.ICreate": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption.ICreate" + } + ] + }, + "title": "قائمة المخزونات النهائية", + "description": "قائمة المخزونات النهائية." + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock.ICreate" + }, + "minItems": 1, + "title": "الاسم التمثيلي للوحدة", + "description": "الاسم التمثيلي للوحدة." + }, + "name": { + "type": "string", + "title": "ما إذا كانت الوحدة أساسية أم لا", + "description": "سواء كانت الوحدة أساسية أم لا.\n\nقيمة تسمية فقط." + }, + "primary": { + "type": "boolean", + "title": "سواء كانت الوحدة مطلوبة أم لا", + "description": "سواء كانت الوحدة مطلوبة أم لا.\n\nعندما تكون الوحدة مطلوبة، يجب على العميل تحديد الوحدة. إذا لم يتم التحديد، فلن يتمكن العميل من شرائها.\n\nعلى سبيل المثال، إذا كان هناك \"مجموعة أجهزة MacBook\" معروضة للبيع وكانت إحدى الوحدات هي\n\"الهيكل الرئيسي\"، فهل من الممكن شراء \"مجموعة أجهزة MacBook\" بدون وحدة\n\"الهيكل الرئيسي\"؟ هذه الخاصية مخصصة لهذه الحالة." + }, + "required": { + "type": "boolean", + "title": "معلومات إنشاء وحدة البيع.", + "description": "مميز لنوع الخيار القابل للتحديد" + } + }, + "required": [ + "options", + "stocks", + "name", + "primary", + "required" + ], + "description": "مميز لنوع الخيار القابل للتحديد." + }, + "IShoppingSaleUnitSelectableOption.ICreate": { + "type": "object", + "properties": { + "type": { + "const": "select", + "title": "يمثل اسم الخيار", + "description": "يمثل اسم الخيار." + }, + "name": { + "type": "string", + "title": "ما إذا كان الخيار متغيرًا أم لا", + "description": "ما إذا كان الخيار متغيرًا أم لا.\n\nعندما يكون نوع الخيار الحالي هو \"select\"، فإن هذه الخاصية تعني ما إذا كان\nتحديد قيمة مرشحة مختلفة يؤثر على المخزون النهائي أم لا." + }, + "variable": { + "type": "boolean", + "title": "قائمة القيم المرشحة", + "description": "قائمة القيم المرشحة." + }, + "candidates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate.ICreate" + }, + "minItems": 1, + "title": "معلومات إنشاء الخيار القابل للتحديد.", + "description": "يمثل اسم القيمة المرشحة" + } + }, + "required": [ + "type", + "name", + "variable", + "candidates" + ], + "description": "يمثل اسم القيمة المرشحة." + }, + "IShoppingSaleUnitOptionCandidate.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "معلومات إنشاء القيمة المرشحة.", + "description": "نوع الخيار الوصفي" + } + }, + "required": [ + "name" + ], + "description": "نوع الخيار الوصفي.\n\nما هي القيمة المكتوبة التي يجب كتابتها عند الشراء." + }, + "IShoppingSaleUnitDescriptiveOption.ICreate": { + "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "const": "string" + }, + { + "const": "number" + }, + { + "const": "boolean" + } + ], + "title": "اسم قابل للقراءة للخيار", + "description": "اسم قابل للقراءة للخيار." + }, + "name": { + "type": "string", + "title": "معلومات إنشاء الخيار الوصفي.", + "description": "الاسم التمثيلي للسهم" + } + }, + "required": [ + "type", + "name" + ], + "description": "الاسم التمثيلي للسهم." + }, + "IShoppingSaleUnitStock.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "سعر السهم", + "description": "سعر السهم." + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "كمية المخزون الأولية", + "description": "كمية المخزون الأولية." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "قائمة الخيارات", + "description": "قائمة الخيارات.\n\nما هي قيم المرشحين التي يتم اختيارها لكل خيار." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice.ICreate" + }, + "title": "معلومات إنشاء المخزون.", + "description": "رقم مؤشر الخيار المستهدف في\n{@link IShoppingSaleUnit.ICreate.options}." + } + }, + "required": [ + "name", + "price", + "quantity", + "choices" + ], + "description": "رقم مؤشر المرشح المستهدف في\n{@link IShoppingSaleUnitSelectableOption.ICreate.candidates}." + }, + "IShoppingSaleUnitStockChoice.ICreate": { + "type": "object", + "properties": { + "option_index": { + "type": "integer", + "description": "معلومات إنشاء خيار المخزون." + }, + "candidate_index": { + "type": "integer", + "description": "معلومات إنشاء اللقطة." + } + }, + "required": [ + "option_index", + "candidate_index" + ], + "description": "وقت افتتاح البيع" + }, + "IShoppingSaleSnapshot.ICreate": { + "type": "object", + "properties": { + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.ICreate" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel.ICreate" + } + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ICreate" + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "content", + "channels", + "units", + "tags" + ], + "description": "وقت افتتاح البيع." + }, + "IShoppingSale.IUpdateOpeningTime": { + "type": "object", + "properties": { + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "وقت إغلاق البيع", + "description": "وقت إغلاق البيع.\n\nإذا كانت هذه القيمة `null`، يستمر البيع إلى الأبد." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "تحديث معلومات وقت افتتاح البيع.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "opened_at", + "closed_at" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingSaleInquiryAnswer.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "وقت إنشاء سجل لقطة", + "description": "وقت إنشاء سجل لقطة.\n\nبمعنى آخر، وقت الإنشاء أو وقت تحديث المقالة." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "تنسيق النص", + "description": "تنسيق النص.\n\nنفس المعنى مع الامتداد مثل `html` و`md` و`txt`." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "عنوان المقالة", + "description": "عنوان المقالة." + }, + "title": { + "type": "string", + "title": "نص محتوى المقالة", + "description": "نص محتوى المقالة." + }, + "body": { + "type": "string", + "title": "قائمة ملفات المرفقات", + "description": "قائمة ملفات المرفقات." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "معلومات الصفحة", + "description": "معلومات الصفحة." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ] + }, + "IPageIShoppingSaleUnitStockSupplement": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "قائمة السجلات", + "description": "قائمة السجلات." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement" + }, + "title": "صفحة.\n\nمجموعة من السجلات مع معلومات الترقيم.", + "description": "المفتاح الأساسي" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "المفتاح الأساسي." + }, + "IShoppingSaleUnitStockSupplement": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "الكمية المكملة", + "description": "الكمية المكملة." + }, + "value": { + "type": "integer", + "title": "وقت إنشاء السجل", + "description": "وقت إنشاء السجل.\n\nبعبارة أخرى، الوقت الذي يتم فيه استكمال جرد المخزون." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "إضافة كمية المخزون.\n\nهل تعلم ماذا؟ إذا تم بيع {@link IShoppingSaleUnitStock stock} بما يزيد عن {@link IShoppingSaleUnitStock.ICreate.quantity كمية المخزون الأولية}،\nفلا يمكن بيع المخزون بعد الآن، بسبب نفاد المخزون. في هذه الحالة، كيف ينبغي لـ\n{@link IShoppingSeller} أن يفعل؟\n\nعندما يتم بيع المخزون بالكامل، يمكن للبائع إضافة سجل المخزون عن طريق\nتسجيل سجل `IShoppingSaleUnitStockSupplement` هذا. صحيح، هذا\n`IShoppingSaleUnitStockSupplement` هو كيان يجسد إضافة كمية المخزون للمخزون المملوك.", + "description": "أعمدة قابلة للفرز" + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "أعمدة قابلة للفرز." + }, + "IShoppingSaleUnitStockSupplement.IRequest": { + "type": "object", + "properties": { + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + } + ] + }, + "title": "رقم الصفحة", + "description": "رقم الصفحة." + }, + "page": { + "type": "integer", + "title": "حد السجلات لكل صفحة", + "description": "حد السجلات لكل صفحة." + }, + "limit": { + "type": "integer", + "title": "طلب معلومات عن قائمة المكملات المخزونة.", + "description": "الكمية المكملة" + } + }, + "description": "الكمية المكملة." + }, + "IShoppingSaleUnitStockSupplement.ICreate": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "title": "معلومات إنشاء الملحق.", + "description": "Supplemented quantity." + } + }, + "required": [ + "value" + ], + "description": "Creation information of the supplement." + } + }, + "securitySchemes": { + "bearer": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } + }, + "tags": [ + { + "name": "Monitor" + }, + { + "name": "Authenticate" + }, + { + "name": "Discount" + }, + { + "name": "Order" + }, + { + "name": "Sale" + }, + { + "name": "Systematic" + }, + { + "name": "Section" + } + ], + "x-samchon-emended": true +} \ No newline at end of file diff --git a/assets/output/shopping.swagger.ja.json b/assets/output/shopping.swagger.ja.json new file mode 100644 index 0000000..9468cd5 --- /dev/null +++ b/assets/output/shopping.swagger.ja.json @@ -0,0 +1,18749 @@ +{ + "openapi": "3.1.0", + "servers": [ + { + "url": "http://localhost:37001", + "description": "ローカル サーバー" + } + ], + "info": { + "version": "0.5.0", + "title": "@samchon/shopping-backend", + "description": "ショッピング用バックエンド", + "license": { + "name": "MIT" + } + }, + "paths": { + "/monitors/health": { + "get": { + "summary": "ヘルス チェック API", + "description": "ヘルス チェック API。", + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + } + } + }, + "/monitors/performance": { + "get": { + "summary": "パフォーマンス情報を取得", + "description": "パフォーマンス情報を取得します。\n\nCPU、メモリ、リソース使用量で構成されるパフォーマンス情報を取得します。", + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "パフォーマンス情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPerformance" + } + } + } + } + } + } + }, + "/monitors/system": { + "get": { + "summary": "システム情報を取得", + "description": "システム情報を取得します。\n\nコミットおよびパッケージ情報を含むシステム情報を取得します。\n\nこのような情報は機密情報の一種であるため、応答は暗号化されます。", + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "システム情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ISystem" + } + } + } + } + } + } + }, + "/monitors/system/internal_server_error": { + "get": { + "tags": [], + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + } + } + }, + "/monitors/system/uncaught_exception": { + "get": { + "tags": [], + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + } + } + }, + "/shoppings/admins/authenticate": { + "get": { + "summary": "管理者情報を取得します", + "description": "管理者情報を取得します。\n\n現在の {@link IShoppingCustomer 顧客} の {@link IShoppingAdministrator.IInvert 管理者} 情報を取得します。\n\n現在の {@link IShoppingMember メンバー} が管理者でない場合は、403 禁止例外がスローされます。", + "tags": [ + "Authenticate" + ], + "parameters": [], + "responses": { + "200": { + "description": "管理者情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "管理者として参加", + "description": "管理者として参加します。\n\n{@link IShoppingAdministrator.IJoin 参加情報} を使用して管理者として参加します。\n\nこの方法は、{@link IShoppingCustomer 顧客} がすでに {@link IShoppingMember メンバーシップ} に参加している場合にのみ許可されます。参加していない場合は、事前に参加する必要があります。参加していない場合は、403 禁止例外がスローされます。", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "参加リクエスト情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "管理者情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/authenticate/login": { + "put": { + "summary": "管理者としてログイン", + "description": "管理者としてログインします。\n\n{@link IShoppingAdministrator.ILogin login info} を使用して管理者としてログインします。\n\nこのメソッドは、{@link ShoppingApi. functional.customers.authenticate.login} 関数とまったく同じ効果がありますが、返される型が少し異なります。 同様の関数は、顧客情報から始まる {@link IShoppingCustomer} 型を返すため、`customer.member.administrator` を介して管理者情報にアクセスする必要があります。 それとは対照的に、このメソッドは、管理者情報から始まる {@link IShoppingAdministrator.IInvert} 型を返すため、`administrator.customer` を介して顧客情報にアクセスできます。\n\nもちろん、この関数を使用するには、事前に管理者として {@link join} する必要があります。 そうでない場合は、403 forbidden 例外がスローされます。", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "ログインリクエスト情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "管理者情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/coupons/{id}/destroy": { + "delete": { + "tags": [], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/coupons": { + "post": { + "summary": "新しいクーポンを作成する", + "description": "新しいクーポンを作成します。\n\n指定された情報を使用して、新しい {@link IShoppingCoupon クーポン} を作成します。\n\nちなみに、{@link IShoppingSeller セラー} の場合は、include 方向の {@link IShoppingCouponSellerCriteria} または {@link IShoppingCouponSaleCriteria} 条件を追加する必要があります。 これは、{@link IShoppingAdministrator 管理者} のみが、マーケット全体で使用できるクーポンを作成できるためです。 セラーは、自分の {@link IShoppingSale セール} によって使用範囲を制限する必要があります。\n\nもちろん、管理者がマーケット全体で使用できる一般的なクーポンを作成する予定の場合は、管理者は影響を受けるセラーから同意を得る必要があります。", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "クーポンの作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "新しく作成されたクーポン", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "すべてのクーポンを一覧表示", + "description": "すべてのクーポンを一覧表示します。\n\nすべての {@link IShoppingCoupon クーポン} をページ区切りで一覧表示します。\n\n必要に応じて、リクエスト本体で {@link IShoppingCoupon.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingCoupon.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。\n\n参考までに、{@link IShoppingCustomer 顧客} の場合、{@link IShoppingCouponTicket チケット可能} クーポンのみが一覧表示されます。\nそれ以外の場合は、チケット不可のクーポンも一覧表示されます。", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "ページネーション、検索、並べ替えに関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "ページネーションされたクーポン", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/coupons/{id}": { + "delete": { + "summary": "クーポンを消去", + "description": "クーポンを消去します。\n\n指定された ID の {@link IShoppingCoupon クーポン} を消去します。\n\n参考までに、対象クーポンからすでに発行されている {@link IShoppingCouponTicket チケット} がある場合、それらは影響を受けません。\n\nそれらのチケットは有効期限まで有効です。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "対象クーポンの {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "クーポン情報を取得します", + "description": "クーポン情報を取得します。\n\n{@link IShoppingCoupon クーポン} 情報を取得します。\n\n{@link IShoppingCustomer 顧客} の場合、{@link IShoppingCouponTicket チケット可能} クーポンのみにアクセスできます。チケット不可のクーポンは 410 エラーになります。それ以外の場合、{@link IShoppingSeller 販売者} または {@link IShoppingAdministrator 管理者} の場合は、チケット不可のクーポンにもアクセスできます。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "対象クーポンの {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "description": "クーポン情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/deposits": { + "patch": { + "summary": "デポジット メタデータ リストを取得します", + "description": "デポジット メタデータ リストを取得します。\n\nすべての {@link IShoppingDeposit デポジット} メタデータ情報を、{@link IPage pagination} でリストします。\n\n必要に応じて、リクエスト本文で {@link IShoppingDeposit.IRequest.search 検索条件} を構成することで結果を制限できます。\nまた、{@link IShoppingDeposit.IRequest.sort ソート条件} を構成することで、レコードのシーケンス順序をカスタマイズできます。", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "ページ付け、検索、ソートのリクエスト情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "ページ付けされたデポジット メタデータ リスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "新しいデポジット メタデータを作成します", + "description": "新しいデポジット メタデータを作成します。\n\n新しい {@link IShoppingDeposit デポジット} メタデータを作成します。\n\nこのアクションは、デポジットの収益/結果の新しい発生理由を追加することを意味します。\n\nもちろん、新しいデポジット レコードを作成しても、レコードの理由に従って {@link IShoppingCustomer 顧客} の残高が自動的に増減するわけではありません。ロジックはバックエンド側で手動で開発する必要があります。", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "デポジット メタデータの作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "新しく作成されたデポジット メタデータ", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/deposits/{id}": { + "get": { + "summary": "デポジット メタデータを取得します", + "description": "デポジット メタデータを取得します。\n\nID を含む {@link IShoppingDeposit deposit} メタデータ情報を取得します。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象デポジットの {@link IShoppingDeposit.id }" + } + ], + "responses": { + "200": { + "description": "デポジット メタデータ", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "デポジット メタデータを消去します", + "description": "デポジット メタデータを消去します。\n\n{@link IShoppingDeposit deposit} メタデータを消去して、デポジットの理由によって {@link IShoppingCustomer 顧客} の残高がこれ以上増減しないようにします。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象デポジットの {@link IShoppingDeposit.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/deposits/{code}/get": { + "get": { + "summary": "コードでデポジット メタデータを取得します", + "description": "コードでデポジット メタデータを取得します。\n\nコードを使用して {@link IShoppingDeposit deposit} メタデータ情報を取得します。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "デポジット メタデータ", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages": { + "patch": { + "summary": "マイレージ メタデータ リストを取得します", + "description": "マイレージ メタデータ リストを取得します。\n\n{@link IShoppingMileage mileage} メタデータ情報を、{@link IPage pagination} ですべてリストします。\n\n必要に応じて、リクエスト本文で {@link IShoppingMileage.IRequest.search search condition} を構成することで結果を制限できます。\n\nまた、{@link IShoppingMileage.IRequest.sort sort condition} を構成することで、レコードの順序をカスタマイズすることもできます。", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "ページ付け、検索、並べ替えのリクエスト情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "ページ付けされたマイレージ メタデータ リスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "新しいマイレージ メタデータを作成します", + "description": "新しいマイレージ メタデータを作成します。\n\n新しい {@link IShoppingMileage mileage} メタデータを作成します。\n\nこのアクションは、マイレージの収入/結果の新しい発生理由を追加することを意味します。\n\nもちろん、新しいマイレージ レコードを作成しても、レコードの理由に従って {@link IShoppingCustomer 顧客} の残高が自動的に増減するわけではありません。 ロジックはバックエンド側で手動で開発する必要があります。", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "マイレージ メタデータの作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "新しく作成されたマイレージ メタデータ", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages/{id}": { + "get": { + "summary": "マイレージ メタデータを取得します", + "description": "マイレージ メタデータを取得します。\n\nID を含む {@link IShoppingMileage mileage} メタデータ情報を取得します。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ターゲット マイレージの {@link IShoppingMileage.id }" + } + ], + "responses": { + "200": { + "description": "マイレージ メタデータ", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "マイレージ メタデータを消去します", + "description": "マイレージ メタデータを消去します。\n\n{@link IShoppingMileage mileage} メタデータを消去して、マイレージの理由によって {@link IShoppingCustomer 顧客} の残高が増減しないようにします。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ターゲット マイレージの {@link IShoppingMileage.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages/{code}/get": { + "get": { + "summary": "コードでマイレージ メタデータを取得します", + "description": "コードでマイレージ メタデータを取得します。\n\nコードを使用して {@link IShoppingMileage mileage} メタデータ情報を取得します。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "マイレージ メタデータ", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages/donations": { + "patch": { + "summary": "すべてのマイレージ寄付履歴を一覧表示します", + "description": "すべてのマイレージ寄付履歴を一覧表示します。\n\nすべての {@link IShoppingMileageDonation マイレージ寄付履歴} を {@link IPage pagination} で一覧表示します。\n\n必要に応じて、リクエスト本文で {@link IShoppingMileageDonation.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingMileageDonation.IRequest.sort sort} を設定することで、レコードの順序をカスタマイズできます。", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "ページネーション、検索、並べ替えのリクエスト情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "ページ分けされたマイレージ寄付履歴リスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileageDonation" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "市民にマイレージを寄付", + "description": "市民にマイレージを寄付。\n\n現在の {@link IShoppingAdministrator 管理者} から特定の {@link IShoppingCitizen 市民} にマイレージを寄付します。寄付の詳しい理由も記入してください。\n\nマイレージの寄付は市民の残高と現在のショッピング モールの営業利益に影響するため、管理者はマイレージを寄付する詳しい理由をアーカイブする必要があります。", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "マイレージ寄付に関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "マイレージ寄付履歴", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages/donations/{id}": { + "get": { + "summary": "マイレージ寄付履歴を取得します", + "description": "マイレージ寄付履歴を取得します。\n\nID 付きの {@link IShoppingMileageDonation マイレージ寄付履歴} を取得します。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ターゲット履歴の {@link IShoppingMileageDonation.id }" + } + ], + "responses": { + "200": { + "description": "マイレージ寄付履歴", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/orders": { + "patch": { + "summary": "すべての注文をリストします", + "description": "すべての注文を一覧表示します。\n\nすべての {@link IShoppingOrder 注文} をページ区切りで一覧表示します。\n\n必要に応じて、リクエスト本体で {@link IShoppingOrder.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingOrder.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。\n\n参考までに、{@link IShoppingCustomer 顧客} の場合は、注文が {@link IShoppingOrderPublish.paid_at で支払われたかどうかに関係なく、自分の注文を一覧表示できます。\n\nそれ以外の場合は、{@link IShoppingSeller 販売者} または {@link IShoppingAdministrator 管理者} の場合は、支払い済みの注文のみを一覧表示できます。また、販売者の場合は、関連する {@link IShoppingOrder.goods 商品} のみが注文に表示されます。", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "ページネーション、検索、並べ替えに関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "ページネーションされた注文", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/orders/{id}": { + "get": { + "summary": "注文情報を取得します", + "description": "注文情報を取得します。\n\n詳細な {@link IShoppingOrder 注文} 情報を取得します。\n\n{@link IShoppingCustomer 顧客} でない場合は、まだ {@link IShoppingOrderPublish.paid_at で支払われていない注文にアクセスできません。その場合、404 が見つかりませんエラーがスローされます。", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象注文の {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "注文情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales": { + "patch": { + "summary": "要約されたすべての販売をリストします", + "description": "要約されたすべての販売を一覧表示します。\n\nすべての {@link IShoppingSale.ISummary 要約された販売} を一覧表示します。\n\nご覧のとおり、返された販売は要約されており、詳細ではありません。販売の詳細情報を取得する場合は、各販売に対して {@link at} 関数を使用します。\n\n参考までに、{@link IShoppingSeller 販売者} の場合は、自分の {@link IShoppingSale 販売} にのみアクセスできます。それ以外の場合は、{@link IShoppingCustomer 顧客} の場合は、市場で実行中の販売のみを表示できます。未開封、クローズ、または一時停止中の販売は表示できません。\n\nちなみに、必要に応じて、リクエスト本体で {@link IShoppingSale.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingSale.IRequest.sort ソート条件} を構成することで、レコードの順序をカスタマイズできます。", + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "ページネーション、検索、並べ替えに関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "要約情報を含むページネーションされたセール", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{id}": { + "get": { + "summary": "セール情報を取得", + "description": "セール情報を取得します。\n\n詳細情報を含む {@link IShoppingSale セール} を取得します。\n\n{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} にのみアクセスできます。それ以外の場合は、{@link IShoppingCustomer 顧客} の場合は、市場で実行中のセールにのみアクセスできます。未開封、終了、または一時停止中のセールにはアクセスできません。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象セールの{@link IShoppingSale.id}" + } + ], + "responses": { + "200": { + "description": "セール詳細情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments": { + "patch": { + "summary": "問い合わせコメントをすべて一覧表示", + "description": "すべての問い合わせコメントを一覧表示します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} のすべての {@link IShoppingSaleInquiryComment 問い合わせコメント} を {@link IPage ページネーション} で一覧表示します。\n\n必要に応じて、リクエスト本文で {@link IShoppingSaleInquiryComment.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleInquiryComment.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。\n\nちなみに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の問い合わせにのみアクセスできます。それ以外の場合は、セールのすべての問い合わせにアクセスできます。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "ページネーション、検索、並べ替えに関する情報のリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "ページネーションされた問い合わせコメント", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "問い合わせコメントの作成", + "description": "お問い合わせコメントを作成します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} の {@link IShoppingSaleInquiryComment お問い合わせコメント} を作成します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のお問い合わせに対してのみお問い合わせコメントを作成できます。\nそれ以外の場合は、セールのすべてのお問い合わせに対してお問い合わせコメントを作成できます。//|-0-|\\ 所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象問い合わせの {@link IShoppingSaleInquiry.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの作成情報" + } + ], + "requestBody": { + "description": "新しく作成された問い合わせコメント", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "問い合わせコメント情報を取得する", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments/{id}": { + "get": { + "summary": "お問い合わせコメント情報を取得します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} の詳細な {@link IShoppingSaleInquiryComment お問い合わせコメント} 情報を取得します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のお問い合わせコメントにのみアクセスできます。\n\nそれ以外の場合は、セールのすべてのお問い合わせコメントにアクセスできます。", + "description": "所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象の問い合わせコメントの {@link IShoppingSaleInquiryComment.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "詳細な問い合わせコメント情報" + } + ], + "responses": { + "200": { + "description": "問い合わせコメントの更新", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "お問い合わせコメントを更新します。\n\n{@link IShoppingSaleInquiryComment お問い合わせコメント} を特定の{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} に更新します。\n\nちなみに、このショッピングモールのコメントに関する一般的なポリシーでは、コメントを変更しても既存のコンテンツは変更されません。\n\n変更されたコンテンツは、新しい {@link IShoppingSaleInquiryComment.ISnapshot スナップショット} として既存のコメント記録に蓄積され記録されます。そして、これはこのお問い合わせコメントを読むことができるすべての人に公開されます。\n\nこれは、紛争が発生しやすい電子商取引の性質上、顧客や販売者がコメントを変更して状況を操作するのを防ぐためです。つまり、証拠を保存するためです。", + "description": "所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象問い合わせコメントの {@link IShoppingSaleInquiryComment.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの更新情報" + } + ], + "requestBody": { + "description": "問い合わせコメントの新規作成されたスナップショットレコード", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "要約されたすべての質問をリストアップ", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions": { + "patch": { + "summary": "要約された質問をすべてリストします。\n\n{@link IShoppingSale セール} のすべての {@link IShoppingSaleQuestion.ISummary 要約された質問} をリストします。\n\nご覧のとおり、返された質問は要約されており、詳細ではありません。質問の詳細情報を取得するには、各記事に対して {@link adridges} 関数または {@link at} 関数を使用します。\n\nまた、返された質問には {@link IShoppingSaleQuestion.ISummary.answer} プロパティがあり、これは {@link IShoppingSeller} からの正式な回答を意味します。\n\nさらに、返された質問には、他のプリンシパル プロパティをマスクする別の特別なプロパティ {@link IShoppingSaleQuestion.ISummary.secret} があり、関連するアクターのみが質問を {@link at で読み取ることができることを意味します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の質問にのみアクセスできます。それ以外の場合は、セールのすべての質問にアクセスできます。\n\nちなみに、必要に応じて、リクエスト ボディで {@link IShoppingSaleQuestion.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleQuestion.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。", + "description": "所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ページネーション、検索、並べ替えに関する情報をリクエスト" + } + ], + "requestBody": { + "description": "要約情報を含むページ分けされた質問", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "すべての要約された質問をリストします", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions/abridges": { + "patch": { + "summary": "すべての要約された質問を一覧表示します。\n\n{@link IShoppingSale セール} のすべての {@link IShoppingSaleQuestion.IAbridge 要約された質問} を一覧表示します。\n\nご覧のとおり、返される質問は要約されており、詳細ではありません。質問の詳細情報を取得する場合は、各記事に対して {@link at} 関数を使用します。\n\nまた、返される質問には、{@link IShoppingSaleQuestion.IAridge.answer} プロパティがあり、これは {@link IShoppingSeller} からの正式な回答を意味します。\n\nさらに、返される質問には、他の基本プロパティをマスクする別の特別なプロパティ {@link IShoppingSaleQuestion.IAridge.secret} があり、関連するアクターのみが質問を {@link at で読み取ることができることを意味します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の質問にのみアクセスできます。それ以外の場合は、販売のすべての質問にアクセスできます。\n\nちなみに、必要に応じて、リクエスト本文に\n{@link IShoppingSaleQuestion.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleQuestion.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。", + "description": "所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ページ付け、検索、並べ替えに関する情報をリクエスト" + } + ], + "requestBody": { + "description": "要約情報を含むページ付けされた質問", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "質問情報を取得", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions/{id}": { + "get": { + "summary": "質問情報を取得します。\n\n{@link IShoppingSale セール} の詳細な {@link IShoppingSaleQuestion 質問} 情報を取得します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の質問にのみアクセスできます。それ以外の場合、{@link IShoppingCustomer 顧客} の場合は、{@link IShoppingSaleQuestion.secret} の値が `false` である場合を除き、セールのすべての質問にアクセスできます。//|-0-|\\ 所属セールの {@link IShoppingSale.id }", + "description": "対象の質問の {@link IShoppingSaleQuestion.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "詳細な質問情報" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべての問い合わせコメントを一覧表示します" + } + ], + "responses": { + "200": { + "description": "すべての問い合わせコメントを一覧表示します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} のすべての {@link IShoppingSaleInquiryComment 問い合わせコメント} を {@link IPage ページネーション} で一覧表示します。\n\n必要に応じて、リクエスト本文で {@link IShoppingSaleInquiryComment.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleInquiryComment.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。\n\nちなみに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の問い合わせにのみアクセスできます。それ以外の場合は、セールのすべての問い合わせにアクセスできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments": { + "patch": { + "summary": "所属セールの {@link IShoppingSale.id }", + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ページネーション、検索、並べ替えに関する情報のリクエスト" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ページネーションされた問い合わせコメント" + } + ], + "requestBody": { + "description": "問い合わせコメントの作成", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "お問い合わせコメントを作成します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} の {@link IShoppingSaleInquiryComment お問い合わせコメント} を作成します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のお問い合わせに対してのみお問い合わせコメントを作成できます。\nそれ以外の場合は、セールのすべてのお問い合わせに対してお問い合わせコメントを作成できます。//|-0-|\\ 所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "対象問い合わせの {@link IShoppingSaleInquiry.id }", + "description": "問い合わせコメントの作成情報", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "新しく作成された問い合わせコメント" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメント情報を取得する" + } + ], + "requestBody": { + "description": "お問い合わせコメント情報を取得します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} の詳細な {@link IShoppingSaleInquiryComment お問い合わせコメント} 情報を取得します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のお問い合わせコメントにのみアクセスできます。\n\nそれ以外の場合は、セールのすべてのお問い合わせコメントにアクセスできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { + "get": { + "summary": "所属問い合わせの {@link IShoppingSaleInquiry.id }", + "description": "対象の問い合わせコメントの {@link IShoppingSaleInquiryComment.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "詳細な問い合わせコメント情報" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの更新" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "お問い合わせコメントを更新します。\n\n{@link IShoppingSaleInquiryComment お問い合わせコメント} を特定の{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} に更新します。\n\nちなみに、このショッピングモールのコメントに関する一般的なポリシーでは、コメントを変更しても既存のコンテンツは変更されません。\n\n変更されたコンテンツは、新しい {@link IShoppingSaleInquiryComment.ISnapshot スナップショット} として既存のコメント記録に蓄積され記録されます。そして、これはこのお問い合わせコメントを読むことができるすべての人に公開されます。\n\nこれは、紛争が発生しやすい電子商取引の性質上、顧客や販売者がコメントを変更して状況を操作するのを防ぐためです。つまり、証拠を保存するためです。" + } + ], + "responses": { + "200": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "所属問い合わせの {@link IShoppingSaleInquiry.id }", + "description": "対象問い合わせコメントの {@link IShoppingSaleInquiryComment.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの更新情報" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの新規作成されたスナップショットレコード" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "要約されたレビューをすべて一覧表示" + } + ], + "requestBody": { + "description": "要約されたレビューをすべて一覧表示します。\n\n{@link IShoppingSale セール} のすべての {@link IShoppingSaleReview.ISummary 要約されたレビュー} を一覧表示します。\n\nご覧のとおり、返されるレビューは要約されており、詳細ではありません。レビューの詳細情報を取得するには、各記事に対して {@link adridges} 関数または {@link at} 関数を使用します。\n\nまた、返されるレビューには、{@link IShoppingSeller} からの正式な回答を意味する {@link IShoppingSaleReview.ISummary.answer} プロパティがあります。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のレビューにのみアクセスできます。それ以外の場合は、セールのすべてのレビューにアクセスできます。\n\nちなみに、必要に応じて、リクエスト本文で {@link IShoppingSaleReview.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingSaleReview.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews": { + "patch": { + "summary": "ページネーション、検索、並べ替えに関する情報をリクエスト", + "description": "要約情報を含むページ分けされたレビュー", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべての要約レビューを一覧表示" + } + ], + "requestBody": { + "description": "すべての要約レビューを一覧表示します。\n\n{@link IShoppingSale セール} のすべての {@link IShoppingSaleReview.IAbridge 要約レビュー} を一覧表示します。\n\nご覧のとおり、返されるレビューは要約されており、詳細ではありません。レビューの詳細情報を取得するには、各記事に対して {@link at} 関数を使用します。\n\nまた、返されるレビューには、{@link IShoppingSeller} からの正式な回答を意味する {@link IShoppingSaleReview.IAridge.answer} プロパティがあります。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のレビューにのみアクセスできます。 それ以外の場合は、セールのすべてのレビューにアクセスできます。\n\nちなみに、必要に応じて、リクエスト本文で {@link IShoppingSaleReview.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingSaleReview.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews/abridges": { + "patch": { + "summary": "ページ付け、検索、並べ替えに関する情報をリクエスト", + "description": "要約情報を含むページ付けされたレビュー", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "レビュー情報を取得" + } + ], + "requestBody": { + "description": "レビュー情報を取得します。\n\n{@link IShoppingSale セール} の詳細な {@link IShoppingSaleReview レビュー} 情報を取得します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のレビューにのみアクセスできます。それ以外の場合は、{@link IShoppingCustomer カスタマー} の場合は、セールのすべてのレビューにアクセスできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews/{id}": { + "get": { + "summary": "対象レビューの {@link IShoppingSaleReview.id }", + "description": "詳細なレビュー情報", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべてのスナップショットを一覧表示します" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべてのスナップショットを一覧表示します。\n\n{@link IShoppingSeller セラー} が {@link IShoppingSale セール} を更新するたびに、セール レコードは更新されませんが、セール履歴の整合性を保つために新しい {@link IShoppingSaleSnapshot スナップショット} レコードが作成されます。この API 関数は、このようなスナップショット レコードを一覧表示するためのものです。\n\nまた、戻り値の型からわかるように、返されるスナップショットは要約されており、詳細ではありません。スナップショットの詳細情報を取得するには、各スナップショットに対して {@link at} または {@link flipo} 関数を使用します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のスナップショットにのみアクセスできます。それ以外の場合は、セールが終了または一時停止されていても、セールのすべてのスナップショットにアクセスできます。" + } + ], + "responses": { + "200": { + "description": "ターゲットセールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/snapshots": { + "patch": { + "summary": "ページネーションのリクエスト情報", + "description": "要約情報を含むページ分けされたスナップショット", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "スナップショット情報を取得します" + } + ], + "requestBody": { + "description": "スナップショット情報を取得します。\n\n詳細情報を含む {@link IShoppingSaleSnapshot スナップショット} を取得します。\n\n戻り値の型からわかるように、返されたスナップショットには {@link IShoppingSale セール} 情報は含まれていません。セール情報を取得する場合は、代わりに {@link flip} 関数を使用します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のスナップショットにのみアクセスできます。それ以外の場合は、セールが終了または一時停止されていても、セールのすべてのスナップショットにアクセスできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/snapshots/{id}": { + "get": { + "summary": "対象スナップショットの {@link IShoppingSaleSnapshot.id }", + "description": "スナップショットの詳細情報", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "反転スナップショット情報を取得します" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "反転されたスナップショット情報を取得します。\n\n反転されたスナップショットの {@link IShoppingSale sale} 情報を取得します。\n\n戻り値の型からわかるように、この関数は {@link IShoppingSale sale} 情報を返します。ちなみに、セール情報は最新のものではなく、スナップショット側の反転された情報です。\n\nまた、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale sale} のスナップショットにのみアクセスできます。それ以外の場合は、セールが終了または一時停止されていても、セールのすべてのスナップショットにアクセスできます。" + } + ], + "responses": { + "200": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/snapshots/{id}/flip": { + "get": { + "summary": "ターゲット スナップショットの {@link IShoppingSaleSnapshot.id }", + "description": "スナップショット側の詳細なセール情報", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "新しいカテゴリの作成" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "新しいカテゴリを作成します。\n\n指定された名前の {@link IShoppingChannel チャネル} の新しい {@link IShoppingChannelCategory カテゴリ} を作成します。必要に応じて、親カテゴリを ID で指定できます。" + } + ], + "responses": { + "200": { + "description": "所属チャネルの {@link IShoppingChannel.code }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories": { + "post": { + "summary": "カテゴリの作成情報", + "description": "新しく作成されたカテゴリ", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "子レコードを含むすべてのカテゴリをリストします" + } + ], + "requestBody": { + "description": "子レコードを持つすべてのカテゴリを一覧表示します。\n\nページ区切り付きの {@link IShoppingChannel チャネル} のすべての {@link IShoppingChannelCategory.IHierarchical カテゴリ} を一覧表示します。返されるカテゴリには子カテゴリも含まれます。\n\n必要に応じて、リクエスト本文で {@link IShoppingChannelCategory.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingChannelCategory.IRequest.sort ソート条件} を構成することで、レコードの順序をカスタマイズすることもできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "所属チャンネルの {@link IShoppingChannel.code }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "子カテゴリーを持つページ分けされたカテゴリー", + "description": "カテゴリーを更新", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "カテゴリーを更新します。\n\n{@link IShoppingChannelCategory カテゴリー} の名前を更新します。必要に応じて、親カテゴリーを ID で変更できます。もちろん、親カテゴリーから切り離してルートカテゴリーにすることも可能です。" + } + ], + "responses": { + "200": { + "description": "所属チャンネルの {@link IShoppingChannel.code }", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}": { + "put": { + "summary": "対象カテゴリーの {@link IShoppingChannelCategory.id }", + "description": "カテゴリの情報を更新します", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "カテゴリ情報を取得します" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "カテゴリ情報を取得します。\n\n詳細な {@link IShoppingChannelCategory カテゴリ} 情報を取得します。\n\n返されるカテゴリには、階層的な子カテゴリが含まれ、再帰的な親カテゴリも含まれます。" + } + ], + "requestBody": { + "description": "所属するチャネルの {@link IShoppingChannel.code }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "対象カテゴリの {@link IShoppingChannelCategory.id }", + "description": "詳細なカテゴリ情報", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "複数のカテゴリを 1 つに結合します" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "複数のカテゴリを 1 つにマージします。\n\nこのショッピング モール システムでは、{@link IShoppingChannelCategory カテゴリ} は、{@link IShoppingSale 販売} などの他のすべてのコア エンティティに影響を与える体系的なエンティティであるため、削除することはできません。削除する代わりに、複数のカテゴリを 1 つにマージできます。\n\n他のカテゴリを吸収するカテゴリを指定すると、他のすべてのカテゴリが指定されたカテゴリにマージされます。また、カテゴリの補助エンティティもマージされ、それらの参照もカスケード マージされます。" + } + ], + "responses": { + "200": { + "description": "所属チャンネルの {@link IShoppingChannel.code }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories/merge": { + "delete": { + "summary": "カテゴリのマージ情報", + "description": "反転されたカテゴリ情報を取得します", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "反転されたカテゴリ情報を取得します。\n\n反転された {@link IShoppingChannelCategory.IInvert category} 情報を取得します。\n\n返されたカテゴリには再帰的な親カテゴリが含まれますが、階層的な子カテゴリは含まれません。" + } + ], + "requestBody": { + "description": "所属チャンネルの {@link IShoppingChannel.code }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}/invert": { + "get": { + "summary": "対象カテゴリの {@link IShoppingChannelCategory.id }", + "description": "詳細なカテゴリ情報", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "新しいチャンネルを作成します" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "新しいチャネルを作成します。\n\n指定されたコードと名前で新しい {@link IShoppingChannel チャネル} を作成します。\n\nチャネルは個別の市場を意味するため、\n{@link IShoppingAdministrator 管理者} は、新しいアプリケーションが登録されている場合にのみこのアクションを実行する必要があります。" + } + ], + "responses": { + "200": { + "description": "チャネルの作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels": { + "post": { + "summary": "新しく作成されたチャネル", + "description": "すべてのチャネルをリストします", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "すべてのチャンネルを一覧表示します。\n\nすべての {@link IShoppingChannel チャンネル} をページ区切りで一覧表示します。\n\n必要に応じて、リクエスト本体で {@link IShoppingChannel.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingChannel.IRequest.sort ソート条件} を設定することで、レコードのシーケンス順序をカスタマイズできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "ページ区切り、検索、ソートのリクエスト情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "ページ区切りのチャンネル", + "description": "チャンネルを更新", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "チャネルを更新します。\n\n{@link IShoppingChannel チャネル} の名前を更新します。\n\nチャネルのコードを変更することはできません。強制的に変更したい場合は、新しいチャネルを {@link create} して、それに {@link merge} します。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "対象チャネルの {@link IShoppingChannel.code }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{id}": { + "put": { + "summary": "チャネルの情報を更新します", + "description": "チャネルの情報を取得します", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "チャンネル情報を取得します。\n\n詳細な {@link IShoppingChannel.IHierarchical チャンネル} 情報を取得します。\n\n返されるチャンネル インスタンスには、ネストされた {@link IShoppingChannelCategory.IHierarchical 階層カテゴリ} 情報も含まれます。" + } + ], + "requestBody": { + "description": "ターゲット チャンネルの {@link IShoppingChannel.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "詳細なチャンネル情報", + "description": "複数のチャンネルを 1 つに結合します", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "複数のチャネルを 1 つにマージします。\n\nこのショッピング モール システムでは、{@link IShoppingChannel チャネル} は、顧客、メンバー、売上など、他のすべてのコア エンティティに影響を与える体系的なエンティティであるため、削除することはできません。削除する代わりに、複数のチャネルを 1 つにマージできます。\n\n他のチャネルを吸収するチャネルを指定すると、他のすべてのチャネルが指定されたチャネルにマージされます。また、チャネルの従属エンティティもマージされ、その参照もカスケード マージされます。" + } + ], + "responses": { + "200": { + "description": "マージに関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/merge": { + "delete": { + "summary": "ネストされたカテゴリを持つすべてのチャネルをリストします", + "description": "ネストされたカテゴリを持つすべてのチャネルを一覧表示します。\n\n{@link IPage ページネーション} を持つすべての {@link IShoppingChannel.IHierarchical チャネル} を一覧表示します。返されるチャネルには、ネストされた階層的な {@link IShoppingChannelCategory.IHierarchical カテゴリ} が含まれます。\n\n必要に応じて、リクエスト本体で {@link IShoppingChannel.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingChannel.IRequest.sort ソート条件} を構成することで、レコードの順序をカスタマイズできます。", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "ページ区切り、検索、並べ替えに関する情報を要求します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/hierarchical": { + "patch": { + "summary": "ネストされたカテゴリを持つページ区切りのチャネル", + "description": "コードでチャネル情報を取得します", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "コードでチャネル情報を取得します。\n\nコードで詳細な {@link IShoppingChannel.IHierarchical チャネル} 情報を取得します。\n\n返されるチャネル インスタンスには、ネストされた {@link IShoppingChannelCategory.IHierarchical 階層カテゴリ} 情報も含まれます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "対象チャネルの {@link IShoppingChannel.code }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{code}/get": { + "get": { + "summary": "詳細なチャネル情報", + "description": "新しいセクションを作成します", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "新しいセクションを作成します。\n\n指定されたコードと名前で新しい {@link IShoppingSection セクション} を作成します。\n\nセクションは、他のセクションと異なるタイプの製品を扱う市場の空間単位を意味するため、{@link IShoppingAdministrator 管理者}\nは、新しいセクションが必要な場合にのみこのアクションを実行する必要があります。" + } + ], + "responses": { + "200": { + "description": "セクションの作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/sections": { + "post": { + "summary": "新しく作成されたセクション", + "description": "すべてのセクションをリストします", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "すべてのセクションを一覧表示します。\n\nすべての {@link IShoppingSection セクション} をページ区切りで一覧表示します。\n\n必要に応じて、リクエスト本体で {@link IShoppingSection.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSection.IRequest.sort ソート条件} を設定することで、レコードのシーケンス順序をカスタマイズできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "ページ区切り、検索、ソートのリクエスト情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "ページ区切りのセクション", + "description": "セクションを更新", + "tags": [ + "Section" + ], + "parameters": [], + "requestBody": { + "description": "セクションを更新します。\n\n{@link IShoppingSection セクション} の名前を更新します。\n\nセクションのコードを変更することはできません。 強制的に変更したい場合は、新しいセクションを {@link create} して、それに {@link merge} します。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "対象セクションの {@link IShoppingSection.code }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/sections/{id}": { + "put": { + "summary": "セクションの情報を更新します", + "description": "セクション情報を取得します", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "セクション情報を取得します。\n\n{@link IShoppingSection セクション} の詳細情報を取得します" + } + ], + "requestBody": { + "description": "対象セクションの {@link IShoppingSection.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "詳細なセクション情報を取得します", + "description": "複数のセクションを1つに結合", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "複数のセクションを 1 つにマージします。\n\nこのショッピング モール システムでは、{@link IShoppingSection セクション} は、{@link IShoppingSale 販売} などの他のすべてのコア エンティティに影響を与える体系的なエンティティであるため、削除することはできません。\n\n削除する代わりに、複数のセクションを 1 つにマージできます。\n\n他のセクションを吸収するセクションを指定すると、他のすべてのセクションが指定されたセクションにマージされます。また、セクションの従属エンティティもマージされ、その参照もカスケード マージされます。" + } + ], + "responses": { + "200": { + "description": "入力 マージの情報を要求", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/sections/merge": { + "delete": { + "summary": "コードでセクション情報を取得します", + "description": "コードでセクション情報を取得します。\n\nコードで詳細な {@link IShoppingSection セクション} 情報を取得します。", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "対象セクションの {@link IShoppingSection.code }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/sections/{code}/get": { + "get": { + "summary": "詳細なセクション情報", + "description": "認証トークンを更新します", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "認証トークンを更新します。\n\n事前に発行された {@link IShoppingCustomer.IToken.refresh リフレッシュ} トークンを使用して、{@link IShoppingCustomer 顧客} の新しい {@link IShoppingCustomer.IToken.access アクセス トークン} を作成します。\n\nこの関数は、{@link IShoppingCustomer.IToken.refreshable_until} 値まで使用できることに注意してください。" + } + ], + "responses": { + "200": { + "description": "トークンを更新します。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/refresh": { + "patch": { + "summary": "新しいトークンを使用した顧客情報", + "description": "現在の顧客情報を取得します", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "現在の顧客情報を取得します。\n\n{@link IShoppingCustomer.IToken.access アクセス トークン} から現在の {@link IShoppingCustomer 顧客} 情報を取得します。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IRefresh" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "現在の顧客情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IAuthorized" + } + } + } + } + } + } + }, + "/shoppings/customers/authenticate": { + "get": { + "summary": "新しい顧客レコードを作成します", + "description": "新しい顧客レコードを作成します。\n\nこのショッピング モール システムでは、このマーケットに参加しているすべての人を「顧客」と定義しています。また、顧客レコードは個々の {@link IShoppingCitizen 人} に基づいてアーカイブされるのではなく、接続単位に基づいてアーカイブされます。\n\nしたがって、同じ人物であっても、接続が確立されるたびに新しい {@link IShoppingCustomer} レコードが作成されます。\n\nしたがって、このサービスにアクセスするすべてのクライアント アプリケーションは、最初にこの関数を呼び出して、顧客の流入パスをサーバーに報告し、{@link IShoppingCustomer.IToken.access アクセス トークン} を作成する必要があります。この関数呼び出しをスキップすると、他のすべての API 関数が禁止されます。市民権を {@link アクティブ化} したり、{@link IShoppingMember メンバー アカウント} を使用して {@link ログイン} したりする場合でも、例外はありません。認証またはログインする前に、必ず最初にこの関数を呼び出してください。これは、{@link IShoppingAdministrator 管理者} または\n{@link IShoppingSeller セラー} がログインする場合にも適用されます。\n\nまた、認証トークンには\n{@link IShoppingCustomer.IToken.expired_at 有効期限}\nがあり、永続的に使用することはできません。参考までに、認証トークンの有効期間は\n3 時間で、3 時間経過後も顧客認証を維持する場合は、{@link refresh} 関数を呼び出す必要があります。", + "tags": [ + "Authenticate" + ], + "parameters": [], + "responses": { + "200": { + "description": "顧客の作成情報。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "トークンを使用して顧客情報を作成しました。", + "description": "メンバーシップに参加", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "会員登録します。\n\n{@link IShoppingCustomer Customer} は、現在のショッピングモールシステムの {@link IShoppingMember 会員登録} に登録します。\n\n{@link IShoppingCitizen 市民権}\n{@link activate アクティベーション} も実行していれば、今後ログインするたびに {@link activate} 関数の呼び出しを省略できます。また、{@link activate} と {@link external} 関数の呼び出しで {@link IShoppingOrder を購入した} 場合は、注文履歴にもアクセスできます。つまり、会員登録前のアクティビティの詳細にも継続してアクセスできます。\n\n参考までに、{@link create} 関数で説明したように、この `join` 関数を呼び出す前に、まず {@link create} 関数を呼び出して顧客レコードとトークンを作成する必要があります。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "会員の入会情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IAuthorized" + } + } + } + } + } + } + }, + "/shoppings/customers/authenticate/join": { + "post": { + "summary": "入会されたお客様の情報", + "description": "会員ログイン", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "メンバーシップ ログイン。\n\n{@link IShoppingCustomer Customer} は、自分の {@link IShoppingMember メンバーシップ} アカウントでメール アドレスとパスワードを使用してログインします。\n\n{@link IShoppingMember member} が以前に {@link activate 市民権アクティベーション} を実行したことがある場合は、それに応じて {@link IShoppingCustomer.citizen} の値が入力されます。また、メンバーが {@link IShoppingAdministrator 管理者} または {@link IShoppingSeller セラー} としてもサインアップしている場合は、それに応じて関連情報も入力されます。\n\n参考までに、{@link create} 関数で説明されているように、この `login` 関数を呼び出す前に、まず {@link create} 関数を呼び出して顧客レコードとトークンを作成する必要があります。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "ログインリクエスト情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/login": { + "put": { + "summary": "ログイン 顧客情報", + "description": "市民権を有効にする", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "市民権をアクティブ化します。\n\n{@link IShoppingCustomer Customer} は、携帯電話番号と実名を使用して、自分の {@link IShoppingCitizen 市民権} をアクティブ化します。\n\n顧客がすでに {@link join 参加} している場合は、今後ログインするたびに市民権 {@link activation} 関数の呼び出しをスキップできます。\n\nもちろん、このストーリーは {@link external} 関数でも同様です。\n\n参考までに、{@link create} 関数で説明されているように、この `activate` 関数を呼び出す前に、まず {@link create} 関数を呼び出して顧客レコードとトークンを作成する必要があります。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "市民権の有効化情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/activate": { + "post": { + "summary": "有効化された顧客情報", + "description": "外部ユーザー情報の登録", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "外部ユーザー情報を登録します。\n\n{@link IShoppingCustomer Customer} は、他のサービスから自分の {@link IShoppingExternalUser 外部ユーザー} 情報を登録します。\n\n{@link join Membership 参加} 関数と同様の効果があります。そのため、{@link IShoppingCitizen 市民権}\n{@link activate アクティベーション} も実行している場合は、今後同じ情報でこの `external` 関数を呼び出すたびに、{@link activate} 関数の呼び出しをスキップできます。また、{@link activate} および {@link join} 関数の呼び出しで、その人が {@link IShoppingOrder を購入} している場合は、注文履歴にもアクセスできます。つまり、外部サーバー登録前のアクティビティの詳細にも、継続してアクセスできます。\n\n参考までに、{@link create} 関数で説明したように、この `external` 関数を呼び出す前に、まず {@link create} 関数を呼び出して顧客レコードとトークンを作成する必要があります。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "外部ユーザーの登録情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/external": { + "post": { + "summary": "外部ユーザーが登録した顧客情報", + "description": "パスワードの変更", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "パスワードの変更。\n\n現在のパスワードを使用して、{@link IShoppingMember member} のパスワードを変更します。\n\n現在のパスワードが必要な理由は、セキュリティのためです。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingExternalUser.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "新しいパスワードと現在のパスワード", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/password/change": { + "put": { + "summary": "すべてのクーポンを一覧表示します", + "description": "すべてのクーポンを一覧表示します。\n\nすべての {@link IShoppingCoupon クーポン} をページ区切りで一覧表示します。\n\n必要に応じて、リクエスト本体で {@link IShoppingCoupon.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingCoupon.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。\n\n参考までに、{@link IShoppingCustomer 顧客} の場合、{@link IShoppingCouponTicket チケット可能} クーポンのみが一覧表示されます。\nそれ以外の場合は、チケット不可のクーポンも一覧表示されます。", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "ページネーション、検索、並べ替えに関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.IPasswordChange" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/coupons": { + "patch": { + "summary": "ページネーションされたクーポン", + "description": "クーポン情報を取得", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "クーポン情報を取得します。\n\n{@link IShoppingCoupon クーポン} 情報を取得します。\n\n{@link IShoppingCustomer 顧客} の場合、{@link IShoppingCouponTicket チケット可能} クーポンのみにアクセスできます。チケット不可能なクーポンは 410 エラーを引き起こします。それ以外の場合は、{@link IShoppingSeller 販売者} または {@link IShoppingAdministrator 管理者} の場合、チケット不可能なクーポンにもアクセスできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "ターゲットクーポンの {@link IShoppingCoupon.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/coupons/{id}": { + "get": { + "summary": "クーポン情報", + "description": "すべてのクーポンチケットを一覧表示", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "すべてのクーポン チケットを一覧表示します。\n\n{@link IShoppingCustomer 顧客} のすべての {@link IShoppingCouponTicket クーポン チケット} を {@link IPage pagination} で一覧表示します。\n\n参考までに、クーポン チケットとは、顧客が {@link IShoppingCoupon クーポン} を使用したことを意味します。対象のクーポンに有効期限がある場合、クーポン チケットにも {@link IShoppingCouponTicket.expired_at 有効期限} があり、そのような期限切れのチケットは一覧表示されません。同様に、{@link IShoppingOrder 注文} の {@link IShoppingCouponTicketPayment 支払い} に使用されたチケットも一覧表示されません。\n\nさらに、リクエスト本文で {@link IShoppingCouponTicket.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingCouponTicket.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。" + } + ], + "responses": { + "200": { + "description": "ページネーション、検索、並べ替えに関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/coupons/tickets": { + "patch": { + "summary": "ページネーションされたクーポンチケット", + "description": "新しいクーポンチケットを作成する", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "新しいクーポン チケットを作成します。\n\n{@link IShoppingCustomer 顧客} の特定の {@link IShoppingCoupon クーポン} の新しい {@link IShoppingCouponTicket クーポン チケット} を作成します。\n\nちなみに、対象のクーポンが {@link IShoppingCoupon.expired_at 期限切れ} または {@link IShoppingCoupon.IInventory.volume 在庫切れ} または {@link IShoppingCoupon.IInventory.volume_per_citizen が彼/彼女のために使い果たされた場合、\n410 例外がスローされます。\n\nまた、対象のクーポンから新しいクーポン チケットを作成することに成功した場合でも、クーポンに有効期限がある場合、新しく作成されたチケットには {@link IShoppingCouponTicket.expired_at 有効期限} も設定され、有効期限後に無効になります。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "クーポンチケットの作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCouponTicket" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "新しく作成されたクーポンチケット", + "description": "クーポンチケットを取得します", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "クーポンチケットを取得します。\n\nID を含む {@link IShoppingCouponTicket クーポンチケット} 情報を取得します。\n\nちなみに、対象のクーポンチケットが {@link IShoppingCouponTicket.expired_at 期限切れ} になっているか、{@link IShoppingOrder 注文} の {@link IShoppingCouponTicketPayment 支払い} に使用されている場合、\n410 例外がスローされます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "対象のクーポンチケットの {@link IShoppingCouponTicket.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/coupons/tickets/{id}": { + "get": { + "summary": "クーポンチケット情報", + "description": "すべてのデポジット料金を一覧表示します", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべてのデポジット料金を一覧表示します。\n\n{@link IShoppingCustomer 顧客} のすべての {@link IShoppingDepositCharge デポジット料金} を {@link IPage ページネーション} で一覧表示します。\n\n必要に応じて、リクエスト本文で {@link IShoppingDepositCharge.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingDepositCharge.IRequest.sort ソート条件} を構成することで、レコードの順序をカスタマイズできます。" + } + ], + "responses": { + "200": { + "description": "ページ区切り、検索、並べ替えに関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/charges": { + "patch": { + "summary": "ページ区切りの預託金手数料", + "description": "新しい預託金手数料アプリケーションを作成する", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "新しいデポジットチャージ アプリケーションを作成します。\n\n新しい {@link IShoppingDepositCharge デポジットチャージ アプリケーション} を作成します。\n\nちなみに、この機能はデポジットチャージの完了を意味するものではなく、\n{@link IShoppingCustomer 顧客} がデポジットチャージを申請していることを意味します。\nデポジットチャージは、顧客がデポジットチャージを支払った場合にのみ完了します。\n//|-0-|\\ デポジットチャージの作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "新しく作成されたデポジットチャージ", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDepositCharge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "デポジットチャージ情報を取得します", + "description": "デポジット料金情報を取得します。\n\n{@link IShoppingDepositCharge デポジット料金} 情報を取得します。", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "対象のデポジット料金の {@link IShoppingDepositCharge.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "デポジット料金情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/charges/{id}": { + "get": { + "summary": "デポジット料金アプリケーションを更新します", + "description": "デポジット料金アプリケーションを更新します。\n\n{@link IShoppingCustomer} によって適用された {@link IShoppingDepositCharge デポジット料金アプリケーション} の値を更新します。\n\n料金が {@link IShoppingDepositChargePublish 公開済み} の場合、デポジット料金を更新することはできません。410 gone 例外のみがスローされます。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "対象のデポジット料金の {@link IShoppingDepositCharge.id }" + } + ], + "responses": { + "200": { + "description": "変更する値", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "デポジット料金アプリケーションを消去します", + "description": "デポジット料金アプリケーションを消去します。\n\n{@link IShoppingCustomer} によって適用された {@link IShoppingDepositCharge デポジット料金アプリケーション} を消去します。\n\n料金が {@link IShoppingDepositChargePublish 公開済み} の場合、デポジット料金を消去することはできません。その場合は、{@link publish.cancel} 関数を呼び出して支払いをキャンセルする必要があります。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "対象のデポジット料金の {@link IShoppingDepositCharge.id }" + } + ], + "requestBody": { + "description": "公開可能かどうかを確認します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "公開可能かどうかを確認します。\n\n{@link IShoppingDepositCharge 課金} が公開可能かどうかをテストします。\n\n課金が {@link IShoppingDepositChargePublish 公開} されておらず、まだ削除されていない場合は、課金を公開できます", + "description": "対象課金の {@link IShoppingDepositCharge.id }", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "課金が公開可能かどうか" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/charges/{chargeId}/publish/able": { + "get": { + "summary": "課金を公開する", + "description": "料金を発行します。\n\n{@link IShoppingDepositChargePublish は、支払いベンダー システムから取得した支払い情報を使用して、{@link IShoppingCustomer} によって適用された {@link IShoppingDepositCharge 料金} を発行します。\n\nまた、支払い時間は発行時間と異なる場合があります。たとえば、支払い方法が手動の銀行口座振替である場合、支払いは顧客が実際に送金するまで延期されます。その場合、{@link IShoppingDepositChargePublish.paid_at} は `null` 値になるため、この発行関数を呼び出した後に確認する必要があります。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "chargeId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象チャージの {@link IShoppingDepositCharge.id }" + } + ], + "responses": { + "200": { + "description": "パブリッシュの作成情報", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/charges/{chargeId}/publish": { + "post": { + "summary": "新しく作成されたパブリッシュ", + "description": "すべての入金履歴を一覧表示", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "chargeId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべての入金履歴を一覧表示します。\n\n{@link IShoppingCustomer 顧客} のすべての {@link IShoppingDepositHistory 入金履歴} を {@link IPage ページネーション} で一覧表示します。\n\n必要に応じて、リクエスト本文で {@link IShoppingDepositHistory.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingDepositHistory.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。" + } + ], + "requestBody": { + "description": "ページネーション、検索、並べ替えに関する情報を要求します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositChargePublish.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "ページネーションされた入金履歴", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositChargePublish" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/histories": { + "patch": { + "summary": "入金履歴情報を取得します", + "description": "入金履歴情報を取得します。\n\n{@link IShoppingDepositHistory 入金履歴} 情報を取得します。", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "入金履歴情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositHistory.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "入金残高を取得します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDepositHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/histories/{id}": { + "get": { + "summary": "入金残高を取得します。\n\n{@link IShoppingCustomer 顧客} の入金の現在の残高を取得します。", + "description": "入金残高", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "すべてのマイレージ履歴を一覧表示します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/histories/balance": { + "get": { + "summary": "すべての走行距離履歴を一覧表示します。\n\n{@link IShoppingCustomer 顧客} のすべての {@link IShoppingMileageHistory 走行距離履歴} を {@link IPage ページネーション} で一覧表示します。\n\n必要に応じて、リクエスト本文で {@link IShoppingMileageHistory.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingMileageHistory.IRequest.sort ソート条件} を構成することで、レコードの順序をカスタマイズできます。", + "description": "ページネーション、検索、並べ替えに関する情報を要求します", + "tags": [ + "Discount" + ], + "parameters": [], + "responses": { + "200": { + "description": "ページネーションされた走行距離履歴", + "content": { + "application/json": { + "schema": { + "type": "number" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/mileages/histories": { + "patch": { + "summary": "走行距離履歴情報を取得します", + "description": "走行距離履歴情報を取得します。\n\n{@link IShoppingMileageHistory 走行距離履歴} 情報を取得します", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "対象の走行距離履歴の {@link IShoppingMileageHistory.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageHistory.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "走行距離履歴情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileageHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/mileages/histories/{id}": { + "get": { + "summary": "走行距離の残高を取得します", + "description": "走行距離の残高を取得します。\n\n{@link IShoppingCustomer 顧客} の現在の走行距離残高を取得します", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "走行距離の残高" + } + ], + "responses": { + "200": { + "description": "すべての商品のリスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/mileages/histories/balance": { + "get": { + "summary": "すべての商品のリスト。\n\nショッピング カート内のすべての {@link IShoppingCartCommodity 商品} を {@link IPage pagination} でリストします。\n\n*cartId* が指定されておらず、`null` 値が割り当てられている場合は、すべてのカートが対象になります。また、リクエスト ボディで {@link IShoppingCartCommodity.IRequest.search 検索条件} を構成することで結果を制限できます。さらに、{@link IShoppingCartCommodity.IRequest.sort} を構成することで、レコードの順序をカスタマイズできます。\n\n参考までに、商品が {@link IShoppingOrder 注文} され、{@link IShoppingOrderPublish 公開} された場合、その商品はショッピング カートにそれ以上追加されません。それ以外の場合、注文はまだ公開されていません。その商品はショッピング カートに追加され、同じ商品で新しい {@link IShoppingOrder 注文申請} を作成できます。\n\nもちろん、対象の {@link IShoppingSale セール} が中止されている場合、または\n{@link IShoppingSaleUnitStockInventory 在庫切れ} の場合は、ショッピング カートにそれ以上追加されません。", + "description": "所属カートID", + "tags": [ + "Discount" + ], + "parameters": [], + "responses": { + "200": { + "description": "ページネーション、検索、並び替え情報リクエスト", + "content": { + "application/json": { + "schema": { + "type": "number" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities": { + "patch": { + "summary": "ページネーションされた商品", + "description": "新規商品作成", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "新しい商品を作成します。\n\n特定のショッピング カートに新しい {@link IShoppingCartCommodity 商品} を作成します。\n\n{@link IShoppingCartCommodity.ICreate.accumulate} の値が `true` で、同じ {@link IShoppingSaleUnitStock.IInvert stocks and quantity} で構成されている同じ商品がある場合、新しい商品は作成されませんが、数量は累積されます。\n\nまた、*cartId* が指定されておらず、`null` 値が割り当てられている場合は、通常のカートが使用されるか、以前のカートの存在を考慮して新しいカートが作成されます。\n\nちなみに、対象の {@link IShoppingSale sale} が中断されているか、{@link IShoppingSaleUnitStockInventory 在庫切れ} の場合は、410 エラーがスローされます。したがって、事前に対象のセールと\n{@link IShoppingSaleUnitStock stock} のステータスを確認しておくことをお勧めします。" + } + ], + "requestBody": { + "description": "所属カートID", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "商品作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCartCommodity" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "新規作成商品", + "description": "商品の取得", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "商品を取得します。\n\nショッピング カートの {@link IShoppingCartCommodity 商品} レコードを取得します。\n\n*cartId* が所属するカートの ID と異なる場合は、404 見つかりません例外がスローされます。それ以外の場合、*cartId* の値が `null` の場合、このような依存関係のチェックはスキップされますが、所有権は検証されます。\n\nまた、ターゲット {@link IShoppingSale sale} が中断されているか、{@link IShoppingSaleUnitStockInventory 在庫切れ} の場合は、410 消えたエラーがスローされます。したがって、{@link create} メソッドで商品を正常に作成した場合でも、この {@link at} メソッドで商品にアクセスすると失敗する可能性があります。" + } + ], + "requestBody": { + "description": "所属カートのID", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "対象商品の{@link IShoppingCartCommodity.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities/{id}": { + "get": { + "summary": "商品の詳細情報", + "description": "商品の更新(数量)", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "商品 (数量) を更新します。\n\nショッピング カート内の {@link IShoppingCartCommodity 商品} の数量を更新します。\n\n*cartId* が所属するカートの ID と異なる場合は、404 見つかりません例外がスローされます。それ以外の場合、*cartId* の値が `null` であれば、このような依存関係のチェックはスキップされますが、所有権は検証されます。\n\nまた、対象の {@link IShoppingSale セール} が突然中断されたり、{@link IShoppingSaleUnitStockInventory 在庫切れになったりした場合も、410 エラーがスローされます。" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属カートのID" + } + ], + "responses": { + "200": { + "description": "対象商品の{@link IShoppingCartCommodity.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "商品情報の更新(数量)", + "description": "商品の削除", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "商品を消去します。\n\nショッピング カートから {@link IShoppingCartCommodity 商品} を消去します。\n\n商品が {@link IShoppingOrder 注文} 処理中の場合は、消去できません。代わりに、注文が {@link IShoppingOrderPublish 公開} されている場合は、ショッピング カートにそれ以上追加されません。注文が消去された場合は、商品の消去を続行することもできます。" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属カートの ID" + } + ], + "requestBody": { + "description": "対象商品の {@link IShoppingCartCommodity.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "新しく作成された商品", + "description": "商品のレプリカを取得する", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "商品のレプリカを取得します。\n\nレプリケーションの対象となる商品の {@link IShoppingCartCommodity.ICreate} 型の情報を取得します。\n\nところで、*cartId* が所属するカートの ID と異なる場合、404 見つからない例外がスローされます。それ以外の場合、*cartId* が `null` 値である場合、このような依存関係のチェックはスキップされますが、所有権は検証されます。\n\nまた、対象の {@link IShoppingSale セール} が中断されたり、{@link IShoppingSaleUnitStockInventory が突然在庫切れになったりした場合も、410 がなくなったエラーがスローされます。" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属カートのID" + } + ], + "responses": { + "200": { + "description": "対象商品の{@link IShoppingCartCommodity.id}", + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities/{id}/replica": { + "get": { + "summary": "複製対象商品の作成情報", + "description": "割引情報を取得", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "割引情報を取得します。\n\nカートに入れられていない {@link IShoppingSale 販売} も含め、{@link IShoppingCartCommodity ショッピング カート} に関する割引機能を計算します。\n\n返される {@link IShoppingCartDiscountable} には、調整可能な {@link IShoppingCoupon クーポン}、引き出し可能な {@link IShoppingDepositHistory デポジット}、および {@link IShoppingMileageHistory マイレージ} の組み合わせが含まれます。\n\nまた、まだカートに入れられていない特定の販売に関する割引情報を知りたい場合は、{@link IShoppingCartCommodity.ICreate 商品作成情報} を作成して、{@link IShoppingCartDiscountable.pseudos} プロパティに販売を指定します。\n\nすると、割引情報に含まれます。" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属カートID" + } + ], + "responses": { + "200": { + "description": "割引対象商品の情報リクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities/discountable": { + "patch": { + "summary": "割引対象情報", + "description": "新規注文申請作成", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "新しい注文申請を作成します。\n\n{@link IShoppingCustomer} によって作成された {@link IShoppingCartCommodity ショッピング カート} から新しい {@link IShoppingOrder 注文申請} を作成します。もちろん、すべての商品を注文に入れる必要はありませんが、顧客が一部を選択することは可能です。\n\nところで、この機能は注文を完了することを意味するのではなく、顧客が注文を申請することを意味します。注文は、顧客が注文を {@link IShoppingOrderPublish.paid_at で支払う場合にのみ完了します。" + } + ], + "requestBody": { + "description": "注文の作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "新しく作成された注文", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartDiscountable" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders": { + "post": { + "summary": "すべての注文を一覧表示", + "description": "すべての注文を一覧表示します。\n\nすべての {@link IShoppingOrder 注文} をページ区切りで一覧表示します。\n\n必要に応じて、リクエスト本体で {@link IShoppingOrder.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingOrder.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。\n\n参考までに、{@link IShoppingCustomer 顧客} の場合は、注文が {@link IShoppingOrderPublish.paid_at で支払われたかどうかに関係なく、自分の注文を一覧表示できます。\n\nそれ以外の場合は、{@link IShoppingSeller 販売者} または {@link IShoppingAdministrator 管理者} の場合は、支払い済みの注文のみを一覧表示できます。また、販売者の場合は、関連する {@link IShoppingOrder.goods 商品} のみが注文に表示されます。", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "ページ区切り、検索、並べ替えに関する情報を要求します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "ページ区切りの注文", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "注文申請を消去します", + "description": "注文申請を消去します。\n\n{@link IShoppingCustomer} によって適用された注文申請を消去します。\n\n注文が {@link IShoppingOrderPublish 公開済み} の場合、注文を消去することはできません。その場合は、{@link publish.cancel} 関数を呼び出して支払いをキャンセルする必要があります。", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "対象注文の {@link IShoppingOrder.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "注文情報を取得します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{id}": { + "delete": { + "summary": "注文情報を取得します。\n\n詳細な {@link IShoppingOrder 注文} 情報を取得します。\n\n{@link IShoppingCustomer 顧客} でない場合は、まだ {@link IShoppingOrderPublish.paid_at 支払い} されていない注文にアクセスすることはできません。その場合、404 が見つかりませんというエラーがスローされます。", + "description": "対象注文の {@link IShoppingOrder.id }", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "注文情報" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "注文の価格を取得します", + "description": "注文の価格を取得します。\n\n{@link IShoppingOrder 注文} の詳細な価格情報を取得します。\n\n返される価格情報には、注文金額だけでなく、{@link IShoppingCoupono クーポン}、{@link IShoppingDepositHistory デポジット}、{@link IShoppingMileageHistory マイレージ} による割引額も含まれます。", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象注文の {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "割引後の詳細な価格情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{id}/price": { + "get": { + "summary": "割引可能な情報を取得します", + "description": "割引情報を取得します。\n\n{@link IShoppingOrder} に関する割引可能な機能を計算します。\n\n返される {@link IShoppingOrderDiscountable} には、調整可能な {@link IShoppingCoupon クーポン}、引き出し可能な {@link IShoppingDepositHistory デポジット}、および {@link IShoppingMileageHistory マイレージ} の組み合わせが含まれます。\n\nもちろん、返される機能は、注文がまだ {@link IShoppingOrderPublish 公開} されていない場合にのみ有効です。注文がすでに公開されている場合は、価格をさらに割引することはできません。", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象注文の {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "割引可能な情報のリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{id}/discountable": { + "patch": { + "summary": "割引情報", + "description": "注文の割引", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "注文を割引します。\n\n{@link IShoppingCoupon クーポン}、{@link IShoppingDepositHistory デポジット}、および {@link IShoppingMileageHistory マイレージ} を調整して、{@link IShoppingOrder} の合計価格を割引します。割引機能の金額が注文の合計価格と等しい場合は、現金なしで{@link IShoppingOrderPublish 発行} できます。\n\nところで、割引機能は有効である必要があります。有効でない場合は、428\n処理できないエンティティ エラーがスローされます。どの機能が調整可能または撤回可能かを知るには、事前に {@link discountable} 関数を呼び出します。" + } + ], + "requestBody": { + "description": "対象注文の {@link IShoppingOrder.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "割引情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{id}/discount": { + "put": { + "summary": "割引後の価格詳細", + "description": "注文の確認", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "注文品を確認します。\n\n完了した {@link IShoppingDelivery 配送} された {@link IShoppingCustomer 顧客} への {@link IShoppingOrderGood 注文品} を確認します。\n\n言い換えると、所属する {@link IShoppingOrder 注文} は {@link IShoppingPublish.paid_at 公開、支払い} され、商品の配送は {@link IShoppingDeliveryJourney 到着} されていなければなりません。そうでない場合は、428 処理不可能なエンティティ エラーがスローされます。" + } + ], + "requestBody": { + "description": "所属する注文の {@link IShoppingOrder.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "対象商品の {@link IShoppingOrderGood.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{orderId}/goods/{id}/confirm": { + "put": { + "summary": "公開可能かどうかをチェック", + "description": "公開可能かどうかをチェックします。\n\n{@link IShoppingOrder 注文} が公開可能かどうかをテストします。\n\n注文が {@link IShoppingOrderPublish 公開} されておらず、まだ削除されていない場合は、注文を公開できます。\n対象の {@link IShoppingSale セール} が一時停止されているか、\n{@link IShoppingSaleUnitStockInventory 在庫切れ} であっても、注文はすでに適用されているため、公開できます。", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象注文の {@link IShoppingOrder.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "注文が公開可能かどうか" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{orderId}/publish/able": { + "get": { + "summary": "注文を公開する", + "description": "注文を公開します。\n\n{@link IShoppingOrderPublish は、{@link IShoppingCustomer} によって {@link IShoppingAddress アドレス} とともに適用された {@link IShoppingOrder 注文} を、支払いベンダー システムから取得した配送および支払い情報に公開します。\n\n注文が注文価格全体で割引されている場合は、支払いベンダー情報を送信する必要はありません。代わりに、住所情報のみが必要です。\n\nまた、支払い時間は公開時間と異なる場合があります。たとえば、支払い方法が手動の銀行口座振替である場合、支払いは顧客が実際に送金するまで延期されます。その場合、{@link IShoppingOrderPublish.paid_at} は `null` 値になるため、この公開関数を呼び出した後に確認する必要があります。", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象注文の {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "公開の作成情報", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{orderId}/publish": { + "post": { + "summary": "新しく作成された公開", + "description": "公開 (支払い) をキャンセル", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "公開 (支払い) をキャンセルします。\n\n{@link IShoppingOrderPublish が公開} された {@link IShoppingOrder 注文} の支払いをキャンセルします。\n\n対象公開の支払い方法が手動銀行口座振替の場合、直接キャンセルされます。そうでない場合は、支払いキャンセル要求が支払いベンダー システムに送信されます。" + } + ], + "requestBody": { + "description": "対象注文の {@link IShoppingOrder.id }", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingOrderPublish.ICashCreate" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish.IZeroCreate" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "cash": "#/components/schemas/IShoppingOrderPublish.ICashCreate", + "zero": "#/components/schemas/IShoppingOrderPublish.IZeroCreate" + } + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "集計された売上をすべてリストアップする", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPublish" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "要約されたすべての販売を一覧表示します。\n\nすべての {@link IShoppingSale.ISummary 要約された販売} を一覧表示します。\n\nご覧のとおり、返された販売は要約されており、詳細ではありません。販売の詳細情報を取得する場合は、各販売に対して {@link at} 関数を使用します。\n\n参考までに、{@link IShoppingSeller 販売者} の場合は、自分の {@link IShoppingSale 販売} にのみアクセスできます。それ以外の場合は、{@link IShoppingCustomer 顧客} の場合は、市場で実行中の販売のみを表示できます。未開封、クローズ、または一時停止中の販売は表示できません。\n\nちなみに、必要に応じて、リクエスト本体で {@link IShoppingSale.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingSale.IRequest.sort ソート条件} を構成することで、レコードの順序をカスタマイズできます。", + "description": "ページネーション、検索、並べ替えに関する情報をリクエスト", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "要約情報を含むページネーションされたセール" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales": { + "patch": { + "summary": "セール情報を取得", + "description": "セール情報を取得します。\n\n詳細情報を含む {@link IShoppingSale セール} を取得します。\n\n{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} にのみアクセスできます。それ以外の場合は、{@link IShoppingCustomer 顧客} の場合は、市場で実行中のセールにのみアクセスできます。未開封、終了、または一時停止中のセールにはアクセスできません。", + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "対象セールの{@link IShoppingSale.id}", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "セール詳細情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{id}": { + "get": { + "summary": "問い合わせコメントをすべて一覧表示", + "description": "すべての問い合わせコメントを一覧表示します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} のすべての {@link IShoppingSaleInquiryComment 問い合わせコメント} を {@link IPage ページネーション} で一覧表示します。\n\n必要に応じて、リクエスト本文で {@link IShoppingSaleInquiryComment.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleInquiryComment.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。\n\nちなみに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の問い合わせにのみアクセスできます。それ以外の場合は、セールのすべての問い合わせにアクセスできます。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments": { + "patch": { + "summary": "ページネーション、検索、並べ替えに関する情報のリクエスト", + "description": "ページネーションされた問い合わせコメント", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの作成" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "お問い合わせコメントを作成します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} の {@link IShoppingSaleInquiryComment お問い合わせコメント} を作成します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のお問い合わせに対してのみお問い合わせコメントを作成できます。\nそれ以外の場合は、セールのすべてのお問い合わせに対してお問い合わせコメントを作成できます。//|-0-|\\ 所属セールの {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "対象問い合わせの {@link IShoppingSaleInquiry.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "問い合わせコメントの作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "新しく作成された問い合わせコメント", + "description": "問い合わせコメント情報を取得する", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "お問い合わせコメント情報を取得します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} の詳細な {@link IShoppingSaleInquiryComment お問い合わせコメント} 情報を取得します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のお問い合わせコメントにのみアクセスできます。\n\nそれ以外の場合は、セールのすべてのお問い合わせコメントにアクセスできます。" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "対象の問い合わせコメントの {@link IShoppingSaleInquiryComment.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { + "get": { + "summary": "詳細な問い合わせコメント情報", + "description": "問い合わせコメントの更新", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "お問い合わせコメントを更新します。\n\n{@link IShoppingSaleInquiryComment お問い合わせコメント} を特定の{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} に更新します。\n\nちなみに、このショッピングモールのコメントに関する一般的なポリシーでは、コメントを変更しても既存のコンテンツは変更されません。\n\n変更されたコンテンツは、新しい {@link IShoppingSaleInquiryComment.ISnapshot スナップショット} として既存のコメント記録に蓄積され記録されます。そして、これはこのお問い合わせコメントを読むことができるすべての人に公開されます。\n\nこれは、紛争が発生しやすい電子商取引の性質上、顧客や販売者がコメントを変更して状況を操作するのを防ぐためです。つまり、証拠を保存するためです。" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }" + } + ], + "responses": { + "200": { + "description": "対象問い合わせコメントの {@link IShoppingSaleInquiryComment.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "問い合わせコメントの情報を更新", + "description": "問い合わせコメントの新規作成スナップショットレコード", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "質問記事を記入" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "質問記事を書きます。\n\n{@link IShoppingCustomer 顧客} が特定の {@link IShoppingSale セール} について質問したい場合、新しい {@link IShoppingSaleQuestion 質問記事} を書いて質問できます。\n\n顧客が自分の身元や質問を明らかにしたくない場合は、質問を秘密の記事として書くことができます。その場合、顧客と関連する {@link IShoppingSeller 販売者} だけが {@link at 詳細なコンテンツ} を見ることができます。また、このような秘密の質問のタイトルと作成者名は、{@link インデックス ページング API} で `*` 文字でマスクされます。" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "質問の作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "新しく作成された質問", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions": { + "post": { + "summary": "要約された質問をすべて一覧表示", + "description": "要約された質問をすべてリストします。\n\n{@link IShoppingSale セール} のすべての {@link IShoppingSaleQuestion.ISummary 要約された質問} をリストします。\n\nご覧のとおり、返された質問は要約されており、詳細ではありません。質問の詳細情報を取得するには、各記事に対して {@link adridges} 関数または {@link at} 関数を使用します。\n\nまた、返された質問には {@link IShoppingSaleQuestion.ISummary.answer} プロパティがあり、これは {@link IShoppingSeller} からの正式な回答を意味します。\n\nさらに、返された質問には、他のプリンシパル プロパティをマスクする別の特別なプロパティ {@link IShoppingSaleQuestion.ISummary.secret} があり、関連するアクターのみが質問を {@link at で読み取ることができることを意味します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の質問にのみアクセスできます。それ以外の場合は、セールのすべての質問にアクセスできます。\n\nちなみに、必要に応じて、リクエスト ボディで {@link IShoppingSaleQuestion.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleQuestion.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "ページ区切り、検索、並べ替えに関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "要約情報を含むページ区切りの質問", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "質問を更新", + "description": "質問を更新します。\n\n{@link IShoppingSaleQuestion 質問} の内容を更新します。\n\nちなみに、このショッピングモールの記事に関する一般的なポリシーとして、質問記事を修正しても、実際に既存の内容が変更されるわけではありません。修正された内容は、新しい {@link IShoppingSaleQuestion.ISnapshot スナップショット} として既存の記事レコードに蓄積され記録されます。そして、これは {@link IShoppingCustomer 顧客} と {@link IShoppingSeller 販売者} を含むすべての人に公開され、記事を閲覧できる人なら誰でも編集履歴全体を閲覧できます。\n\nこれは、紛争が発生しやすい電子商取引の性質上、顧客や販売者が記事を修正して状況を操作するのを防ぐためです。つまり、証拠を保全するためです。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "対象の質問の {@link IShoppingSaleQuestion.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "質問の情報を更新", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions/{id}": { + "post": { + "summary": "新しく作成された質問のスナップショット レコード", + "description": "質問の情報を取得", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "質問情報を取得します。\n\n{@link IShoppingSale セール} の詳細な {@link IShoppingSaleQuestion 質問} 情報を取得します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の質問にのみアクセスできます。それ以外の場合は、{@link IShoppingCustomer 顧客} の場合は、{@link IShoppingSaleQuestion.secret} の値が `false` である場合を除き、セールのすべての質問にアクセスできます。//|-0-|\\ 所属セールの {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象の質問の {@link IShoppingSaleQuestion.id }" + } + ], + "requestBody": { + "description": "詳細な質問情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "すべての要約された質問を一覧表示します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "すべての要約された質問を一覧表示します。\n\n{@link IShoppingSale セール} のすべての {@link IShoppingSaleQuestion.IAbridge 要約された質問} を一覧表示します。\n\nご覧のとおり、返される質問は要約されており、詳細ではありません。質問の詳細情報を取得する場合は、各記事に対して {@link at} 関数を使用します。\n\nまた、返される質問には、{@link IShoppingSaleQuestion.IAridge.answer} プロパティがあり、これは {@link IShoppingSeller} からの正式な回答を意味します。\n\nさらに、返される質問には、他の基本プロパティをマスクする別の特別なプロパティ {@link IShoppingSaleQuestion.IAridge.secret} があり、関連するアクターのみが質問を {@link at で読み取ることができることを意味します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の質問にのみアクセスできます。それ以外の場合は、販売のすべての質問にアクセスできます。\n\nちなみに、必要に応じて、リクエスト本文に\n{@link IShoppingSaleQuestion.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleQuestion.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。", + "description": "所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ページ付け、検索、並べ替えの情報をリクエスト" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "要約情報を含むページ付けされた質問" + } + ], + "responses": { + "200": { + "description": "すべての問い合わせコメントをリストします", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions/abridges": { + "patch": { + "summary": "すべての問い合わせコメントを一覧表示します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} のすべての {@link IShoppingSaleInquiryComment 問い合わせコメント} を {@link IPage ページネーション} で一覧表示します。\n\n必要に応じて、リクエスト本文で {@link IShoppingSaleInquiryComment.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleInquiryComment.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。\n\nちなみに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の問い合わせにのみアクセスできます。それ以外の場合は、セールのすべての問い合わせにアクセスできます。", + "description": "所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "ページネーション、検索、並べ替えに関する情報のリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "ページネーションされた問い合わせコメント", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments": { + "patch": { + "summary": "問い合わせコメントの作成", + "description": "お問い合わせコメントを作成します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} の {@link IShoppingSaleInquiryComment お問い合わせコメント} を作成します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のお問い合わせに対してのみお問い合わせコメントを作成できます。\nそれ以外の場合は、セールのすべてのお問い合わせに対してお問い合わせコメントを作成できます。//|-0-|\\ 所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象問い合わせの {@link IShoppingSaleInquiry.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの作成情報" + } + ], + "requestBody": { + "description": "新しく作成された問い合わせコメント", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "問い合わせコメント情報を取得する", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "お問い合わせコメント情報を取得します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} の詳細な {@link IShoppingSaleInquiryComment お問い合わせコメント} 情報を取得します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のお問い合わせコメントにのみアクセスできます。\n\nそれ以外の場合は、セールのすべてのお問い合わせコメントにアクセスできます。", + "description": "所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象の問い合わせコメントの {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "詳細な問い合わせコメント情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "問い合わせコメントの更新", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { + "get": { + "summary": "お問い合わせコメントを更新します。\n\n{@link IShoppingSaleInquiryComment お問い合わせコメント} を特定の{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} に更新します。\n\nちなみに、このショッピングモールのコメントに関する一般的なポリシーでは、コメントを変更しても既存のコンテンツは変更されません。\n\n変更されたコンテンツは、新しい {@link IShoppingSaleInquiryComment.ISnapshot スナップショット} として既存のコメント記録に蓄積され記録されます。そして、これはこのお問い合わせコメントを読むことができるすべての人に公開されます。\n\nこれは、紛争が発生しやすい電子商取引の性質上、顧客や販売者がコメントを変更して状況を操作するのを防ぐためです。つまり、証拠を保存するためです。", + "description": "所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象問い合わせコメントの {@link IShoppingSaleInquiryComment.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの情報を更新" + } + ], + "responses": { + "200": { + "description": "問い合わせコメントの新規作成スナップショットレコード", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "レビュー記事を書く", + "description": "レビュー記事を書きます。\n\n{@link IShoppingCustomer 顧客} が特定の{@link IShoppingSale セール} を購入し、{@link IShoppingDelivery 配送} を受けた場合、そのセールに関する {@link IShoppingSaleReview レビュー} 記事を書くことができます。\n\n購入せずにレビュー記事を書こうとしたり、配送が完了していない場合は、428 処理不可能なエンティティ エラーが発生します。また、顧客は 1 つの注文につき複数のレビュー記事を書くことができますが、次の記事は前の記事から 2 週間後に書くことができます。そうでない場合も、428 処理不可能なエンティティ エラーが発生します。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "レビューの作成情報" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "新しく作成されたレビュー" + } + ], + "requestBody": { + "description": "要約されたレビューをすべて一覧表示", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "要約されたレビューをすべて一覧表示します。\n\n{@link IShoppingSale セール} のすべての {@link IShoppingSaleReview.ISummary 要約されたレビュー} を一覧表示します。\n\nご覧のとおり、返されるレビューは要約されており、詳細ではありません。レビューの詳細情報を取得するには、各記事に対して {@link adridges} 関数または {@link at} 関数を使用します。\n\nまた、返されるレビューには、{@link IShoppingSeller} からの正式な回答を意味する {@link IShoppingSaleReview.ISummary.answer} プロパティがあります。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のレビューにのみアクセスできます。それ以外の場合は、セールのすべてのレビューにアクセスできます。\n\nちなみに、必要に応じて、リクエスト本文で {@link IShoppingSaleReview.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingSaleReview.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews": { + "post": { + "summary": "所属セールの {@link IShoppingSale.id }", + "description": "ページネーション、検索、並べ替えに関する情報をリクエスト", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "要約情報を含むページネーションされたレビュー" + } + ], + "requestBody": { + "description": "レビューを更新", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "レビューを更新します。\n\n{@link IShoppingSaleReview レビュー} の内容とスコアを更新します。\n\nちなみに、このショッピングモールの記事に関する一般的なポリシーとして、質問記事を修正しても、実際に既存の内容が変更されるわけではありません。修正された内容は、新しい {@link IShoppingSaleReview.ISnapshot スナップショット} として既存の記事レコードに蓄積され記録されます。そして、これは {@link IShoppingCustomer 顧客} と {@link IShoppingSeller 販売者} を含むすべての人に公開され、記事を閲覧できる人なら誰でも編集履歴全体を閲覧できます。\n\nこれは、紛争が発生しやすい電子商取引の性質上、顧客や販売者が記事を修正して状況を操作するのを防ぐためです。つまり、証拠を保全するためです。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "所属セールの {@link IShoppingSale.id }", + "description": "対象レビューの {@link IShoppingSaleReview.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "レビューの情報を更新" + } + ], + "requestBody": { + "description": "新しく作成されたレビューのスナップショット レコード", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "レビュー情報を取得", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews/{id}": { + "post": { + "summary": "レビュー情報を取得します。\n\n{@link IShoppingSale セール} の詳細な {@link IShoppingSaleReview レビュー} 情報を取得します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のレビューにのみアクセスできます。それ以外の場合は、{@link IShoppingCustomer カスタマー} の場合は、セールのすべてのレビューにアクセスできます。", + "description": "所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象レビューの {@link IShoppingSaleReview.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "詳細なレビュー情報" + } + ], + "requestBody": { + "description": "すべての要約レビューを一覧表示します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "すべての要約レビューを一覧表示します。\n\n{@link IShoppingSale セール} のすべての {@link IShoppingSaleReview.IAbridge 要約レビュー} を一覧表示します。\n\nご覧のとおり、返されるレビューは要約されており、詳細ではありません。レビューの詳細情報を取得するには、各記事に対して {@link at} 関数を使用します。\n\nまた、返されるレビューには、{@link IShoppingSeller} からの正式な回答を意味する {@link IShoppingSaleReview.IAridge.answer} プロパティがあります。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のレビューにのみアクセスできます。 それ以外の場合は、セールのすべてのレビューにアクセスできます。\n\nちなみに、必要に応じて、リクエスト本文で {@link IShoppingSaleReview.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingSaleReview.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "所属セールの {@link IShoppingSale.id }", + "description": "ページネーション、検索、並べ替えに関する情報をリクエスト", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "要約情報を含むページネーションされたレビュー" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべてのスナップショットをリストします" + } + ], + "responses": { + "200": { + "description": "すべてのスナップショットを一覧表示します。\n\n{@link IShoppingSeller セラー} が {@link IShoppingSale セール} を更新するたびに、セール レコードは更新されませんが、セール履歴の整合性を保つために新しい {@link IShoppingSaleSnapshot スナップショット} レコードが作成されます。この API 関数は、このようなスナップショット レコードを一覧表示するためのものです。\n\nまた、戻り値の型からわかるように、返されるスナップショットは要約されており、詳細ではありません。スナップショットの詳細情報を取得するには、各スナップショットに対して {@link at} または {@link flipo} 関数を使用します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のスナップショットにのみアクセスできます。それ以外の場合は、セールが終了または一時停止されていても、セールのすべてのスナップショットにアクセスできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews/abridges": { + "patch": { + "summary": "ターゲットセールの {@link IShoppingSale.id }", + "description": "ページネーションのリクエスト情報", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "要約情報を含むページ分けされたスナップショット" + } + ], + "requestBody": { + "description": "スナップショット情報を取得します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "スナップショット情報を取得します。\n\n詳細情報を含む {@link IShoppingSaleSnapshot スナップショット} を取得します。\n\n戻り値の型からわかるように、返されたスナップショットには {@link IShoppingSale セール} 情報は含まれていません。セール情報を取得する場合は、代わりに {@link flip} 関数を使用します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のスナップショットにのみアクセスできます。それ以外の場合は、セールが終了または一時停止されていても、セールのすべてのスナップショットにアクセスできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/snapshots": { + "patch": { + "summary": "所属セールの {@link IShoppingSale.id }", + "description": "対象スナップショットの {@link IShoppingSaleSnapshot.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "スナップショットの詳細情報" + } + ], + "requestBody": { + "description": "反転スナップショット情報を取得します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "反転されたスナップショット情報を取得します。\n\n反転されたスナップショットの {@link IShoppingSale sale} 情報を取得します。\n\n戻り値の型からわかるように、この関数は {@link IShoppingSale sale} 情報を返します。ちなみに、セール情報は最新のものではなく、スナップショット側の反転された情報です。\n\nまた、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale sale} のスナップショットにのみアクセスできます。それ以外の場合は、セールが終了または一時停止されていても、セールのすべてのスナップショットにアクセスできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/snapshots/{id}": { + "get": { + "summary": "所属するセールの {@link IShoppingSale.id }", + "description": "対象スナップショットの {@link IShoppingSaleSnapshot.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "スナップショット側の詳細なセール情報" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "子レコードを持つすべてのカテゴリをリストします" + } + ], + "responses": { + "200": { + "description": "子レコードを持つすべてのカテゴリを一覧表示します。\n\nページ区切り付きの {@link IShoppingChannel チャネル} のすべての {@link IShoppingChannelCategory.IHierarchical カテゴリ} を一覧表示します。返されるカテゴリには子カテゴリも含まれます。\n\n必要に応じて、リクエスト本文で {@link IShoppingChannelCategory.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingChannelCategory.IRequest.sort ソート条件} を構成することで、レコードの順序をカスタマイズすることもできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/snapshots/{id}/flip": { + "get": { + "summary": "所属チャンネルの {@link IShoppingChannel.code }", + "description": "子カテゴリーを含むページ分けされたカテゴリー", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "カテゴリー情報を取得します" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "カテゴリー情報を取得します。\n\n詳細な {@link IShoppingChannelCategory カテゴリー} 情報を取得します。\n\n返されるカテゴリーには階層的な子カテゴリーが含まれ、再帰的な親カテゴリーも含まれます。" + } + ], + "responses": { + "200": { + "description": "所属チャンネルの {@link IShoppingChannel.code }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{channelCode}/categories": { + "patch": { + "summary": "対象カテゴリーの {@link IShoppingChannelCategory.id }", + "description": "詳細なカテゴリー情報", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "反転されたカテゴリー情報を取得します" + } + ], + "responses": { + "200": { + "description": "反転したカテゴリ情報を取得します。\n\n反転した {@link IShoppingChannelCategory.IInvert category} 情報を取得します。\n\n返されたカテゴリには再帰的な親カテゴリが含まれますが、階層的な子カテゴリは含まれません。", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}": { + "get": { + "summary": "所属チャネルの {@link IShoppingChannel.code }", + "description": "対象カテゴリの {@link IShoppingChannelCategory.id }", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "詳細なカテゴリ情報" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべてのチャネルをリストします" + } + ], + "responses": { + "200": { + "description": "すべてのチャネルを一覧表示します。\n\nすべての {@link IShoppingChannel チャネル} をページ区切りで一覧表示します。\n\n必要に応じて、リクエスト本体で {@link IShoppingChannel.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingChannel.IRequest.sort ソート条件} を設定することで、レコードのシーケンス順序をカスタマイズできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}/invert": { + "get": { + "summary": "ページ区切り、検索、ソートのリクエスト情報", + "description": "ページ区切りのチャネル", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "ネストされたカテゴリを持つすべてのチャネルを一覧表示します" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ネストされたカテゴリを持つすべてのチャネルを一覧表示します。\n\n{@link IPage ページネーション} を持つすべての {@link IShoppingChannel.IHierarchical チャネル} を一覧表示します。返されるチャネルには、ネストされた階層的な {@link IShoppingChannelCategory.IHierarchical カテゴリ} が含まれます。\n\n必要に応じて、リクエスト本体で {@link IShoppingChannel.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingChannel.IRequest.sort ソート条件} を構成することで、レコードの順序をカスタマイズできます。" + } + ], + "responses": { + "200": { + "description": "ページネーション、検索、並べ替えに関する情報を要求します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels": { + "patch": { + "summary": "ネストされたカテゴリを持つページネーションされたチャネル", + "description": "チャネル情報を取得します", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "チャネル情報を取得します。\n\n詳細な {@link IShoppingChannel.IHierarchical チャネル} 情報を取得します。\n\n返されるチャネル インスタンスには、ネストされた {@link IShoppingChannelCategory.IHierarchical 階層カテゴリ} 情報も含まれます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "対象チャネルの {@link IShoppingChannel.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/hierarchical": { + "patch": { + "summary": "詳細なチャネル情報", + "description": "コードでチャネル情報を取得します", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "コードでチャネル情報を取得します。\n\nコードで詳細な {@link IShoppingChannel.IHierarchical チャネル} 情報を取得します。\n\n返されるチャネル インスタンスには、ネストされた {@link IShoppingChannelCategory.IHierarchical 階層カテゴリ} 情報も含まれます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "対象チャネルの {@link IShoppingChannel.code }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{id}": { + "get": { + "summary": "詳細なチャネル情報", + "description": "すべてのセクションをリストします", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべてのセクションを一覧表示します。\n\nすべての {@link IShoppingSection セクション} をページ区切りで一覧表示します。\n\n必要に応じて、リクエスト本体で {@link IShoppingSection.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSection.IRequest.sort ソート条件} を設定することで、レコードのシーケンス順序をカスタマイズできます。" + } + ], + "responses": { + "200": { + "description": "ページ区切り、検索、ソートの情報をリクエストします", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{code}/get": { + "get": { + "summary": "ページ区切りのセクション", + "description": "セクション情報を取得します", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "セクション情報を取得します。\n\n詳細な {@link IShoppingSection section} 情報を取得します。" + } + ], + "responses": { + "200": { + "description": "対象セクションの {@link IShoppingSection.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/sections": { + "patch": { + "summary": "詳細なセクション情報", + "description": "コードでセクション情報を取得します", + "tags": [ + "Section" + ], + "parameters": [], + "requestBody": { + "description": "コードでセクション情報を取得します。\n\n詳細な {@link IShoppingSection section} 情報をコードで取得します。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "対象セクションの {@link IShoppingSection.code }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/sections/{id}": { + "get": { + "summary": "詳細なセクション情報", + "description": "販売者情報を取得します", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "販売者情報を取得します。\n\n現在の {@link IShoppingCustomer 顧客} の {@link IShoppingSeller.IInvert seller} 情報を取得します。\n\n現在の {@link IShoppingMember メンバー} が販売者でない場合は、\n403 禁止例外がスローされます。" + } + ], + "responses": { + "200": { + "description": "販売者情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/sections/{code}/get": { + "get": { + "summary": "販売者として参加", + "description": "販売者として参加します。\n\n{@link IShoppingSeller.IJoin 参加情報} を使用して販売者として参加します。\n\nこの方法は、{@link IShoppingCustomer 顧客} がすでに {@link IShoppingMember メンバーシップ} に参加している場合にのみ許可されます。参加していない場合は、事前に参加する必要があります。参加していない場合は、403 禁止例外がスローされます。", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "参加リクエスト情報" + } + ], + "responses": { + "200": { + "description": "販売者情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/authenticate": { + "get": { + "summary": "販売者としてログイン", + "description": "販売者としてログインします。\n\n{@link IShoppingSeller.ILogin login info} を使用して販売者としてログインします。\n\nこのメソッドは、{@link ShoppingApi. functional.customers.authenticate.login} 関数とまったく同じ効果がありますが、返される型が少し異なります。 同様の関数は、顧客情報から始まる {@link IShoppingCustomer} 型を返すため、販売者情報には `customer.member.seller` を通じてアクセスする必要があります。 それとは対照的に、このメソッドは、販売者情報から始まる {@link IShoppingSeller.IInvert} 型を返すため、顧客情報には `seller.customer` を通じてアクセスできます。\n\nもちろん、この関数を使用するには、事前に販売者として {@link join} する必要があります。 そうでない場合は、403 forbidden 例外がスローされます。", + "tags": [ + "Authenticate" + ], + "parameters": [], + "responses": { + "200": { + "description": "ログインリクエスト情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "販売者情報", + "description": "配送リストを取得", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "配送のリストを取得します。\n\n現在の{@link IShoppingSeller セラー}の{@link IShoppingDelivery.IInvert 配送}のリストを{@link IPage ページネーション}で取得します。\n\n参考までに、返される配送には、対象の{@link IShoppingOrder.IInvertFromDelivery 注文}情報が含まれています。もちろん、注文には関連する{@link IShoppingOrderGood 商品}のみが含まれています。\n\nさらに、リクエスト本体で{@link IShoppingDelivery.IRequest.search 検索条件}を構成することで、結果を制限できます。また、{@link IShoppingDelivery.IRequest.sort ソート条件}を構成することで、レコードの順序をカスタマイズすることもできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "ページ区切り、検索、並べ替えに関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/authenticate/login": { + "put": { + "summary": "ページ区切りの配信", + "description": "配信の作成", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "配送を作成します。\n\n{@link IShoppingOrder 注文}、その {@link IShoppingOrderGood 商品}、および {@link IShoppingSaleUnitStock 在庫} ({@link IShoppingDeliveryPiece}) をターゲットとする {@link IShoppingDeliveryJourney 旅程} と {@link IShoppingDeliveryShipper 配送業者} 情報を含む {@link IShoppingDelivery 配送} レコードを作成します。\n\n{@link IShoppingDeliveryPiece} の構成は、必要数を超えないようにする必要があります。必要な部分を識別するには、この関数を呼び出す前に、ターゲット注文の {@link IShoppingOrderPublish.id} を使用して {@link incompletes} 関数を呼び出すことをお勧めします。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "配送の作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries": { + "patch": { + "summary": "新しく作成された配送", + "description": "配送を取得", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "配送を取得します。\n\nID を含む {@link IShoppingDelivery.IInvert delivery} 情報を取得します。\n\n参考までに、返された配送には対象の {@link IShoppingOrder.IInvertFromDelivery order} 情報が含まれています。 もちろん、注文には関連する {@link IShoppingOrderGood goods} のみが含まれています。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "対象配送の {@link IShoppingDelivery.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDelivery.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "対象注文を含む配送情報", + "description": "未完了の商品リストを取得します", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "未完了のピースのリストを取得します。\n\n対象注文の {@link IShoppingOrderPublish.id} の {@link IShoppingDeliveryPiece 未完了ピース} のリストを取得します。\n\n対象注文の公開 ID を指定すると、この関数は計算により注文の未完了ピースを {@link IShoppingDeliveryPiece.ICreate} 型の配列として返します。\n\n結果を利用して、統合配送用の巨大な {@link IShoppingDelivery 配送} を作成したり、分割配送用の複数の配送を作成したりできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "対象注文のリスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{id}": { + "get": { + "summary": "未完了のピースのリスト", + "description": "新しい旅程を作成する", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "新しいジャーニーを作成します。\n\n{@link IShoppingDelivery 配送} の新しい {@link IShoppingDeliveryJourney ジャーニー} を作成します。\n\nこのアクションにより、関連する {@link IShoppingOrderGood.state} が変更される可能性があります。\n\nまた、ターゲット ジャーニーのタイプが「配送中」の場合、プロパティ {@link IShoppingDeliveryJourney.completed_at} が null かどうかは、関連する商品の状態に\n影響します。プロパティが null でない場合、状態は\n「到着済み」になります。それ以外の場合、状態は「配送中」になります。" + } + ], + "responses": { + "200": { + "description": "所属する配送の {@link IShoppingDelivery.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/incompletes": { + "patch": { + "summary": "旅程の作成情報", + "description": "新しく作成された旅程", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "旅程を完了", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "旅程を完了します。\n\n{@link IShoppingDelivery 配送} の {@link IShoppingDeliveryJourney 旅程} を完了します。つまり、{@link IShoppingDeliveryJourney.completed_at} プロパティに現在の時刻を入力します。\n\n対象の旅程のタイプが「配送中」の場合、このアクションによって、関連する {@link IShoppingOrderGood.state 商品の状態} が「到着済み」に変更されることがあります。", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.ICreate" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/journeys": { + "post": { + "summary": "所属する配送の {@link IShoppingDelivery.id }", + "description": "ターゲット ジャーニーの {@link IShoppingDeliveryJourney.id }", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ジャーニーの完了時間" + } + ], + "requestBody": { + "description": "ジャーニーを消去", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "ジャーニーを消去します。\n\n{@link IShoppingDelivery 配送} の {@link IShoppingDeliveryJourney ジャーニー} を消去します。\n\n消去するジャーニーが所属する配送の最後のジャーニーである場合、このアクションによって関連する {@link IShoppingOrderGood.state} が変更される可能性があります。最後のジャーニーを消去すると、状態は前の状態にロールバックされます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}/complete": { + "put": { + "summary": "所属する配送の {@link IShoppingDelivery.id }", + "description": "対象のジャーニーの {@link IShoppingDeliveryJourney.id }", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "新しく作成されたジャーニー" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "新しい配送業者を作成する" + } + ], + "requestBody": { + "description": "新しい配送業者を作成します。\n\n{@link IShoppingDelivery 配送} の新しい {@link IShoppingDeliveryShipper 配送業者} を作成します。\n\nこのアクションは、関連する {@link IShoppingOrder 注文} や {@link IShoppingDeliveryJourney}\nや {@link IShoppingDeliveryPiece} ケースなどの {@link IShoppingOrderGood 商品} には影響しませんが、{@link IShoppingCustomer 顧客} に通知するだけです。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.IComplete" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}": { + "delete": { + "summary": "所属配送の {@link IShoppingDelivery.id }", + "description": "配送業者の作成情報", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "新しく作成された配送業者" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "新しいクーポンを作成します" + } + ], + "responses": { + "200": { + "description": "新しいクーポンを作成します。\n\n指定された情報を使用して、新しい {@link IShoppingCoupon クーポン} を作成します。\n\nちなみに、{@link IShoppingSeller セラー} の場合は、include 方向の {@link IShoppingCouponSellerCriteria} または {@link IShoppingCouponSaleCriteria} 条件を追加する必要があります。 これは、{@link IShoppingAdministrator 管理者} のみが、マーケット全体で使用できるクーポンを作成できるためです。 セラーは、自分の {@link IShoppingSale セール} によって使用範囲を制限する必要があります。\n\nもちろん、管理者がマーケット全体で使用できる一般的なクーポンを作成する予定の場合は、管理者は影響を受けるセラーから同意を得る必要があります。", + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/shippers": { + "post": { + "summary": "クーポンの作成情報", + "description": "新しく作成されたクーポン", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべてのクーポンを一覧表示" + } + ], + "requestBody": { + "description": "すべてのクーポンを一覧表示します。\n\nすべての {@link IShoppingCoupon クーポン} をページ区切りで一覧表示します。\n\n必要に応じて、リクエスト本体で {@link IShoppingCoupon.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingCoupon.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。\n\n参考までに、{@link IShoppingCustomer 顧客} の場合、{@link IShoppingCouponTicket チケット可能} クーポンのみが一覧表示されます。\nそれ以外の場合は、チケット不可のクーポンも一覧表示されます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "ページネーション、検索、並べ替えに関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/coupons": { + "post": { + "summary": "ページネーションされたクーポン", + "description": "クーポンを消去", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "クーポンを消去します。\n\n指定された ID の {@link IShoppingCoupon クーポン} を消去します。\n\n参考までに、対象クーポンからすでに発行されている {@link IShoppingCouponTicket チケット} がある場合、それらは影響を受けません。\n\nそれらのチケットは有効期限まで有効です。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "対象クーポンの {@link IShoppingCoupon.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "クーポン情報を取得します", + "description": "クーポン情報を取得します。\n\n{@link IShoppingCoupon クーポン} 情報を取得します。\n\n{@link IShoppingCustomer 顧客} の場合、{@link IShoppingCouponTicket チケット可能} クーポンのみにアクセスできます。チケット不可のクーポンは 410 エラーになります。それ以外の場合、{@link IShoppingSeller 販売者} または {@link IShoppingAdministrator 管理者} の場合は、チケット不可のクーポンにもアクセスできます。", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "対象クーポンの {@link IShoppingCoupon.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "クーポン情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/coupons/{id}": { + "delete": { + "summary": "すべての注文をリストします", + "description": "すべての注文を一覧表示します。\n\nすべての {@link IShoppingOrder 注文} をページ区切りで一覧表示します。\n\n必要に応じて、リクエスト本体で {@link IShoppingOrder.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingOrder.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。\n\n参考までに、{@link IShoppingCustomer 顧客} の場合は、注文が {@link IShoppingOrderPublish.paid_at で支払われたかどうかに関係なく、自分の注文を一覧表示できます。\n\nそれ以外の場合は、{@link IShoppingSeller 販売者} または {@link IShoppingAdministrator 管理者} の場合は、支払い済みの注文のみを一覧表示できます。また、販売者の場合は、関連する {@link IShoppingOrder.goods 商品} のみが注文に表示されます。", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "ページネーション、検索、並べ替えに関する情報をリクエスト" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "ページネーションされた注文", + "description": "注文情報を取得します", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "注文情報を取得します。\n\n詳細な {@link IShoppingOrder 注文} 情報を取得します。\n\n{@link IShoppingCustomer 顧客} でない場合は、まだ {@link IShoppingOrderPublish.paid_at で支払われていない注文にアクセスできません。その場合、404 が見つかりませんエラーがスローされます。" + } + ], + "responses": { + "200": { + "description": "対象注文の {@link IShoppingOrder.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/orders": { + "patch": { + "summary": "注文情報", + "description": "セールを作成します", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "セールを作成します。\n\n{@link IShoppingSeller Seller} は、操作用に新しい {@link IShoppingSale} を作成します。\n\n参考までに、セールは、{@link IShoppingSaleUnit ユニット}、{@link IShoppingSaleUnitOption オプション}、および {@link IShoppingSaleUnitStock ストック} で構成される複雑な階層構造を持っています。したがって、新しいセールを作成する前に、{@link IShoppingSale} および関連する DTO のドキュメントを読むことをお勧めします。\n\nERD (エンティティ関係図) とその説明ドキュメントも役立ちます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "セールの作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/orders/{id}": { + "get": { + "summary": "新しく作成されたセール", + "description": "要約されたセールをすべてリストします", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "要約されたすべての販売を一覧表示します。\n\nすべての {@link IShoppingSale.ISummary 要約された販売} を一覧表示します。\n\nご覧のとおり、返された販売は要約されており、詳細ではありません。販売の詳細情報を取得する場合は、各販売に対して {@link at} 関数を使用します。\n\n参考までに、{@link IShoppingSeller 販売者} の場合は、自分の {@link IShoppingSale 販売} にのみアクセスできます。それ以外の場合は、{@link IShoppingCustomer 顧客} の場合は、市場で実行中の販売のみを表示できます。未開封、クローズ、または一時停止中の販売は表示できません。\n\nちなみに、必要に応じて、リクエスト本体で {@link IShoppingSale.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingSale.IRequest.sort ソート条件} を構成することで、レコードの順序をカスタマイズできます。" + } + ], + "responses": { + "200": { + "description": "ページ区切り、検索、並べ替えに関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales": { + "post": { + "summary": "要約情報を含むページ区切りの販売", + "description": "販売の更新", + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "セールを更新します。\n\n新しい情報で {@link IShoppingSale セール} を更新します。\n\nところで、セールは実際には変更されず、セールの新しい {@link IShoppingSaleSnapshot スナップショット} レコードを作成するだけです。その 1 番目の目的は、セールの整合性を維持することです。セールの変更は、セールにすでに適用されている {@link IShoppingOrder 注文} に影響を与えてはなりません。\n\n2 番目の目的は、A/B テストのためです。{@link IShoppingSeller Seller} は、製品の価格、コンテンツ、構成を変更して、運用パフォーマンスを実証する必要があります。このスナップショットの概念は、それに役立ちます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "ターゲットセールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "セールの新しい情報", + "description": "新しいスナップショットで更新されたセール", + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "セール情報を取得", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "セール情報を取得します。\n\n詳細情報を含む {@link IShoppingSale セール} を取得します。\n\n{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} にのみアクセスできます。それ以外の場合は、{@link IShoppingCustomer 顧客} の場合は、市場で実行中のセールにのみアクセスできます。未開封、終了、または一時停止中のセールにはアクセスできません。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}": { + "put": { + "summary": "ターゲットセールの {@link IShoppingSale.id }", + "description": "セールの詳細情報", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "セールの開始時間と終了時間の変更" + } + ], + "requestBody": { + "description": "セールの開始時間と終了時間を変更します。\n\n{@link IShoppingSale セール} の開始時間と終了時間を更新します。\n\nちなみに、セールがまだ開始または終了している場合は、開始時間を変更することはできません。逆に、セールがすでに開始されていてもまだ終了していない場合は、終了時間を変更することができます。\n\nもちろん、終了時間が開始時間より短い場合、またはそうでない場合は、428 処理不可能なエンティティ エラーがスローされます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "対象セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "新しい開始時間と終了時間", + "description": "セールのレプリカを取得します", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "セールのレプリカを取得します。\n\nレプリケーションの対象となるセールの {@link IShoppingSale.ICreate} 型の情報を取得します。\n\n同様の情報を持つ新しいレプリケーション {@link IShoppingSale セール} を作成する場合に便利です。" + } + ], + "responses": { + "200": { + "description": "対象となるセールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/open": { + "put": { + "summary": "レプリケーションのセールの作成情報", + "description": "セールを一時停止します", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "セールを一時停止します。\n\n{@link IShoppingSale セール} を {@link open opened} 状態から一時停止します。\n\nしたがって、セールは {@link restore 復元} されるまで再度実行できません。ちなみに、{@link IShoppingCustomer 顧客}\nは {@link index} および {@link at} API エンドポイントから引き続きセールを実行できますが、\n「一時停止」ラベルが付けられます。\n\nまた、顧客はショッピングカートに入れることもできなくなります。\nセールがすでにショッピングカートに入れられていたとしても、\n{@link IShoppingCartCommodity 商品} はショッピングカートに表示されません。また、一時停止されたセールの商品で\n{@link IShoppingOrder 注文} を適用することもできません。\n\nちなみに、セールがすでに注文に適用されている場合、注文は{@link IShoppingOrderPublish 公開}され、{@link IShoppingSeller 販売者}は顧客に商品を{@link IShoppingDelivery 配送}する必要があります。" + } + ], + "requestBody": { + "description": "ターゲットセールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IUpdateOpeningTime" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/replica": { + "post": { + "summary": "セールを一時停止する", + "description": "セールを一時停止します。\n\nセールを {@link open opened} 状態から一時停止します。\n\nしたがって、セールは {@link restore 復元} されるまで再度実行できず、{@link IShoppingCustomer 顧客} は {@link index} および {@link at} API からセールを参照できません。\n\nまた、顧客はショッピングカートに入れることもできなくなります。\nセールがすでにショッピングカートに入れられていたとしても、{@link IShoppingCartCommodity 商品} はショッピングカートに表示されません。また、一時停止されたセールの商品で {@link IShoppingOrder 注文} を適用することもできません。\n\nちなみに、セールがすでに注文に適用されていた場合、注文は {@link IShoppingOrderPublish 公開} され、{@link IShoppingSeller 販売者} は顧客に商品を {@link IShoppingDelivery 配送} する必要があります。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ターゲットセールの {@link IShoppingSale.id }" + } + ], + "responses": { + "201": { + "description": "セールを復元\n\n{@link IShoppingSale セール} を {@link pause paused} または\n{@link suspend suspended} 状態から復元します\n\nしたがって、セールは、{@link IShoppingSale.closed_at 終了時間} に達していない場合は再度実行できます。\nまた、一時停止または中断中に {@link IShoppingCustomer 顧客} がセールをショッピングカートに入れた場合、{@link IShoppingCartCommodity 商品} がショッピングカートに再度表示されます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/pause": { + "delete": { + "summary": "ターゲットセールの{@link IShoppingSale.id}", + "description": "回答記事を書く", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "回答記事を書きます。\n\n{@link IShoppingCustomer} が書いた特定の {@link IShoppingSaleInquiry 質問記事} に対して、正式な {@link IShoppingSaleInquiryAnswer 回答記事} を書きます。\n\nこれは、質問記事ごとに 1 つしか書けない正式な回答です (ただし、{@link update 更新可能})。したがって、{@link IShoppingSeller 販売者} が慎重に書くようにガイドする必要があります。\n\nまた、販売者は質問記事に {@link IShoppingSaleInquiryComment コメント} を好きなだけ書き込めるので、追加のコミュニケーションに役立ちます。" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/suspend": { + "delete": { + "summary": "所属セールの {@link IShoppingSale.id }", + "description": "対象の質問の {@link IShoppingSaleQuestion.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "回答記事の作成情報" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/restore": { + "put": { + "description": "新しく作成された回答記事", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "回答記事の更新" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{questionId}/answer": { + "post": { + "summary": "回答記事を更新します。\n\n正式な {@link IShoppingSaleInquiryAnswer 回答記事} を、{@link IShoppingCustomer} が書いた特定の {@link IShoppingSaleInquiry 質問記事} に更新します。\n\nちなみに、このショッピングモールの記事に関する一般的なポリシーとして、質問記事を修正しても、実際に既存のコンテンツが変更されるわけではありません。修正されたコンテンツは、新しい {@link IShoppingSaleInquiryAnswer.ISnapshot スナップショット} として既存の記事レコードに蓄積され記録されます。そして、これは {@link IShoppingCustomer 顧客} と {@link IShoppingSeller 販売者} を含むすべての人に公開され、記事を閲覧できる人なら誰でも編集履歴全体を閲覧できます。\n\nこれは、紛争が発生しやすい電子商取引の性質上、顧客や販売者が記事を修正して状況を操作するのを防ぐためです。つまり、証拠を保全するためです。", + "description": "所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象質問の {@link IShoppingSaleQuestion.id }" + }, + { + "name": "questionId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "回答記事の更新情報" + } + ], + "requestBody": { + "description": "回答記事の新規作成されたスナップショットレコード", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "すべての問い合わせコメントを一覧表示", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "すべての問い合わせコメントを一覧表示します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} のすべての {@link IShoppingSaleInquiryComment 問い合わせコメント} を {@link IPage ページネーション} で一覧表示します。\n\n必要に応じて、リクエスト本文で {@link IShoppingSaleInquiryComment.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleInquiryComment.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。\n\nちなみに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の問い合わせにのみアクセスできます。それ以外の場合は、セールのすべての問い合わせにアクセスできます。", + "description": "所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }" + }, + { + "name": "questionId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ページネーション、検索、並べ替えに関する情報のリクエスト" + } + ], + "requestBody": { + "description": "ページネーションされた問い合わせコメント", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "問い合わせコメントの作成", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments": { + "patch": { + "summary": "お問い合わせコメントを作成します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} の {@link IShoppingSaleInquiryComment お問い合わせコメント} を作成します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のお問い合わせに対してのみお問い合わせコメントを作成できます。\nそれ以外の場合は、セールのすべてのお問い合わせに対してお問い合わせコメントを作成できます。//|-0-|\\ 所属セールの {@link IShoppingSale.id }", + "description": "対象問い合わせの {@link IShoppingSaleInquiry.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの作成情報" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "新しく作成された問い合わせコメント" + } + ], + "requestBody": { + "description": "問い合わせコメント情報を取得する", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "お問い合わせコメント情報を取得します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} の詳細な {@link IShoppingSaleInquiryComment お問い合わせコメント} 情報を取得します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のお問い合わせコメントにのみアクセスできます。\n\nそれ以外の場合は、セールのすべてのお問い合わせコメントにアクセスできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "所属セールの {@link IShoppingSale.id }", + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象の問い合わせコメントの {@link IShoppingSaleInquiryComment.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "詳細な問い合わせコメント情報" + } + ], + "requestBody": { + "description": "問い合わせコメントの更新", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "お問い合わせコメントを更新します。\n\n{@link IShoppingSaleInquiryComment お問い合わせコメント} を特定の{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} に更新します。\n\nちなみに、このショッピングモールのコメントに関する一般的なポリシーでは、コメントを変更しても既存のコンテンツは変更されません。\n\n変更されたコンテンツは、新しい {@link IShoppingSaleInquiryComment.ISnapshot スナップショット} として既存のコメント記録に蓄積され記録されます。そして、これはこのお問い合わせコメントを読むことができるすべての人に公開されます。\n\nこれは、紛争が発生しやすい電子商取引の性質上、顧客や販売者がコメントを変更して状況を操作するのを防ぐためです。つまり、証拠を保存するためです。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { + "get": { + "summary": "所属セールの {@link IShoppingSale.id }", + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象問い合わせコメントの {@link IShoppingSaleInquiryComment.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの更新情報" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの新規作成されたスナップショットレコード" + } + ], + "responses": { + "200": { + "description": "要約されたすべての質問をリストアップ", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "要約された質問をすべてリストします。\n\n{@link IShoppingSale セール} のすべての {@link IShoppingSaleQuestion.ISummary 要約された質問} をリストします。\n\nご覧のとおり、返された質問は要約されており、詳細ではありません。質問の詳細情報を取得するには、各記事に対して {@link adridges} 関数または {@link at} 関数を使用します。\n\nまた、返された質問には {@link IShoppingSaleQuestion.ISummary.answer} プロパティがあり、これは {@link IShoppingSeller} からの正式な回答を意味します。\n\nさらに、返された質問には、他のプリンシパル プロパティをマスクする別の特別なプロパティ {@link IShoppingSaleQuestion.ISummary.secret} があり、関連するアクターのみが質問を {@link at で読み取ることができることを意味します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の質問にのみアクセスできます。それ以外の場合は、セールのすべての質問にアクセスできます。\n\nちなみに、必要に応じて、リクエスト ボディで {@link IShoppingSaleQuestion.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleQuestion.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。", + "description": "所属セールの {@link IShoppingSale.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ページネーション、検索、並べ替えに関する情報をリクエスト" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "要約情報を含むページ分けされた質問" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべての要約された質問をリストします" + } + ], + "requestBody": { + "description": "すべての要約された質問を一覧表示します。\n\n{@link IShoppingSale セール} のすべての {@link IShoppingSaleQuestion.IAbridge 要約された質問} を一覧表示します。\n\nご覧のとおり、返される質問は要約されており、詳細ではありません。質問の詳細情報を取得する場合は、各記事に対して {@link at} 関数を使用します。\n\nまた、返される質問には、{@link IShoppingSaleQuestion.IAridge.answer} プロパティがあり、これは {@link IShoppingSeller} からの正式な回答を意味します。\n\nさらに、返される質問には、他の基本プロパティをマスクする別の特別なプロパティ {@link IShoppingSaleQuestion.IAridge.secret} があり、関連するアクターのみが質問を {@link at で読み取ることができることを意味します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の質問にのみアクセスできます。それ以外の場合は、販売のすべての質問にアクセスできます。\n\nちなみに、必要に応じて、リクエスト本文に\n{@link IShoppingSaleQuestion.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleQuestion.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions": { + "patch": { + "summary": "ページ付け、検索、並べ替えに関する情報をリクエスト", + "description": "要約情報を含むページ付けされた質問", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "質問情報を取得" + } + ], + "requestBody": { + "description": "質問情報を取得します。\n\n{@link IShoppingSale セール} の詳細な {@link IShoppingSaleQuestion 質問} 情報を取得します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の質問にのみアクセスできます。それ以外の場合は、{@link IShoppingCustomer 顧客} の場合は、{@link IShoppingSaleQuestion.secret} の値が `false` である場合を除き、セールのすべての質問にアクセスできます。//|-0-|\\ 所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "対象の質問の {@link IShoppingSaleQuestion.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/abridges": { + "patch": { + "summary": "詳細な質問情報", + "description": "回答記事を書く", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "回答記事を書きます。\n\n{@link IShoppingCustomer} が書いた特定の {@link IShoppingSaleInquiry レビュー記事} に対して、正式な {@link IShoppingSaleInquiryAnswer 回答記事} を書きます。\n\nこれは、レビュー記事ごとに 1 つしか書けない正式な回答です (ただし、{@link update 更新可能})。したがって、{@link IShoppingSeller セラー} が慎重に書くようにガイドする必要があります。\n\nまた、セラーはレビュー記事に {@link IShoppingSaleInquiryComment コメント} を好きなだけ書き込めるので、追加のコミュニケーションに役立ちます。" + } + ], + "requestBody": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "対象レビューの {@link IShoppingSaleReview.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{id}": { + "get": { + "summary": "回答記事の作成情報", + "description": "新しく作成された回答記事", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "回答記事の更新" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "回答記事を更新します。\n\n正式な {@link IShoppingSaleInquiryAnswer 回答記事} を、{@link IShoppingCustomer} が書いた特定の {@link IShoppingSaleInquiry レビュー記事} に更新します。\n\nちなみに、このショッピングモールの記事に関する一般的なポリシーとして、レビュー記事を修正しても、実際に既存のコンテンツが変更されるわけではありません。修正されたコンテンツは、新しい {@link IShoppingSaleInquiryAnswer.ISnapshot スナップショット} として既存の記事レコードに蓄積され記録されます。そして、これは {@link IShoppingCustomer 顧客} と {@link IShoppingSeller 販売者} を含むすべての人に公開され、記事を閲覧できる人なら誰でも編集履歴全体を閲覧できます。\n\nこれは、紛争が発生しやすい電子商取引の性質上、顧客や販売者が記事を修正して状況を操作するのを防ぐためです。つまり、証拠を保全するためです。" + } + ], + "responses": { + "200": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{reviewId}/answer": { + "post": { + "summary": "対象レビューの {@link IShoppingSaleReview.id }", + "description": "回答記事の更新情報", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "回答記事の新規作成スナップショットレコード" + }, + { + "name": "reviewId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントを一覧表示" + } + ], + "requestBody": { + "description": "すべての問い合わせコメントを一覧表示します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} のすべての {@link IShoppingSaleInquiryComment 問い合わせコメント} を {@link IPage ページネーション} で一覧表示します。\n\n必要に応じて、リクエスト本文で {@link IShoppingSaleInquiryComment.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleInquiryComment.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズできます。\n\nちなみに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} の問い合わせにのみアクセスできます。それ以外の場合は、セールのすべての問い合わせにアクセスできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "所属問い合わせの {@link IShoppingSaleInquiry.id }", + "description": "ページネーション、検索、並べ替えに関する情報のリクエスト", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ページネーションされた問い合わせコメント" + }, + { + "name": "reviewId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの作成" + } + ], + "requestBody": { + "description": "お問い合わせコメントを作成します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} の {@link IShoppingSaleInquiryComment お問い合わせコメント} を作成します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のお問い合わせに対してのみお問い合わせコメントを作成できます。\nそれ以外の場合は、セールのすべてのお問い合わせに対してお問い合わせコメントを作成できます。//|-0-|\\ 所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "ターゲット問い合わせの {@link IShoppingSaleInquiry.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments": { + "patch": { + "summary": "お問い合わせコメントの作成情報", + "description": "新しく作成されたお問い合わせコメント", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "お問い合わせコメント情報を取得" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "お問い合わせコメント情報を取得します。\n\n{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} の詳細な {@link IShoppingSaleInquiryComment お問い合わせコメント} 情報を取得します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のお問い合わせコメントにのみアクセスできます。\n\nそれ以外の場合は、セールのすべてのお問い合わせコメントにアクセスできます。" + } + ], + "requestBody": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "対象の問い合わせコメントの {@link IShoppingSaleInquiryComment.id }", + "description": "詳細な問い合わせコメント情報", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの更新" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "お問い合わせコメントを更新します。\n\n{@link IShoppingSaleInquiryComment お問い合わせコメント} を特定の{@link IShoppingSaleQuestion 質問} または {@link IShoppingSaleReview レビュー} に更新します。\n\nちなみに、このショッピングモールのコメントに関する一般的なポリシーでは、コメントを変更しても既存のコンテンツは変更されません。\n\n変更されたコンテンツは、新しい {@link IShoppingSaleInquiryComment.ISnapshot スナップショット} として既存のコメント記録に蓄積され記録されます。そして、これはこのお問い合わせコメントを読むことができるすべての人に公開されます。\n\nこれは、紛争が発生しやすい電子商取引の性質上、顧客や販売者がコメントを変更して状況を操作するのを防ぐためです。つまり、証拠を保存するためです。" + } + ], + "requestBody": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "所属問い合わせの {@link IShoppingSaleInquiry.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { + "get": { + "summary": "対象問い合わせコメントの {@link IShoppingSaleInquiryComment.id }", + "description": "問い合わせコメントの更新情報", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "問い合わせコメントの新規作成されたスナップショットレコード" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "要約されたレビューをすべて一覧表示" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "要約されたレビューをすべて一覧表示します。\n\n{@link IShoppingSale セール} のすべての {@link IShoppingSaleReview.ISummary 要約されたレビュー} を一覧表示します。\n\nご覧のとおり、返されるレビューは要約されており、詳細ではありません。レビューの詳細情報を取得するには、各記事に対して {@link adridges} 関数または {@link at} 関数を使用します。\n\nまた、返されるレビューには、{@link IShoppingSeller} からの正式な回答を意味する {@link IShoppingSaleReview.ISummary.answer} プロパティがあります。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のレビューにのみアクセスできます。それ以外の場合は、セールのすべてのレビューにアクセスできます。\n\nちなみに、必要に応じて、リクエスト本文で {@link IShoppingSaleReview.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingSaleReview.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。" + } + ], + "responses": { + "200": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "ページネーション、検索、並べ替えに関する情報をリクエスト", + "description": "要約情報を含むページ分けされたレビュー", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべての要約レビューを一覧表示" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "すべての要約レビューを一覧表示します。\n\n{@link IShoppingSale セール} のすべての {@link IShoppingSaleReview.IAbridge 要約レビュー} を一覧表示します。\n\nご覧のとおり、返されるレビューは要約されており、詳細ではありません。レビューの詳細情報を取得するには、各記事に対して {@link at} 関数を使用します。\n\nまた、返されるレビューには、{@link IShoppingSeller} からの正式な回答を意味する {@link IShoppingSaleReview.IAridge.answer} プロパティがあります。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のレビューにのみアクセスできます。 それ以外の場合は、セールのすべてのレビューにアクセスできます。\n\nちなみに、必要に応じて、リクエスト本文で {@link IShoppingSaleReview.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingSaleReview.IRequest.sort ソート条件} を設定することで、レコードの順序をカスタマイズすることもできます。" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "ページ付け、検索、並べ替えに関する情報をリクエスト", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "要約情報を含むページ付けされたレビュー", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews": { + "patch": { + "summary": "レビュー情報を取得", + "description": "レビュー情報を取得します。\n\n{@link IShoppingSale セール} の詳細な {@link IShoppingSaleReview レビュー} 情報を取得します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のレビューにのみアクセスできます。それ以外の場合は、{@link IShoppingCustomer カスタマー} の場合は、セールのすべてのレビューにアクセスできます。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "対象レビューの {@link IShoppingSaleReview.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "詳細なレビュー情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/abridges": { + "patch": { + "summary": "スナップショットのレプリカを取得します", + "description": "スナップショットのレプリカを取得します。\n\nレプリケーションの対象となる {@link IShoppingSaleSnapshot スナップショット} レコードの {@link IShoppingSale.ICreate} タイプの情報を取得します。\n\n古いスナップショットから新しいレプリケーション {@link IShoppingSale セール} を作成する場合に便利です。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属するセールの {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "ターゲット スナップショットの {@link IShoppingSaleSnapshot.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "レプリケーションのセールの作成情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{id}": { + "get": { + "summary": "すべてのスナップショットを一覧表示します", + "description": "すべてのスナップショットを一覧表示します。\n\n{@link IShoppingSeller セラー} が {@link IShoppingSale セール} を更新するたびに、セール レコードは更新されませんが、セール履歴の整合性を保つために新しい {@link IShoppingSaleSnapshot スナップショット} レコードが作成されます。この API 関数は、このようなスナップショット レコードを一覧表示するためのものです。\n\nまた、戻り値の型からわかるように、返されるスナップショットは要約されており、詳細ではありません。スナップショットの詳細情報を取得するには、各スナップショットに対して {@link at} または {@link flipo} 関数を使用します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のスナップショットにのみアクセスできます。それ以外の場合は、セールが終了または一時停止されていても、セールのすべてのスナップショットにアクセスできます。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ターゲットセールの {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ページネーションのリクエスト情報" + } + ], + "responses": { + "200": { + "description": "要約情報を含むページ分けされたスナップショット", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots/{id}/replica": { + "post": { + "summary": "スナップショット情報を取得します", + "description": "スナップショット情報を取得します。\n\n詳細情報を含む {@link IShoppingSaleSnapshot スナップショット} を取得します。\n\n戻り値の型からわかるように、返されたスナップショットには {@link IShoppingSale セール} 情報は含まれていません。セール情報を取得する場合は、代わりに {@link flip} 関数を使用します。\n\n参考までに、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale セール} のスナップショットにのみアクセスできます。それ以外の場合は、セールが終了または一時停止されていても、セールのすべてのスナップショットにアクセスできます。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象スナップショットの {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "201": { + "description": "スナップショットの詳細情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots": { + "patch": { + "summary": "反転スナップショット情報を取得します", + "description": "反転されたスナップショット情報を取得します。\n\n反転されたスナップショットの {@link IShoppingSale sale} 情報を取得します。\n\n戻り値の型からわかるように、この関数は {@link IShoppingSale sale} 情報を返します。ちなみに、セール情報は最新のものではなく、スナップショット側の反転された情報です。\n\nまた、{@link IShoppingSeller セラー} の場合は、自分の {@link IShoppingSale sale} のスナップショットにのみアクセスできます。それ以外の場合は、セールが終了または一時停止されていても、セールのすべてのスナップショットにアクセスできます。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの{@link IShoppingSale.id}" + } + ], + "requestBody": { + "description": "対象スナップショットの{@link IShoppingSaleSnapshot.id}", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "スナップショット側にセールの詳細情報を表示", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots/{id}": { + "get": { + "summary": "すべてのサプリメントをリストアップ", + "description": "すべてのサプリメントを一覧表示します。\n\n特定の {@link IShoppingSaleUnitStock 在庫} のすべての {@link IShoppingSaleUnitStockSupplement サプリメント履歴} を一覧表示します。\n\n必要に応じて、リクエスト本文で {@link IShoppingSaleUnitStockSupplement.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSaleUnitStockSupplement.IRequest.sort} プロパティを設定することで、レコードの順序をカスタマイズできます。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属セールの {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属ユニットの {@link IShoppingSaleUnit.id }" + } + ], + "responses": { + "200": { + "description": "対象在庫の {@link IShoppingSaleUnitStock.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots/{id}/flip": { + "get": { + "summary": "ページネーション、検索、並べ替えに関する情報をリクエスト", + "description": "ページネーションされた補足", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "補足を作成" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "サプリメントを作成します。\n\n特定の {@link IShoppingSaleUnitStock 在庫} の {@link IShoppingSaleUnitStockSupplement サプリメント履歴} を作成します。\n\nしたがって、対象在庫の {@link IShoppingSaleUnitStockInventory.income 在庫} は、{@link IShoppingSaleUnitStockSupplement.value サプリメントの値} だけ増加します。" + } + ], + "responses": { + "200": { + "description": "所属販売の {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements": { + "patch": { + "summary": "所属ユニットの {@link IShoppingSaleUnit.id }", + "description": "対象在庫の {@link IShoppingSaleUnitStock.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "サプリメントの情報を作成します" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "補足を作成しました" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "補足を更新します" + } + ], + "requestBody": { + "description": "補足を更新します。\n\n特定の {@link IShoppingSaleUnitStock 在庫} の {@link IShoppingSaleUnitStockSupplement 補足} の数量値を更新します。\n\nしたがって、対象在庫の {@link IShoppingSaleUnitStockInventory.income 在庫} は、{@link IShoppingSaleUnitStockSupplement.value 補足の値} によって変更されます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleUnitStockSupplement" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "所属ユニットの {@link IShoppingSaleUnit.id }", + "description": "対象在庫の {@link IShoppingSaleUnitStock.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象サプリメントの {@link IShoppingSaleUnitStockSupplement.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "サプリメントの情報 (数量) を更新します" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "サプリメントを消去します" + } + ], + "requestBody": { + "description": "サプリメントを消去します。\n\n特定の {@link IShoppingSaleUnitStock 在庫} の {@link IShoppingSaleUnitStockSupplement サプリメント} を消去します。\n\nしたがって、対象在庫の {@link IShoppingSaleUnitStockInventory.income 在庫} は、{@link IShoppingSaleUnitStockSupplement.value サプリメントの値} だけ減少します。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "所属セールの {@link IShoppingSale.id }", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements/{id}": { + "put": { + "summary": "所属ユニットの {@link IShoppingSaleUnit.id }", + "description": "対象在庫の {@link IShoppingSaleUnitStock.id }", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象サプリメントの {@link IShoppingSaleUnitStockSupplement.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "子レコードを持つすべてのカテゴリをリストします" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "子レコードを持つすべてのカテゴリを一覧表示します。\n\nページ区切り付きの {@link IShoppingChannel チャネル} のすべての {@link IShoppingChannelCategory.IHierarchical カテゴリ} を一覧表示します。返されるカテゴリには子カテゴリも含まれます。\n\n必要に応じて、リクエスト本文で {@link IShoppingChannelCategory.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingChannelCategory.IRequest.sort ソート条件} を構成することで、レコードの順序をカスタマイズすることもできます。" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属チャンネルの {@link IShoppingChannel.code }" + } + ], + "requestBody": { + "description": "子カテゴリーを含むページ分けされたカテゴリー", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "カテゴリー情報を取得します", + "description": "カテゴリー情報を取得します。\n\n詳細な {@link IShoppingChannelCategory カテゴリー} 情報を取得します。\n\n返されるカテゴリーには階層的な子カテゴリーが含まれ、再帰的な親カテゴリーも含まれます。", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "所属チャンネルの {@link IShoppingChannel.code }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "対象カテゴリーの {@link IShoppingChannelCategory.id }" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "詳細なカテゴリー情報" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "反転されたカテゴリー情報を取得します" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{channelCode}/categories": { + "patch": { + "summary": "反転したカテゴリ情報を取得します。\n\n反転した {@link IShoppingChannelCategory.IInvert category} 情報を取得します。\n\n返されたカテゴリには再帰的な親カテゴリが含まれますが、階層的な子カテゴリは含まれません。", + "description": "所属チャネルの {@link IShoppingChannel.code }", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "対象カテゴリの {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "詳細なカテゴリ情報", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}": { + "get": { + "summary": "すべてのチャネルをリストします", + "description": "すべてのチャネルを一覧表示します。\n\nすべての {@link IShoppingChannel チャネル} をページ区切りで一覧表示します。\n\n必要に応じて、リクエスト本体で {@link IShoppingChannel.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingChannel.IRequest.sort ソート条件} を設定することで、レコードのシーケンス順序をカスタマイズできます。", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "ページ区切り、検索、ソートのリクエスト情報" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "ページ区切りのチャネル" + } + ], + "responses": { + "200": { + "description": "ネストされたカテゴリを持つすべてのチャネルを一覧表示します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}/invert": { + "get": { + "summary": "ネストされたカテゴリを持つすべてのチャネルを一覧表示します。\n\n{@link IPage ページネーション} を持つすべての {@link IShoppingChannel.IHierarchical チャネル} を一覧表示します。返されるチャネルには、ネストされた階層的な {@link IShoppingChannelCategory.IHierarchical カテゴリ} が含まれます。\n\n必要に応じて、リクエスト本体で {@link IShoppingChannel.IRequest.search 検索条件} を構成することで結果を制限できます。また、{@link IShoppingChannel.IRequest.sort ソート条件} を構成することで、レコードの順序をカスタマイズできます。", + "description": "ページネーション、検索、並べ替えに関する情報を要求します", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "ネストされたカテゴリを持つページネーションされたチャネル" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "チャネル情報を取得します" + } + ], + "responses": { + "200": { + "description": "チャネル情報を取得します。\n\n詳細な {@link IShoppingChannel.IHierarchical チャネル} 情報を取得します。\n\n返されるチャネル インスタンスには、ネストされた {@link IShoppingChannelCategory.IHierarchical 階層カテゴリ} 情報も含まれます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels": { + "patch": { + "summary": "対象チャネルの {@link IShoppingChannel.id }", + "description": "詳細なチャネル情報", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "コードでチャネル情報を取得します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "コードでチャネル情報を取得します。\n\nコードで詳細な {@link IShoppingChannel.IHierarchical チャネル} 情報を取得します。\n\n返されるチャネル インスタンスには、ネストされた {@link IShoppingChannelCategory.IHierarchical 階層カテゴリ} 情報も含まれます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/hierarchical": { + "patch": { + "summary": "対象チャネルの {@link IShoppingChannel.code }", + "description": "詳細なチャネル情報", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "すべてのセクションをリストします", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "すべてのセクションを一覧表示します。\n\nすべての {@link IShoppingSection セクション} をページ区切りで一覧表示します。\n\n必要に応じて、リクエスト本体で {@link IShoppingSection.IRequest.search 検索条件} を設定することで結果を制限できます。また、{@link IShoppingSection.IRequest.sort ソート条件} を設定することで、レコードのシーケンス順序をカスタマイズできます。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{id}": { + "get": { + "summary": "ページ区切り、検索、ソートの情報をリクエストします", + "description": "ページ区切りのセクション", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "セクション情報を取得します" + } + ], + "responses": { + "200": { + "description": "セクション情報を取得します。\n\n詳細な {@link IShoppingSection section} 情報を取得します。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{code}/get": { + "get": { + "summary": "対象セクションの {@link IShoppingSection.id }", + "description": "詳細なセクション情報", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "コードでセクション情報を取得します" + } + ], + "responses": { + "200": { + "description": "コードでセクション情報を取得します。\n\n詳細な {@link IShoppingSection section} 情報をコードで取得します。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/sections": { + "patch": { + "summary": "対象セクションの {@link IShoppingSection.code }", + "description": "詳細なセクション情報", + "tags": [ + "Section" + ], + "parameters": [], + "requestBody": { + "description": "常駐セット サイズは、すべての C++ および JavaScript オブジェクトとコードを含む、プロセス用のメイン メモリ デバイス (割り当てられたメモリの合計のサブセット) で占有されるスペースの量です。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "V8 のメモリ使用量を参照します", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/sections/{id}": { + "get": { + "summary": "V8 のメモリ使用量を参照します。", + "description": "V8 のメモリ使用量を参照します", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "V8 のメモリ使用量を参照します。" + } + ], + "responses": { + "200": { + "description": "すべての Node.js バッファーを含む、`ArrayBuffer` および `SharedArrayBuffer` に割り当てられたメモリを参照します。これは外部値にも含まれています。Node.js が組み込みライブラリとして使用されている場合、その場合 `ArrayBuffer` の割り当てが追跡されない可能性があるため、この値は `0` になることがあります。", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/sections/{code}/get": { + "get": { + "summary": "ランダムな一意の ID", + "description": "ランダムな一意の ID。", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "`process.argv`" + } + ], + "responses": { + "200": { + "description": "Git コミット情報", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + } + }, + "components": { + "schemas": { + "IPerformance": { + "type": "object", + "properties": { + "cpu": { + "$ref": "#/components/schemas/process.global.NodeJS.CpuUsage" + }, + "memory": { + "$ref": "#/components/schemas/process.global.NodeJS.MemoryUsage" + }, + "resource": { + "$ref": "#/components/schemas/process.global.NodeJS.ResourceUsage" + } + }, + "required": [ + "cpu", + "memory", + "resource" + ] + }, + "process.global.NodeJS.CpuUsage": { + "type": "object", + "properties": { + "user": { + "type": "number" + }, + "system": { + "type": "number" + } + }, + "required": [ + "user", + "system" + ] + }, + "process.global.NodeJS.MemoryUsage": { + "type": "object", + "properties": { + "rss": { + "type": "number", + "description": "Git コミット情報。" + }, + "heapTotal": { + "type": "number", + "title": "`package.json`", + "description": "このサーバーの作成時刻" + }, + "heapUsed": { + "type": "number", + "title": "このサーバーの作成時刻。", + "description": "システム情報。" + }, + "external": { + "type": "number" + }, + "arrayBuffers": { + "type": "number", + "description": "Git コミット情報。" + } + }, + "required": [ + "rss", + "heapTotal", + "heapUsed", + "external", + "arrayBuffers" + ] + }, + "process.global.NodeJS.ResourceUsage": { + "type": "object", + "properties": { + "fsRead": { + "type": "number" + }, + "fsWrite": { + "type": "number" + }, + "involuntaryContextSwitches": { + "type": "number" + }, + "ipcReceived": { + "type": "number" + }, + "ipcSent": { + "type": "number" + }, + "majorPageFault": { + "type": "number" + }, + "maxRSS": { + "type": "number" + }, + "minorPageFault": { + "type": "number" + }, + "sharedMemorySize": { + "type": "number" + }, + "signalsCount": { + "type": "number" + }, + "swappedOut": { + "type": "number" + }, + "systemCPUTime": { + "type": "number" + }, + "unsharedDataSize": { + "type": "number" + }, + "unsharedStackSize": { + "type": "number" + }, + "userCPUTime": { + "type": "number" + }, + "voluntaryContextSwitches": { + "type": "number" + } + }, + "required": [ + "fsRead", + "fsWrite", + "involuntaryContextSwitches", + "ipcReceived", + "ipcSent", + "majorPageFault", + "maxRSS", + "minorPageFault", + "sharedMemorySize", + "signalsCount", + "swappedOut", + "systemCPUTime", + "unsharedDataSize", + "unsharedStackSize", + "userCPUTime", + "voluntaryContextSwitches" + ] + }, + "ISystem": { + "type": "object", + "properties": { + "uid": { + "type": "number", + "title": "Git ユーザー アカウント情報。", + "description": "NPM パッケージ情報。" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "T 型のプロパティ K のセットを持つ型を構築します" + }, + "commit": { + "$ref": "#/components/schemas/ISystem.ICommit", + "title": "顧客のタイプの判別式", + "description": "顧客のタイプの判別式。" + }, + "package": { + "$ref": "#/components/schemas/ISystem.IPackage", + "description": "メンバーシップ加入情報" + }, + "created_at": { + "type": "string", + "title": "メンバーシップ加入情報。", + "description": "顧客、接続情報" + } + }, + "required": [ + "uid", + "arguments", + "commit", + "package", + "created_at" + ], + "description": "顧客、接続情報。" + }, + "ISystem.ICommit": { + "type": "object", + "properties": { + "shortHash": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "hash": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "sanitizedSubject": { + "type": "string" + }, + "body": { + "type": "string" + }, + "author": { + "$ref": "#/components/schemas/ISystem.ICommit.IUser" + }, + "committer": { + "$ref": "#/components/schemas/ISystem.ICommit.IUser" + }, + "authored_at": { + "type": "string" + }, + "commited_at": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shortHash", + "branch", + "hash", + "subject", + "sanitizedSubject", + "body", + "author", + "committer", + "authored_at", + "commited_at", + "tags" + ], + "description": "実名と携帯電話番号の認証情報" + }, + "ISystem.ICommit.IUser": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "実名と携帯電話番号の認証情報。" + }, + "ISystem.IPackage": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "description": { + "type": "string" + }, + "main": { + "type": "string" + }, + "typings": { + "type": "string" + }, + "scripts": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "repository": { + "type": "object", + "properties": { + "type": { + "const": "git" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ] + }, + "author": { + "type": "string" + }, + "license": { + "type": "string" + }, + "bugs": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ] + }, + "homepage": { + "type": "string" + }, + "devDependencies": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "dependencies": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "publishConfig": { + "type": "object", + "properties": { + "registry": { + "type": "string" + } + }, + "required": [ + "registry" + ] + }, + "files": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "version", + "description", + "scripts", + "repository", + "author", + "license", + "bugs", + "homepage", + "dependencies" + ], + "description": "主キー" + }, + "Recordstringstring": { + "type": "object", + "properties": {}, + "description": "主キー。", + "additionalProperties": { + "type": "string" + } + }, + "IShoppingAdministrator.IInvert": { + "type": "object", + "properties": { + "type": { + "const": "administrator", + "title": "レコードの作成時刻", + "description": "レコードの作成時刻。\n\n言い換えると、管理者がサインアップした時刻です。" + }, + "member": { + "$ref": "#/components/schemas/IShoppingMember.IInvert", + "title": "管理者情報から情報を反転します。\n\n{@link IShoppingCustomer.member} -> {@link IShoppingMember.administrator} から管理者情報にアクセスする代わりに、\n`IShoppingAdministrator.IInvert` は管理者情報から開始し、\n顧客、メンバー、および {@link IShoppingCitizen 市民} 情報に逆にアクセスします。", + "description": "主キー" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer.IInvert", + "title": "主キー。", + "description": "メンバーを一意に識別するニックネーム" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen", + "title": "メンバーを一意に識別するニックネーム。", + "description": "メールのリスト" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "メールのリスト。", + "description": "レコードの作成時刻" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "レコードの作成時刻。\n\n言い換えると、メンバーがサインアップした時刻です。", + "description": "メンバーの反転情報。\n\nこの反転メンバー情報は、以下のように、販売者と管理者の別の反転情報に使用されるように設計されています。\n\n- {@link IShoppingSeller.IInvert}\n- {@link IShoppingAdministrator.IInvert}" + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "主キー" + }, + "IShoppingMember.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "主キー。", + "description": "メールアドレス値" + }, + "nickname": { + "type": "string", + "title": "メールアドレス値。", + "description": "レコード作成時刻" + }, + "emails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMemberEmail" + }, + "title": "レコード作成時刻。", + "description": "会員のメールアドレス。\n\nこのショッピングモールシステムでは、1 人の {@link IShoppingMember 会員} に対して複数のメールアドレスを登録できます。複数のメールアドレスを計画する必要がない場合は、1 つのみ使用してください。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "主キー", + "description": "主キー。" + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "所属チャネル" + }, + "IShoppingMemberEmail": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "所属チャネル。", + "description": "外部ユーザー情報" + }, + "value": { + "type": "string", + "format": "email", + "title": "外部ユーザー情報。\n\n顧客が外部サービスからアクセスした場合。", + "description": "接続アドレス" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "接続アドレス。\n\nクライアントの {@link window.location.href} と同じです。", + "description": "リファラー アドレス" + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "リファラー アドレス。\n\nクライアントの {@link window.document.referrer} と同じです。" + }, + "IShoppingCustomer.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "接続 IP アドレス", + "description": "接続 IP アドレス。" + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "接続レコードの作成時刻", + "description": "接続レコードの作成時刻。" + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "反転された顧客情報。\n\nこの反転された顧客情報は、以下のように販売者と管理者の別の反転情報に使用するために設計されています。\n\n- {@link IShoppingSeller.IInvert}\n- {@link IShoppingAdministrator.IInvert}", + "description": "主キー" + }, + "href": { + "type": "string", + "format": "uri", + "title": "主キー。", + "description": "レコードの作成時刻" + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "レコードの作成時刻。", + "description": "識別子コード" + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "識別子コード。", + "description": "チャネル名" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "チャネル名。", + "description": "チャネル情報。\n\n`IShoppingChannel` は、市場での流通チャネルを形成する概念です。したがって、この電子商取引システムでのチャネルの違いは、別のサイトまたはアプリケーションであることを意味します。\n\nちなみに、ショッピングモールシステムに必要なチャネルが 1 つだけの場合は、1 つだけ使用してください。この概念は、将来的に拡張できるように設計されています。" + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "主キー" + }, + "IShoppingChannel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "主キー。", + "description": "市民アクティベーション情報" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "市民アクティベーション情報。", + "description": "レコードの作成時刻" + }, + "code": { + "type": "string", + "title": "レコードの作成時刻。\n\n言い換えると、外部ユーザーが初めて接続した時刻です。", + "description": "外部システムからの外部ユーザーの識別キー" + }, + "name": { + "type": "string", + "title": "外部システムからの外部ユーザーの識別キー。", + "description": "外部サービスの識別コード" + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "外部サービスの識別コード。\n\n共通で {@link IShoppingChannel.code} と同じになる場合があります。" + }, + "IShoppingExternalUser": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "外部システムでの外部ユーザーのニックネーム", + "description": "外部システムでの外部ユーザーのニックネーム。" + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "外部システムからの外部ユーザーに関する追加情報。", + "description": "外部ユーザー情報。\n\n`IShoppingExternalUser` は、このシステムが外部サービスに接続し、そのユーザーをこのサービスの {@link IShoppingCustomer 顧客} として迎え入れる必要がある場合に指定されるエンティティです。\n\n参考までに、外部サービスから接続する顧客にはこのレコードが必要であり、外部サービス ユーザーは 2 つの属性 {@link application} と {@link uid} によって識別されます。外部サービスから接続した顧客がこのサービスから {@link IShoppingCitizen 実名認証} を完了すると、外部サービス ユーザーがこのサービスに再接続して新しい顧客認証トークンを発行するたびに、実名認証が完了から開始されます。\n\nまた、{@link password} は、外部サービス システムによってユーザーに発行されたパスワード (いわゆる永続ユーザー認証トークン) であり、実際のユーザー パスワードではありません。ただし、現在の外部システム ユーザーと同じアプリケーションと UID を入力した顧客の場合、これを正しい外部システム ユーザーと見なすか、違反と見なすかを決定するためです。\n\nさらに、外部サービスから受信した追加情報を JSON 形式でデータ フィールドに記録できます。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "主キー", + "description": "主キー。" + }, + "uid": { + "type": "string", + "title": "レコードの作成時刻", + "description": "レコードの作成時刻。" + }, + "application": { + "type": "string", + "title": "携帯電話番号", + "description": "携帯電話番号。" + }, + "nickname": { + "type": "string", + "title": "本名、またはそれに相当するニックネーム", + "description": "本名、またはそれに相当するニックネーム。" + }, + "data": { + "description": "市民認証情報。\n\n`IShoppingCitizen` は、ユーザーの {@link name real name} と {@link mobile} の入力情報を記録するエンティティです。\n\n参考までに、韓国では電子商取引の参加者には実名認証が求められるため、name 属性が重要です。ただし、海外では状況が異なり、実際にはモバイル属性が最も重要であり、個人の識別もこのモバイルに基づいて行われます。\n\nもちろん、実名と携帯電話の認証情報は暗号化されて保存されます。" + } + }, + "required": [ + "id", + "citizen", + "created_at", + "uid", + "application", + "nickname", + "data" + ], + "description": "入会リクエスト情報。" + }, + "IShoppingCitizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "メンバーのメールアドレス", + "description": "メンバーのメールアドレス。\n\nメンバーが複数のメールアドレスを持っている場合は、そのうちの1つを使用してください。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "メンバーアカウントのパスワード", + "description": "メンバーアカウントのパスワード。" + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "ログインリクエスト情報。", + "description": "プライマリキー" + }, + "name": { + "type": "string", + "title": "プライマリキー。", + "description": "クーポンを作成したデザイナー" + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "クーポンを作成したデザイナー。" + }, + "IShoppingAdministrator.IJoin": { + "type": "object", + "properties": {}, + "description": "在庫情報" + }, + "IShoppingMember.ILogin": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "在庫情報。", + "description": "条件情報のリスト" + }, + "password": { + "type": "string", + "title": "条件情報のリスト。", + "description": "割引情報" + } + }, + "required": [ + "email", + "password" + ], + "description": "割引情報。" + }, + "IShoppingCoupon": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "制限情報", + "description": "制限情報。" + }, + "designer": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingAdministrator" + }, + { + "$ref": "#/components/schemas/IShoppingSeller" + } + ], + "title": "クーポンの代表名", + "description": "クーポンの代表名。" + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingCouponInventory", + "title": "クーポンの開始時間", + "description": "クーポンの開始時間。" + }, + "criterias": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSectionCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSellerCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSaleCriteria" + }, + { + "$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": "クーポンの終了時間", + "description": "クーポンの終了時間。\n\nこの時間以降はチケットを発行できません。\n\nただし、以前に発行されたチケットは有効期限まで引き続き使用できます。" + }, + "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": "レコードの作成タイ", + "description": "レコードの作成タイ。" + }, + "restriction": { + "$ref": "#/components/schemas/IShoppingCouponRestriction", + "title": "割引クーポン。\n\n`IShoppingCoupon` は、ショッピング モールの割引クーポンを表すエンティティです。\n\n`IShoppingCoupon` には、割引クーポンに関する仕様情報のみが含まれていることに注意してください。これは、割引クーポンの発行を指す {@link IShoppingCouponTicket} や、その支払いを指す {@link IShoppingCouponTicketPayment} とは異なる概念であることに注意してください。\n\nまた、割引クーポンは注文ごとに適用されますが、それぞれに固有の制限があります。 たとえば、{@link IShoppingCouponSellerCriteria} を持つクーポンは、{@link IShoppingSeller} によって登録されたリスティングの {@link IShoppingSale} にのみ使用できる場合と使用できない場合があります。\nまた、割引クーポンの利用には、{@link IShoppingCouponDiscount.threshold 最低金額制限} や、{@link IShoppingCouponDiscount.limit 最大割引金額制限} などの制限があります。\n\nまた、割引クーポンを公開して発行するか、特定の発行コードを知っている人だけに配布するかを設定できます。また、発行された割引クーポンには、{@link IShoppingCouponRestriction.expired_at 有効期限} がある、{@link IShoppingCouponFunnelCriteria 特定のファネルを経由して来た顧客だけに発行される、などの制限があります。\n\n詳細については、以下のプロパティと、後述の関連エンティティを参照してください。", + "description": "主キー" + }, + "name": { + "type": "string", + "title": "主キー。", + "description": "レコードの作成時刻" + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "レコードの作成時刻。\n\n言い換えると、管理者がサインアップした時刻です。", + "description": "管理者アカウント。\n\n`IShoppingAdministrator` は、{@link IShoppingMember メンバーシップ} に参加して、ショッピング モール システムを管理する人物を表すエンティティです。\n\n参考までに、メンバーシップに参加しなくても参加できる {@link IShoppingCustomer 顧客} とは異なり、管理者はメンバーシップに参加して管理を行う必要があります。また、管理者は {@link IShoppingCitizen 実名およびモバイル認証} も実行する必要があります。" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "プライマリ キー", + "description": "プライマリ キー。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "レコードの作成日時", + "description": "レコードの作成日時。\n\n言い換えると、販売者がサインアップした日時です。" + } + }, + "required": [ + "id", + "designer", + "inventory", + "criterias", + "discount", + "restriction", + "name", + "opened_at", + "closed_at", + "created_at" + ], + "description": "販売者情報。\n\n`IShoppingSeller` は、{@link IShoppingSale 販売} を登録し、{@link IShoppingMember メンバーシップ} に参加して販売活動を行う人物を体現するエンティティです。\n\n参考までに、メンバーシップに参加しなくても参加できる {@link IShoppingCustomer 顧客} とは異なり、販売者はメンバーシップに参加して販売活動を行う必要があります。また、販売者は {@link IShoppingCitizen 実名およびモバイル認証} も行う必要があります。" + }, + "IShoppingAdministrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "全員の残り量", + "description": "全員分の残り量。\n\n発行枚数に制限があると、この値を超えるチケットを発行できなくなります。\n\nつまり、先着順で N 枚のクーポンを発行するという概念が生まれます。//|-0-|\\ 国民 1 人あたりの残り量" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "国民一人当たりの残り量。\n\n一人当たりの発行総量の制限として、同じ国民への重複発行を制限するために 1 を割り当てるか、制限を設定しない場合は `nul`` 値を使用するのが一般的です。\n\nもちろん、N の値を割り当てることで、同じ国民への発行総量を制限できます。", + "description": "クーポンの在庫情報。\n\n{@link IShoppingCoupon クーポン} が限定在庫で設計されている場合、この `IShoppingCouponInventory` 構造は残りの在庫情報を表します。" + } + }, + "required": [ + "id", + "created_at" + ], + "description": "対象チャネルとカテゴリのリスト" + }, + "IShoppingSeller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "対象チャネルとカテゴリのリスト。", + "description": "記述子タイプ" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "記述子タイプ。", + "description": "基準の方向" + } + }, + "required": [ + "id", + "created_at" + ], + "description": "基準の方向。" + }, + "IShoppingCouponInventory": { + "type": "object", + "properties": { + "volume": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "割引クーポンのチャネルの条件。\n\n`ishoppingcouponchannelcriteria` は、{@link IShoppingCouponCriteriaBase} のサブタイプ エンティティであり、そのチャネルの特定の {@link IShoppingChannel チャネル} または {@link IShoppingChannelCategory カテゴリ} に条件を設定するときに使用されます。\n\n{@link direction} の値が \"include\" の場合、クーポンは対象チャネル (またはカテゴリ) でのみ使用できます。逆に、\"exclude\" の場合は、使用できないクーポンです。//|-0-|\\ 対象チャネル", + "description": "対象チャネル。" + }, + "volume_per_citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "対象カテゴリのリスト", + "description": "対象カテゴリのリスト。" + } + }, + "required": [ + "volume", + "volume_per_citizen" + ], + "description": "再帰構造を持つ親カテゴリ情報" + }, + "IShoppingCouponChannelCriteria": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo" + }, + "minItems": 1, + "title": "再帰構造を持つ親カテゴリ情報。\n\n親が存在しない場合は、`null` になります。", + "description": "主キー" + }, + "type": { + "const": "channel", + "title": "主キー。", + "description": "親カテゴリの ID" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "親カテゴリの ID。", + "description": "カテゴリの代表名" + } + }, + "required": [ + "channels", + "type", + "direction" + ], + "description": "カテゴリの代表名。\n\n名前は親カテゴリ内で一意である必要があります。親が存在しない場合は、名前は親カテゴリ間のチャネル内で一意である必要があります。" + }, + "IShoppingCouponChannelCriteria.IChannelTo": { + "type": "object", + "properties": { + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "レコードの作成時刻", + "description": "レコードの作成時刻。" + }, + "categories": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "minItems": 1 + } + ], + "title": "親カテゴリとカテゴリ情報を反転します。", + "description": "含めるまたは除外する対象セクション" + } + }, + "required": [ + "channel", + "categories" + ] + }, + "IShoppingChannelCategory.IInvert": { + "type": "object", + "properties": { + "parent": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + ], + "title": "含めるまたは除外する対象セクション。", + "description": "記述子タイプ" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "記述子タイプ。", + "description": "基準の方向" + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "基準の方向。", + "description": "割引クーポンのセクションの条件。\n\n`IShoppingCouponSectionCriteria` は、{@link IShoppingCouponCriteriaBase} のサブタイプ エンティティであり、特定の {@link IShoppingSection セクション} の条件を設定するときに使用します。\n\n{@link direction} の値が \"include\" の場合、クーポンは対象の {@link セクション} でのみ使用できます。逆に、\"exclude\" の場合、クーポンは使用できません。" + }, + "name": { + "type": "string", + "title": "主キー", + "description": "主キー。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "識別コード", + "description": "識別コード。" + } + }, + "required": [ + "parent", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "セクションの代表名" + }, + "IShoppingCouponSectionCriteria": { + "type": "object", + "properties": { + "sections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSection" + }, + "minItems": 1, + "title": "セクションの代表名。", + "description": "レコードの作成時刻" + }, + "type": { + "const": "section", + "title": "レコードの作成時刻。", + "description": "セクション情報。\n\n`IShoppingSection` は、市場の空間情報を指す概念です。\n\nここでのセクションをオフライン市場に例えると、「果物コーナー」や「精肉コーナー」など、店舗内の空間的に区切られたエリアを指します。 そのため、{@link IShoppingSale sale} エンティティでは、複数のセクションを同時に分類することはできず、1 つのセクションのみを分類できます。\n\nちなみに、ショッピング モール システムに必要なセクションが 1 つだけの場合は、1 つだけ使用してください。 この概念は、将来的に拡張できるように設計されています。" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "含めるまたは除外するターゲット販売者", + "description": "含めるまたは除外するターゲット販売者。" + } + }, + "required": [ + "sections", + "type", + "direction" + ], + "description": "記述子タイプ" + }, + "IShoppingSection": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "記述子タイプ。", + "description": "基準の方向" + }, + "code": { + "type": "string", + "title": "基準の方向。", + "description": "割引クーポンの販売者の条件。\n\n`IShoppingCouponSellerCriteria` は、{@link IShoppingCouponCriteriaBase} のサブタイプ エンティティであり、特定の {@link IShoppingSeller 販売者} の条件を設定するときに使用されます。\n\n{@link direction} の値が \"include\" の場合、クーポンは対象の {@link sellers} に対してのみ使用できます。逆に、\"exclude\" の場合、クーポンは使用できません。" + }, + "name": { + "type": "string", + "title": "含めるまたは除外する対象の販売", + "description": "含めるまたは除外する対象の販売。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "記述子タイプ", + "description": "記述子タイプ。" + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "基準の方向" + }, + "IShoppingCouponSellerCriteria": { + "type": "object", + "properties": { + "sellers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "minItems": 1, + "title": "基準の方向。", + "description": "割引クーポンの販売条件。\n\n`IShoppingCouponSaleCriteria` は、{@link IShoppingCouponCriteriaBase} のサブタイプ エンティティであり、特定の {@link IShoppingSale セール} の条件を設定するときに使用されます。\n\n{@link direction} の値が \"include\" の場合、クーポンは対象の {@link セール} にのみ使用できます。逆に、\"exclude\" の場合、クーポンは使用できません。" + }, + "type": { + "const": "seller", + "title": "所属セクション", + "description": "所属セクション。" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "セールを登録した販売者", + "description": "セールを登録した販売者。" + } + }, + "required": [ + "sellers", + "type", + "direction" + ], + "description": "ユニットの価格帯" + }, + "IShoppingCouponSaleCriteria": { + "type": "object", + "properties": { + "sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSale.ISummary" + }, + "minItems": 1, + "title": "ユニットの価格帯。", + "description": "セールの主キー" + }, + "type": { + "const": "sale", + "title": "セールの主キー。", + "description": "スナップショットの主キー" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "スナップショットの主キー。", + "description": "スナップショットが最新かどうか" + } + }, + "required": [ + "sales", + "type", + "direction" + ], + "description": "スナップショットが最新かどうか。" + }, + "IShoppingSale.ISummary": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "セールを説明する説明と画像コンテンツ", + "description": "セールを説明する説明と画像コンテンツ。" + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "チャネルとカテゴリのリスト", + "description": "チャネルとカテゴリのリスト。\n\n販売が登録されているチャネルとカテゴリ。" + }, + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange", + "title": "検索タグのリスト", + "description": "検索タグのリスト。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "ユニットのリスト", + "description": "ユニットのリスト。\n\nセールで販売される個々の製品構成情報に関するレコード。各 {@link IShoppingSaleUnit ユニット} レコードには、構成可能な {@link IShoppingSaleUnitOption オプション}、各オプションの {@link IShoppingSaleUnitOptionCandidate 候補} 値、および各オプションのすべての候補値を選択して決定される {@link IShoppingSaleUnitStock 最終在庫} があります。//|-0-|\\ レコードの作成時刻" + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "レコードの作成時刻。\n\nこのプロパティは、セールが開始された時点を意味する {@link opened_at} とは異なることに注意してください。", + "description": "レコードの最終更新時刻" + }, + "latest": { + "type": "boolean", + "title": "レコードの最終更新時刻。\n\n言い換えると、最後のスナップショットの作成時刻です。", + "description": "セールの一時停止時刻" + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "セールの一時停止時間。\n\n何らかの理由で、販売者がセールを一時停止しています。\n\n{@link IShoppingCustomer 顧客} は、リスト ページと詳細ページの両方でセールを引き続き表示できますが、セールには「販売者がセールを一時停止しています」という警告ラベルが表示されます。", + "description": "セールの一時停止時間" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "セールの一時停止時間。\n\n何らかの理由で、販売者によってセールが一時停止されています。\n\n{@link IShoppingCustomer 顧客} は、リスト ページと詳細ページの両方でセールを見ることができません。ソフト削除とほぼ同じですが、所有者 {@link IShoppingSeller 販売者} が引き続きセールを見て再開できるという点が少し異なります。\n\nもちろん、セールをすでに購入した {@link IShoppingCustomer 顧客} は、{@link IShoppingOrder 注文} ページで引き続きセールを見ることができます。", + "description": "セールの開始時間" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "セールの開始時間。", + "description": "セールの終了時間" + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ISummary" + }, + "minItems": 1, + "title": "セールの終了時間。\n\nこの値が `null` の場合、セールは永久に継続されます。", + "description": "セールの要約情報。\n\nこの要約情報はページ区切りに使用されます。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "顧客タイプの判別式", + "description": "顧客タイプの判別式。" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "メンバーシップ加入情報", + "description": "メンバーシップ加入情報。" + }, + "paused_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "顧客、接続情報", + "description": "顧客、接続情報。" + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "実名と携帯電話番号の認証情報", + "description": "実名と携帯電話番号の認証情報。" + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "主キー", + "description": "主キー。" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "レコードの作成時刻", + "description": "レコードの作成時刻。\n\n言い換えると、販売者がサインアップした時刻です。" + } + }, + "required": [ + "section", + "seller", + "price_range", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "販売者情報から情報を反転します。\n\n{@link IShoppingCustomer.member} -> {@link IShoppingMember.seller} から販売者情報にアクセスする代わりに、\n`IShoppingSeller.IInvert` は販売者情報から開始し、\n顧客、メンバー、{@link IShoppingCitizen 市民} 情報に逆にアクセスします。" + }, + "IShoppingSeller.IInvert": { + "type": "object", + "properties": { + "type": { + "const": "seller", + "title": "名目価格", + "description": "名目価格。\n\nこれは支払うべき {@link real 実価格} ではなく、表示するための名目価格です。\n\nこの値が {@link real 実価格} より大きい場合、{@link IShoppingSeller 販売者} が割引を行っているように表示されます。" + }, + "member": { + "$ref": "#/components/schemas/IShoppingMember.IInvert", + "title": "支払うべき実際の価格", + "description": "支払うべき実際の価格。" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer.IInvert", + "title": "ショッピング価格インターフェース。", + "description": "主キー" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen", + "title": "主キー。", + "description": "添付ファイルの作成時刻" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "添付ファイルの作成時刻。", + "description": "拡張子を除くファイル名" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "拡張子を除いたファイル名。\n\n`.gitignore` ファイルがある場合、その名前は空文字列です。", + "description": "拡張子" + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "拡張子。\n\n`README` のように省略可能です。" + }, + "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": "実ファイルの URL パス", + "description": "実ファイルの URL パス。" + }, + "real": { + "type": "number", + "minimum": 0, + "title": "添付ファイル。\n\n現在のシステムで管理されているすべての添付ファイル。\n\n参考までに、`.gitignore` や `README` のように、ファイル {@link name}\nまたは {@link extension} のいずれかを省略することは可能ですが、両方を省略することはできません。", + "description": "セールを掲載しているチャンネルのカテゴリ一覧" + } + }, + "required": [ + "nominal", + "real" + ], + "description": "セールをリストするチャンネルのカテゴリのリスト。\n\n空の場合、チャンネルのすべてのカテゴリがセールをリストしていることを意味します。" + }, + "IShoppingSaleContent.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + } + } + }, + "required": [ + "id", + "title", + "thumbnails" + ] + }, + "IAttachmentFile": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "主キー", + "description": "主キー。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "レコードの作成時刻", + "description": "レコードの作成時刻。" + }, + "name": { + "type": "string", + "maxLength": 255, + "title": "識別子コード", + "description": "識別子コード。" + }, + "extension": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "title": "チャンネルの名前", + "description": "チャンネルの名前。" + }, + "url": { + "type": "string", + "format": "uri", + "title": "販売するセールのターゲット チャネル (およびカテゴリ)。\n\n`IShoppingSaleChannel` は、どの {@link IShoppingChannel チャネル} を通じてリスト {@link IShoppingSale} が販売されるかを表すエンティティです。\n\nまた、{@link IShoppingChannelCategory カテゴリ} が指定されている場合も、セールが販売されることを意味します。それ以外の場合、チャネルのカテゴリのいずれも指定されていない場合は、チャネルのすべてのカテゴリがターゲット セールをリストしていることを意味します。", + "description": "プライマリ キー" + } + }, + "required": [ + "id", + "created_at", + "name", + "extension", + "url" + ], + "description": "プライマリ キー。" + }, + "IShoppingSaleChannel": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "title": "ユニットの代表名", + "description": "ユニットの代表名。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "ユニットがプライマリかどうか", + "description": "ユニットがプライマリかどうか。\n\n単なるラベル値。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "ユニットが必須かどうか", + "description": "ユニットが必須かどうか。\n\nユニットが必須の場合、お客様はユニットを選択する必要があります。選択しないと、お客様は購入できません。\n\nたとえば、「Macbook セット」が販売されており、ユニットの 1 つが「本体」である場合、「Macbook セット」を「本体」ユニットなしで購入することは可能ですか? このプロパティは、そのような場合のためのものです。" + }, + "code": { + "type": "string", + "title": "ターゲット ファンネルのリスト", + "description": "ターゲット ファンネルのリスト。" + }, + "name": { + "type": "string", + "title": "記述子タイプ", + "description": "記述子タイプ。" + } + }, + "required": [ + "categories", + "id", + "created_at", + "code", + "name" + ], + "description": "基準の方向" + }, + "IShoppingSaleUnit.ISummary": { + "type": "object", + "properties": { + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "基準の方向。", + "description": "割引クーポンのファネルを制限します。\n\n`ishoppingcouponfunnelcriteria` は、{@link IShoppingCouponCriteria} のサブタイプエンティティであり、特定のパスから来た {@link IShoppingCustomer 顧客} にのみ割引クーポンを発行または除外したい場合に使用します。\n\nファネルの制限は 3 つの方法で可能です。1 つ目は、{@link IShoppingCustomer.referrer} で、顧客のアクセス アドレスを記録する {@link IShoppingCustomer.href} を解析することで、特定の URL または変数単位で制限を行うことができます。" + }, + "name": { + "type": "string", + "title": "ファネル制限の種類", + "description": "ファネル制限の種類。" + }, + "primary": { + "type": "boolean", + "title": "ターゲット値", + "description": "ターゲット値。" + }, + "required": { + "type": "boolean", + "title": "値によるファネル制限の種類。", + "description": "ファネル制限の種類" + } + }, + "required": [ + "price_range", + "id", + "name", + "primary", + "required" + ] + }, + "IShoppingCouponFunnelCriteria": { + "type": "object", + "properties": { + "funnels": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" + } + ] + }, + "minItems": 1, + "title": "ファネル制限の種類。", + "description": "ターゲット変数のキー" + }, + "type": { + "const": "funnel", + "title": "ターゲット変数のキー。", + "description": "ターゲット変数の値" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "ターゲット変数の値。", + "description": "変数によるファネル制限の種類。" + } + }, + "required": [ + "funnels", + "type", + "direction" + ], + "description": "割引単位を金額として" + }, + "IShoppingCouponFunnelCriteria.IValueFunnel": { + "type": "object", + "properties": { + "kind": { + "oneOf": [ + { + "const": "url" + }, + { + "const": "referrer" + } + ], + "title": "割引単位を金額として。\n\n注文価格が金額値で割引されることを意味します。", + "description": "割引値を金額として" + }, + "value": { + "type": "string", + "title": "割引値を金額として。", + "description": "割引の最小購入金額" + } + }, + "required": [ + "kind", + "value" + ], + "description": "割引の最小購入金額。\n\nこの値を設定すると、この値未満の注文合計には割引クーポンを適用できません。" + }, + "IShoppingCouponFunnelCriteria.IVariableFunnel": { + "type": "object", + "properties": { + "kind": { + "const": "variable", + "title": "割引可能な最大金額", + "description": "割引可能な最大金額。\n\nこの値を設定すると、注文金額に関係なくそれ以上の割引は適用されません。このプロパティは、{@link multiplicative} が `true` の場合にのみ意味を持ちます。" + }, + "key": { + "type": "string", + "title": "乗算かどうか", + "description": "乗算するかどうか。\n\nこのプロパティが `true` の場合、割引値は {@link IShoppingCartCommodity.volume} または {@link IShoppingOrderGood.volume} の値に乗算されます。また、その場合、{@link limit} プロパティが意味を持ちます。" + }, + "value": { + "type": "string", + "title": "金額単位の割引情報。", + "description": "割引単位はパーセント" + } + }, + "required": [ + "kind", + "key", + "value" + ], + "description": "割引単位はパーセント。\n\n注文価格がパーセント値で割引されることを意味します。" + }, + "IShoppingCouponDiscount.IAmount": { + "type": "object", + "properties": { + "unit": { + "const": "amount", + "title": "割引値はパーセント", + "description": "割引値はパーセント。" + }, + "value": { + "type": "number", + "title": "割引の最小購入金額", + "description": "割引の対象となる最低購入金額。\n\nこの値を設定すると、この値未満の注文合計には割引クーポンを適用できません。" + }, + "threshold": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ], + "title": "割引対象となる最大金額", + "description": "割引対象となる最大金額。\n\nこの値を設定すると、注文金額に関係なくそれ以上の割引は適用されません。" + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 + } + ], + "title": "パーセント単位の割引情報。", + "description": "クーポンのアクセス レベル" + }, + "multiplicative": { + "type": "boolean", + "title": "クーポンのアクセス レベル。\n\n- パブリック: パブリック API から検索可能\n- プライベート: パブリック API から検索不可\n- 販売者または管理者によって任意に割り当てられる\n- ワンタイム リンクから発行", + "description": "排他性の有無" + } + }, + "required": [ + "unit", + "value", + "threshold", + "limit", + "multiplicative" + ], + "description": "排他性の有無。\n\n排他的割引クーポンとは、他の割引クーポンと排他的な関係があり、単独でのみ使用できる割引クーポンを指します。つまり、排他的割引クーポンを使用すると、同じ {@link IShoppingOrder 注文} または {@link IShoppingOrderGood 商品} に他の割引クーポンは使用できません。\n\nこの排他属性は、同じクーポンを掛け合わせて同じ注文の複数のクーポンに適用できるかどうかを意味する掛け算とはまったく異なる概念であるため、混同しないように注意してください。" + }, + "IShoppingCouponDiscount.IPercent": { + "type": "object", + "properties": { + "unit": { + "const": "percent", + "title": "数量限定発行", + "description": "数量限定発行。\n\n発行数量に制限があると、その値を超えるチケットの発行はできなくなります。\n\nつまり、先着順でN枚発行という概念が生まれます。" + }, + "value": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "1人あたりの発行数量限定", + "description": "1人あたりの発行数量に制限があります。\n\n1人あたりの発行総量の制限として、同じ国民への重複発行を制限するために1を割り当てるか、制限を設定しない場合はNULL値を使用するのが一般的です。\n\nもちろん、Nの値を割り当てることで、同じ国民への発行総量を制限できます。" + }, + "threshold": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ], + "title": "有効期限日数の値", + "description": "有効期限日数の値。\n\n割引クーポン券の発行後、N 日で有効期限が切れるという概念です。\n\nしたがって、お客様は、可能であれば、発行後 N 日以内にチケットを使用する必要があります。" + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 + } + ], + "title": "有効期限", + "description": "有効期限。\n\n割引クーポン券の発行後、YYYY-MM-DD 後に有効期限が切れるという概念です。\n\nexpired_in で二重の制限が可能で、有効期限が短い方が使用されます。" + } + }, + "required": [ + "unit", + "value", + "threshold", + "limit" + ], + "description": "クーポンの制限情報。" + }, + "IShoppingCouponRestriction": { + "type": "object", + "properties": { + "access": { + "oneOf": [ + { + "const": "public" + }, + { + "const": "private" + } + ], + "title": "割引情報", + "description": "割引情報。" + }, + "exclusive": { + "type": "boolean", + "title": "制限情報", + "description": "制限情報。" + }, + "volume": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "クーポンの代表名", + "description": "クーポンの代表名。" + }, + "volume_per_citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "クーポンの開始時間", + "description": "クーポンの開始時間。" + }, + "expired_in": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "クーポンの終了時間", + "description": "クーポンの終了時間。\n\nこの時間以降はチケットを発行できません。\n\nただし、以前に発行されたチケットは有効期限まで使用できます。" + }, + "expired_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "クーポンの作成情報。", + "description": "対象チャンネルとカテゴリのリスト" + } + }, + "required": [ + "access", + "exclusive", + "volume", + "volume_per_citizen", + "expired_in", + "expired_at" + ], + "description": "対象チャンネルとカテゴリのリスト。" + }, + "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": "チャネル条件の作成情報。", + "description": "対象チャネルの {@link IShoppingChannel.code}" + }, + "restriction": { + "$ref": "#/components/schemas/IShoppingCouponRestriction", + "title": "対象チャネルの {@link IShoppingChannel.code}。", + "description": "対象カテゴリの {@link IShoppingChannelCategory.id}" + }, + "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": "対象カテゴリの {@link IShoppingChannelCategory.id}。", + "description": "対象チャネルとカテゴリ。" + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "対象セクションの {@link IShoppingSection.code} のリスト", + "description": "対象セクションの {@link IShoppingSection.code} のリスト。" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "セクション条件の作成情報。", + "description": "対象販売者の {@link IShoppingSeller.id} のリスト" + } + }, + "required": [ + "discount", + "restriction", + "criterias", + "disposable_codes", + "name", + "opened_at", + "closed_at" + ], + "description": "ターゲット セラーの {@link IShoppingSeller.id} のリスト。" + }, + "IShoppingCouponChannelCriteria.ICreate": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo.ICreate" + }, + "minItems": 1, + "title": "セラー基準の作成情報。", + "description": "ターゲット セールの {@link IShoppingSale.id} のリスト" + }, + "type": { + "const": "channel" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "channels", + "type", + "direction" + ], + "description": "ターゲット セールの {@link IShoppingSale.id} のリスト。" + }, + "IShoppingCouponChannelCriteria.IChannelTo.ICreate": { + "type": "object", + "properties": { + "channel_code": { + "type": "string", + "title": "セール基準の作成情報。", + "description": "ターゲット ファネルのリスト" + }, + "category_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + ], + "title": "ターゲット ファネルのリスト。", + "description": "ファネル基準の作成情報。" + } + }, + "required": [ + "channel_code", + "category_ids" + ], + "description": "ページ情報" + }, + "IShoppingCouponSectionCriteria.ICreate": { + "type": "object", + "properties": { + "section_codes": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "title": "ページ情報。", + "description": "レコードのリスト" + }, + "type": { + "const": "section" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "section_codes", + "type", + "direction" + ], + "description": "レコードのリスト。" + }, + "IShoppingCouponSellerCriteria.ICreate": { + "type": "object", + "properties": { + "seller_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "minItems": 1, + "title": "ページ。\n\nページネーション情報を含むレコードのコレクション。", + "description": "現在のページ番号" + }, + "type": { + "const": "seller" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "seller_ids", + "type", + "direction" + ], + "description": "現在のページ番号。" + }, + "IShoppingCouponSaleCriteria.ICreate": { + "type": "object", + "properties": { + "sale_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "minItems": 1, + "title": "1 ページあたりのレコード数の制限", + "description": "1 ページあたりのレコード数の制限。" + }, + "type": { + "const": "sale" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "sale_ids", + "type", + "direction" + ], + "description": "データベース内のレコード総数" + }, + "IShoppingCouponFunnelCriteria.ICreate": { + "type": "object", + "properties": { + "funnels": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" + } + ] + }, + "minItems": 1, + "title": "データベース内のレコード総数。", + "description": "合計ページ数" + }, + "type": { + "const": "funnel" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "funnels", + "type", + "direction" + ], + "description": "合計ページ数。\n\n上限付きで {@link records} / {@link limit} に等しい。" + }, + "IPageIShoppingCoupon": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "ページ情報。", + "description": "ページ番号" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + }, + "title": "ページ番号。", + "description": "1 ページあたりのレコード数の制限" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "1 ページあたりのレコード数の制限。" + }, + "IPage.IPagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "ページ情報", + "description": "ページ情報。" + }, + "limit": { + "type": "integer", + "title": "レコードのリスト", + "description": "レコードのリスト。" + }, + "records": { + "type": "integer", + "title": "ページ。\n\nページ番号情報を含むレコードのコレクション。", + "description": "ページ番号" + }, + "pages": { + "type": "integer", + "title": "ページ番号。", + "description": "1 ページあたりのレコード数の制限" + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "1 ページあたりのレコード数の制限。" + }, + "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": "ページ情報", + "description": "ページ情報。" + }, + "limit": { + "type": "integer", + "title": "レコードの一覧", + "description": "レコードの一覧。" + } + } + }, + "IShoppingCoupon.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "IPageIShoppingDeposit": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "ページ。\n\nページ区切り情報を持つレコードのコレクション。", + "description": "ページ番号" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeposit" + }, + "title": "ページ番号。", + "description": "1 ページあたりのレコード数の制限" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "1 ページあたりのレコード数の制限。" + }, + "IShoppingDeposit": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "IShoppingDeposit.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingDeposit.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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "ページ情報", + "description": "ページ情報。" + }, + "limit": { + "type": "integer", + "title": "レコードの一覧", + "description": "レコードの一覧。" + } + } + }, + "IShoppingDeposit.IRequest.ISearch": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + } + }, + "IShoppingDeposit.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "code", + "source", + "direction" + ] + }, + "IPageIShoppingMileage": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "ページ。\n\nページ区切り情報を持つレコードのコレクション。", + "description": "ページ番号" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileage" + }, + "title": "ページ番号。", + "description": "1 ページあたりのレコード数の制限" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "1 ページあたりのレコード数の制限。" + }, + "IShoppingMileage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "IShoppingMileage.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingMileage.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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "ページ情報", + "description": "ページ情報。" + }, + "limit": { + "type": "integer", + "title": "レコードのリスト", + "description": "レコードのリスト。" + } + } + }, + "IShoppingMileage.IRequest.ISearch": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + } + }, + "IShoppingMileage.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + } + }, + "required": [ + "code", + "source", + "direction", + "value" + ] + }, + "IPageIShoppingMileageDonation": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "ページ。\n\nページネーション情報を含むレコードのコレクション。", + "description": "主キー" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + }, + "title": "主キー。", + "description": "注文を申し込んだ顧客" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "注文を申し込んだ顧客。" + }, + "IShoppingMileageDonation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "administrator": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen" + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "administrator", + "citizen", + "value", + "reason", + "created_at" + ] + }, + "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": "注文に含まれる商品のリスト", + "description": "注文に含まれる商品のリスト。" + }, + "limit": { + "type": "integer", + "title": "割引を含む価格情報", + "description": "割引を含む価格情報。\n\n参考までに、この価格値には {@link volume} 値が掛けられています。\n\nしたがって、{@link volume} 値がターゲット {@link IShoppingCartCommodity.volume} と等しい場合でも、この価格値は {@link IShoppingCartCommodity.price} 値と異なる場合があります。" + } + } + }, + "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" + } + } + }, + "IShoppingMileageDonation.ICreate": { + "type": "object", + "properties": { + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "citizen_id", + "value", + "reason" + ] + }, + "IPageIShoppingOrder": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "注文完了と支払い情報", + "description": "注文完了と支払い情報。" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrder" + }, + "title": "レコードの作成時刻", + "description": "レコードの作成時刻。" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "注文申込情報。\n\n`IShoppingOrder` は、{@link IShoppingCustomer 顧客} の注文申込情報を具体化するエンティティです。ただし、この時点では、まだ「注文申込」段階であり、「注文確認」段階ではないことに注意してください。\n\nそして、顧客が注文を申し込むとすぐに、対象のショッピング カート内のすべての {@link IShoppingCartCommodity 商品} が {@link IShoppingOrderGood 商品} に昇格され、それらの商品レコードがこの `IShoppingOrder` の下に作成されます。\n\nもちろん、対象のショッピング カート内のすべての商品が {@link IShoppingOrderGood} になるわけではなく、顧客が選択した商品のみが {@link IShoppingOrderGood} になります。" + }, + "IShoppingOrder": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "顧客種別判別子", + "description": "顧客種別判別子。" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "会員情報", + "description": "会員情報。\n\n顧客が会員として入会した場合。" + }, + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood" + }, + "minItems": 1, + "title": "市民情報", + "description": "市民情報。\n\n顧客が実名と携帯電話番号を確認した場合。" + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice", + "title": "主キー", + "description": "主キー。" + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish" + } + ], + "title": "所属チャネル", + "description": "所属チャネル。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "外部ユーザー情報", + "description": "外部ユーザー情報。\n\n顧客が外部サービスからアクセスした場合。" + } + }, + "required": [ + "id", + "customer", + "goods", + "price", + "publish", + "created_at" + ], + "description": "接続アドレス" + }, + "IShoppingCustomer": { + "type": "object", + "properties": { + "type": { + "const": "customer", + "title": "接続アドレス。\n\nクライアントの {@link window.location.href} と同じです。", + "description": "リファラー アドレス" + }, + "member": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMember" + } + ], + "title": "リファラー アドレス。\n\nクライアントの {@link window.document.referrer} と同じです。", + "description": "接続 IP アドレス" + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "接続 IP アドレス。", + "description": "接続レコードの作成時刻" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "接続レコードの作成時刻。", + "description": "顧客情報ですが、人ではなく接続ベースです。\n\n`IShoppingCustomer` は文字通り、顧客として市場に参加した人の情報を具現化したエンティティです。ちなみに、`IShoppingCustomer` は人ではなく接続ベースです。そのため、同じ人がショッピングモールに複数接続しても、`IShoppingCustomer` には複数のレコードが作成されます。\n\nこれは、1 つ目の目的が顧客の流入経路を詳細に追跡することであり、同じ人が非会員として入場し、事前に {@link IShoppingCartCommodity が商品をショッピングカートに入れる} し、{@link IShoppingCitizen 本名} を認証するか、{@link IShoppingOrderPublish 決済の瞬間に登録/ログインする} 場合のみに使用します。\n\n2 つ目の目的です。最後に、ショッピングモールで人が行う活動を以下のようにさまざまな方法で正確に追跡することです。\n\n- 同じ人物が {@link IShoppingExternalUser 外部サービス} から来ている\n- 同じ人物が複数のアカウントを作成している\n- 同じ人物が、{@link IShoppingCitizen 実名認証のみを使用して非会員として {@link IShoppingOrderPublish 購入} を行っている\n- 同じ人物が {@link IShoppingSeller 販売者} と {@link IShoppingAdministrator 管理者} の両方を同時に行っている\n\nしたがって、`IShoppingCustomer` には、同じ {@link IShoppingCitizen}、{@link IShoppingMember}、および {@link IShoppingExternalUser} を持つ複数のレコードが存在する可能性があります。さらに、顧客が実名を確認した後にメンバーシップにサインアップしたり、外部サービスのユーザーになった後に当社のサービスにサインアップしたりすると、関連するすべてのレコードが一度に変更されます。\nしたがって、顧客の識別と追跡を非常に体系的に行うことができます。" + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "市民情報", + "description": "市民情報。\n\n携帯電話番号と本名で市民として確認された場合のみ。\n\n参考までに、メンバーが販売者または管理者として登録している場合は、\nこの市民情報が必要です。" + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "販売者情報", + "description": "販売者情報。\n\nメンバーが販売者としても登録している場合。" + }, + "href": { + "type": "string", + "format": "uri", + "title": "管理者情報", + "description": "管理者情報。\n\nメンバーが管理者としても登録している場合。" + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "主キー", + "description": "主キー。" + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "メンバーを一意に識別するニックネーム", + "description": "メンバーを一意に識別するニックネーム。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "メールのリスト", + "description": "メールのリスト。" + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "レコードの作成時刻" + }, + "IShoppingMember": { + "type": "object", + "properties": { + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "レコードの作成時刻。\n\n言い換えると、メンバーがサインアップした時刻です。", + "description": "メンバー アカウント。\n\n`IShoppingMember` は、{@link IShoppingCustomer} がこのショッピング モール システムのメンバーとしてサインアップする場合を表すエンティティです。\n\n`IShoppingMember` に販売者または管理者のプロパティがある場合、それは、{@link IShoppingCustomer} が同時に {@link IShoppingSeller 販売者} または {@link IShoppingAdministrator 管理者} として機能していることを意味します。" + }, + "seller": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSeller" + } + ], + "title": "プライマリ キー", + "description": "プライマリ キー。" + }, + "administrator": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingAdministrator" + } + ], + "title": "商品のベースとなる商品", + "description": "商品のベースとなる商品。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "商品の数量", + "description": "商品の数量。\n\n{@link IShoppingCartCommodityStock.quantity} に掛けた値。\n\n目的は {@link IShoppingCartCommodity.volume} とまったく同じですが、{@link IShoppingCartCommodity} レコードは支払いまで再利用できるため、書き直されています。" + }, + "nickname": { + "type": "string", + "title": "割引や倍数を含む価格情報", + "description": "割引や倍数を含む価格情報。" + }, + "emails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMemberEmail" + }, + "title": "商品の配送状況", + "description": "商品の配送状況。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "注文商品の確認時間", + "description": "注文の確認は有効です。\n\n確認されると、お客様は返金または交換を要求できません。\n\n確認は次の場合に行われます。\n\n- お客様が直接行います。\n- 配達後 14 日。" + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "ご注文を構成する個々の商品に関する情報です。\n\n`IShoppingOrderGood` は、{@link IShoppingCustomer 顧客} が注文した各商品を表すエンティティであり、顧客の {@link IShoppingOrder 注文} リクエストにより、ショッピング カート内の商品 {@link IShoppingCartCommodity 商品} を商品にアップグレードするプロセスでレコードが作成されます。\n\nまた、`IShoppingOrderGood` は、{@link IShoppingCartCommodity} と同様に、リスト {@link IShoppingSaleSnapshot 販売スナップショット} に対応する概念です。\n\n参考までに、`IShoppingOrderGood` には、所属する {@link IShoppingCartCommodity.volume} とは別に、{@link volume} 情報も含まれています。 これは、ショッピング カートに 3 冊の本を入れて、実際の注文申請プロセスで 4 冊に変更するケースがあるためです。これは、商品情報を直接変更するのではなく、現在のエンティティのボリューム属性を変更することで、ショッピングカートの再利用性を高めるためです。\n\nまた、`IShoppingOrderGood` は、注文後のプロセス、つまりアフターサービス (A/S) の最も基本的な単位になります。たとえば、顧客の商品を受け取った後、注文の確認が {@link verified_at} 属性に記録されます。また、`IShoppingOrderGood` は、顧客が注文した商品の交換や返金を発行したり、要求したりする単位です。" + }, + "IShoppingOrderGood": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "主キー", + "description": "主キー。" + }, + "commodity": { + "$ref": "#/components/schemas/IShoppingCartCommodity", + "title": "商品の視点での販売情報 (スナップショット) の反転", + "description": "商品の視点での販売情報 (スナップショット) の反転。" + }, + "volume": { + "type": "integer", + "title": "現在の商品が注文可能かどうか", + "description": "現在の商品が注文可能かどうか。\n\nこの属性が `false` の場合、商品は既に注文されているため注文できません。" + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice.ISummary", + "title": "現在の商品が疑似商品かどうか", + "description": "現在の商品が疑似商品かどうか。\n\nこの属性が `true` の場合、商品は本物ではなく、{@link IShoppingCoupon クーポン} による割引効果を計算するための偽の情報です。" + }, + "state": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "購入する商品の数量", + "description": "購入する商品の数量。\n\n子の値に何セット掛けるかを示す値。\n{@link IShoppingSaleUnitStock.IInvert.quantity}。" + }, + "confirmed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "商品の価格", + "description": "商品の価格。\n\n参考までに、この価格値は\n{@link volume} 値で乗算されていません。子の\n{@link IShoppingSaleUnitStock.IInvert.price} 値の価格を合計しただけです。" + } + }, + "required": [ + "id", + "commodity", + "volume", + "price", + "state", + "confirmed_at" + ], + "description": "レコードの作成時刻" + }, + "IShoppingCartCommodity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "レコードの作成時刻。", + "description": "ショッピング カート内のアイテム。\n\n`IShoppingCartCommodity` は、{@link IShoppingCustomer 顧客} が {@link IShoppingOrder 購入} を念頭に置いてショッピング カートに入れたアイテムの\n{@link IShoppingSaleSnapshot スナップショット} を表すエンティティです。顧客が将来これを実際の注文に継続すると、`IShoppingCartCommodity` は\n{@link IShoppingOrderGood} に変更されます。\n\nまた、ショッピング カートに販売スナップショットを追加する際、顧客は必然的に、リスト スナップショット内で特定の {@link IShoppingSaleUnit ユニット} と {@link IShoppingSaleUnitStock 最終在庫} を選択します。\n\nこれらのユニットと在庫に関する情報は、補助エンティティ {@link IShoppingCartCommodityStock} に記録されます。また、対象商品のスナップショットが何セット購入されるかを示す属性 {@link volume} があります。この「数量」は、各コンポーネントの数量である\n{@link IShoppingSaleUnitStock.IInvert.quantity} に掛けられる値です。" + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.IInvert", + "title": "所属セクションの情報", + "description": "所属セクションの情報。" + }, + "orderable": { + "type": "boolean", + "title": "セールを登録したセラー", + "description": "セールを登録したセラー。" + }, + "pseudo": { + "type": "boolean", + "title": "セールの主キー", + "description": "セールの主キー。" + }, + "volume": { + "type": "integer", + "minimum": 1, + "title": "スナップショットの主キー", + "description": "スナップショットの主キー。" + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "スナップショットが最新かどうか", + "description": "スナップショットが最新かどうか。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "セールを説明する説明と画像コンテンツ", + "description": "セールを説明する説明と画像コンテンツ。" + } + }, + "required": [ + "id", + "sale", + "orderable", + "pseudo", + "volume", + "price", + "created_at" + ], + "description": "チャネルとカテゴリの一覧" + }, + "IShoppingSaleSnapshot.IInvert": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "チャネルとカテゴリのリスト。\n\n販売が登録されているチャネルとカテゴリ。", + "description": "検索タグのリスト" + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "検索タグのリスト。", + "description": "ユニットのリスト" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "ユニットのリスト。\n\nセールで販売される個々の製品構成情報に関するレコード。各 {@link IShoppingSaleUnit ユニット} レコードには、構成可能な {@link IShoppingSaleUnitOption オプション}、各オプションの {@link IShoppingSaleUnitOptionCandidate 候補} 値、および各オプションのすべての候補値を選択して決定される {@link IShoppingSaleUnitStock 最終在庫} があります。//|-0-|\\ レコードの作成時刻", + "description": "レコードの作成時刻。\n\nこのプロパティは、セールが開始された時点を意味する {@link opened_at} とは異なることに注意してください。" + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "レコードの最終更新時刻", + "description": "レコードの最終更新時刻。\n\n言い換えると、最後のスナップショットの作成時刻です。" + }, + "latest": { + "type": "boolean", + "title": "セールの一時停止時刻", + "description": "セールの一時停止時間。\n\n何らかの理由で、販売者がセールを一時停止しています。\n\n{@link IShoppingCustomer 顧客} は、リスト ページと詳細ページの両方でセールを引き続き表示できますが、セールには「販売者がセールを一時停止しています」という警告ラベルが表示されます。" + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "セールの一時停止時間", + "description": "セールの一時停止時間。\n\n何らかの理由で、販売者によってセールが一時停止されています。\n\n{@link IShoppingCustomer 顧客} は、リスト ページと詳細ページの両方でセールを見ることができません。ソフト削除とほぼ同じですが、所有者 {@link IShoppingSeller 販売者} が引き続きセールを見て再開できるという点が少し異なります。\n\nもちろん、セールをすでに購入した {@link IShoppingCustomer 顧客} は、{@link IShoppingOrder 注文} ページで引き続きセールを見ることができます。" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "セールの開始時間", + "description": "セールの開始時間。" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "セールの終了時間", + "description": "セールの終了時間。\n\nこの値が `null` の場合、セールは永久に継続されます。" + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.IInvert" + }, + "minItems": 1, + "title": "商品の観点から、販売スナップショットの情報を反転します。\n\n`IShoppingSaleSnapshot.IInvert` は、{@link IShoppingCommodity} の観点からスナップショットを表すために使用される構造で、{@link IShoppingCartCommodityStock} エンティティに対応します。\n\nしたがって、`IShoppingSaleSnapshot.IInvert` には、すべてのスナップショット レコード {@link IShoppingSaleUnit 単位} と {@link IShoppingSaleUnitStock 在庫} が含まれるわけではなく、{@link IShoppingCartCommodity ショッピング カート} に入れられるレコードの一部のみが含まれます。", + "description": "最終在庫リスト" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "最終在庫リスト。", + "description": "主キー" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "主キー。", + "description": "ユニットの代表名" + }, + "paused_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "ユニットの代表名。", + "description": "ユニットが主かどうか" + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "ユニットが主かどうか。\n\nラベル値のみ。", + "description": "ユニットが必須かどうか" + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "単位が必須かどうか。\n\n単位が必須の場合、お客様は単位を選択する必要があります。選択しないと、お客様は購入できません。\n\nたとえば、「Macbook セット」が販売されており、その単位の 1 つが「本体」である場合、「Macbook セット」を「本体」なしで購入することは可能ですか? このプロパティは、そのような場合のためのものです。", + "description": "プライマリ キー" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "プライマリ キー。", + "description": "在庫の代表名" + } + }, + "required": [ + "section", + "seller", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "在庫の代表名。" + }, + "IShoppingSaleUnit.IInvert": { + "type": "object", + "properties": { + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock.IInvert" + }, + "minItems": 1, + "title": "在庫の価格", + "description": "在庫の価格。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "カート内の在庫の数量", + "description": "カート内の在庫数量。" + }, + "name": { + "type": "string", + "title": "在庫の現在の在庫状況", + "description": "在庫の現在の在庫状況。" + }, + "primary": { + "type": "boolean", + "title": "選択肢のリスト", + "description": "選択肢のリスト。\n\n各オプションに書き込まれる値。" + }, + "required": { + "type": "boolean", + "title": "カートからの情報を反転します。", + "description": "総収入数量" + } + }, + "required": [ + "stocks", + "id", + "name", + "primary", + "required" + ] + }, + "IShoppingSaleUnitStock.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "総収入数量。", + "description": "総結果数量" + }, + "name": { + "type": "string", + "title": "総結果数量。", + "description": "最終在庫の在庫情報。" + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "主キー", + "description": "主キー。" + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "ターゲット オプション", + "description": "ターゲット オプション。" + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockInventory", + "title": "選択された候補値", + "description": "選択された候補値。" + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice.IInvert" + }, + "title": "書き込まれた値", + "description": "書き込まれた値。" + } + }, + "required": [ + "id", + "name", + "price", + "quantity", + "inventory", + "choices" + ], + "description": "カートからの情報を反転します。" + }, + "IShoppingSaleUnitStockInventory": { + "type": "object", + "properties": { + "income": { + "type": "integer", + "title": "主キー", + "description": "主キー。" + }, + "outcome": { + "type": "integer", + "title": "選択可能なオプションのタイプの判別式", + "description": "選択可能なオプションのタイプの判別式。" + } + }, + "required": [ + "income", + "outcome" + ], + "description": "オプションの名前を表します" + }, + "IShoppingSaleUnitStockChoice.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "オプションの名前を表します", + "description": "オプションが可変かどうか" + }, + "option": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.IInvert" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ], + "title": "オプションが可変かどうか。\n\n現在のオプションのタイプが「選択」の場合、この属性は、異なる候補値を選択すると最終的な在庫に影響するかどうかを意味します。", + "description": "主キー" + }, + "candidate": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate" + } + ], + "title": "主キー。", + "description": "説明オプションのタイプ" + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ], + "title": "説明オプションのタイプ。\n\n購入時に入力する値。", + "description": "オプションの読みやすい名前" + } + }, + "required": [ + "id", + "option", + "candidate", + "value" + ], + "description": "オプションの読みやすい名前。" + }, + "IShoppingSaleUnitSelectableOption.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "説明オプション。\n\nオプションのタイプが `\"select\"` でない場合は、オプションが説明的であり、{@link IShoppingCustomer 顧客} が {@link IShoppingOrder 購入} に何らかの値を書き込む必要があることを意味します。また、顧客がオプションについて何を書いても、{@link IShoppingSaleUnitStock 最終在庫} には影響しません。\n\n言い換えると、説明オプションは情報転送のみを目的としています。", + "description": "主キー" + }, + "type": { + "const": "select", + "title": "主キー。", + "description": "候補値の名前を表します" + }, + "name": { + "type": "string", + "title": "候補値の名前を表します。", + "description": "オプション内で選択可能な候補値。\n\n`IShoppingSaleUnitOptionCandidate` は、{@link IShoppingSaleUnitSelectableOption の「選択」タイプのオプション} から選択できる個々の候補値を表すエンティティです。\n\n- 例\n- RAM: 8GB、16GB、32GB\n- GPU: RTX 3060、RTX 4080、TESLA\n- ライセンス: プライベート、商用、教育\n\nちなみに、所属するオプションが「選択」タイプでない場合、このエンティティは使用されません。" + }, + "variable": { + "type": "boolean", + "title": "現金支払額", + "description": "現金支払額。" + } + }, + "required": [ + "id", + "type", + "name", + "variable" + ] + }, + "IShoppingSaleUnitDescriptiveOption": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "デポジット支払額", + "description": "デポジット支払額。" + }, + "type": { + "oneOf": [ + { + "const": "string" + }, + { + "const": "number" + }, + { + "const": "boolean" + } + ], + "title": "マイレージ支払額", + "description": "マイレージ支払額。" + }, + "name": { + "type": "string", + "title": "割引クーポン券支払額", + "description": "割引クーポン券支払額。" + } + }, + "required": [ + "id", + "type", + "name" + ], + "description": "名目価格" + }, + "IShoppingSaleUnitOptionCandidate": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "名目価格。\n\nこれは実際に支払う {@link real real price} ではなく、表示するための名目価格です。\n\nこの値が {@link real real price} より大きい場合、{@link IShoppingSeller seller} が割引を提供しているように表示されます。", + "description": "実際の支払価格" + }, + "name": { + "type": "string", + "title": "実際の支払価格。", + "description": "注文価格の要約情報。" + } + }, + "required": [ + "id", + "name" + ], + "description": "割引クーポンチケット支払いリスト" + }, + "IShoppingOrderPrice.ISummary": { + "type": "object", + "properties": { + "cash": { + "type": "number", + "minimum": 0, + "title": "割引クーポンチケット支払いリスト。", + "description": "現金支払いの金額" + }, + "deposit": { + "type": "number", + "minimum": 0, + "title": "現金支払いの金額。", + "description": "デポジット支払いの金額" + }, + "mileage": { + "type": "number", + "minimum": 0, + "title": "デポジット支払いの金額。", + "description": "マイレージ支払いの金額" + }, + "ticket": { + "type": "number", + "minimum": 0, + "title": "マイレージ支払いの金額。", + "description": "割引クーポンチケット支払いの金額" + }, + "nominal": { + "type": "number", + "minimum": 0, + "title": "割引クーポンチケット支払いの金額。", + "description": "名目価格" + }, + "real": { + "type": "number", + "minimum": 0, + "title": "名目価格。\n\nこれは支払うべき {@link real 実価格} ではなく、表示するための名目価格です。\n\nこの値が {@link real 実価格} より大きい場合、{@link IShoppingSeller 販売者} が割引を提供しているように表示されます。", + "description": "支払うべき実際の価格" + } + }, + "required": [ + "cash", + "deposit", + "mileage", + "ticket", + "nominal", + "real" + ], + "description": "支払うべき実際の価格。" + }, + "IShoppingOrderPrice": { + "type": "object", + "properties": { + "ticket_payments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicketPayment" + }, + "title": "割引を含む注文の価格情報。", + "description": "主キー" + }, + "cash": { + "type": "number", + "minimum": 0, + "title": "主キー。", + "description": "対象チケット" + }, + "deposit": { + "type": "number", + "minimum": 0, + "title": "対象チケット。", + "description": "レコードの作成時刻" + }, + "mileage": { + "type": "number", + "minimum": 0, + "title": "レコードの作成時刻。", + "description": "割引クーポン チケットの支払い詳細。\n\n`IShoppingCouponTicketPayment` は、{@link IShoppingCouponTicket} の {@link IShoppingOrder 注文} の支払い情報を具体化するエンティティであり、消費者が注文時に発行された割引クーポン チケットを使用して支払い金額を差し引くときに使用されます。\n\nまた、{@link IShoppingOrder} 自体は注文が完了する状況で使用されるエンティティではなく、注文要求を表現するために設計されたエンティティであるため、この `IShoppingCouponTicketPayment` レコードの作成は、実際には添付されたチケットが消えることを意味するものではありません。{@link IShoppingCustomer 顧客}\n{@link IShoppingOrderPublish.paid_at が支払いを完了し} 注文を確認するまで、チケットは一種のデポジットとして理解できます。\n\nさらに、このレコードは、顧客がチケットの支払いを取り消すことで削除できますが、アトリビューション注文自体がキャンセルされた場合にも削除できます。" + }, + "ticket": { + "type": "number", + "minimum": 0, + "title": "主キー", + "description": "主キー。" + }, + "nominal": { + "type": "number", + "minimum": 0, + "title": "クーポンチケットを取得した顧客", + "description": "クーポンチケットを取得した顧客。" + }, + "real": { + "type": "number", + "minimum": 0, + "title": "対象クーポン", + "description": "対象クーポン。" + } + }, + "required": [ + "ticket_payments", + "cash", + "deposit", + "mileage", + "ticket", + "nominal", + "real" + ], + "description": "レコードの作成時刻" + }, + "IShoppingCouponTicketPayment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "レコードの作成時刻。", + "description": "チケットの有効期限" + }, + "ticket": { + "$ref": "#/components/schemas/IShoppingCouponTicket", + "title": "チケットの有効期限。", + "description": "割引クーポンチケット発行の詳細。\n\n`IShoppingCouponTicket` は、{@link IShoppingCustomer 顧客} が発行した {@link IShoppingCoupon 割引クーポン} チケットを表すエンティティです。\n\nまた、対象の割引クーポン仕様自体に有効期限がある場合は、有効期限が expired_at に記録され、有効期限を過ぎると自動的に破棄されます。もちろん、期限内に割引クーポンを注文に使用しても問題ありません。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "配送リスト", + "description": "配送のリスト。\n\n{@link IShoppingOrder 注文} は複数回配送されることがあります。\n\nもちろん、その逆のケース、つまり、{@link IShoppingDelivery 配送} が複数の注文で構成される場合もあります。" + } + }, + "required": [ + "id", + "ticket", + "created_at" + ], + "description": "配送に関する注文の状態" + }, + "IShoppingCouponTicket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "配送に関する注文の状態。", + "description": "主キー" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "主キー。", + "description": "レコードの作成時刻" + }, + "coupon": { + "$ref": "#/components/schemas/IShoppingCoupon", + "title": "レコードの作成時刻。", + "description": "注文が支払われた時刻" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "注文が支払われた時刻。", + "description": "支払いがキャンセルされた時刻" + }, + "expired_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "支払いがキャンセルされた時刻。", + "description": "{@link IShoppingOrderGood 商品} が配送される住所" + } + }, + "required": [ + "id", + "customer", + "coupon", + "created_at", + "expired_at" + ], + "description": "{@link IShoppingOrderGood 商品} が配送される住所。" + }, + "IShoppingOrderPublish": { + "type": "object", + "properties": { + "deliveries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDelivery" + }, + "title": "注文完了と支払い情報。\n\n`IShoppingOrderPublish` は、{@link IShoppingCustomer 顧客} が {@link IShoppingOrder 注文} の支払いを行い、注文を完了する一連のプロセスを具体化したエンティティです。注文が {@link paid_at 完了} して初めて、{@link IShoppingSeller 販売者} は顧客が商品を購入したことを認識できます。\n\nちなみに、`IShoppingOrderPublish` レコードが存在するからといって、支払いが完了したわけではありませんので注意してください。もちろん、「クレジットカード」や「Google Pay」では、支払い申請と支払いが同時に発生します。ただし、「銀行振込」や「バーチャル口座支払い」など、支払い申請後に支払いが行われる場合もあります。\n\nそのため、支払い完了を確認するには、必ず {@link paid_at} プロパティを確認してください。\n\nまた、お支払い後であっても突然キャンセルとなる場合がございますので、こちらもご注意ください。", + "description": "主キー" + }, + "state": { + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "主キー。", + "description": "商品を配送した販売者" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "商品を配送した販売者。", + "description": "配送の行程リスト" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "配送の行程リスト。", + "description": "配送の品目リスト" + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "配送の品目リスト。", + "description": "配送の発送業者リスト" + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "配送の発送業者リスト。", + "description": "配送の状態" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress", + "title": "配送の状態。", + "description": "レコードの作成時刻" + } + }, + "required": [ + "deliveries", + "state", + "id", + "created_at", + "paid_at", + "cancelled_at", + "address" + ], + "description": "レコードの作成時刻。" + }, + "IShoppingDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "配送情報。\n\n{@link IShoppingOrderGood 商品} を {@link IShoppingCustomer 顧客} に配送する場合、{@link IShoppingSeller 販売者} は一度に複数の {@link IShoppingSaleUnitStock 在庫} の商品を配送できます。また、容積や重量の問題などの物理的な制限により、在庫または商品を複数回に分けて配送することも可能です。\n\n上記のように、配送と {@link IShoppingOrder 注文} (または {@link IShoppingOrderGood 商品}) の関係は 1:1 または N:1 ではなく、M:N です。エンティティ `IShoppingDelivery` は、補助エンティティ {@link IShoppingDeliveryPiece} を介して対象の在庫または商品を参照することで、このような関係を表すように設計されています。\n\nまた、配送は 1 つのステップだけで終わるわけではありません。製造、計画、出荷、配送などの複数のプロセスがあります。これらのステップは、別の補助エンティティ {@link IShoppingDeliveryJourney} によって表されます。", + "description": "主キー" + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "主キー。", + "description": "レコードの作成時刻" + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + }, + "title": "レコードの作成時刻。", + "description": "レコードの削除時刻" + }, + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece" + }, + "minItems": 1, + "title": "レコードの削除時刻。", + "description": "旅程の種類" + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + }, + "title": "旅程の種類。\n\n- 準備\n- 製造\n- 出荷\n- 配送", + "description": "旅程のタイトル" + }, + "state": { + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "旅程のタイトル。", + "description": "旅程の説明" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "旅程の説明。", + "description": "旅程の開始時刻" + } + }, + "required": [ + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "旅程の開始時刻。" + }, + "IShoppingDeliveryJourney": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "旅程の完了時刻", + "description": "旅程の完了時刻。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "配送の行程。\n\n`IShoppingDeliveryJourney` は {@link IShoppingDelivery} の補助エンティティで、配送の各行程を説明します。参考までに、行程という言葉は、{@link IShoppingOrderGood 商品} の準備、発送、{@link IShoppingCustomer 顧客} への配送など、配送プロセスの各ステップを意味します。//|-0-|\\ 主キー", + "description": "主キー。//|-0-|\\ 対象注文の {@link IShoppingOrderPublish.id}" + }, + "deleted_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "対象注文の {@link IShoppingOrderPublish.id}。", + "description": "対象商品の {@link IShoppingOrderGood.id}" + }, + "type": { + "oneOf": [ + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + } + ], + "title": "対象商品の {@link IShoppingOrderGood.id}。", + "description": "対象在庫の {@link IShoppingSaleUnitStock.id}" + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "対象在庫の {@link IShoppingSaleUnitStock.id}。", + "description": "在庫の数量" + }, + "description": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "在庫の数量。\n\n分割配送を表すための正確な値になります。", + "description": "どの在庫が配送されるか。\n\n`IShoppingDeliveryPiece` は {@link IShoppingDelivery} の補助エンティティで、{@link IShoppingOrder} 内の各 {@link IShoppingSaleUnitStock 在庫} に対して配送される数量を記述します。\n\n参考までに、注文は数量や重量の問題により複数回配送される場合があるため、1 つの在庫に対して複数の `IShoppingDeliveryPiece` レコードが存在する可能性があります。" + }, + "started_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "主キー", + "description": "主キー。" + }, + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "レコードの作成時刻", + "description": "レコードの作成時刻。" + } + }, + "required": [ + "id", + "created_at", + "deleted_at", + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "連絡先の携帯電話番号" + }, + "IShoppingDeliveryPiece": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "連絡先の携帯電話番号。", + "description": "住所の代表者名" + }, + "publish_id": { + "type": "string", + "format": "uuid", + "title": "住所の代表者名。\n\n受取人名の場合もあれば、場所名の場合もあります。", + "description": "国名" + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "国名。", + "description": "県名" + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "県名。", + "description": "市名" + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "市名。", + "description": "部署名" + } + }, + "required": [ + "id", + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "部署名。" + }, + "IShoppingDeliveryShipper": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "company": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "id", + "created_at", + "company", + "name", + "mobile" + ] + }, + "IShoppingAddress": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "通り名、建物番号、部屋番号を含む詳細な住所", + "description": "通り名、建物番号、部屋番号を含む詳細な住所。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "郵便番号", + "description": "郵便番号。" + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "必要に応じて特別な説明", + "description": "必要に応じて特別な説明。" + }, + "name": { + "type": "string", + "title": "住所情報。", + "description": "ページ番号" + }, + "country": { + "type": "string", + "title": "ページ番号。", + "description": "1 ページあたりのレコード数の制限" + }, + "province": { + "type": "string", + "title": "1 ページあたりのレコード数の制限。", + "description": "ページ番号と検索/並べ替え条件による注文のリクエスト。" + }, + "city": { + "type": "string", + "title": "ページ情報", + "description": "ページ情報。" + }, + "department": { + "type": "string", + "title": "レコードのリスト", + "description": "レコードのリスト。" + }, + "possession": { + "type": "string", + "title": "ページ。\n\nページ番号情報によるレコードのコレクション。", + "description": "検索条件" + }, + "zip_code": { + "type": "string", + "title": "検索条件。", + "description": "並べ替え条件" + }, + "special_note": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "並べ替え条件。", + "description": "ページ番号" + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ], + "description": "ページ番号。" + }, + "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": "1ページあたりのレコード数の制限", + "description": "1ページあたりのレコード数の制限。" + }, + "limit": { + "type": "integer", + "title": "ページネーションと検索/並べ替えオプション付きの集計された売上のリクエスト。", + "description": "所属セクション" + } + }, + "description": "所属セクション。" + }, + "IShoppingOrder.IRequest.ISearch": { + "type": "object", + "properties": { + "min_price": { + "type": "number" + }, + "max_price": { + "type": "number" + }, + "paid": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + } + }, + "IShoppingSale.IRequest.ISearch": { + "type": "object", + "properties": { + "show_paused": { + "type": "boolean" + }, + "show_suspended": { + "oneOf": [ + { + "const": "only" + }, + { + "type": "boolean" + } + ] + }, + "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" + }, + "count": { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.ICountRange" + } + } + }, + "IShoppingSaleReview.IInvertSearch.IScoreRange": { + "type": "object", + "properties": { + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "IShoppingSaleReview.IInvertSearch.ICountRange": { + "type": "object", + "properties": { + "minimum": { + "type": "integer" + }, + "maximum": { + "type": "integer" + } + } + }, + "IShoppingSeller.IRequest.ISearch": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "nickname": { + "type": "string" + } + } + }, + "IPageIShoppingSale.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "売上を登録したセラー", + "description": "売上を登録したセラー。" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSale.ISummary" + }, + "title": "売上の主キー", + "description": "売上の主キー。" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "スナップショットの主キー" + }, + "IShoppingSale.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch", + "title": "スナップショットの主キー。", + "description": "スナップショットが最新かどうか" + }, + "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" + } + ] + }, + "title": "スナップショットが最新かどうか。", + "description": "売上を説明する説明と画像コンテンツ" + }, + "page": { + "type": "integer", + "title": "セールを説明する説明と画像コンテンツ。", + "description": "チャネルとカテゴリのリスト" + }, + "limit": { + "type": "integer", + "title": "チャネルとカテゴリのリスト。\n\nセールが登録されているチャネルとカテゴリ。", + "description": "検索タグのリスト" + } + }, + "description": "検索タグのリスト" + }, + "IShoppingSale": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "ユニットのリスト", + "description": "ユニットのリスト。\n\nセールで販売される個々の製品構成情報に関するレコード。各 {@link IShoppingSaleUnit ユニット} レコードには、構成可能な {@link IShoppingSaleUnitOption オプション}、各オプションの {@link IShoppingSaleUnitOptionCandidate 候補} 値、および各オプションのすべての候補値を選択して決定される {@link IShoppingSaleUnitStock 最終在庫} があります。//|-0-|\\ レコードの作成時刻" + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "レコードの作成時刻。\n\nこのプロパティは、セールが開始された時点を意味する {@link opened_at} とは異なることに注意してください。", + "description": "レコードの最終更新時刻" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "レコードの最終更新時刻。\n\n言い換えると、最後のスナップショットの作成時刻です。", + "description": "セールの一時停止時刻" + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "セールの一時停止時間。\n\n何らかの理由で、販売者がセールを一時停止しています。\n\n{@link IShoppingCustomer 顧客} は、リスト ページと詳細ページの両方でセールを引き続き表示できますが、セールには「販売者がセールを一時停止しています」という警告ラベルが表示されます。", + "description": "セールの一時停止時間" + }, + "latest": { + "type": "boolean", + "title": "セールの一時停止時間。\n\n何らかの理由で、販売者によってセールが一時停止されています。\n\n{@link IShoppingCustomer 顧客} は、リスト ページと詳細ページの両方でセールを見ることができません。ソフト削除とほぼ同じですが、所有者 {@link IShoppingSeller 販売者} が引き続きセールを見て再開できるという点が少し異なります。\n\nもちろん、セールをすでに購入した {@link IShoppingCustomer 顧客} は、{@link IShoppingOrder 注文} ページで引き続きセールを見ることができます。", + "description": "セールの開始時間" + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent", + "title": "セールの開始時間。", + "description": "セールの終了時間" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "セールの終了時間。\n\nこの値が `null` の場合、セールは永久に継続されます。", + "description": "販売者が商品を販売します。\n\n`IShoppingSale` は、{@link ISoppingSeller 販売者が登録した「商品販売」(販売) 情報を具体化するエンティティです。販売の主な情報は、メインの `IShoppingSale` ではなく、サブの {@link IShoppingSaleSnapshot} に記録されます。販売者が以前に登録した商品を変更すると、既存の `IShoppingSale` レコードは変更されず、新しい {@link IShoppingSaleSnapshot スナップショット} レコードが作成されます。\n\nこれは、販売者が商品のコンポーネントや価格を変更した場合でも、顧客が特定の商品を購入した後、{@link IShoppingCustomer 顧客} の {@link IShoppingOrder 購入履歴} を完璧に保持するためです。また、コンポーネントや価格を変更し、その都度パフォーマンスを測定する、いわゆる A/B テストで販売者をサポートすることも目的としています。" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "主キー", + "description": "主キー。" + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit" + }, + "minItems": 1, + "title": "コンテンツのタイトル", + "description": "コンテンツのタイトル。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "本文コンテンツの形式", + "description": "本文コンテンツの形式。\n\n`html`、`md`、`txt` などのファイル拡張子と同じ意味です。" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "本文コンテンツ", + "description": "本文コンテンツ。" + }, + "paused_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "添付ファイルのリスト", + "description": "添付ファイルのリスト。" + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "サムネイルのリスト", + "description": "サムネイルのリスト。" + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "セール スナップショットのコンテンツ情報。\n\n`IShoppingSaleContent` は、{@link IShoppingSale} の説明コンテンツを具体化するエンティティです。", + "description": "オプションのリスト" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "オプションのリスト。", + "description": "最終在庫リスト" + } + }, + "required": [ + "section", + "seller", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "最終在庫リスト。" + }, + "IShoppingSaleContent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "主キー", + "description": "主キー。" + }, + "title": { + "type": "string", + "title": "ユニットの代表名", + "description": "ユニットの代表名。" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "ユニットが主かどうか", + "description": "ユニットが主かどうか。\n\nラベル値のみ。" + }, + "body": { + "type": "string", + "title": "ユニットが必須かどうか", + "description": "ユニットが必須かどうか。\n\nユニットが必須の場合、お客様はユニットを選択する必要があります。選択しないと、お客様は購入できません。\n\nたとえば、「Macbook セット」が販売されており、ユニットの 1 つが「本体」である場合、「Macbook セット」を「本体」ユニットなしで購入することは可能ですか? このプロパティは、そのような場合のためのものです。" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + }, + "title": "セールで扱われる商品構成情報。\n\n`IShoppingSaleUnit` は、{@link IShoppingSale セール} で扱われる「個別商品」情報を具体化するエンティティです。\n\n参考までに、`IShoppingSaleUnit` が 1: N の代数関係で {@link IShoppingSaleSnapshot} から分離されているのは、1 つの出品で複数の商品が販売される場合があるからです。いわゆる「バンドル商品」がこれに該当します。\n\n- 通常商品からのバンドル (Mackbook セット)\n- 本体\n- キーボード\n- マウス\n- Apple Care (無料 A/S バウチャー)\n\nまた、`IShoppingSaleUnit` 自体は、{@link IShoppingCustomer 顧客} が {@link IShoppingOrder で購入する {@link IShoppingSaleUnitStock 最終在庫} を指すものではありません。\n最終的な在庫は、指定されたすべての\n{@link IShoppingSaleUnitOption オプション} とその\n{@link IShoppingSaleUnitOptionCandidate 候補値} を選択した後にのみ確認できます。\n\nたとえば、Macbook を購入する場合でも、最終的な在庫は、すべてのオプション (CPU / RAM / SSD) などを選択した後にのみ決定されます。", + "description": "候補値のリスト" + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + }, + "title": "候補値のリスト。", + "description": "主キー" + } + }, + "required": [ + "id", + "title", + "format", + "body", + "files", + "thumbnails" + ], + "description": "主キー。" + }, + "IShoppingSaleUnit": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ] + }, + "title": "選択可能なオプションのタイプの判別式", + "description": "選択可能なオプションのタイプの判別式。" + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock" + }, + "minItems": 1, + "title": "オプションの名前を表します", + "description": "オプションの名前を表します" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "オプションが可変かどうか", + "description": "オプションが可変かどうか。\n\n現在のオプションのタイプが「選択」の場合、この属性は、異なる候補値を選択すると最終的な在庫に影響するかどうかを意味します。" + }, + "name": { + "type": "string", + "title": "販売中のユニットの個別オプション情報。\n\n`IShoppingSaleUnitSelectableOption` は、{@link IShoppingSale セール} 内の個々の商品を表す {@link IShoppingSaleUnit} の補助エンティティであり、ユニットの個別選択可能オプション情報を表すために設計されたエンティティです。\n\n- オプションの例\n- 選択可能オプション\n- コンピュータ: CPU、RAM、SSD など\n- 衣服: サイズ、色、スタイルなど\n- 説明オプション\n- 刻印\n- 簡単な質問\n\n{@link 変数} プロパティ値が `true` の場合、{@link IShoppingCustomer 顧客} が購入する最終在庫は、{@link IShoppingSaleUnitOptionCandidate 候補値} の選択に応じて変化します。\n\n逆に、\"select\" 以外のタイプ、または {@link 変数} プロパティ値が \"false\" の場合、これは単純な情報転送以外の意味を持たないオプションです。したがって、顧客が購入時にどのような値を選択しても、この場合のオプションは、{@link IShoppingSaleUnitStock 最終在庫} には影響しません。", + "description": "主キー" + }, + "primary": { + "type": "boolean", + "title": "主キー。", + "description": "株式の代表名" + }, + "required": { + "type": "boolean", + "title": "株式の代表名。", + "description": "株式の価格" + } + }, + "required": [ + "options", + "stocks", + "id", + "name", + "primary", + "required" + ], + "description": "株式の価格。" + }, + "IShoppingSaleUnitSelectableOption": { + "type": "object", + "properties": { + "candidates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate" + }, + "minItems": 1, + "title": "株式の現在の在庫状況", + "description": "株式の現在の在庫状況。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "選択肢のリスト", + "description": "選択肢のリスト。\n\n各オプションで選択される候補値。" + }, + "type": { + "const": "select", + "title": "販売単位の最終構成情報。\n\n`IShoppingSaleUnitStock` は、販売する製品カタログを表す {@link IShoppingSaleUnit} の補助エンティティであり、所属単位内のすべての {@link IShoppingSaleUnitSelectableOption オプション}\n(変数 \"select\" タイプ) とその {@link IShoppingSaleUnitOptionCandidate 候補} 値を選択して構築される一種の最終在庫です。\n\n顧客が実際に購入するのは「商品」そのものです。\n\n- 製品名) MacBook\n- オプション\n- CPU: { i3、i5、i7、i9 }\n- RAM: { 8GB、16GB、32GB、64GB、96GB }\n- SSD: { 256GB、512GB、1TB }\n- 最終在庫数: 4 * 5 * 3 = 60\n\n参考までに、アトリビューション ユニット内の `IShoppingSaleUnitStock` レコードの総数は、直積を使用して取得できます。つまり、各 (変数 \"select\" 型) オプションが取り得るすべての候補値にケース数を掛けた値が、ユニット内の最終在庫数の合計です。\n\nもちろん、変数 \"select\" 型オプションが 1 つもない場合、ユニット内の最終在庫数は 1 のみです。", + "description": "主キー" + }, + "name": { + "type": "string", + "title": "主キー。", + "description": "対象オプションの {@link IShoppingSaleUnitOption.id}" + }, + "variable": { + "type": "boolean", + "title": "対象候補の {@link IShoppingSaleUnitOptionCandidate.id}", + "description": "最終在庫の選択情報。\n\n`IShoppingSaleUnitStockChoice` は、各 {@link IShoppingSaleUnitStock 在庫} に対して各変数 \"select\" タイプのどの {@link IShoppingSaleUnitSelectableOption オプション} が選択され、その中でどの {@link IShoppingSaleUnitOptionCandidate 候補値} が選択されたかを表すエンティティです。\n\nもちろん、バインドされた {@link IShoppingSaleUnit ユニット} にオプションがない場合、このエンティティも無視できます。" + } + }, + "required": [ + "candidates", + "id", + "type", + "name", + "variable" + ], + "description": "ページ情報" + }, + "IShoppingSaleUnitStock": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "ページ情報。", + "description": "レコード一覧" + }, + "name": { + "type": "string", + "title": "レコード一覧。", + "description": "ページ。\n\nページネーション情報を含むレコードのコレクション。" + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "コメントの作成者", + "description": "コメントの作成者。\n\n販売問い合わせには、顧客と販売者の両方がコメントを記入できます。\n\nちなみに、顧客に制限はありませんが、販売者は販売を登録した人でなければなりません。" + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockInventory", + "title": "主キー", + "description": "主キー。" + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice" + }, + "title": "親コメントの ID", + "description": "親コメントの ID。" + } + }, + "required": [ + "id", + "name", + "price", + "inventory", + "choices" + ], + "description": "スナップショットの内容一覧" + }, + "IShoppingSaleUnitStockChoice": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "スナップショットの内容のリスト。\n\nコメントの作成時に初めて作成され、コメントが変更されるたびに蓄積されます。", + "description": "コメントの作成時刻" + }, + "option_id": { + "type": "string", + "format": "uuid", + "description": "コメントの作成時刻。" + }, + "candidate_id": { + "type": "string", + "format": "uuid", + "description": "お問い合わせ記事に書かれたコメントです。\n\n`IShoppingSaleInquiryComment` は {@link IBbsArticleComment} のサブタイプエンティティで、{@link IShoppingCustomer 顧客} が書いた {@link IShoppingSaleInquiry お問い合わせ} について複数の人に伝えたい場合に使用します。\n\n参考までに、{@link IShoppingSeller 販売者} の場合は関係者のみがコメントを書けますが、{@link IShoppingCustomer 顧客} の場合は制限がありません。つまり、お問い合わせを書いた本人でなくても、どの顧客でも自由にコメントを書けます。" + } + }, + "required": [ + "id", + "option_id", + "candidate_id" + ], + "description": "主キー" + }, + "IPageIShoppingSaleInquiryComment": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "主キー。", + "description": "スナップショット レコードの作成時刻" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + }, + "title": "スナップショット レコードの作成時刻。\n\nつまり、作成時刻、更新時刻、またはコメントです。", + "description": "本文の形式" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "本文の形式。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。" + }, + "IShoppingSaleInquiryComment": { + "type": "object", + "properties": { + "writer": { + "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": "コメントのコンテンツ本体", + "description": "コメントのコンテンツ本体。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "添付ファイルのリスト", + "description": "添付ファイルのリスト。" + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "コメントのスナップショット。\n\n`IBbsArticleComment.ISnapshot` は、コメントの内容を含むスナップショット エンティティです。\n\n{@link IBbsArticleComment} で述べたように、証拠を保存し、不正行為を防止するように設計されています。", + "description": "拡張子を除くファイル名" + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticleComment.ISnapshot" + }, + "minItems": 1, + "title": "拡張子を除くファイル名。\n\n`.gitignore` ファイルがある場合、その名前は空の文字列になります。", + "description": "拡張子" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "拡張子。\n\n`README` の場合のように省略可能です。", + "description": "実際のファイルの URL パス" + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "実際のファイルの URL パス。" + }, + "IBbsArticleComment.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "ページ番号", + "description": "ページ番号。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "1 ページあたりのレコード数の制限", + "description": "1 ページあたりのレコード数の制限。" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "ページ区切りと検索/並べ替えオプション付きのコメントのリクエスト。", + "description": "本文の形式" + }, + "body": { + "type": "string", + "title": "本文の形式。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。", + "description": "コメントのコンテンツ本文" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "コメントのコンテンツ本文。", + "description": "添付ファイルのリスト" + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "添付ファイルのリスト。" + }, + "IAttachmentFile.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "コメントの作成情報。", + "description": "主キー" + }, + "extension": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "title": "主キー。", + "description": "スナップショット レコードの作成時刻" + }, + "url": { + "type": "string", + "format": "uri", + "title": "スナップショット レコードの作成時刻。\n\nつまり、作成時刻または更新時刻またはコメントです。", + "description": "本文の形式" + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "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": "本文のフォーマット。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。", + "description": "コメントの内容本文" + }, + "limit": { + "type": "integer", + "title": "コメントの内容本文。", + "description": "添付ファイルのリスト" + } + }, + "description": "添付ファイルのリスト。" + }, + "IShoppingSaleInquiryComment.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "IShoppingSaleInquiryComment.ICreate": { + "type": "object", + "properties": { + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "コメントのスナップショットの内容。", + "description": "ページ情報" + }, + "body": { + "type": "string", + "title": "ページ情報。", + "description": "レコードのリスト" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "レコードのリスト。", + "description": "ページ。\n\nページネーション情報を含むレコードのコレクション。" + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "質問記事が秘密かどうか" + }, + "IShoppingSaleInquiryComment.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "質問記事が秘密かどうか。\n\n秘密記事の場合、詳細な内容は投稿者と関連する出品者のみが閲覧できます。", + "description": "質問を書き込んだ顧客" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "質問を書き込んだ顧客。", + "description": "出品者による質問に対する正式な回答" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "出品者による質問に対する正式な回答。", + "description": "出品者が質問を閲覧したかどうか" + }, + "body": { + "type": "string", + "title": "出品者が質問を閲覧したかどうか。", + "description": "主キー" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "主キー。", + "description": "最後のスナップショットのタイトル" + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "最後のスナップショットのタイトル。" + }, + "IPageIShoppingSaleQuestion.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "記事の作成時間", + "description": "記事の作成日時。" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.ISummary" + }, + "title": "記事の修正日時", + "description": "記事の修正日時。\n\nつまり、最後のスナップショットが作成された日時です。" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "質問の要約情報。" + }, + "IShoppingSaleQuestion.ISummary": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "主キー", + "description": "主キー。" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "最後のスナップショットのタイトル", + "description": "最後のスナップショットのタイトル。" + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary" + } + ], + "title": "記事の作成日時", + "description": "記事の作成日時。" + }, + "read_by_seller": { + "type": "boolean", + "title": "記事の修正日時", + "description": "記事の修正日時。\n\nつまり、最後のスナップショットが作成された日時です。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "検索条件", + "description": "検索条件。" + }, + "title": { + "type": "string", + "title": "ソート条件", + "description": "ソート条件。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "ページ番号", + "description": "ページ番号。" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "1 ページあたりのレコード数の制限", + "description": "1 ページあたりのレコード数の制限。" + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "ページネーション検索/ソートオプション付き要約情報の要求。" + }, + "IShoppingSaleInquiryAnswer.ISummary": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "ページ情報", + "description": "ページ情報。" + }, + "title": { + "type": "string", + "title": "レコード一覧", + "description": "レコード一覧。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "ページ。\n\nページネーション情報付きレコードのコレクション。", + "description": "質問記事が秘密かどうか" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "質問記事が秘密かどうか。\n\n秘密記事の場合、詳細な内容は投稿者と関連する出品者のみが閲覧できます。", + "description": "質問を書き込んだ顧客" + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ] + }, + "IShoppingSaleQuestion.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSaleInquiry.IRequest.ISearch", + "title": "質問を書き込んだ顧客。", + "description": "出品者による質問に対する正式な回答" + }, + "sort": { + "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": "出品者による質問に対する正式な回答。", + "description": "出品者が質問を閲覧したかどうか" + }, + "page": { + "type": "integer", + "title": "出品者が質問を閲覧したかどうか。", + "description": "主キー" + }, + "limit": { + "type": "integer", + "title": "主キー。", + "description": "最後のスナップショットのタイトル" + } + }, + "description": "最後のスナップショットのタイトル。" + }, + "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.IAbridge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "記事の作成時間", + "description": "記事の作成時刻。" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IAbridge" + }, + "title": "記事の変更時刻", + "description": "記事の変更時刻。\n\nつまり、最後のスナップショットが作成された時刻です。" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "本文の形式" + }, + "IShoppingSaleQuestion.IAbridge": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "本文の形式。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。", + "description": "記事のコンテンツ本文" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "記事のコンテンツ本文。", + "description": "添付ファイルのリスト" + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.IAbridge" + } + ], + "title": "添付ファイルのリスト。", + "description": "質問の要約情報。" + }, + "read_by_seller": { + "type": "boolean", + "title": "主キー", + "description": "主キー。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "最後のスナップショットのタイトル", + "description": "最後のスナップショットのタイトル。" + }, + "title": { + "type": "string", + "title": "記事の作成時刻", + "description": "記事の作成時間。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "記事の修正時間", + "description": "記事の修正時間。\n\nつまり、最後のスナップショットが作成された時間です。" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "本文の形式", + "description": "本文の形式。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "記事のコンテンツ本文", + "description": "記事のコンテンツ本文。" + }, + "body": { + "type": "string", + "title": "添付ファイルのリスト", + "description": "添付ファイルのリスト。" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "質問記事が秘密かどうか", + "description": "質問記事が秘密かどうか。\n\n秘密記事の場合、詳細な内容は投稿者と関連する出品者のみが閲覧できます。" + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "派生した問い合わせの種類" + }, + "IShoppingSaleInquiryAnswer.IAbridge": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "派生した問い合わせの種類。\n\n- `question`: {@link IShoppingSaleQuestion}\n- `review`: {@link IShoppingSaleReview}", + "description": "問い合わせを投稿した顧客" + }, + "title": { + "type": "string", + "title": "問い合わせを投稿した顧客。", + "description": "出品者による問い合わせに対する正式な回答" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "出品者による問い合わせに対する正式な回答。", + "description": "出品者が問い合わせを閲覧したかどうか" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "出品者が問い合わせを閲覧したかどうか。", + "description": "主キー" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "主キー。", + "description": "スナップショットの内容の一覧" + }, + "body": { + "type": "string", + "title": "スナップショットの内容の一覧。\n\n記事作成時に初めて作成され、記事が変更されるたびに蓄積されます。", + "description": "記事の作成時刻" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "記事の作成時刻。", + "description": "セール スナップショットに関する質問。\n\n`IShoppingSaleQuestion` は {@link IShoppingSaleInquiry} のサブタイプ エンティティであり、{@link IShoppingCustomer の顧客} が {@link IShoppingSeller の販売者} によって登録された {@link IShoppingSale セール} (その時点では {@link IShoppingSaleSnapshot スナップショット}) について質問したい場合に使用されます。\n\nまた、ほとんどのショッピング モールと同様に、`IShoppingSaleQuestion` は {@link secret} 属性も提供しており、質問を書いた販売者と顧客だけが閲覧できる「秘密のメッセージ」を作成できます。" + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ] + }, + "IShoppingSaleQuestion": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "回答を書いた出品者", + "description": "回答を書いた出品者。" + }, + "type": { + "const": "question", + "title": "主キー", + "description": "主キー。" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "スナップショットの内容一覧", + "description": "スナップショットの内容一覧。\n\n記事作成時に初めて作成され、記事が変更されるたびに蓄積されます。" + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + ], + "title": "記事の作成時刻", + "description": "記事の作成時刻。" + }, + "read_by_seller": { + "type": "boolean", + "title": "販売スナップショットに関する質問への回答。\n\n`IShoppingSaleInquiryAnswer` は、{@link IShoppingCustomer 顧客} が書いた {@link IShoppingSaleInquiry 問い合わせ} に対して {@link IShoppingSeller 販売者} が書いた公式回答を具体化するエンティティです。\n\nもちろん、このように公式回答を書くだけでなく、販売者は、帰属問い合わせの {@link IShoppingSaleInquiryComment コメント} を通じて、問い合わせが書かれた顧客や複数の顧客とコミュニケーションをとることもできます。\n\n参考までに、この回答にコメントを書くことはできません。\n\n問い合わせ記事にコメントを書くように促してください。これは、コメントが問い合わせ記事と回答記事の両方に分散するのを防ぐためです。", + "description": "主キー" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "主キー。", + "description": "スナップショット レコードの作成時刻" + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + }, + "minItems": 1, + "title": "スナップショット レコードの作成時刻。\n\nつまり、記事の作成時刻または更新時刻です。", + "description": "本文の形式" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "本文の形式。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。", + "description": "記事のタイトル" + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "記事のタイトル。" + }, + "IShoppingSaleInquiryAnswer": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "記事のコンテンツ本体", + "description": "記事のコンテンツ本体。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "添付ファイルの一覧", + "description": "添付ファイルの一覧。" + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + }, + "minItems": 1, + "title": "記事のスナップショット。\n\n`IBbsArticle.ISnapshot` は記事の内容を含むスナップショット エンティティです。{@link IBbsArticle} で説明されているように、記事の内容は証拠を保存し、不正行為を防ぐために記事レコードから分離されています。", + "description": "ページ情報" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "ページ情報。", + "description": "レコードのリスト" + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "レコードのリスト。" + }, + "IBbsArticle.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "ページ。\n\nページネーション情報を含むレコードのコレクション。", + "description": "レビューのスコア" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "レビューのスコア。", + "description": "お問い合わせを書いた顧客" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "お問い合わせを書いた顧客。", + "description": "出品者からの問い合わせに対する正式な回答" + }, + "title": { + "type": "string", + "title": "出品者からの問い合わせに対する正式な回答。", + "description": "出品者が問い合わせを閲覧したかどうか" + }, + "body": { + "type": "string", + "title": "出品者が問い合わせを閲覧したかどうか。", + "description": "主キー" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "主キー。", + "description": "最後のスナップショットのタイトル" + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "最後のスナップショットのタイトル。" + }, + "IPageIShoppingSaleReview.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "記事の作成時間", + "description": "記事の作成時間。" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISummary" + }, + "title": "記事の変更時間", + "description": "記事の変更時間。\n\nつまり、最後のスナップショットが作成された時間です。" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "レビューの要約情報。" + }, + "IShoppingSaleReview.ISummary": { + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "検索条件", + "description": "検索条件。" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "並び替え条件", + "description": "並び替え条件。" + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary" + } + ], + "title": "ページ番号", + "description": "ページ番号。" + }, + "read_by_seller": { + "type": "boolean", + "title": "1 ページあたりのレコード数制限", + "description": "1 ページあたりのレコード数制限。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "ページネーション検索/並び替えオプション付き要約情報の要求。", + "description": "ページ情報" + }, + "title": { + "type": "string", + "title": "ページ情報。", + "description": "レコード一覧" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "レコード一覧。", + "description": "ページ。\n\nページネーション情報付きレコードのコレクション。" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "レビューのスコア", + "description": "レビューのスコア。" + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "お問い合わせを書いた顧客" + }, + "IShoppingSaleReview.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest.ISearch", + "title": "お問い合わせを書いた顧客。", + "description": "出品者からの問い合わせに対する正式な回答" + }, + "sort": { + "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": "出品者からの問い合わせに対する正式な回答。", + "description": "出品者が問い合わせを閲覧したかどうか" + }, + "page": { + "type": "integer", + "title": "出品者が問い合わせを閲覧したかどうか。", + "description": "主キー" + }, + "limit": { + "type": "integer", + "title": "主キー。", + "description": "最後のスナップショットのタイトル" + } + }, + "description": "最後のスナップショットのタイトル。" + }, + "IShoppingSaleReview.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" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "IPageIShoppingSaleReview.IAbridge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "記事の作成時間", + "description": "記事の作成時間。" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.IAbridge" + }, + "title": "記事の変更時間", + "description": "記事の変更時間。\n\nつまり、最後のスナップショットが作成された時間です。" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "本文の形式" + }, + "IShoppingSaleReview.IAbridge": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "本文の形式。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。", + "description": "記事のコンテンツ本文" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "記事のコンテンツ本文。", + "description": "添付ファイルのリスト" + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.IAbridge" + } + ], + "title": "添付ファイルのリスト。", + "description": "レビューの要約情報。" + }, + "read_by_seller": { + "type": "boolean", + "title": "派生した問い合わせの種類", + "description": "派生した問い合わせの種類。\n\n- `question`: {@link IShoppingSaleQuestion}\n- `review`: {@link IShoppingSaleReview}" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "問い合わせを書いた顧客", + "description": "問い合わせを書いた顧客。" + }, + "title": { + "type": "string", + "title": "販売者による問い合わせに対する正式な回答", + "description": "販売者による問い合わせに対する正式な回答。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "出品者が問い合わせを閲覧したかどうか", + "description": "出品者が問い合わせを閲覧したかどうか。" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "主キー", + "description": "主キー。" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "スナップショットの内容の一覧", + "description": "スナップショットの内容の一覧。\n\n記事作成時に初めて作成され、記事が変更されるたびに蓄積されます。" + }, + "body": { + "type": "string", + "title": "記事の作成時刻", + "description": "記事の作成時刻。" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "セール スナップショットのレビュー。\n\n`IShoppingSaleReview` は {@link IShoppingSaleInquiry} のサブタイプ エンティティで、{@link IShoppingCustomer の顧客} が {@link IShoppingSeller の販売者} が商品として登録した {@link IShoppingSale セール} (その時点では {@link IShoppingSaleSnapshot スナップショット}) を購入し、レビューと評価を残す場合に使用されます。\n\n参考までに、`IShoppingSaleReview` と {@link IShoppingOrderGod shopping_order_goods} は N: 1 の対数関係にありますが、これは顧客が同じ商品に対していつまでもレビューを書き続けられるということではありません。一度レビューを書いたら、1 か月後に追加のレビューを書けるなどの制限があるのではないでしょうか。", + "description": "レビューのスコア" + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "レビューのスコア。" + }, + "IShoppingSaleReview": { + "type": "object", + "properties": { + "type": { + "const": "review", + "title": "主キー", + "description": "主キー。" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "スナップショット レコードの作成時刻", + "description": "スナップショット レコードの作成時刻。\n\nつまり、記事の作成時刻または更新時刻です。" + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + ], + "title": "本文の形式", + "description": "本文の形式。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。" + }, + "read_by_seller": { + "type": "boolean", + "title": "記事のタイトル", + "description": "記事のタイトル。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "記事のコンテンツ本文", + "description": "記事のコンテンツ本文。" + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISnapshot" + }, + "minItems": 1, + "title": "添付ファイルの一覧", + "description": "添付ファイルの一覧。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "レビュー記事のスナップショット コンテンツ。", + "description": "ページ情報" + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "ページ情報。" + }, + "IShoppingSaleReview.ISnapshot": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "レコードの一覧", + "description": "レコードのリスト。" + }, + "id": { + "type": "string", + "title": "ページ。\n\nページネーション情報を含むレコードのコレクション。", + "description": "ユニットの価格帯" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "ユニットの価格帯。", + "description": "セールの主キー" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "セールの主キー。", + "description": "スナップショットの主キー" + }, + "title": { + "type": "string", + "title": "スナップショットの主キー。", + "description": "スナップショットが最新かどうか" + }, + "body": { + "type": "string", + "title": "スナップショットが最新かどうか。", + "description": "セールを説明する説明と画像コンテンツ" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "セールを説明する説明と画像コンテンツ。", + "description": "チャネルとカテゴリのリスト" + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "チャネルとカテゴリのリスト。\n\n販売が登録されているチャネルとカテゴリ。" + }, + "IPageIShoppingSaleSnapshot.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "検索タグのリスト", + "description": "検索タグのリスト。" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.ISummary" + }, + "title": "ユニットのリスト", + "description": "ユニットのリスト。\n\nセールで販売される個々の製品構成情報に関するレコード。各 {@link IShoppingSaleUnit ユニット} レコードには、構成可能な {@link IShoppingSaleUnitOption オプション}、各オプションの {@link IShoppingSaleUnitOptionCandidate 候補} 値、および各オプションのすべての候補値を選択して決定される {@link IShoppingSaleUnitStock 最終在庫} があります。//|-0-|\\ セール スナップショットの要約情報。//|-0-|\\ ページ番号" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "ページ番号。//|-0-|\\ 1 ページあたりのレコード数の制限" + }, + "IShoppingSaleSnapshot.ISummary": { + "type": "object", + "properties": { + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange", + "title": "1 ページあたりのレコード数の制限。", + "description": "ページ リクエスト データ" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "セールの主キー", + "description": "セールの主キー。" + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "スナップショットの主キー", + "description": "スナップショットの主キー。" + }, + "latest": { + "type": "boolean", + "title": "スナップショットが最新かどうか", + "description": "スナップショットが最新かどうか。" + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "セールを説明する説明と画像コンテンツ", + "description": "セールを説明する説明と画像コンテンツ。" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "チャネルとカテゴリのリスト", + "description": "チャネルとカテゴリのリスト。\n\nセールが登録されているチャネルとカテゴリ。" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "検索タグのリスト", + "description": "検索タグのリスト。" + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ISummary" + }, + "minItems": 1, + "title": "ユニットのリスト", + "description": "ユニットのリスト。\n\nセールで販売される個々の製品構成情報に関するレコード。各 {@link IShoppingSaleUnit ユニット} レコードには、構成可能な {@link IShoppingSaleUnitOption オプション}、各オプションの {@link IShoppingSaleUnitOptionCandidate 候補} 値、および各オプションのすべての候補値を選択して決定される {@link IShoppingSaleUnitStock 最終在庫} があります。" + } + }, + "required": [ + "price_range", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units" + ], + "description": "販売のスナップショット レコード。\n\n`IShoppingSaleSnapshot` は販売のスナップショットを具体化するエンティティであり、ERD (エンティティ リレーションシップ ダイアグラム) では、`shopping_sale_snapshots` テーブルの役割を次のように説明しています。\n\n> {@link IShoppingSale shopping_sales} は、{@link IShoppingSeller 販売者} が登録した「製品販売」(販売) 情報を具体化するエンティティです。販売の主な情報は、メインの {@link IShoppingSale shopping_sales} ではなく、サブの `shopping_sale_snapshots` に記録されます。販売者が以前に登録したアイテムを変更すると、既存の {@link IShoppingSale shopping_sales} レコードは変更されず、新しいスナップショット レコードが作成されます。\n>\n> これは、{@link IShoppingCustomer 顧客} が特定の商品を購入した後、販売者が商品のコンポーネントや価格を変更した場合でも、{@link IShoppingOrder 購入履歴} を完璧に保存するためです。また、コンポーネントや価格を変更し、その都度パフォーマンスを測定する、いわゆる A/B テストで販売者をサポートすることも目的としています。\n\nちなみに、フロントエンド開発者が使用する DTO (Data Transfer Object) レベルでは、{@link IShoppingSale} と `IShoppingSaleSnapshot` を厳密に区別せず、一般的には {@link IShoppingSale} とスナップショットを一緒に扱います。\n\nただし、DTO レベルで厳密に区別しなくても、「スナップショット」という言葉と概念は重要ですので、「スナップショット」の概念を正しく理解することをお勧めします。" + }, + "IPage.IRequest": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "title": "親カテゴリ情報", + "description": "親カテゴリ情報。" + }, + "limit": { + "type": "integer", + "title": "階層構造を持つ子カテゴリのリスト", + "description": "階層構造を持つ子カテゴリのリスト。" + } + }, + "description": "主キー" + }, + "IShoppingSaleSnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "主キー。", + "description": "親カテゴリの ID" + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "親カテゴリの ID。", + "description": "カテゴリの代表名" + }, + "latest": { + "type": "boolean", + "title": "カテゴリの代表名。\n\n名前は親カテゴリ内で一意である必要があります。親が存在しない場合は、名前は親カテゴリ間のチャネル内で一意である必要があります。", + "description": "レコードの作成時刻" + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent", + "title": "レコードの作成時刻。", + "description": "チャネルのカテゴリ。\n\n`IShoppingChannelCategory` は、特定の {@link IShoppingChannel チャネル} 内の分類カテゴリを指す概念で、ショッピングモールで一般的に「カテゴリ」と呼ばれる概念とまったく同じです。\n\nまた、`IShoppingChannelCategory` は {@link IShoppingSection} とは異なります。\n\n{@link IShoppingSection} は、オフライン市場における独立した空間情報である「コーナー」を指します。これは、{@link IShoppingSale セール} では同時に分類できません。また、`IShoppingChannelCategory` は、セール内の複数のカテゴリに同時に分類できます。\n\n商品 | セクション (コーナー) | カテゴリ\n---------|------------------|-----------------------------------\n牛肉 | 精肉コーナー | 冷凍食品、肉、好物\nブドウ | 果物コーナー |生鮮食品、好物\n\nまた、`IShoppingChannelCategory` は 1:N の自己再帰関係を持つため、以下の階層構造を表現することができます。これにより、各チャネルは、独自のカテゴリ分類を自由に設定できます。\n\n- 食品 > 肉 > 冷凍\n- 電子機器 > ノートブック > 15 インチ\n- その他 > 財布\n\nさらに、`IShoppingChannelCategory` は、相互にマージするように設計されているため、いつでもカテゴリを編集する負担はありません。" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "階層構造を持つ子カテゴリのリスト", + "description": "階層構造を持つ子カテゴリのリスト。" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "主キー", + "description": "主キー。" + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit" + }, + "minItems": 1, + "title": "親カテゴリの ID", + "description": "親カテゴリの ID。" + } + }, + "required": [ + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units" + ], + "description": "カテゴリの代表名" + }, + "IShoppingChannelCategory": { + "type": "object", + "properties": { + "parent": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + ], + "title": "カテゴリの代表名。\n\n名前は親カテゴリ内で一意である必要があります。親が存在しない場合は、名前は親カテゴリ間のチャネル内で一意である必要があります。", + "description": "レコードの作成時刻" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "レコードの作成時刻。", + "description": "子カテゴリを含む階層カテゴリ情報。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "親カテゴリの ID", + "description": "親カテゴリの ID。" + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "カテゴリの代表名", + "description": "カテゴリの代表名。\n\n名前は親カテゴリ内で一意である必要があります。親が存在しない場合は、名前は親カテゴリ間のチャネル内で一意である必要があります。" + }, + "name": { + "type": "string", + "title": "カテゴリの作成情報。", + "description": "マージ後に保持するターゲット レコード" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "マージ後に保持するターゲット レコード。\n\nマージ プロセスの後、{@link 吸収された} レコードがこの {@link keep} レコードにマージされます。", + "description": "マージ後に {@link keep} に吸収されます" + } + }, + "required": [ + "parent", + "children", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "マージ後に {@link keep} に吸収されます。" + }, + "IShoppingChannelCategory.IHierarchical": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "レコード マージ DTO。\n\n`IRecordMerge` はレコードをマージするための構造です。\n\n`merge` は、複数の {@link IRecordMerge.absorbed} レコードを削除するのではなく、{@link IRecordMerge.keep} に複数の {@link IRecordMerge.absorbed} レコードをマージすることを意味します。\n\nターゲット `table` に外部キー列に一意制約を持つ従属テーブルがある場合、そのような従属テーブルもマージ プロセスを実行します。\n\nもちろん、それらの従属テーブルの下に別の従属テーブルがある場合、それらも再帰的にマージ プロセスを実行します。\n\nこのような再帰的なマージ プロセスは、自己再帰 (ツリー構造) テーブルでも機能します。", + "description": "識別コード" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "識別コード。", + "description": "チャンネル名" + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "チャンネル名。", + "description": "チャンネルの作成情報。" + }, + "name": { + "type": "string", + "title": "チャンネル名", + "description": "チャンネル名。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "チャンネルの更新情報。", + "description": "ページ情報" + } + }, + "required": [ + "children", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "ページ情報。" + }, + "IShoppingChannelCategory.ICreate": { + "type": "object", + "properties": { + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "レコードのリスト", + "description": "レコードのリスト。" + }, + "name": { + "type": "string", + "title": "ページ。\n\nページ区切り情報を含むレコードのコレクション。", + "description": "ページ番号" + } + }, + "required": [ + "parent_id", + "name" + ], + "description": "ページ番号。" + }, + "IRecordMerge": { + "type": "object", + "properties": { + "keep": { + "type": "string", + "format": "uuid", + "title": "1 ページあたりのレコード数の制限", + "description": "1 ページあたりのレコード数の制限。" + }, + "absorbed": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "ページ区切りおよび検索/並べ替えオプションを含むチャンネルの要求。", + "description": "ページ情報" + } + }, + "required": [ + "keep", + "absorbed" + ], + "description": "ページ情報。" + }, + "IShoppingChannel.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "レコードのリスト", + "description": "レコードのリスト。" + }, + "name": { + "type": "string", + "title": "ページ。\n\nページネーション情報を持つレコードのコレクション。", + "description": "階層構造を持つ子カテゴリ" + } + }, + "required": [ + "code", + "name" + ], + "description": "階層構造を持つ子カテゴリ。" + }, + "IShoppingChannel.IUpdate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "主キー", + "description": "主キー。" + } + }, + "required": [ + "name" + ], + "description": "レコードの作成時間" + }, + "IPageIShoppingChannel": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "レコードの作成時間。", + "description": "識別コード" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannel" + }, + "title": "識別コード。", + "description": "チャンネル名" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "チャンネル名。" + }, + "IShoppingChannel.IRequest": { + "type": "object", + "properties": { + "search": { + "$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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "子カテゴリを持つ階層的なチャンネル情報。", + "description": "識別コード" + }, + "limit": { + "type": "integer", + "title": "識別コード。", + "description": "セクションの代表名" + } + }, + "description": "セクションの代表名。" + }, + "IShoppingChannel.IRequest.ISearch": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "IPageIShoppingChannel.IHierarchical": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "セクションの作成情報。", + "description": "セクションの代表名" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + }, + "title": "セクションの代表名。", + "description": "セクションの更新情報。" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "ページ情報" + }, + "IShoppingChannel.IHierarchical": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "ページ情報。", + "description": "レコード一覧" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "レコード一覧。", + "description": "ページ。\n\nページネーション情報を含むレコードのコレクション。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "ページ番号", + "description": "ページ番号。" + }, + "code": { + "type": "string", + "title": "1 ページあたりのレコード数の制限", + "description": "1 ページあたりのレコード数の制限。" + }, + "name": { + "type": "string", + "title": "ページネーションおよび検索/並べ替えオプションを含むセクションのリクエスト。", + "description": "顧客種別判別子" + } + }, + "required": [ + "categories", + "id", + "created_at", + "code", + "name" + ], + "description": "顧客種別判別子。" + }, + "IShoppingSection.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "会員情報", + "description": "会員情報。\n\n顧客が会員として入会した場合。" + }, + "name": { + "type": "string", + "title": "市民情報", + "description": "市民情報。\n\n顧客が実名と携帯電話番号を確認した場合。" + } + }, + "required": [ + "code", + "name" + ], + "description": "主キー" + }, + "IShoppingSection.IUpdate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "主キー。", + "description": "所属チャネル" + } + }, + "required": [ + "name" + ], + "description": "所属チャネル。" + }, + "IPageIShoppingSection": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "外部ユーザー情報", + "description": "外部ユーザー情報。\n\n顧客が外部サービスからアクセスした場合。" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSection" + }, + "title": "接続アドレス", + "description": "接続アドレス。\n\nクライアントの {@link window.location.href} と同じです。" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "リファラーアドレス" + }, + "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": "リファラーアドレス。\n\nクライアントの {@link window.document.referrer} と同じです。", + "description": "接続 IP アドレス" + }, + "limit": { + "type": "integer", + "title": "接続 IP アドレス。", + "description": "接続レコードの作成時刻" + } + }, + "description": "接続レコードの作成時刻。" + }, + "IShoppingSection.IRequest.ISearch": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "IShoppingCustomer.IAuthorized": { + "type": "object", + "properties": { + "setHeaders": { + "type": "object", + "properties": { + "Authorization": { + "type": "string" + } + }, + "required": [ + "Authorization" + ] + }, + "token": { + "$ref": "#/components/schemas/IShoppingCustomer.IToken" + }, + "type": { + "const": "customer", + "title": "市民アクティベーション情報", + "description": "市民アクティベーション情報。" + }, + "member": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMember" + } + ], + "title": "外部サービスの識別コード", + "description": "外部サービスの識別コード。\n\n共通で {@link IShoppingChannel.code} と同じになる場合があります。" + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "外部システムからの外部ユーザーの識別キー", + "description": "外部システムからの外部ユーザーの識別キー。" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "外部システムでの外部ユーザーのニックネーム", + "description": "外部システムでの外部ユーザーのニックネーム。" + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "外部システムからの外部ユーザーのパスワード", + "description": "外部システムからの外部ユーザーのパスワード。\n\nこれは外部サービスによってユーザーに発行されたパスワードであり、実際のユーザー パスワードではありません。ただし、現在の外部システム ユーザーと同じアプリケーションとコードを入力した {@link IShoppingCustomer 顧客} の場合、これは、これを正しい外部システム ユーザーと見なすか、違反と見なすかを決定するためのものです。//|-0-|\\ 外部システムからの外部ユーザーに関する追加情報。//|-0-|\\ 外部ユーザーの作成情報。" + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "携帯電話番号", + "description": "携帯電話番号。" + }, + "href": { + "type": "string", + "format": "uri", + "title": "本名、または同等のニックネーム", + "description": "本名、または同等のニックネーム。" + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "国民認証の作成情報。", + "description": "メンバーを一意に識別するニックネーム" + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "メンバーを一意に識別するニックネーム。", + "description": "国民情報" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "国民情報。", + "description": "メンバーのメールアドレス" + } + }, + "required": [ + "setHeaders", + "token", + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ] + }, + "IShoppingCustomer.IToken": { + "type": "object", + "properties": { + "access": { + "type": "string" + }, + "refresh": { + "type": "string" + }, + "expired_at": { + "type": "string", + "format": "date-time" + }, + "refreshable_until": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "access", + "refresh", + "expired_at", + "refreshable_until" + ] + }, + "IShoppingCustomer.IRefresh": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + }, + "IShoppingCustomer.ICreate": { + "type": "object", + "properties": { + "channel_code": { + "type": "string" + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser.ICreate" + } + ] + }, + "href": { + "type": "string", + "format": "uri" + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ] + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ] + } + }, + "required": [ + "channel_code", + "external_user", + "href", + "referrer" + ] + }, + "IShoppingExternalUser.ICreate": { + "type": "object", + "properties": { + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + ], + "title": "メンバーのメールアドレス。\n\nメンバーが複数のメールアドレスを持っている場合は、そのうちの 1 つを使用します。", + "description": "メンバーアカウントのパスワード" + }, + "application": { + "type": "string", + "title": "メンバーアカウントのパスワード。", + "description": "参加リクエスト情報。" + }, + "uid": { + "type": "string", + "title": "現在のパスワード", + "description": "現在のパスワード。" + }, + "nickname": { + "type": "string", + "title": "変更する新しいパスワード", + "description": "変更する新しいパスワード。" + }, + "password": { + "type": "string", + "title": "パスワード変更に関する情報を要求します。", + "description": "ページ情報" + }, + "data": { + "description": "ページ情報。" + } + }, + "required": [ + "citizen", + "application", + "uid", + "nickname", + "password", + "data" + ], + "description": "レコードのリスト" + }, + "IShoppingCitizen.ICreate": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "レコードのリスト。", + "description": "ページ。\n\nページ区切り情報を含むレコードのコレクション。" + }, + "name": { + "type": "string", + "title": "ページ番号", + "description": "ページ番号。" + } + }, + "required": [ + "mobile", + "name" + ], + "description": "1 ページあたりのレコード数の制限" + }, + "IShoppingMember.IJoin": { + "type": "object", + "properties": { + "nickname": { + "type": "string", + "title": "1 ページあたりのレコード数の制限。", + "description": "ページ情報" + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + ], + "title": "ページ情報。", + "description": "レコードのリスト" + }, + "email": { + "type": "string", + "format": "email", + "title": "レコードのリスト。", + "description": "ページ。\n\nページ区切り情報を含むレコードのコレクション。" + }, + "password": { + "type": "string", + "title": "ページ番号", + "description": "ページ番号。" + } + }, + "required": [ + "nickname", + "citizen", + "email", + "password" + ], + "description": "1 ページあたりのレコード数の制限" + }, + "IShoppingMember.IPasswordChange": { + "type": "object", + "properties": { + "oldbie": { + "type": "string", + "title": "1 ページあたりのレコード数の制限。", + "description": "ページ情報" + }, + "newbie": { + "type": "string", + "title": "ページ情報。", + "description": "レコードの一覧" + } + }, + "required": [ + "oldbie", + "newbie" + ], + "description": "レコードの一覧。" + }, + "IPageIShoppingCouponTicket": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "ページ。\n\nページ区切り情報を持つレコードのコレクション。", + "description": "ページ番号" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + }, + "title": "ページ番号。", + "description": "1 ページあたりのレコード数の制限" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "1 ページあたりのレコード数の制限。" + }, + "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": "ページ情報", + "description": "ページ情報。" + }, + "limit": { + "type": "integer", + "title": "レコードの一覧", + "description": "レコードの一覧。" + } + } + }, + "IShoppingCouponTicket.ICreate": { + "type": "object", + "properties": { + "coupon_id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "coupon_id" + ] + }, + "IPageIShoppingDepositCharge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "ページ。\n\nページ区切り情報を持つレコードのコレクション。", + "description": "ページ番号" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + }, + "title": "ページ番号。", + "description": "1 ページあたりのレコード数の制限" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "1 ページあたりのレコード数の制限。" + }, + "IShoppingDepositCharge": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer" + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDepositChargePublish" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "customer", + "publish", + "created_at", + "value" + ] + }, + "IShoppingDepositChargePublish": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ] + }, + "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": "ページ情報", + "description": "ページ情報。" + }, + "limit": { + "type": "integer", + "title": "レコード一覧", + "description": "レコード一覧。" + } + } + }, + "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": { + "oneOf": [ + { + "const": "published" + }, + { + "const": "pending" + }, + { + "const": "payed" + }, + { + "const": "cancelled" + } + ] + }, + "publish": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "payment": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "required": [ + "state" + ] + }, + "IShoppingDepositCharge.ICreate": { + "type": "object", + "properties": { + "value": { + "type": "number" + } + }, + "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": "ページ。\n\nページネーション情報を含むレコードのコレクション。", + "description": "ページ番号" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDepositHistory" + }, + "title": "ページ番号。", + "description": "1 ページあたりのレコード数の制限" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "1 ページあたりのレコード数の制限。" + }, + "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" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "deposit", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "IShoppingDepositHistory.IRequest": { + "type": "object", + "properties": { + "search": { + "$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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "対象セールの {@link IShoppingSale.id}", + "description": "対象セールの {@link IShoppingSale.id}。" + }, + "limit": { + "type": "integer", + "title": "購入予定の銘柄一覧", + "description": "購入予定の銘柄一覧。" + } + } + }, + "IShoppingDepositHistory.IRequest.ISearch": { + "type": "object", + "properties": { + "deposit": { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "IPageIShoppingMileageHistory": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "購入予定の商品の数量", + "description": "購入する商品の数量。\n\n子 {@link IShoppingSaleUnitStock.IInvert.quantity} 値に何セット掛けるかを示す値。" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileageHistory" + }, + "title": "数量を累積するかどうか", + "description": "数量を累積するかどうか。\n\nこの属性が `false` でなく、同じ在庫とオプションで構成された同じ商品がある場合、数量は既存のものに累積されます。\n\nそれ以外の場合、重複した商品が新しく作成されます。" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "ショッピングカート商品の作成情報。" + }, + "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" + ] + }, + "IShoppingMileageHistory.IRequest": { + "type": "object", + "properties": { + "search": { + "$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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "対象ユニットの {@link IShoppingSaleUnit.id}", + "description": "対象ユニットの {@link IShoppingSaleUnit.id}。" + }, + "limit": { + "type": "integer", + "title": "対象在庫の {@link IShoppingSaleUnitStock.id}", + "description": "対象在庫の {@link IShoppingSaleUnitStock.id}。\n\n{@link choices} プロパティと一致する必要があります。" + } + } + }, + "IShoppingMileageHistory.IRequest.ISearch": { + "type": "object", + "properties": { + "mileage": { + "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "IPageIShoppingCartCommodity": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "各オプションの選択肢の作成情報", + "description": "各オプションの選択肢の作成情報。" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + }, + "title": "購入する在庫の数量", + "description": "購入する在庫の数量。\n\nこの値は、{@link IShoppingCartCommodity.volume} で乗算されます。" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "ショッピング カートの商品在庫の作成情報。\n\nレコードが作成されるとき、対応する構造は、{@link IShoppingSaleSnapshotUnit.IInvert} と{@link IShoppingSaleSnapshotUnitStock.IInvert} になります。" + }, + "IShoppingCartCommodity.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingCartCommodity.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" + }, + { + "const": "-commodity.price" + }, + { + "const": "-commodity.volume" + }, + { + "const": "-commodity.volumed_price" + }, + { + "const": "-commodity.created_at" + }, + { + "const": "+commodity.price" + }, + { + "const": "+commodity.volume" + }, + { + "const": "+commodity.volumed_price" + }, + { + "const": "+commodity.created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "ターゲット オプションの {@link IShoppingSaleUnitOption.id}", + "description": "ターゲット オプションの {@link IShoppingSaleUnitOption.id}。" + }, + "limit": { + "type": "integer", + "title": "ターゲット候補の {@link IShoppingSaleUnitOptionCandidate.id}", + "description": "対象候補の {@link IShoppingSaleUnitOptionCandidate.id}。\n\n対象オプションのタイプが `select` の場合、この属性は `null` ではなく、値を持ちます。" + } + } + }, + "IShoppingCartCommodity.IRequest.ISearch": { + "type": "object", + "properties": { + "min_price": { + "type": "number" + }, + "max_price": { + "type": "number" + }, + "min_volumed_price": { + "type": "number" + }, + "max_volumed_price": { + "type": "number" + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + } + }, + "IShoppingCartCommodity.ICreate": { + "type": "object", + "properties": { + "sale_id": { + "type": "string", + "format": "uuid", + "title": "オプションについて記述された値", + "description": "オプションについて記述された値。\n\n対象オプションのタイプが `select` ではなく、`boolean`、`number`、`string` などのアトミック タイプ値の場合、この属性は `null` ではなく、一致するアトミック値を持ちます。" + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodityStock.ICreate" + }, + "minItems": 1, + "title": "各オプションの選択の作成情報。\n\nレコードが作成されるとき、対応する構造は\n{@link IShoppingSaleUnitStockChoice.IInvert} になります。", + "description": "購入する商品の量" + }, + "volume": { + "type": "integer", + "minimum": 1, + "title": "購入する商品の量。\n\n子の値に何セット乗算されるかを示す値\n{@link IShoppingSaleUnitStock.IInvert.quantity}。", + "description": "ショッピング カート商品の更新情報。" + }, + "accumulate": { + "type": "boolean", + "title": "注文内の商品のリスト", + "description": "注文内の商品のリスト。" + } + }, + "required": [ + "sale_id", + "stocks", + "volume" + ], + "description": "注文装置の作成情報。" + }, + "IShoppingCartCommodityStock.ICreate": { + "type": "object", + "properties": { + "unit_id": { + "type": "string", + "format": "uuid", + "title": "対象商品の {@link IShoppingCartCommodity.id}", + "description": "対象商品の {@link IShoppingCartCommodity.id}。" + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "商品の数量", + "description": "商品の数量。\n\n{@link IShoppingCartCommodityStock.quantity} に掛けられる値。\n\n目的は {@link IShoppingCartCommodity.volume} とまったく同じですが、{@link IShoppingCartCommodity} レコードは支払いまで再利用可能であるため、書き換えられています。" + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodityStockChoice.ICreate" + }, + "title": "商品の作成情報。", + "description": "連絡先の携帯電話番号" + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "連絡先の携帯電話番号。", + "description": "住所の代表者名" + } + }, + "required": [ + "unit_id", + "stock_id", + "choices", + "quantity" + ], + "description": "住所の代表者名。\n\n受取人名の場合もあれば、場所名の場合もあります。" + }, + "IShoppingCartCommodityStockChoice.ICreate": { + "type": "object", + "properties": { + "option_id": { + "type": "string", + "format": "uuid", + "title": "国名", + "description": "国名。" + }, + "candidate_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "県名", + "description": "県名。" + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ], + "title": "市名", + "description": "市名。" + } + }, + "required": [ + "option_id", + "candidate_id", + "value" + ], + "description": "部署名" + }, + "IShoppingCartCommodity.IUpdate": { + "type": "object", + "properties": { + "volume": { + "type": "integer", + "minimum": 1, + "title": "部署名。", + "description": "通り名、建物番号、部屋番号を含む詳細な住所" + } + }, + "required": [ + "volume" + ], + "description": "通り名、建物番号、部屋番号を含む詳細な住所" + }, + "IShoppingCartDiscountable": { + "type": "object", + "properties": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "combinations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.ICombination" + } + } + }, + "required": [ + "deposit", + "mileage", + "combinations" + ] + }, + "IShoppingCartDiscountable.ICombination": { + "type": "object", + "properties": { + "coupons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + }, + "tickets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.IEntry" + } + }, + "amount": { + "type": "number" + } + }, + "required": [ + "coupons", + "tickets", + "entries", + "amount" + ] + }, + "IShoppingCartDiscountable.IEntry": { + "type": "object", + "properties": { + "commodity_id": { + "type": "string", + "format": "uuid" + }, + "pseudo": { + "type": "boolean" + }, + "coupon_id": { + "type": "string", + "format": "uuid" + }, + "amount": { + "type": "number" + } + }, + "required": [ + "commodity_id", + "pseudo", + "coupon_id", + "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": { + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood.ICreate" + }, + "title": "郵便番号", + "description": "郵便番号。" + } + }, + "required": [ + "goods" + ], + "description": "必要に応じて特別な説明。" + }, + "IShoppingOrderGood.ICreate": { + "type": "object", + "properties": { + "commodity_id": { + "type": "string", + "format": "uuid", + "title": "必要に応じて特別な説明を記入します。", + "description": "質問記事が秘密かどうか" + }, + "volume": { + "type": "integer", + "title": "質問記事が秘密かどうか。\n\n秘密記事の場合、作成者顧客と関連販売者のみが詳細内容を閲覧できます。", + "description": "本文の形式" + } + }, + "required": [ + "commodity_id", + "volume" + ], + "description": "本文の形式。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。" + }, + "IShoppingOrderDiscountable": { + "type": "object", + "properties": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "combinations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.ICombination" + } + } + }, + "required": [ + "deposit", + "mileage", + "combinations" + ] + }, + "IShoppingOrderDiscountable.ICombination": { + "type": "object", + "properties": { + "coupons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + }, + "tickets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.IEntry" + } + }, + "amount": { + "type": "number" + } + }, + "required": [ + "coupons", + "tickets", + "entries", + "amount" + ] + }, + "IShoppingOrderDiscountable.IEntry": { + "type": "object", + "properties": { + "good_id": { + "type": "string", + "format": "uuid" + }, + "coupon_id": { + "type": "string", + "format": "uuid" + }, + "amount": { + "type": "number" + } + }, + "required": [ + "good_id", + "coupon_id", + "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": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "coupon_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "deposit", + "mileage", + "coupon_ids" + ] + }, + "IShoppingOrderPublish.ICashCreate": { + "type": "object", + "properties": { + "type": { + "const": "cash" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress.ICreate" + }, + "vendor": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "type", + "address", + "vendor", + "uid" + ] + }, + "IShoppingAddress.ICreate": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "記事のタイトル", + "description": "記事のタイトル。" + }, + "name": { + "type": "string", + "title": "記事の内容本文", + "description": "記事の内容本文。" + }, + "country": { + "type": "string", + "title": "添付ファイルの一覧", + "description": "添付ファイルの一覧。" + }, + "province": { + "type": "string", + "title": "質問の作成情報。", + "description": "本文の形式" + }, + "city": { + "type": "string", + "title": "本文のフォーマット。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。", + "description": "記事のタイトル" + }, + "department": { + "type": "string", + "title": "記事のタイトル。", + "description": "記事のコンテンツ本文" + }, + "possession": { + "type": "string", + "title": "記事のコンテンツ本文。", + "description": "添付ファイルの一覧" + }, + "zip_code": { + "type": "string", + "title": "添付ファイルの一覧。", + "description": "記事の作成情報。" + }, + "special_note": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "対象商品の {@link IShoppingOrderGood.id}", + "description": "対象商品の {@link IShoppingOrderGood.id}。" + } + }, + "required": [ + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ] + }, + "IShoppingOrderPublish.IZeroCreate": { + "type": "object", + "properties": { + "type": { + "const": "zero" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress.ICreate" + } + }, + "required": [ + "type", + "address" + ] + }, + "IShoppingSaleQuestion.ICreate": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "レビューのスコア", + "description": "レビューのスコア。" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "本文のフォーマット", + "description": "本文のフォーマット。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。" + }, + "title": { + "type": "string", + "title": "記事のタイトル", + "description": "記事のタイトル。" + }, + "body": { + "type": "string", + "title": "記事のコンテンツ本文", + "description": "記事のコンテンツ本文。" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "添付ファイル一覧", + "description": "添付ファイル一覧。" + } + }, + "required": [ + "secret", + "format", + "title", + "body", + "files" + ], + "description": "レビューの作成情報。" + }, + "IBbsArticle.ICreate": { + "type": "object", + "properties": { + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "レビューのスコア", + "description": "レビューのスコア。" + }, + "title": { + "type": "string", + "title": "本文のフォーマット", + "description": "本文のフォーマット。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。" + }, + "body": { + "type": "string", + "title": "記事のタイトル", + "description": "記事のタイトル。" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "記事のコンテンツ本文", + "description": "記事のコンテンツ本文。" + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "添付ファイル一覧" + }, + "IShoppingSaleReview.ICreate": { + "type": "object", + "properties": { + "good_id": { + "type": "string", + "format": "uuid", + "title": "添付ファイル一覧。", + "description": "レビューの更新情報。" + }, + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "ページ情報", + "description": "ページ情報。" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "レコード一覧", + "description": "レコード一覧。" + }, + "title": { + "type": "string", + "title": "ページ。\n\nページネーション情報を含むレコードのコレクション。", + "description": "配送の注文リスト" + }, + "body": { + "type": "string", + "title": "配送の注文リスト。", + "description": "主キー" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "主キー。", + "description": "商品を配送した販売者" + } + }, + "required": [ + "good_id", + "score", + "format", + "title", + "body", + "files" + ], + "description": "商品を配送した販売者。" + }, + "IShoppingSaleReview.IUpdate": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "配送の旅程リスト", + "description": "配送の旅程リスト。" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "配送の品目リスト", + "description": "配送の品目リスト。" + }, + "title": { + "type": "string", + "title": "配送の発送業者リスト", + "description": "配送の発送業者リスト。" + }, + "body": { + "type": "string", + "title": "配送の状態", + "description": "配送の状態。" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "レコードの作成時刻", + "description": "レコードの作成時刻。" + } + }, + "required": [ + "score", + "format", + "title", + "body", + "files" + ], + "description": "配送の情報を反転します。" + }, + "IShoppingSeller.IJoin": { + "type": "object", + "properties": {} + }, + "IPageIShoppingDelivery.IInvert": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "主キー", + "description": "主キー。" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDelivery.IInvert" + }, + "title": "注文を申し込んだ顧客", + "description": "注文を申し込んだ顧客。" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "注文に含まれる商品の一覧" + }, + "IShoppingDelivery.IInvert": { + "type": "object", + "properties": { + "orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrder.IInvertFromDelivery" + }, + "minItems": 1, + "title": "注文に含まれる商品の一覧。", + "description": "割引を含む価格情報" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "割引を含む価格情報。", + "description": "注文完了と支払い情報" + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "注文完了と支払い情報。", + "description": "レコードの作成時刻" + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + }, + "title": "レコードの作成時刻。", + "description": "配送からの情報を反転します。" + }, + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece" + }, + "minItems": 1, + "title": "主キー", + "description": "主キー。" + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + }, + "title": "レコードの作成時刻", + "description": "レコードの作成時刻。" + }, + "state": { + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "注文が支払われた時刻", + "description": "注文が支払われた時刻。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "支払いがキャンセルされた時刻", + "description": "支払いがキャンセルされた時刻。" + } + }, + "required": [ + "orders", + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "{@link IShoppingOrderGood 商品} が配達される住所" + }, + "IShoppingOrder.IInvertFromDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "{@link IShoppingOrderGood 商品} が配達される住所。", + "description": "配達からの情報を反転します。" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "ページ番号", + "description": "ページ番号。" + }, + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood" + }, + "minItems": 1, + "title": "1 ページあたりのレコード数の制限", + "description": "1 ページあたりのレコード数の制限。" + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice", + "title": "配達品のリスト", + "description": "配送品目リスト。" + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish.IInvertFromDelivery" + } + ], + "title": "配送の経路リスト", + "description": "配送の経路リスト。\n\nこれは初期データであり、配送作成後に経路データを蓄積することもできます。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "配送の配送業者リスト", + "description": "配送の配送業者リスト。" + } + }, + "required": [ + "id", + "customer", + "goods", + "price", + "publish", + "created_at" + ], + "description": "配送の作成情報。" + }, + "IShoppingOrderPublish.IInvertFromDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "対象注文の {@link IShoppingOrderPublish.id}", + "description": "対象注文の {@link IShoppingOrderPublish.id}。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "対象商品の {@link IShoppingOrderGood.id}", + "description": "対象商品の {@link IShoppingOrderGood.id}。" + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "対象在庫の {@link IShoppingSaleUnitStock.id}", + "description": "対象在庫の {@link IShoppingSaleUnitStock.id}。" + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "在庫の数量", + "description": "在庫の数量。\n\n分割配送を表すための正確な値になります。" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress", + "title": "配送品の作成情報。", + "description": "旅程の種類" + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at", + "address" + ], + "description": "旅程の種類。\n\n- 準備中\n- 製造中\n- 配送中\n- 配送中" + }, + "IShoppingDelivery.IRequest": { + "type": "object", + "properties": { + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-delivery.created_at" + }, + { + "const": "+delivery.created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "旅程のタイトル", + "description": "旅程のタイトル。" + }, + "limit": { + "type": "integer", + "title": "旅程の説明", + "description": "旅程の説明。" + } + } + }, + "IShoppingDelivery.ICreate": { + "type": "object", + "properties": { + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.ICreate" + }, + "minItems": 1, + "title": "旅程の開始時刻", + "description": "旅程の開始時刻。" + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.ICreate" + }, + "title": "旅程の完了時刻", + "description": "旅程の完了時間。" + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper.ICreate" + }, + "title": "配送旅程の作成情報。", + "description": "旅程の完了時間" + } + }, + "required": [ + "pieces", + "journeys", + "shippers" + ], + "description": "旅程の完了時間。" + }, + "IShoppingDeliveryPiece.ICreate": { + "type": "object", + "properties": { + "publish_id": { + "type": "string", + "format": "uuid", + "title": "配送旅程の完了情報。", + "description": "所属セクションの {@link IShoppingSection.code}" + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "所属セクションの {@link IShoppingSection.code}。", + "description": "販売の初期ステータス" + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "セールの初期ステータス。\n\n`null` または `undefined`: 制限なし\n`paused`: {@link ITimestamps.paused_at paused} ステータスで開始\n`suspended`: {@link ITimestamps.suspended_at suspended} ステータスで開始", + "description": "セールの開始時刻" + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "セールの開始時刻。", + "description": "セールの終了時刻" + } + }, + "required": [ + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "セールの終了時刻。\n\nこの値が `null` の場合、セールは永久に継続されます。" + }, + "IShoppingDeliveryJourney.ICreate": { + "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + } + ], + "title": "セールの作成情報。", + "description": "対象チャネルの {@link IShoppingChannel.code}" + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "対象チャネルの {@link IShoppingChannel.code}。", + "description": "対象カテゴリーの {@link IShoppingChannelCategory.id} のリスト" + }, + "description": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "対象カテゴリーの {@link IShoppingChannelCategory.id} のリスト。\n\n空の場合、チャネルのすべてのカテゴリーがセールをリストしていることを意味します。", + "description": "販売するセールの対象チャネル (およびカテゴリー) の作成情報。" + }, + "started_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "オプションのリスト", + "description": "オプションのリスト。" + }, + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "最終在庫のリスト", + "description": "最終在庫のリスト。" + } + }, + "required": [ + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "ユニットの代表名" + }, + "IShoppingDeliveryShipper.ICreate": { + "type": "object", + "properties": { + "company": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "company", + "name", + "mobile" + ] + }, + "IShoppingDeliveryPiece.IRequest": { + "type": "object", + "properties": { + "publish_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "publish_ids" + ] + }, + "IShoppingDeliveryJourney.IComplete": { + "type": "object", + "properties": { + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "ユニットの代表名。", + "description": "ユニットがプライマリかどうか" + } + }, + "required": [ + "completed_at" + ], + "description": "ユニットがプライマリかどうか。\n\nラベル付け値のみです。" + }, + "IShoppingSale.ICreate": { + "type": "object", + "properties": { + "section_code": { + "type": "string", + "title": "ユニットが必須かどうか", + "description": "ユニットが必須かどうか。\n\nユニットが必須の場合、顧客はユニットを選択する必要があります。選択しないと、顧客は購入できません。\n\nたとえば、「Macbook セット」の販売があり、ユニットの 1 つが「本体」である場合、「Macbook セット」を「本体」ユニットなしで購入することは可能ですか? このプロパティは、そのような場合に使用します。" + }, + "status": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "paused" + }, + { + "const": "suspended" + } + ], + "title": "販売ユニットの作成情報。", + "description": "選択可能なオプションのタイプの判別式" + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "選択可能なオプションのタイプの判別式。", + "description": "オプションの名前を表します" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "オプションの名前を表します", + "description": "オプションが可変かどうか" + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.ICreate" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel.ICreate" + } + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ICreate" + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "section_code", + "opened_at", + "closed_at", + "content", + "channels", + "units", + "tags" + ], + "description": "オプションが可変かどうか。\n\n現在のオプションのタイプが「選択」の場合、この属性は、異なる候補値を選択すると最終的な在庫に影響するかどうかを意味します。" + }, + "IShoppingSaleContent.ICreate": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ] + }, + "body": { + "type": "string" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + } + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + } + } + }, + "required": [ + "title", + "format", + "body", + "files", + "thumbnails" + ] + }, + "IShoppingSaleChannel.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "候補値のリスト", + "description": "候補値のリスト。" + }, + "category_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "選択可能なオプションの作成情報。", + "description": "候補値の名前を表します" + } + }, + "required": [ + "code", + "category_ids" + ], + "description": "候補値の名前を表します。" + }, + "IShoppingSaleUnit.ICreate": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption.ICreate" + } + ] + }, + "title": "候補値の作成情報。", + "description": "説明オプションの種類" + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock.ICreate" + }, + "minItems": 1, + "title": "説明オプションの種類。\n\n購入時にどの入力値を書き込むか。", + "description": "オプションの判読可能な名前" + }, + "name": { + "type": "string", + "title": "オプションの判読可能な名前。", + "description": "説明オプションの作成情報。" + }, + "primary": { + "type": "boolean", + "title": "株式の代表名", + "description": "株式の代表名。" + }, + "required": { + "type": "boolean", + "title": "株式の価格", + "description": "株式の価格。" + } + }, + "required": [ + "options", + "stocks", + "name", + "primary", + "required" + ], + "description": "初期在庫数" + }, + "IShoppingSaleUnitSelectableOption.ICreate": { + "type": "object", + "properties": { + "type": { + "const": "select", + "title": "初期在庫数量。", + "description": "選択肢のリスト" + }, + "name": { + "type": "string", + "title": "選択肢のリスト。\n\n各オプションに選択される候補値。", + "description": "在庫の作成情報。" + }, + "variable": { + "type": "boolean", + "title": "{@link IShoppingSaleUnit.ICreate.options} 内の対象オプションのインデックス番号。", + "description": "{@link IShoppingSaleUnitSelectableOption.ICreate.candidates} 内の対象候補のインデックス番号。" + }, + "candidates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate.ICreate" + }, + "minItems": 1, + "title": "在庫選択の作成情報。", + "description": "スナップショットの作成情報。" + } + }, + "required": [ + "type", + "name", + "variable", + "candidates" + ], + "description": "セールの開始時間" + }, + "IShoppingSaleUnitOptionCandidate.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "セールの開始時間。", + "description": "セールの終了時間" + } + }, + "required": [ + "name" + ], + "description": "セールの終了時刻。\n\nこの値が `null` の場合、セールは永久に継続されます。" + }, + "IShoppingSaleUnitDescriptiveOption.ICreate": { + "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "const": "string" + }, + { + "const": "number" + }, + { + "const": "boolean" + } + ], + "title": "セールの開始時刻情報を更新します。", + "description": "主キー" + }, + "name": { + "type": "string", + "title": "主キー。", + "description": "スナップショット レコードの作成時刻" + } + }, + "required": [ + "type", + "name" + ], + "description": "スナップショット レコードの作成時刻。\n\nつまり、記事の作成時刻または更新時刻です。" + }, + "IShoppingSaleUnitStock.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "本文の形式", + "description": "本文の形式。\n\n`html`、`md`、`txt` などの拡張子と同じ意味です。" + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "記事のタイトル", + "description": "記事のタイトル。" + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "記事のコンテンツ本文", + "description": "記事のコンテンツ本文。" + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice.ICreate" + }, + "title": "添付ファイルの一覧", + "description": "添付ファイルの一覧。" + } + }, + "required": [ + "name", + "price", + "quantity", + "choices" + ], + "description": "ページ情報" + }, + "IShoppingSaleUnitStockChoice.ICreate": { + "type": "object", + "properties": { + "option_index": { + "type": "integer", + "description": "ページ情報。" + }, + "candidate_index": { + "type": "integer", + "description": "レコードのリスト" + } + }, + "required": [ + "option_index", + "candidate_index" + ], + "description": "レコードのリスト。" + }, + "IShoppingSaleSnapshot.ICreate": { + "type": "object", + "properties": { + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.ICreate" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel.ICreate" + } + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ICreate" + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "content", + "channels", + "units", + "tags" + ], + "description": "ページ。\n\nページネーション情報を含むレコードのコレクション。" + }, + "IShoppingSale.IUpdateOpeningTime": { + "type": "object", + "properties": { + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "主キー", + "description": "主キー。" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "補充数量", + "description": "補充数量。" + } + }, + "required": [ + "opened_at", + "closed_at" + ], + "description": "レコードの作成時刻" + }, + "IShoppingSaleInquiryAnswer.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "レコードの作成時刻。\n\nつまり、補充される在庫の在庫が補充された時刻です。", + "description": "在庫数量の補充。\n\nご存知ですか? {@link IShoppingSaleUnitStock 在庫} が {@link IShoppingSaleUnitStock.ICreate.quantity 初期在庫数量} を超えて販売された場合、在庫切れのため、その在庫はそれ以上販売できません。その場合、{@link IShoppingSeller} はどのように対処すればよいでしょうか?\n\n在庫が売り切れた場合、販売者はこの `IShoppingSaleUnitStockSupplement` レコードを登録することで在庫レコードを補充できます。そうです、この `IShoppingSaleUnitStockSupplement` は、所属在庫の在庫数量の補充を具体化するエンティティです。" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "ソート可能な列", + "description": "ソート可能な列。" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "ページ番号", + "description": "ページ番号。" + }, + "title": { + "type": "string", + "title": "1 ページあたりのレコード制限", + "description": "1 ページあたりのレコード制限。" + }, + "body": { + "type": "string", + "title": "在庫補充リストのリクエスト情報。", + "description": "補充数量" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "補充数量。", + "description": "補充の作成情報。" + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ] + }, + "IPageIShoppingSaleUnitStockSupplement": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleUnitStockSupplement": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record.\n\nAnother words, the time when inventory of the stock being supplemented." + } + }, + "required": [ + "id", + "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." + }, + "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." + }, + "IShoppingSaleUnitStockSupplement.ICreate": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "title": "Supplemented quantity", + "description": "Supplemented quantity." + } + }, + "required": [ + "value" + ], + "description": "Creation information of the supplement." + } + }, + "securitySchemes": { + "bearer": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } + }, + "tags": [ + { + "name": "Monitor" + }, + { + "name": "Authenticate" + }, + { + "name": "Discount" + }, + { + "name": "Order" + }, + { + "name": "Sale" + }, + { + "name": "Systematic" + }, + { + "name": "Section" + } + ], + "x-samchon-emended": true +} \ No newline at end of file diff --git a/assets/output/shopping.swagger.ko.json b/assets/output/shopping.swagger.ko.json new file mode 100644 index 0000000..e74ff1d --- /dev/null +++ b/assets/output/shopping.swagger.ko.json @@ -0,0 +1,18749 @@ +{ + "openapi": "3.1.0", + "servers": [ + { + "url": "http://localhost:37001", + "description": "로컬 서버" + } + ], + "info": { + "version": "0.5.0", + "title": "@samchon/shopping-backend", + "description": "쇼핑 백엔드", + "license": { + "name": "MIT" + } + }, + "paths": { + "/monitors/health": { + "get": { + "summary": "상태 점검 API", + "description": "상태 점검 API.", + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + } + } + }, + "/monitors/performance": { + "get": { + "summary": "성능 정보 가져오기", + "description": "성능 정보 가져오기.\n\nCPU, 메모리 및 리소스 사용률로 구성된 성능 정보 가져오기.", + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "성능 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPerformance" + } + } + } + } + } + } + }, + "/monitors/system": { + "get": { + "summary": "시스템 정보 가져오기", + "description": "시스템 정보 가져오기.\n\n커밋 및 패키지 정보가 포함된 시스템 정보 가져오기.\n\n이러한 정보는 민감한 정보이므로 응답은 암호화되어야 합니다.", + "tags": [ + "Monitor" + ], + "parameters": [], + "responses": { + "200": { + "description": "시스템 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ISystem" + } + } + } + } + } + } + }, + "/monitors/system/internal_server_error": { + "get": { + "tags": [], + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + } + } + }, + "/monitors/system/uncaught_exception": { + "get": { + "tags": [], + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + } + } + }, + "/shoppings/admins/authenticate": { + "get": { + "summary": "관리자 정보 가져오기", + "description": "관리자 정보를 가져옵니다.\n\n현재 {@link IShoppingCustomer 고객}의 {@link IShoppingAdministrator.IInvert 관리자} 정보를 가져옵니다.\n\n현재 {@link IShoppingMember 멤버}가 관리자가 아닌 경우\n403 금지 예외가 발생합니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "responses": { + "200": { + "description": "관리자 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "관리자로 가입", + "description": "관리자로 가입하세요.\n\n{@link IShoppingAdministrator.IJoin 가입 정보}를 사용하여 관리자로 가입하세요.\n\n이 방법은 {@link IShoppingCustomer 고객}이 이미 {@link IShoppingMember 멤버십}에\n가입한 경우에만 허용됩니다. 그렇지 않은 경우, 그(녀)는\n이전에 이를 달성해야 합니다. 그렇지 않은 경우, 403 금지 예외가 발생합니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "가입 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "관리자 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/authenticate/login": { + "put": { + "summary": "관리자로 로그인", + "description": "관리자로 로그인합니다.\n\n{@link IShoppingAdministrator.ILogin 로그인 정보}로 관리자로 로그인합니다.\n\n이 메서드는\n{@link ShoppingApi.functional.customers.authenticate.login} 함수와 정확히 동일한 효과가 있지만\n반환된 유형이 약간 다릅니다. 유사한 함수는 고객 정보에서 시작하는\n{@link IShoppingCustomer} 유형을 반환하므로\n`customer.member.administrator`를 통해 관리자 정보에 액세스해야 합니다. 이와 대조적으로 이 메서드는 관리자 정보에서 시작하는\n{@link IShoppingAdministrator.IInvert} 유형을 반환하므로\n`administrator.customer`를 통해 고객 정보에 액세스할 수 있습니다.\n\n물론 이 함수를 사용하려면 이전에 관리자로 {@link join}해야 했습니다. 그렇지 않으면 403 forbidden 예외가 발생합니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "로그인 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "관리자 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/coupons/{id}/destroy": { + "delete": { + "tags": [], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/coupons": { + "post": { + "summary": "신규 쿠폰 생성", + "description": "새로운 쿠폰을 만드세요.\n\n주어진 정보로 새로운 {@link IShoppingCoupon 쿠폰}을 만드세요.\n\n그런데, {@link IShoppingSeller 판매자}인 경우, {@link IShoppingCouponSellerCriteria} 또는 {@link IShoppingCouponSaleCriteria} 조건을 포함해야 합니다. 이는\n{@link IShoppingAdministrator 관리자}만이\n시장 전체에서 사용할 수 있는 쿠폰을 만들 수 있기 때문입니다. 판매자는 자신의 {@link IShoppingSale 판매}로 사용 범위를 제한해야 합니다.\n\n물론, 관리자가 시장 전체에서 사용할 수 있는 일반 쿠폰을 만들 계획인 경우, 관리자는 영향을 받을 판매자의 동의를 받아야 합니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "쿠폰 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 쿠폰", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "모든 쿠폰을 나열합니다.", + "description": "모든 쿠폰을 나열합니다.\n\n모든 {@link IShoppingCoupon 쿠폰}을 페이지 번호로 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingCoupon.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한, {@link IShoppingCoupon.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n참고로, {@link IShoppingCustomer 고객}인 경우\n{@link IShoppingCouponTicket ticketable} 쿠폰만 나열됩니다.\n그렇지 않으면 티켓이 없는 쿠폰도 나열됩니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호 매겨진 쿠폰", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/coupons/{id}": { + "delete": { + "summary": "쿠폰 삭제", + "description": "쿠폰 삭제.\n\n주어진 ID로 {@link IShoppingCoupon 쿠폰}을 삭제합니다.\n\n참고로, 대상 쿠폰에서 이미 발행된 {@link IShoppingCouponTicket 티켓}이 있다면\n영향을 받지 않습니다.\n해당 티켓은 만료 시간까지 유효합니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 쿠폰의 {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "쿠폰 정보 가져오기", + "description": "쿠폰 정보를 얻으세요.\n\n{@link IShoppingCoupon 쿠폰} 정보를 얻으세요.\n\n{@link IShoppingCustomer 고객}인 경우,\n{@link IShoppingCouponTicket ticketable} 쿠폰만 이용할 수 있습니다.\n티켓이 없는 쿠폰은 410 gone 오류를 일으킵니다. 그렇지 않은 경우\n{@link IShoppingSeller 판매자} 또는 {@link IShoppingAdministrator 관리자}인 경우,\n티켓이 없는 쿠폰도 이용할 수 있습니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 쿠폰의 {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "description": "쿠폰 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/deposits": { + "patch": { + "summary": "입금 메타데이터 목록 가져오기", + "description": "입금 메타데이터 목록을 가져옵니다.\n\n모든 {@link IShoppingDeposit 입금} 메타데이터 정보를 {@link IPage 페이지 매김}과 함께 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingDeposit.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한\n{@link IShoppingDeposit.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "페이지 매김, 검색 및 정렬에 대한 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 매김된 입금 메타데이터 목록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "새로운 입금 메타데이터 만들기", + "description": "새로운 입금 메타데이터 만들기.\n\n새로운 {@link IShoppingDeposit 입금} 메타데이터 만들기.\n\n이 작업은 입금의 수입/결과에 대한 새로운 출처 이유를 추가하는 것을 의미합니다.\n물론, 새로운 입금 레코드를 만든다고 해서 레코드의 이유에 따라 {@link IShoppingCustomer 고객}의 잔액이 자동으로\n증가하거나 감소하는 것은 아닙니다. 로직은 백엔드 측에서 수동으로 개발해야 합니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "입금 메타데이터 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 입금 메타데이터", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/deposits/{id}": { + "get": { + "summary": "입금 메타데이터 가져오기", + "description": "입금 메타데이터 가져오기.\n\nID와 함께 {@link IShoppingDeposit 입금} 메타데이터 정보를 가져옵니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 입금의 {@link IShoppingDeposit.id }" + } + ], + "responses": { + "200": { + "description": "입금 메타데이터", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "입금 메타데이터 삭제", + "description": "입금 메타데이터 삭제.\n\n{@link IShoppingDeposit 입금} 메타데이터를 삭제하여 더 이상\n{@link IShoppingCustomer 고객}의 잔액이 입금 사유로 인해 증가하거나\n감소하지 않도록 합니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 입금의 {@link IShoppingDeposit.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/deposits/{code}/get": { + "get": { + "summary": "코드로 입금 메타데이터 가져오기", + "description": "코드로 입금 메타데이터 가져오기.\n\n코드로 {@link IShoppingDeposit deposit} 메타데이터 정보 가져오기.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "입금 메타데이터", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeposit" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages": { + "patch": { + "summary": "마일리지 메타데이터 목록 가져오기", + "description": "마일리지 메타데이터 목록을 가져옵니다.\n\n모든 {@link IShoppingMileage 마일리지} 메타데이터 정보를 {@link IPage 페이징}과 함께 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingMileage.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한\n{@link IShoppingMileage.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "페이징, 검색 및 정렬에 대한 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이징된 마일리지 메타데이터 목록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "새 마일리지 메타데이터 만들기", + "description": "새 마일리지 메타데이터 만들기.\n\n새 {@link IShoppingMileage 마일리지} 메타데이터 만들기.\n\n이 작업은 마일리지 수입/결과의 새로운 출처 이유를 추가하는 것을 의미합니다.\n물론, 새 마일리지 레코드를 만든다고 해서 레코드의 이유에 따라 자동으로\n{@link IShoppingCustomer 고객}의 잔액이 증가하거나 감소하는 것은 아닙니다. 로직은 백엔드 측에서 수동으로 개발해야 합니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "마일리지 메타데이터 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 마일리지 메타데이터", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages/{id}": { + "get": { + "summary": "마일리지 메타데이터 가져오기", + "description": "마일리지 메타데이터 가져오기.\n\nID와 함께 {@link IShoppingMileage 마일리지} 메타데이터 정보를 가져옵니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "타겟 마일리지의 {@link IShoppingMileage.id }" + } + ], + "responses": { + "200": { + "description": "마일리지 메타데이터", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "마일리지 메타데이터 삭제", + "description": "마일리지 메타데이터 삭제.\n\n{@link IShoppingMileage 마일리지} 메타데이터를 삭제하여 더 이상\n{@link IShoppingCustomer 고객}의 잔액이 마일리지의 이유로 인해 증가하거나 감소하지 않도록 합니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "타겟 마일리지의 {@link IShoppingMileage.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages/{code}/get": { + "get": { + "summary": "코드로 마일리지 메타데이터 가져오기", + "description": "코드로 마일리지 메타데이터 가져오기.\n\n코드로 {@link IShoppingMileage 마일리지} 메타데이터 정보 가져오기", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "마일리지 메타데이터", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileage" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages/donations": { + "patch": { + "summary": "모든 마일리지 기부 내역 나열", + "description": "모든 마일리지 기부 내역을 나열합니다.\n\n모든 {@link IShoppingMileageDonation 마일리지 기부 내역}을 {@link IPage 페이지 번호}와 함께 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingMileageDonation.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingMileageDonation.IRequest.sort 정렬}을 구성하여\n레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지별 마일리지 기부 내역 목록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileageDonation" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "시민에게 마일리지 기부", + "description": "시민에게 마일리지 기부.\n\n현재 {@link IShoppingAdministrator 관리자}의 특정 {@link IShoppingCitizen 시민}에게 자세한\n이유와 함께 마일리지를 기부합니다.\n\n마일리지 기부는 시민의 잔액과\n현재 쇼핑몰의 운영 이익에 영향을 미치므로 관리자는\n마일리지 기부 이유를 자세히 보관해야 합니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "마일리지 기부 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "마일리지 기부 내역", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/mileages/donations/{id}": { + "get": { + "summary": "마일리지 기부 내역 가져오기", + "description": "마일리지 기부 내역 가져오기.\n\nID가 있는 {@link IShoppingMileageDonation 마일리지 기부 내역} 가져오기", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 내역의 {@link IShoppingMileageDonation.id }" + } + ], + "responses": { + "200": { + "description": "마일리지 기부 내역", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/orders": { + "patch": { + "summary": "모든 주문 나열", + "description": "모든 주문을 나열합니다.\n\n모든 {@link IShoppingOrder 주문}을 페이지 번호로 나열합니다.\n\n원하는 경우 요청 본문에서 {@link IShoppingOrder.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingOrder.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n참고로, {@link IShoppingCustomer 고객}인 경우\n자신의 주문을 나열할 수 있으며 주문이 {@link IShoppingOrderPublish.paid_at paid}되었는지 여부는 중요하지 않습니다.\n\n그렇지 않은 경우 {@link IShoppingSeller 판매자} 또는\n{@link IShoppingAdministrator 관리자}인 경우\n유료 주문만 나열할 수 있습니다. 또한 판매자의 경우 관련 {@link IShoppingOrder.goods 상품}만 주문에 나열됩니다.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "페이지 매김, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 매김된 주문", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/orders/{id}": { + "get": { + "summary": "주문 정보 가져오기", + "description": "주문 정보 가져오기.\n\n자세한 {@link IShoppingOrder 주문} 정보 가져오기.\n\n{@link IShoppingCustomer 고객}이 아니라면 아직 {@link IShoppingOrderPublish.paid_at paid}되지 않은 주문에\n액세스할 수 없습니다. 이 경우\n404 찾을 수 없음 오류가 발생합니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 주문의 {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "주문 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales": { + "patch": { + "summary": "요약된 모든 판매 목록", + "description": "모든 요약된 판매를 나열합니다.\n\n모든 {@link IShoppingSale.ISummary 요약된 판매}를 나열합니다.\n\n보시다시피, 반환된 판매는 자세히 설명되지 않고 요약됩니다. 판매의 자세한 정보를 얻으려면 각 판매에 대해 {@link at} 함수를 사용합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매}에만 액세스할 수 있습니다. 그렇지 않은 경우\n{@link IShoppingCustomer 고객}인 경우 시장에서 운영 중인 판매만 볼 수 있습니다. 미개봉, 마감 또는 중단된 판매는 볼 수 없습니다.\n\n그런데 원하는 경우 요청 본문에서\n{@link IShoppingSale.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingSale.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약된 정보가 있는 페이지 번호 매겨진 판매", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{id}": { + "get": { + "summary": "판매 정보 가져오기", + "description": "판매 정보 가져오기.\n\n자세한 정보가 있는 {@link IShoppingSale 판매}를 가져옵니다.\n\n{@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매}에만 액세스할 수 있습니다. 그렇지 않은 경우\n{@link IShoppingCustomer 고객}인 경우 시장에서 운영 중인\n판매에만 액세스할 수 있습니다. 미개봉, 마감 또는 중단된\n판매에는 액세스할 수 없습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "타겟 세일 {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "description": "자세한 세일 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments": { + "patch": { + "summary": "모든 문의 사항 댓글을 나열합니다.", + "description": "모든 문의 댓글을 나열합니다.\n\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}의 모든 {@link IShoppingSaleInquiryComment 문의 댓글}을 {@link IPage 페이지 매김}과 함께 나열합니다.\n\n원하는 경우 요청 본문에서 {@link IShoppingSaleInquiryComment.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingSaleInquiryComment.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n그런데, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매}의 문의에만 액세스할 수 있습니다. 그렇지 않은 경우 판매의 모든 문의에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 문의의 {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 문의 댓글", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "문의 댓글 작성", + "description": "문의 댓글을 작성하세요.\n\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}에 대한 {@link IShoppingSaleInquiryComment 문의 댓글}을 작성하세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우,\n자신의 {@link IShoppingSale 판매} 문의에만 문의 댓글을 작성할 수 있습니다.\n그렇지 않은 경우 판매의 모든 문의에 문의 댓글을 작성할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의의 {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "문의 댓글 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 문의 댓글", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments/{id}": { + "get": { + "summary": "문의 댓글 정보 가져오기", + "description": "문의 댓글 정보를 받으세요.\n\n{@link IShoppingSaleInquiryComment 문의 댓글}\n{@link IShoppingSaleQuestion 질문} 또는\n{@link IShoppingSaleReview 리뷰}에 대한 자세한 정보를 받으세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매}의 문의 댓글에만 액세스할 수 있습니다.\n그렇지 않은 경우 판매의 모든 문의 댓글에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속 문의사항 {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의 댓글 {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "자세한 문의 댓글 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "문의 댓글 업데이트", + "description": "문의 댓글 업데이트.\n\n{@link IShoppingSaleInquiryComment 문의 댓글}을 특정\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}로 업데이트합니다.\n\n그런데, 이 쇼핑몰의 일반 정책인\n댓글에 대한 댓글 수정은 실제로 기존 콘텐츠를 변경하지 않습니다.\n수정된 콘텐츠는 기존 댓글 기록에 누적되어\n새로운 {@link IShoppingSaleInquiryComment.ISnapshot 스냅샷}으로 기록됩니다. 그리고 이것은\n이 문의 댓글을 읽을 수 있는 모든 사람에게 공개됩니다.\n\n이는 고객이나 판매자가 댓글을 수정하고\n분쟁이 쉽게 발생하는 전자상거래의 특성으로 인해 상황을 조작하는 것을 방지하기 위한 것입니다. 즉, 증거를 보존하기 위한 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 문의의 {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의 댓글의 {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "문의 댓글의 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "문의 댓글의 새로 생성된 스냅샷 레코드", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions": { + "patch": { + "summary": "요약된 모든 질문을 나열", + "description": "요약된 모든 질문을 나열합니다.\n\n{@link IShoppingSale 판매}의 모든 {@link IShoppingSaleQuestion.ISummary 요약된 질문}을 나열합니다.\n\n보시다시피, 반환된 질문은 자세히 설명하지 않고 요약합니다. 질문의 자세한 정보를 얻으려면 각 기사에 대해 {@link adridges} 함수\n또는 {@link at} 함수를 사용합니다.\n\n또한 반환된 질문에는 {@link IShoppingSaleQuestion.ISummary.answer}\n속성이 있는데, 이는 {@link IShoppingSeller}의 공식 답변을 의미합니다.\n또한 반환된 질문에는 다른 특별한 속성인\n{@link IShoppingSaleQuestion.ISummary.secret}이 있는데, 이는 다른\n원칙 속성에 대한 마스킹이 있으며, 이는 관련된 행위자만 질문을 {@link at 읽을 수 있음을 의미합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우, 자신의 {@link IShoppingSale 판매} 질문에만\n액세스할 수 있습니다. 그렇지 않은 경우,\n판매의 모든 질문에 액세스할 수 있습니다.\n\n그런데, 원하는 경우 요청 본문에서\n{@link IShoppingSaleQuestion.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한, {@link IShoppingSaleQuestion.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약된 정보가 있는 페이지 번호 매기기 질문", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions/abridges": { + "patch": { + "summary": "모든 요약된 질문 나열", + "description": "모든 축약된 질문을 나열합니다.\n\n{@link IShoppingSale 판매}의 모든 {@link IShoppingSaleQuestion.IAbridge 축약된 질문}을 나열합니다.\n\n보시다시피, 반환된 질문은 자세한 정보가 아니라 축약된 것입니다. 질문의 자세한 정보를 얻으려면 각 기사에 {@link at} 함수를 사용합니다.\n\n또한 반환된 질문에는 {@link IShoppingSaleQuestion.IAridge.answer}\n속성이 있는데, 이는 {@link IShoppingSeller}의 공식 답변을 의미합니다.\n또한 반환된 질문에는 다른\n원칙 속성에 대한 마스크 처리가 있는 또 다른 특수 속성\n{@link IShoppingSaleQuestion.IAridge.secret}이 있으며, 이는 관련된 행위자만 질문을 {@link at 읽을 수 있음을 의미합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매} 질문에만 액세스할 수 있습니다. 그렇지 않으면\n판매의 모든 질문에 접근할 수 있습니다.\n\n그런데, 원하시면 요청 본문에서\n{@link IShoppingSaleQuestion.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한, {@link IShoppingSaleQuestion.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약 정보가 있는 페이지 번호 매기기 질문", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/questions/{id}": { + "get": { + "summary": "질문 정보 받기", + "description": "질문 정보를 얻으세요.\n\n{@link IShoppingSale 판매}에 대한 자세한 {@link IShoppingSaleQuestion 질문} 정보를 얻으세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우, 자신의 {@link IShoppingSale 판매} 질문에만\n액세스할 수 있습니다. 그렇지 않은 경우\n{@link IShoppingCustomer 고객}인 경우, {@link IShoppingSaleQuestion.secret} 값을 제외한 판매의 모든 질문에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 질문의 {@link IShoppingSaleQuestion.id }" + } + ], + "responses": { + "200": { + "description": "자세한 질문 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments": { + "patch": { + "summary": "모든 문의 사항 댓글을 나열합니다.", + "description": "모든 문의 댓글을 나열합니다.\n\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}의 모든 {@link IShoppingSaleInquiryComment 문의 댓글}을 {@link IPage 페이지 매김}과 함께 나열합니다.\n\n원하는 경우 요청 본문에서 {@link IShoppingSaleInquiryComment.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingSaleInquiryComment.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n그런데, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매}의 문의에만 액세스할 수 있습니다. 그렇지 않은 경우 판매의 모든 문의에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 문의의 {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 문의 댓글", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "문의 댓글 작성", + "description": "문의 댓글을 작성하세요.\n\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}에 대한 {@link IShoppingSaleInquiryComment 문의 댓글}을 작성하세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우,\n자신의 {@link IShoppingSale 판매} 문의에만 문의 댓글을 작성할 수 있습니다.\n그렇지 않은 경우 판매의 모든 문의에 문의 댓글을 작성할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의의 {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "문의 댓글 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 문의 댓글", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { + "get": { + "summary": "문의 댓글 정보 가져오기", + "description": "문의 댓글 정보를 받으세요.\n\n{@link IShoppingSaleInquiryComment 문의 댓글}\n{@link IShoppingSaleQuestion 질문} 또는\n{@link IShoppingSaleReview 리뷰}에 대한 자세한 정보를 받으세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매}의 문의 댓글에만 액세스할 수 있습니다.\n그렇지 않은 경우 판매의 모든 문의 댓글에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속 문의사항 {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의 댓글 {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "자세한 문의 댓글 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "문의 댓글 업데이트", + "description": "문의 댓글 업데이트.\n\n{@link IShoppingSaleInquiryComment 문의 댓글}을 특정\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}로 업데이트합니다.\n\n그런데, 이 쇼핑몰의 일반 정책인\n댓글에 대한 댓글 수정은 실제로 기존 콘텐츠를 변경하지 않습니다.\n수정된 콘텐츠는 기존 댓글 기록에 누적되어\n새로운 {@link IShoppingSaleInquiryComment.ISnapshot 스냅샷}으로 기록됩니다. 그리고 이것은\n이 문의 댓글을 읽을 수 있는 모든 사람에게 공개됩니다.\n\n이는 고객이나 판매자가 댓글을 수정하고\n분쟁이 쉽게 발생하는 전자상거래의 특성으로 인해 상황을 조작하는 것을 방지하기 위한 것입니다. 즉, 증거를 보존하기 위한 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 문의의 {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의 댓글의 {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "문의 댓글의 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "문의 댓글의 새로 생성된 스냅샷 기록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews": { + "patch": { + "summary": "요약된 모든 리뷰를 나열합니다.", + "description": "모든 요약된 리뷰를 나열합니다.\n\n{@link IShoppingSale 판매}의 모든 {@link IShoppingSaleReview.ISummary 요약된 리뷰}를 나열합니다.\n\n보시다시피, 반환된 리뷰는 자세히 설명하지 않고 요약합니다.\n리뷰의 자세한 정보를 얻으려면 각 기사에 대해 {@link adridges} 함수\n또는 {@link at} 함수를 사용합니다.\n\n또한 반환된 리뷰에는 {@link IShoppingSaleReview.ISummary.answer}\n속성이 있는데, 이는 {@link IShoppingSeller}의 공식 답변을 의미합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매} 리뷰에만 액세스할 수 있습니다. 그렇지 않은 경우\n판매의 모든 리뷰에 액세스할 수 있습니다.\n\n그런데, 원하는 경우 요청 본문에서\n{@link IShoppingSaleReview.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한, {@link IShoppingSaleReview.IRequest.sort 정렬 조건}을 구성하여\n레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약된 정보가 있는 페이지 번호 매기기 리뷰", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews/abridges": { + "patch": { + "summary": "모든 요약된 리뷰 나열", + "description": "모든 요약된 리뷰를 나열합니다.\n\n{@link IShoppingSale 판매}의 모든 {@link IShoppingSaleReview.IAbridge 요약된 리뷰}를 나열합니다.\n\n보시다시피, 반환된 리뷰는 자세한 정보가 아닌 요약된 것입니다.\n리뷰의 자세한 정보를 얻으려면 각 기사에 {@link at} 함수를 사용합니다.\n\n또한 반환된 리뷰에는 {@link IShoppingSaleReview.IAridge.answer}\n속성이 있는데, 이는 {@link IShoppingSeller}의 공식 답변을 의미합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매} 리뷰에만 액세스할 수 있습니다. 그렇지 않은 경우\n판매의 모든 리뷰에 액세스할 수 있습니다.\n\n그런데, 원하는 경우 요청 본문에서\n{@link IShoppingSaleReview.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한, {@link IShoppingSaleReview.IRequest.sort 정렬 조건}을 구성하여\n레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "Belonged sale의 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약 정보가 포함된 페이지 번호 매기기 리뷰", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/reviews/{id}": { + "get": { + "summary": "리뷰 정보 받기", + "description": "리뷰 정보를 얻으세요.\n\n{@link IShoppingSaleReview 리뷰}에서 {@link IShoppingSale 세일}에 대한 자세한 정보를 얻으세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우, 자신의 {@link IShoppingSale 세일} 리뷰에만 액세스할 수 있습니다. 그렇지 않은 경우\n{@link IShoppingCustomer 고객}인 경우, 모든 세일\n리뷰에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 세일의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 리뷰의 {@link IShoppingSaleReview.id }" + } + ], + "responses": { + "200": { + "description": "자세한 리뷰 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/snapshots": { + "patch": { + "summary": "모든 스냅샷 나열", + "description": "모든 스냅샷을 나열합니다.\n\n{@link IShoppingSeller 판매자}가\n{@link IShoppingSale 판매}를 업데이트할 때마다 판매 기록은 업데이트되지 않지만 새로운\n{@link IShoppingSaleSnapshot 스냅샷} 레코드가 생성되어 판매 내역의\n무결성을 유지합니다. 이 API 함수는 이러한\n스냅샷 레코드를 나열하기 위한 것입니다.\n\n또한 반환 유형에서 볼 수 있듯이 반환된 스냅샷은\n자세한 정보가 아닌 요약되어 있습니다. 스냅샷의 자세한 정보를 얻으려면\n각 스냅샷에 대해 {@link at} 또는 {@link flipo} 함수를 사용합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매}의\n스냅샷에만 액세스할 수 있습니다. 그렇지 않은 경우 판매가\n종료되거나 중단되었더라도\n모든 판매 스냅샷에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 세일 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약 정보가 있는 페이지 번호 스냅샷", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/snapshots/{id}": { + "get": { + "summary": "스냅샷 정보 가져오기", + "description": "스냅샷 정보를 가져옵니다.\n\n자세한 정보가 포함된 {@link IShoppingSaleSnapshot 스냅샷}을 가져옵니다.\n\n반환 유형에서 볼 수 있듯이 반환된 스냅샷에는 {@link IShoppingSale 판매} 정보가 포함되지 않습니다. 판매 정보를 가져오려면\n대신 {@link flip} 함수를 사용하세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매} 스냅샷에만 액세스할 수 있습니다. 그렇지 않은 경우\n판매가 종료되거나 중단되었더라도 판매의 모든 스냅샷에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 스냅샷의 {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "스냅샷의 자세한 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/sales/{saleId}/snapshots/{id}/flip": { + "get": { + "summary": "뒤집힌 스냅샷 정보 가져오기", + "description": "뒤집힌 스냅샷 정보를 가져옵니다.\n\n뒤집힌 스냅샷의 {@link IShoppingSale 판매} 정보를 가져옵니다.\n\n반환 유형에서 볼 수 있듯이 이 함수는\n{@link IShoppingSale 판매} 정보를 반환합니다. 그런데 판매 정보는\n최신 정보가 아니라 스냅샷 측의 뒤집힌 정보입니다.\n\n또한, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매}의 스냅샷에만 액세스할 수 있습니다. 그렇지 않은 경우 판매가\n종료되거나 중단되었더라도 판매의 모든 스냅샷에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 스냅샷의 {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "스냅샷 측면의 자세한 판매 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories": { + "post": { + "summary": "새 카테고리 만들기", + "description": "새 카테고리 만들기.\n\n주어진 이름으로 {@link IShoppingChannel 채널}의 새 {@link IShoppingChannelCategory 카테고리}를 만듭니다. 필요한 경우 ID로 부모 카테고리를 지정할 수 있습니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "소유한 채널의 {@link IShoppingChannel.code }" + } + ], + "requestBody": { + "description": "카테고리의 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 카테고리", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "모든 카테고리를 자식 레코드와 함께 나열합니다.", + "description": "모든 카테고리를 자식 레코드와 함께 나열합니다.\n\n{@link IShoppingChannelCategory.IHierarchical 카테고리}를 페이지 번호와 함께 나열합니다. 반환된 카테고리에는 자식 카테고리도 포함됩니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingChannelCategory.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingChannelCategory.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "소속 채널의 {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "자식 카테고리가 있는 페이지가 매겨진 카테고리", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}": { + "put": { + "summary": "카테고리 업데이트", + "description": "카테고리 업데이트.\n\n{@link IShoppingChannelCategory 카테고리}의 이름을 업데이트합니다. 필요한 경우\nID로 부모 카테고리를 변경할 수 있습니다. 물론 부모 카테고리에서 분리하여\n루트 카테고리가 되는 것도 가능합니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "소속 채널의 {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 카테고리의 {@link IShoppingChannelCategory.id }" + } + ], + "requestBody": { + "description": "카테고리 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "카테고리 정보 가져오기", + "description": "카테고리 정보 가져오기.\n\n자세한 {@link IShoppingChannelCategory 카테고리} 정보 가져오기.\n\n반환된 카테고리에는 계층적 자식 카테고리가 포함되고\n재귀적 부모 카테고리도 포함됩니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "소속 채널의 {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 카테고리의 {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "자세한 카테고리 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories/merge": { + "delete": { + "summary": "여러 카테고리를 하나로 병합", + "description": "여러 카테고리를 하나로 병합합니다.\n\n이 쇼핑몰 시스템에서는\n{@link IShoppingChannelCategory 카테고리}를 삭제할 수 없습니다. 이는\n{@link IShoppingSale sales}와 같은 다른 모든 핵심 엔터티에 영향을 미치는 체계적인\n엔터티이기 때문입니다. 삭제하는 대신 여러\n카테고리를 하나로 병합할 수 있습니다.\n\n다른 카테고리를 흡수할 카테고리를 지정하면 다른 모든 카테고리가\n지정된 카테고리에 병합됩니다. 또한\n카테고리의 하위 엔터티도 병합되고 해당 참조도 연쇄적으로 병합됩니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "소속 채널의 {@link IShoppingChannel.code }" + } + ], + "requestBody": { + "description": "카테고리 정보 병합", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}/invert": { + "get": { + "summary": "역전된 카테고리 정보 가져오기", + "description": "역전된 카테고리 정보 가져오기.\n\n역전된 {@link IShoppingChannelCategory.IInvert 카테고리} 정보 가져오기.\n\n반환된 카테고리에는 재귀적 부모 카테고리가 포함되지만\n계층적 자식 카테고리는 포함되지 않습니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "소속 채널의 {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 카테고리의 {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "자세한 카테고리 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels": { + "post": { + "summary": "새 채널 만들기", + "description": "새 채널을 만듭니다.\n\n주어진 코드와 이름으로 새 {@link IShoppingChannel 채널}을 만듭니다.\n\n채널은 개별 시장을 의미하므로\n{@link IShoppingAdministrator 관리자}는 새 애플리케이션이 등록될 때만 이 작업을 수행해야 합니다.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "채널의 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 채널", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "모든 채널 나열", + "description": "모든 채널을 나열합니다.\n\n모든 {@link IShoppingChannel 채널}을 페이징과 함께 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingChannel.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한 {@link IShoppingChannel.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "페이징, 검색 및 정렬에 대한 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이징된 채널", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{id}": { + "put": { + "summary": "채널 업데이트", + "description": "채널 업데이트.\n\n{@link IShoppingChannel 채널}의 이름을 업데이트합니다.\n\n채널의 코드를 변경할 수 없다는 점에 유의하세요. 강제로 변경하려면 {@link create}하여 새 채널을 만들고 {@link merge}합니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 채널의 {@link IShoppingChannel.code }" + } + ], + "requestBody": { + "description": "채널 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "채널 정보 가져오기", + "description": "채널 정보를 가져옵니다.\n\n자세한 {@link IShoppingChannel.IHierarchical 채널} 정보를 가져옵니다.\n\n반환된 채널 인스턴스에는 중첩된\n{@link IShoppingChannelCategory.IHierarchical 계층적 범주}\n정보도 포함됩니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 채널의 {@link IShoppingChannel.id }" + } + ], + "responses": { + "200": { + "description": "자세한 채널 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/merge": { + "delete": { + "summary": "여러 채널을 하나로 병합", + "description": "여러 채널을 하나로 병합합니다.\n\n이 쇼핑몰 시스템에서는\n{@link IShoppingChannel 채널}을 삭제할 수 없습니다. 왜냐하면 그것은 고객, 회원, 판매와 같은 다른 모든 핵심 엔터티에 영향을 미치는 체계적인 엔터티이기 때문입니다.\n삭제하는 대신 여러 채널을 하나로 병합할 수 있습니다.\n\n다른 채널을 흡수할 채널을 지정하면 다른 모든 채널이\n지정된 채널에 병합됩니다. 또한 채널의 하위 엔터티도 병합되고 해당 참조도 계단식으로 병합됩니다.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "병합 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/hierarchical": { + "patch": { + "summary": "중첩된 카테고리가 있는 모든 채널 나열", + "description": "중첩된 카테고리가 있는 모든 채널을 나열합니다.\n\n{@link IShoppingChannel.IHierarchical 채널}을 {@link IPage 페이지 매김}으로 나열합니다. 반환된 채널에는 중첩된 계층적\n{@link IShoppingChannelCategory.IHierarchical 카테고리}가 포함됩니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingChannel.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingChannel.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "페이지 매김, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "중첩된 카테고리가 있는 페이지 매김 채널", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/channels/{code}/get": { + "get": { + "summary": "코드로 채널 정보 가져오기", + "description": "코드로 채널 정보 가져오기.\n\n코드로 자세한 {@link IShoppingChannel.IHierarchical 채널} 정보 가져오기\n\n\n반환된 채널 인스턴스에는 중첩된\n{@link IShoppingChannelCategory.IHierarchical 계층적 카테고리}\n정보도 포함됩니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 채널의 {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "자세한 채널 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/sections": { + "post": { + "summary": "새 섹션 만들기", + "description": "새 섹션을 만듭니다.\n\n주어진 코드와 이름으로 새 {@link IShoppingSection 섹션}을 만듭니다.\n\n섹션은 다른 섹션과 다른 유형의 제품을 처리하는 시장의 공간적 단위를 의미하므로 {@link IShoppingAdministrator 관리자}는 새 섹션이 필요할 때만 이 작업을 수행해야 합니다.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "섹션 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 섹션", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "모든 섹션 나열", + "description": "모든 섹션을 나열합니다.\n\n모든 {@link IShoppingSection 섹션}을 페이지 번호로 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingSection.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한 {@link IShoppingSection.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Section" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 섹션", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/sections/{id}": { + "put": { + "summary": "섹션 업데이트", + "description": "섹션 업데이트.\n\n{@link IShoppingSection 섹션}의 이름을 업데이트합니다.\n\n섹션의 코드를 변경할 수 없다는 점에 유의하세요. 강제로 변경하려면 {@link create}하여 새 섹션을 만들고 {@link merge}합니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 섹션의 {@link IShoppingSection.code }" + } + ], + "requestBody": { + "description": "섹션 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "섹션 정보 가져오기", + "description": "섹션 정보 가져오기.\n\n자세한 {@link IShoppingSection 섹션} 정보 가져오기", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 섹션의 {@link IShoppingSection.id }" + } + ], + "responses": { + "200": { + "description": "자세한 섹션 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/sections/merge": { + "delete": { + "summary": "여러 섹션을 하나로 병합", + "description": "여러 섹션을 하나로 병합합니다.\n\n이 쇼핑몰 시스템에서는\n{@link IShoppingSection 섹션}을 삭제할 수 없습니다. 이는 {@link IShoppingSale sales}와 같은 다른 모든 핵심 엔터티에 영향을 미치는 체계적인 엔터티이기 때문입니다.\n삭제하는 대신 여러 섹션을 하나로 병합할 수 있습니다.\n\n다른 섹션을 흡수할 섹션을 지정하면 다른 모든 섹션이\n지정된 섹션으로 병합됩니다. 또한\n섹션의 하위 엔터티도 병합되고 해당 참조도 계단식으로 병합됩니다.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "입력 병합 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IRecordMerge" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/admins/systematic/sections/{code}/get": { + "get": { + "summary": "코드로 섹션 정보 가져오기", + "description": "코드로 섹션 정보 가져오기.\n\n코드로 자세한 {@link IShoppingSection section} 정보 가져오기", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 섹션의 {@link IShoppingSection.code }" + } + ], + "responses": { + "200": { + "description": "자세한 섹션 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/refresh": { + "patch": { + "summary": "인증 토큰 새로 고침", + "description": "인증 토큰을 새로 고칩니다.\n\n사전 발급된\n{@link IShoppingCustomer.IToken.refresh 새로 고침} 토큰을 사용하여\n{@link IShoppingCustomer 고객}의 새 {@link IShoppingCustomer.IToken.access 액세스 토큰}을 만듭니다.\n\n이 기능은\n{@link IShoppingCustomer.IToken.refreshable_until} 값까지 사용할 수 있습니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "토큰 새로 고침.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IRefresh" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "새 토큰을 사용한 고객 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IAuthorized" + } + } + } + } + } + } + }, + "/shoppings/customers/authenticate": { + "get": { + "summary": "현재 고객 정보 가져오기", + "description": "현재 고객 정보를 가져옵니다.\n\n{@link IShoppingCustomer 고객}의 현재 정보를\n{@link IShoppingCustomer.IToken.access 액세스 토큰}에서 가져옵니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "responses": { + "200": { + "description": "현재 고객 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "새 고객 레코드 만들기", + "description": "새로운 고객 레코드를 만듭니다.\n\n이 쇼핑몰 시스템은 이 시장에 참여하는 모든 사람을\n\"고객\"으로 정의합니다. 그리고 고객 레코드는 개별\n{@link IShoppingCitizen people}에 따라 보관되지 않고 연결 단위에 따라 보관됩니다.\n따라서 같은 사람이더라도 연결이 이루어질 때마다 새로운 {@link IShoppingCustomer}\n레코드가 만들어집니다.\n\n따라서 이 서비스에 액세스하는 모든 클라이언트 애플리케이션은 먼저\n이 함수를 호출하고 고객의 유입 경로를 서버에 보고하고 {@link IShoppingCustomer.IToken.access 액세스 토큰}을 만들어야 합니다. 이\n함수 호출을 건너뛰면 다른 모든 API 함수가 금지됩니다.\n예외는 없습니다. {@link IShoppingMember 회원 계정}으로 시민권을 {@link 활성화}하거나\n{@link 로그인}하려는 경우에도 마찬가지입니다.\n자신을 인증하거나 로그인하기 전에 먼저 이 함수를 호출해야 합니다.\n이는 {@link IShoppingAdministrator 관리자} 또는\n{@link IShoppingSeller 판매자}가 로그인할 때도 적용됩니다.\n\n또한 인증 토큰에는\n{@link IShoppingCustomer.IToken.expired_at 만료 시간}이 있으며\n영구적으로 사용할 수 없습니다. 참고로 인증 토큰은\n3시간 동안 유효하며 3시간 후에도 고객 인증을 유지하려면\n{@link Refresh} 함수를 호출해야 합니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "고객 생성 정보.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "토큰으로 고객 정보를 생성했습니다.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer.IAuthorized" + } + } + } + } + } + } + }, + "/shoppings/customers/authenticate/join": { + "post": { + "summary": "회원가입", + "description": "멤버십에 가입하세요.\n\n{@link IShoppingCustomer Customer}는 현재 쇼핑몰 시스템의\n{@link IShoppingMember 멤버십}에 가입합니다.\n\n{@link IShoppingCitizen 시민권}\n{@link activate 활성화}도 수행했다면, 이제부터 로그인할 때마다 {@link activate}\n함수 호출을 건너뛸 수 있습니다. 또한, 해당 사람이 {@link activate} 및 {@link external}\n함수 호출로\n{@link IShoppingOrder 구매}를 했다면, 주문 내역에도 액세스할 수 있습니다. 즉, 멤버십 등록 전의 활동 세부 정보도\n연속적으로 액세스할 수 있습니다.\n\n참고로, {@link create} 함수에서 설명한 대로, 이 `join` 함수를 호출하기 전에 먼저 {@link create} 함수를 호출하여 고객 레코드와 토큰을 만들어야 합니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "회원님의 가입정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "가입하신 고객정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/login": { + "put": { + "summary": "회원가입로그인", + "description": "회원 로그인.\n\n{@link IShoppingCustomer 고객}은 이메일과 비밀번호로 자신의\n{@link IShoppingMember 회원} 계정으로 로그인합니다.\n\n{@link IShoppingMember 회원}이 이전에\n{@link activate 시민권 활성화}를 수행한 경우, {@link IShoppingCustomer.citizen}\n값이 그에 따라 채워집니다. 그리고 회원이 {@link IShoppingAdministrator 관리자} 또는\n{@link IShoppingSeller 판매자}로\n가입한 경우, 관련 정보도 그에 따라 입력됩니다.\n\n참고로, {@link create} 함수에 설명된 대로, 이 `login` 함수를 호출하기 전에 먼저 {@link create} 함수를 호출하여 고객 레코드와 토큰을 만들어야 합니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "로그인 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "로그인 고객 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/activate": { + "post": { + "summary": "시민권 활성화", + "description": "시민권 활성화.\n\n{@link IShoppingCustomer 고객}은 휴대전화 번호와 실명으로 자신의\n{@link IShoppingCitizen 시민권}을 활성화합니다.\n\n고객이 이미\n{@link IShoppingMember 멤버십}에 {@link join 가입}한 경우, 지금부터 로그인할 때마다 시민권\n{@link activation} 함수 호출을 건너뛸 수 있습니다.\n물론 이러한 스토리는 {@link external} 함수에도 동일합니다.\n\n참고로, {@link create} 함수에서 설명한 대로, 이 `activate` 함수를 호출하기 전에 먼저 {@link create} 함수를 호출하여 고객 레코드와 토큰을 만들어야 합니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "시민권 활성화 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "활성화된 고객 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/external": { + "post": { + "summary": "외부 사용자 정보 등록", + "description": "외부 사용자 정보 등록.\n\n{@link IShoppingCustomer Customer}는 다른 서비스에서 자신의\n{@link IShoppingExternalUser 외부 사용자} 정보를 등록합니다.\n\n{@link join membership joining} 함수와 비슷한 효과가 있습니다.\n따라서 {@link IShoppingCitizen citizenship}\n{@link activate activation}도 수행했다면 이제부터 같은 정보로 이 `외부` 함수를 호출할 때마다 {@link activate}\n함수 호출을 건너뛸 수 있습니다. 또한 해당 사람이 {@link activate} 및 {@link join}\n함수 호출로\n{@link IShoppingOrder를 구매}했다면 주문 내역에도 액세스할 수 있습니다. 즉, 외부 서버 등록 이전의 활동 세부 정보도\n연속적으로 액세스할 수 있습니다.\n\n참고로, {@link create} 함수에서 설명한 대로 이 `외부` 함수를 호출하기 전에 먼저 {@link create} 함수를 호출하여 고객 레코드와 토큰을 만들어야 합니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "외부 사용자의 정보 등록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingExternalUser.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "외부 사용자가 등록한 고객 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCustomer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/authenticate/password/change": { + "put": { + "summary": "비밀번호 변경", + "description": "비밀번호 변경.\n\n{@link IShoppingMember 회원}의 비밀번호를 현재 비밀번호로 변경합니다.\n\n현재 비밀번호가 필요한 이유는 보안 때문입니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "새 비밀번호와 현재 비밀번호", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.IPasswordChange" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/coupons": { + "patch": { + "summary": "모든 쿠폰을 나열합니다.", + "description": "모든 쿠폰을 나열합니다.\n\n모든 {@link IShoppingCoupon 쿠폰}을 페이지 번호로 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingCoupon.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한, {@link IShoppingCoupon.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n참고로, {@link IShoppingCustomer 고객}인 경우\n{@link IShoppingCouponTicket ticketable} 쿠폰만 나열됩니다.\n그렇지 않으면 티켓이 없는 쿠폰도 나열됩니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호 매기기 쿠폰", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/coupons/{id}": { + "get": { + "summary": "쿠폰 정보 가져오기", + "description": "쿠폰 정보 가져오기.\n\n{@link IShoppingCoupon 쿠폰} 정보 가져오기.\n\n{@link IShoppingCustomer 고객}인 경우\n{@link IShoppingCouponTicket ticketable} 쿠폰만 액세스할 수 있습니다. 티켓이 없는 쿠폰은 410 gone 오류를 일으킵니다. 그렇지 않은 경우\n{@link IShoppingSeller 판매자} 또는 {@link IShoppingAdministrator 관리자}인 경우\n티켓이 없는 쿠폰도 액세스할 수 있습니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "타겟 쿠폰 {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "description": "쿠폰 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/coupons/tickets": { + "patch": { + "summary": "모든 쿠폰 티켓을 나열합니다.", + "description": "모든 쿠폰 티켓을 나열합니다.\n\n{@link IPage 페이지 번호}가 있는\n{@link IShoppingCustomer 고객}의 모든 {@link IShoppingCouponTicket 쿠폰 티켓}을 나열합니다.\n\n참고로, 쿠폰 티켓은 고객이 {@link IShoppingCoupon 쿠폰}을\n사용했음을 의미합니다. 대상 쿠폰에 만료일 또는\n날짜가 있는 경우 쿠폰 티켓에도\n{@link IShoppingCouponTicket.expired_at 만료 시간}이 있으며, 이러한 만료된\n티켓은 나열되지 않습니다. 마찬가지로 {@link IShoppingOrder 주문}에 대해\n{@link IShoppingCouponTicketPayment 지불}하는 데 사용된 티켓도 나열되지 않습니다.\n\n또한 요청 본문에서\n{@link IShoppingCouponTicket.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한, {@link IShoppingCouponTicket.IRequest.sort sort condition}을 구성하여 레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호 매기기 쿠폰 티켓", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCouponTicket" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "새 쿠폰 티켓 만들기", + "description": "새 쿠폰 티켓을 만듭니다.\n\n특정 {@link IShoppingCoupon 쿠폰}의 새 {@link IShoppingCouponTicket 쿠폰 티켓}을 {@link IShoppingCustomer 고객}을 위해 만듭니다.\n\n그런데, 타겟 쿠폰이\n{@link IShoppingCoupon.expired_at 만료됨} 또는\n{@link IShoppingCoupon.IInventory.volume 재고 없음} 또는\n{@link IShoppingCoupon.IInventory.volume_per_citizen 소진됨}인 경우,\n410 gone 예외가 발생합니다.\n\n또한 타겟 쿠폰에서 새 쿠폰 티켓을 만드는 데 성공하더라도 쿠폰에 만료일 또는 날짜가 있는 경우 새로 만든 티켓에도 {@link IShoppingCouponTicket.expired_at 만료 시간}이 있으며\n만료 시간 이후에는 비활성화됩니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "쿠폰 티켓 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 쿠폰 티켓", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/coupons/tickets/{id}": { + "get": { + "summary": "쿠폰 티켓 받기", + "description": "쿠폰 티켓 받기.\n\nID로 {@link IShoppingCouponTicket 쿠폰 티켓} 정보를 받습니다.\n\n그런데 대상 쿠폰 티켓이\n{@link IShoppingCouponTicket.expired_at 만료됨}되었거나 {@link IShoppingOrder 주문}에 대해\n{@link IShoppingCouponTicketPayment 지불}하는 데 사용된 경우\n410 gone 예외가 발생합니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 쿠폰 티켓의 {@link IShoppingCouponTicket.id }" + } + ], + "responses": { + "200": { + "description": "쿠폰 티켓 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/charges": { + "patch": { + "summary": "모든 입금 요금을 나열합니다", + "description": "모든 입금 요금을 나열합니다.\n\n{@link IPage 페이지 매김}을 사용하여\n{@link IShoppingCustomer 고객}의 모든 {@link IShoppingDepositCharge 입금 요금}을 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingDepositCharge.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingDepositCharge.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호 매겨진 입금 수수료", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDepositCharge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "새로운 입금 수수료 신청서 작성", + "description": "새로운 입금 수수료 신청서를 만듭니다.\n\n새로운 {@link IShoppingDepositCharge 입금 수수료 신청서}를 만듭니다.\n\n그런데, 이 기능은 입금 수수료를 완료하는 것을 의미하지 않고\n단지 {@link IShoppingCustomer 고객}이 입금 수수료를 적용하는 것을 의미합니다.\n입금 수수료는 고객이\n{@link IShoppingDepositChargePublish.publish pay} 입금 수수료를 지불할 때에만 완료됩니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "입금 수수료 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 입금 수수료", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/charges/{id}": { + "get": { + "summary": "입금 수수료 정보 가져오기", + "description": "보증금 요금 정보를 받으세요.\n\n{@link IShoppingDepositCharge 보증금 요금} 정보를 받으세요.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 보증금 요금의 {@link IShoppingDepositCharge.id }" + } + ], + "responses": { + "200": { + "description": "보증금 요금 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "보증금 요금 신청 업데이트", + "description": "보증금 청구 신청을 업데이트합니다.\n\n{@link IShoppingCustomer}가 적용한 {@link IShoppingDepositCharge 보증금 청구 신청}의 값을 업데이트합니다.\n\n청구가 {@link IShoppingDepositChargePublish published}된 경우,\n보증금 청구를 업데이트할 수 없습니다. 410 gone 예외만 발생합니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 보증금 청구의 {@link IShoppingDepositCharge.id }" + } + ], + "requestBody": { + "description": "변경할 값", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositCharge.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "보증금 청구 신청 지우기", + "description": "보증금 청구 신청을 지웁니다.\n\n{@link IShoppingCustomer}가 적용한 {@link IShoppingDepositCharge 보증금 청구 신청}을 지웁니다.\n\n청구가 {@link IShoppingDepositChargePublish 게시된} 경우,\n보증금 청구를 지울 수 없습니다. 이 경우 {@link publish.cancel} 함수를 호출하여\n지불을 취소해야 합니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 보증금 청구의 {@link IShoppingDepositCharge.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/charges/{chargeId}/publish/able": { + "get": { + "summary": "게시 가능 확인", + "description": "게시 가능 여부를 확인합니다.\n\n{@link IShoppingDepositCharge 요금}이 게시 가능한지 여부를 테스트합니다.\n\n요금이 아직 {@link IShoppingDepositChargePublish 게시되지 않았고}\n삭제되지 않은 경우 요금을 게시할 수 있습니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "chargeId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 요금의 {@link IShoppingDepositCharge.id }" + } + ], + "responses": { + "200": { + "description": "요금이 게시 가능한지 여부", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/charges/{chargeId}/publish": { + "post": { + "summary": "요금 게시", + "description": "요금을 게시합니다.\n\n{@link IShoppingDepositChargePublish Publish} a\n{@link IShoppingDepositCharge 요금}은\n{@link IShoppingCustomer}가 결제 공급업체 시스템에서 얻은 결제 정보를 사용하여 적용했습니다.\n\n또한 결제 시간은 게시 시간과 다를 수 있습니다. 예를 들어\n결제 방법이 수동 은행 계좌 이체인 경우 고객이 실제로 돈을 이체할 때까지\n결제가 지연됩니다. 이 경우 {@link IShoppingDepositChargePublish.paid_at}은 `null` 값이 되므로\n이 게시 함수를 호출한 후 확인해야 합니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "chargeId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 요금 {@link IShoppingDepositCharge.id }" + } + ], + "requestBody": { + "description": "게시물 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositChargePublish.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 게시물", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositChargePublish" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/histories": { + "patch": { + "summary": "모든 입금 내역 나열", + "description": "모든 입금 내역을 나열합니다.\n\n{@link IPage 페이지 매김}을 사용하여\n{@link IShoppingCustomer 고객}의 모든 {@link IShoppingDepositHistory 입금 내역}을 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingDepositHistory.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingDepositHistory.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositHistory.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호 매겨진 입금 내역", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDepositHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/histories/{id}": { + "get": { + "summary": "입금 내역 정보 가져오기", + "description": "입금 내역 정보 가져오기.\n\n{@link IShoppingDepositHistory 입금 내역} 정보 가져오기.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true + } + ], + "responses": { + "200": { + "description": "입금 내역 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDepositHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/deposits/histories/balance": { + "get": { + "summary": "입금 잔액 가져오기", + "description": "입금 잔액 가져오기.\n\n{@link IShoppingCustomer 고객}의 현재 입금 잔액 가져오기.", + "tags": [ + "Discount" + ], + "parameters": [], + "responses": { + "200": { + "description": "입금 잔액", + "content": { + "application/json": { + "schema": { + "type": "number" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/mileages/histories": { + "patch": { + "summary": "모든 마일리지 내역 나열", + "description": "모든 마일리지 내역을 나열합니다.\n\n{@link IPage 페이지 매김}을 사용하여\n{@link IShoppingCustomer 고객}의 모든 {@link IShoppingMileageHistory 마일리지 내역}을 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingMileageHistory.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingMileageHistory.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageHistory.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호 매겨진 마일리지 기록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingMileageHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/mileages/histories/{id}": { + "get": { + "summary": "마일리지 기록 정보 가져오기", + "description": "마일리지 기록 정보 가져오기.\n\n{@link IShoppingMileageHistory 마일리지 기록} 정보 가져오기.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 마일리지 기록의 {@link IShoppingMileageHistory.id }" + } + ], + "responses": { + "200": { + "description": "마일리지 기록 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMileageHistory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/mileages/histories/balance": { + "get": { + "summary": "마일리지 잔액 가져오기", + "description": "마일리지 잔액 가져오기.\n\n{@link IShoppingCustomer 고객}의 현재 마일리지 잔액 가져오기.", + "tags": [ + "Discount" + ], + "parameters": [], + "responses": { + "200": { + "description": "마일리지 잔액", + "content": { + "application/json": { + "schema": { + "type": "number" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities": { + "patch": { + "summary": "모든 상품 목록", + "description": "모든 상품 목록.\n\n{@link IPage 페이지 매김}을 사용하여 쇼핑 카트에 있는 모든 {@link IShoppingCartCommodity 상품}을 나열합니다.\n\n*cartId*가 지정되지 않았지만 `null` 값이 할당된 경우 모든\n카트가 타겟팅됩니다. 또한 요청 본문에서\n{@link IShoppingCartCommodity.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingCartCommodity.IRequest.sort}를 구성하여\n레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n참고로, 일부 상품이 {@link IShoppingOrder 주문}되고\n{@link IShoppingOrderPublish 게시}되면 쇼핑 카트에 더 이상 표시되지 않습니다. 그렇지 않으면 주문이 아직 게시되지 않았으므로\n쇼핑 카트에 표시되고 동일한 상품으로 새\n{@link IShoppingOrder 주문 애플리케이션}을 만들 수 있습니다.\n\n물론, 타겟 {@link IShoppingSale 세일}이 중단되었거나\n{@link IShoppingSaleUnitStockInventory 재고 없음}인 경우, 쇼핑 카트에 더 이상 표시되지 않습니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "소속된 장바구니 ID" + } + ], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 상품", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCartCommodity" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "새로운 상품 생성", + "description": "새로운 상품을 만듭니다.\n\n특정 쇼핑 카트에 새로운 {@link IShoppingCartCommodity 상품}을 만듭니다.\n\n{@link IShoppingCartCommodity.ICreate.accumulate}에 `true` 값이 있고\n동일한\n{@link IShoppingSaleUnitStock.IInvert 재고 및 수량}으로 구성된 동일한 상품이 있는 경우\n새로운 상품은 생성되지 않지만 볼륨은 누적됩니다.\n\n또한 *cartId*가 지정되지 않았지만 `null` 값이 할당된 경우\n일반 카트가 활용되거나 이전 카트의 존재를 고려하여 새 카트가 생성됩니다.\n\n그런데 대상 {@link IShoppingSale 판매}가 중단되었거나\n{@link IShoppingSaleUnitStockInventory 재고 없음}인 경우 410 오류가 발생합니다.\n따라서 대상 판매와\n{@link IShoppingSaleUnitStock 재고}의 상태를 미리 확인하는 것이 좋습니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "소유한 장바구니 ID" + } + ], + "requestBody": { + "description": "상품 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 상품", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities/{id}": { + "get": { + "summary": "상품 받기", + "description": "상품을 가져옵니다.\n\n쇼핑 카트의 {@link IShoppingCartCommodity 상품} 레코드를 가져옵니다.\n\n*cartId*가 속한 카트의 ID와 다르면 404 찾을 수 없음 예외가 발생합니다. 그렇지 않으면 *cartId*에 `null` 값이 있으면 이러한 종속성 검사는 건너뛰지만 소유권은 여전히 검증됩니다.\n\n또한 대상 {@link IShoppingSale 판매}가 중단되었거나\n{@link IShoppingSaleUnitStockInventory 재고 없음}이면 410 사라짐 오류가 발생합니다. 따라서 {@link create} 메서드로 상품을 성공적으로 생성했더라도 이 {@link at} 메서드로 상품에 액세스하면 여전히 실패할 수 있습니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "소유한 장바구니의 ID" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 상품의 {@link IShoppingCartCommodity.id }" + } + ], + "responses": { + "200": { + "description": "자세한 상품 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "상품(볼륨) 업데이트", + "description": "상품(볼륨)을 업데이트합니다.\n\n쇼핑 카트에서 {@link IShoppingCartCommodity 상품}의 볼륨을 업데이트합니다.\n\n*cartId*가 속한 카트의 ID와 다르면 404 not found 예외가 발생합니다. 그렇지 않으면 *cartId*에 `null` 값이 있으면 이러한 종속성 검사는 건너뛰지만 소유권은 여전히 검증됩니다.\n\n또한 대상 {@link IShoppingSale 판매}가 중단되거나\n{@link IShoppingSaleUnitStockInventory 재고 없음}이 갑자기 발생하면 410\ngone 오류가 발생합니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "소속된 장바구니의 ID" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 상품의 {@link IShoppingCartCommodity.id }" + } + ], + "requestBody": { + "description": "상품 정보(볼륨) 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "상품 삭제", + "description": "상품을 지웁니다.\n\n쇼핑 카트에서 {@link IShoppingCartCommodity 상품}을 지웁니다.\n\n상품이 {@link IShoppingOrder 주문} 프로세스에 있는 경우 지울 수 없습니다. 대신 주문이\n{@link IShoppingOrderPublish 게시}된 경우 쇼핑 카트에 더 이상 표시되지 않습니다. 주문이 지워지면 상품을 계속 지울 수 있습니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "속한 카트의 ID" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 상품의 {@link IShoppingCartCommodity.id }" + } + ], + "responses": { + "200": { + "description": "새로 생성된 상품", + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities/{id}/replica": { + "get": { + "summary": "상품의 복제본을 가져옵니다.", + "description": "상품의 복제본을 가져옵니다.\n\n복제를 위해 대상 상품의 {@link IShoppingCartCommodity.ICreate} 유형 정보를 가져옵니다.\n\n그런데, *cartId*가 속한 카트의 ID와 다르면\n404 찾을 수 없음 예외가 발생합니다. 그렇지 않으면 *cartId*에 `null` 값이 있으면 이러한 종속성 검사는 건너뛰지만 여전히\n소유권은 검증됩니다.\n\n또한 대상 {@link IShoppingSale 판매}가 중단되거나\n{@link IShoppingSaleUnitStockInventory 재고 없음}이 갑자기 발생하면\n410 사라짐 오류가 발생합니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "소유한 카트의 ID" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 상품의 {@link IShoppingCartCommodity.id }" + } + ], + "responses": { + "200": { + "description": "복제를 위한 상품의 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/carts/{cartId}/commodities/discountable": { + "patch": { + "summary": "할인 가능한 정보 가져오기", + "description": "할인 가능한 정보를 얻으세요.\n\n{@link IShoppingCartCommodity 쇼핑 카트}에 대한 할인 가능한 기능을 계산합니다. 여기에는 카트에 담지 않은 {@link IShoppingSale 판매}도 포함됩니다.\n\n반환된 {@link IShoppingCartDiscountable}에는 조정 가능한 {@link IShoppingCoupon 쿠폰}, 인출 가능한 {@link IShoppingDepositHistory 입금} 및 {@link IShoppingMileageHistory 마일리지}의 조합이 포함됩니다.\n\n또한 아직 카트에 담지 않은 특정 판매에 대한 할인 가능한 정보를 알고 싶다면 판매를 {@link IShoppingCartDiscountable.pseudos} 속성에 지정하여\n{@link IShoppingCartCommodity.ICreate 상품 생성 정보}를 작성합니다.\n그런 다음 할인 가능한 정보에 포함됩니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "cartId", + "in": "path", + "schema": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "required": true, + "description": "소속된 장바구니 ID" + } + ], + "requestBody": { + "description": "할인 가능한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "할인 가능한 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCartDiscountable" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders": { + "post": { + "summary": "새로운 주문 신청서 작성", + "description": "새로운 주문 애플리케이션을 만듭니다.\n\n{@link IShoppingCustomer}가 작성한 {@link IShoppingCartCommodity 쇼핑 카트}에서 새로운 {@link IShoppingOrder 주문 애플리케이션}을 만듭니다.\n물론 모든 상품을 주문에 넣을 필요는 없지만\n고객이 일부 상품을 선택할 수 있습니다.\n\n그런데 이 기능은 주문을 완료하는 것을 의미하지 않고\n고객이 주문을 적용하는 것을 의미합니다. 고객이\n{@link IShoppingOrderPublish.paid_at에서 주문에 대해 지불할 때만 주문이 완료됩니다.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "주문 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 주문", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "모든 주문 나열", + "description": "모든 주문을 나열합니다.\n\n모든 {@link IShoppingOrder 주문}을 페이지 번호로 나열합니다.\n\n원하는 경우 요청 본문에서 {@link IShoppingOrder.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingOrder.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n참고로, {@link IShoppingCustomer 고객}인 경우\n자신의 주문을 나열할 수 있으며 주문이 {@link IShoppingOrderPublish.paid_at paid}되었는지 여부는 중요하지 않습니다.\n\n그렇지 않은 경우 {@link IShoppingSeller 판매자} 또는\n{@link IShoppingAdministrator 관리자}인 경우\n유료 주문만 나열할 수 있습니다. 또한 판매자의 경우 관련 {@link IShoppingOrder.goods 상품}만 주문에 나열됩니다.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호 매겨진 주문", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{id}": { + "delete": { + "summary": "주문 신청 삭제", + "description": "주문 신청 삭제.\n\n{@link IShoppingCustomer}가 적용한 주문 신청 삭제.\n\n주문이 {@link IShoppingOrderPublish 게시}된 경우 주문을 삭제할 수 없습니다. 이 경우 {@link publish.cancel} 함수를 호출하여\n결제를 취소해야 합니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 주문의 {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "주문 정보 가져오기", + "description": "주문 정보를 얻으세요.\n\n자세한 {@link IShoppingOrder 주문} 정보를 얻으세요.\n\n{@link IShoppingCustomer 고객}이 아니라면 아직 {@link IShoppingOrderPublish.paid_at paid}되지 않은 주문에 액세스할 수 없습니다. 이 경우\n404 찾을 수 없음 오류가 발생합니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 주문의 {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "주문 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{id}/price": { + "get": { + "summary": "주문 가격 얻기", + "description": "주문 가격을 가져옵니다.\n\n{@link IShoppingOrder 주문}의 자세한 가격 정보를 가져옵니다.\n\n반환된 가격 정보에는 주문 금액뿐만 아니라\n{@link IShoppingCoupono 쿠폰},\n{@link IShoppingDepositHistory 입금} 및\n{@link IShoppingMileageHistory 마일리지}에 따른 할인 금액도 포함됩니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 주문의 {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "할인이 적용된 자세한 가격 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{id}/discountable": { + "patch": { + "summary": "할인 가능한 정보 가져오기", + "description": "할인 가능한 정보를 얻으세요.\n\n{@link IShoppingOrder}에 대한 할인 가능한 기능을 계산하세요.\n\n반환된 {@link IShoppingOrderDiscountable}에는\n조정 가능한 {@link IShoppingCoupon 쿠폰},\n인출 가능한 {@link IShoppingDepositHistory 입금}\n및 {@link IShoppingMileageHistory 마일리지}의 조합이 포함됩니다.\n\n물론 반환된 기능은 주문이 아직\n공개되지 않은 경우에만 유효합니다. 주문이\n이미 게시된 경우 가격을 더 할인할 방법이 없습니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 주문의 {@link IShoppingOrder.id }" + } + ], + "requestBody": { + "description": "할인 가능한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "할인 가능한 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{id}/discount": { + "put": { + "summary": "주문 할인", + "description": "주문 할인.\n\n{@link IShoppingOrder}의 총 가격을 할인하려면\n{@link IShoppingCoupon 쿠폰}, {@link IShoppingDepositHistory 입금}\n및 {@link IShoppingMileageHistory 마일리지}를 조정합니다. 할인\n기능의 금액이 주문의 총 가격과 같으면 현금 없이\n{@link IShoppingOrderPublish 게시}할 수 있습니다.\n\n그런데 할인 기능은 유효해야 합니다. 그렇지 않으면 428\n처리 불가 엔터티 오류가 발생합니다. 어떤 기능이\n조정 가능하거나 인출 가능한지 알아보려면 {@link discountable} 함수를 호출하세요.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 주문의 {@link IShoppingOrder.id }" + } + ], + "requestBody": { + "description": "할인 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "할인이 적용된 자세한 가격 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPrice" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{orderId}/goods/{id}/confirm": { + "put": { + "summary": "주문 확인", + "description": "주문 상품 확인.\n\n완료된 {@link IShoppingOrderGood 주문 상품}을 {@link IShoppingDelivery delivering}하여 {@link IShoppingCustomer 고객}에게 확인.\n\n즉, 속한 {@link IShoppingOrder 주문}은\n{@link IShoppingPublish.paid_at published, paid}되어야 하며\n상품의 배송은 {@link IShoppingDeliveryJourney arrive}하여 고객에게\n되어야 합니다. 그렇지 않으면 428 처리할 수 없는 엔터티 오류가 발생합니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "속한 주문의 {@link IShoppingOrder.id}" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 상품의 {@link IShoppingOrderGood.id}" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{orderId}/publish/able": { + "get": { + "summary": "게시 가능 확인", + "description": "게시 가능 확인.\n\n{@link IShoppingOrder 주문}이 게시 가능한지 여부를 테스트합니다.\n\n주문이 {@link IShoppingOrderPublish 게시되지 않았고} 아직 삭제되지 않은 경우 주문을 게시할 수 있습니다.\n대상 {@link IShoppingSale 판매}가 중단되었거나\n{@link IShoppingSaleUnitStockInventory 재고 없음}이더라도 주문이 이미 적용되었으므로 게시할 수 있습니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 주문의 {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "주문이 게시 가능한지 여부", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/orders/{orderId}/publish": { + "post": { + "summary": "주문 게시", + "description": "주문을 게시합니다.\n\n{@link IShoppingOrderPublish {@link IShoppingCustomer}가 {@link IShoppingAddress 주소}로 적용한 {@link IShoppingOrder 주문}을\n결제 공급업체 시스템에서 얻은 배송 및 결제 정보에 게시합니다.\n\n주문이 전체 주문 가격에 대해 할인된 경우 결제 공급업체 정보를 보낼 필요가 없습니다. 대신 주소 정보만 필요합니다.\n\n또한 결제 시간은 게시 시간과 다를 수 있습니다. 예를 들어\n결제 방법이 수동 은행 계좌 이체인 경우 고객이 실제로 돈을 이체할 때까지\n결제가 지연됩니다. 그런 경우\n{@link IShoppingOrderPublish.paid_at}은 `null` 값이 되므로\n이 게시 함수를 호출한 후 확인해야 합니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 주문의 {@link IShoppingOrder.id }" + } + ], + "requestBody": { + "description": "게시의 생성 정보", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingOrderPublish.ICashCreate" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish.IZeroCreate" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "cash": "#/components/schemas/IShoppingOrderPublish.ICashCreate", + "zero": "#/components/schemas/IShoppingOrderPublish.IZeroCreate" + } + } + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 게시", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrderPublish" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "게시(결제) 취소", + "description": "게시(결제) 취소.\n\n{@link IShoppingOrderPublish가 게시된} {@link IShoppingOrder 주문}의 결제를 취소합니다.\n\n대상 게시의 결제 방법이 수동 은행 계좌 이체인 경우\n바로 취소됩니다. 그렇지 않은 경우 결제 취소\n요청이 결제 공급업체 시스템으로 전송됩니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 주문의 {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales": { + "patch": { + "summary": "요약된 모든 판매 내역을 나열하세요", + "description": "모든 요약된 판매를 나열합니다.\n\n모든 {@link IShoppingSale.ISummary 요약된 판매}를 나열합니다.\n\n보시다시피, 반환된 판매는 자세히 설명되지 않고 요약됩니다. 판매의 자세한 정보를 얻으려면 각 판매에 대해 {@link at} 함수를 사용합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매}에만 액세스할 수 있습니다. 그렇지 않은 경우\n{@link IShoppingCustomer 고객}인 경우 시장에서 운영 중인 판매만 볼 수 있습니다. 미개봉, 마감 또는 중단된 판매는 볼 수 없습니다.\n\n그런데 원하는 경우 요청 본문에서\n{@link IShoppingSale.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingSale.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약된 정보가 있는 페이지 번호 매겨진 판매", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{id}": { + "get": { + "summary": "판매 정보 가져오기", + "description": "판매 정보 가져오기.\n\n자세한 정보가 있는 {@link IShoppingSale 판매}를 가져옵니다.\n\n{@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매}에만 액세스할 수 있습니다. 그렇지 않은 경우\n{@link IShoppingCustomer 고객}인 경우 시장에서 운영 중인\n판매에만 액세스할 수 있습니다. 미개봉, 마감 또는 중단된\n판매에는 액세스할 수 없습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "타겟 세일 {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "description": "자세한 세일 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments": { + "patch": { + "summary": "모든 문의 사항 댓글을 나열합니다.", + "description": "모든 문의 댓글을 나열합니다.\n\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}의 모든 {@link IShoppingSaleInquiryComment 문의 댓글}을 {@link IPage 페이지 매김}과 함께 나열합니다.\n\n원하는 경우 요청 본문에서 {@link IShoppingSaleInquiryComment.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingSaleInquiryComment.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n그런데, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매}의 문의에만 액세스할 수 있습니다. 그렇지 않은 경우 판매의 모든 문의에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 문의의 {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 문의 댓글", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "문의 댓글 작성", + "description": "문의 댓글을 작성하세요.\n\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}에 대한 {@link IShoppingSaleInquiryComment 문의 댓글}을 작성하세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우,\n자신의 {@link IShoppingSale 판매} 문의에만 문의 댓글을 작성할 수 있습니다.\n그렇지 않은 경우 판매의 모든 문의에 문의 댓글을 작성할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의의 {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "문의 댓글 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 문의 댓글", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { + "get": { + "summary": "문의 댓글 정보 가져오기", + "description": "문의 댓글 정보를 받으세요.\n\n{@link IShoppingSaleInquiryComment 문의 댓글}\n{@link IShoppingSaleQuestion 질문} 또는\n{@link IShoppingSaleReview 리뷰}에 대한 자세한 정보를 받으세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매}의 문의 댓글에만 액세스할 수 있습니다.\n그렇지 않은 경우 판매의 모든 문의 댓글에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속 문의사항 {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의 댓글 {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "자세한 문의 댓글 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "문의 댓글 업데이트", + "description": "문의 댓글 업데이트.\n\n{@link IShoppingSaleInquiryComment 문의 댓글}을 특정\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}로 업데이트합니다.\n\n그런데, 이 쇼핑몰의 일반 정책인\n댓글에 대한 댓글 수정은 실제로 기존 콘텐츠를 변경하지 않습니다.\n수정된 콘텐츠는 기존 댓글 기록에 누적되어\n새로운 {@link IShoppingSaleInquiryComment.ISnapshot 스냅샷}으로 기록됩니다. 그리고 이것은\n이 문의 댓글을 읽을 수 있는 모든 사람에게 공개됩니다.\n\n이는 고객이나 판매자가 댓글을 수정하고\n분쟁이 쉽게 발생하는 전자상거래의 특성으로 인해 상황을 조작하는 것을 방지하기 위한 것입니다. 즉, 증거를 보존하기 위한 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 문의의 {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의 댓글의 {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "문의 댓글의 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "문의 댓글의 새로 생성된 스냅샷 기록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions": { + "post": { + "summary": "질문 게시글 작성", + "description": "질문 기사를 작성하세요.\n\n{@link IShoppingCustomer 고객}이 특정 {@link IShoppingSale 세일}에 대해 무언가를 묻고 싶을 때, 그는/그녀는 새로운 {@link IShoppingSaleQuestion 질문 기사}를 작성하여 질문할 수 있습니다.\n\n고객이 자신의 신원과 질문을 공개하고 싶지 않다면, 그는/그녀는 질문을 비밀 기사로 작성할 수 있습니다. 이 경우,\n고객과 관련 {@link IShoppingSeller 판매자}만 {@link at details content}를 볼 수 있습니다. 또한, 이러한 비밀 질문의 제목과\n작성자 이름은\n{@link index pagiation API}에서 `*` 문자로 마스크됩니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "질문 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 질문", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "요약된 모든 질문 나열", + "description": "요약된 모든 질문을 나열합니다.\n\n{@link IShoppingSale 판매}의 모든 {@link IShoppingSaleQuestion.ISummary 요약된 질문}을 나열합니다.\n\n보시다시피, 반환된 질문은 자세히 설명하지 않고 요약합니다. 질문의 자세한 정보를 얻으려면 각 기사에 대해 {@link adridges} 함수\n또는 {@link at} 함수를 사용합니다.\n\n또한 반환된 질문에는 {@link IShoppingSaleQuestion.ISummary.answer}\n속성이 있는데, 이는 {@link IShoppingSeller}의 공식 답변을 의미합니다.\n또한 반환된 질문에는 다른 특별한 속성인\n{@link IShoppingSaleQuestion.ISummary.secret}이 있는데, 이는 다른\n원칙 속성에 대한 마스킹이 있으며, 이는 관련된 행위자만 질문을 {@link at 읽을 수 있음을 의미합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우, 자신의 {@link IShoppingSale 판매} 질문에만\n액세스할 수 있습니다. 그렇지 않은 경우,\n판매의 모든 질문에 액세스할 수 있습니다.\n\n그런데, 원하는 경우 요청 본문에서\n{@link IShoppingSaleQuestion.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한, {@link IShoppingSaleQuestion.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약된 정보가 있는 페이지 번호 매기기 질문", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions/{id}": { + "post": { + "summary": "질문 업데이트", + "description": "질문 업데이트.\n\n{@link IShoppingSaleQuestion 질문}의 콘텐츠를 업데이트합니다.\n\n그런데, 이 쇼핑몰의 일반 정책인\n기사 관련 질문 기사를 수정해도 실제로는\n기존 콘텐츠가 변경되지 않습니다. 수정된 콘텐츠는 누적되어\n기존 기사 레코드에 새\n{@link IShoppingSaleQuestion.ISnapshot 스냅샷}으로 기록됩니다. 그리고 이는 {@link IShoppingCustomer 고객}과\n{@link IShoppingSeller 판매자}를 포함한 모든 사람에게 공개되며, 기사를 볼 수 있는 사람은\n전체 편집 내역도 볼 수 있습니다.\n\n이는 고객이나 판매자가 기사를 수정하고\n분쟁이 쉽게 발생하는 전자상거래의 특성상 상황을 조작하는 것을 방지하기 위한 것입니다. 즉, 증거를 보존하기 위한 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 질문의 {@link IShoppingSaleQuestion.id }" + } + ], + "requestBody": { + "description": "질문 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "질문의 새로 생성된 스냅샷 레코드", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "질문 정보 가져오기", + "description": "질문 정보를 얻으세요.\n\n{@link IShoppingSale 판매}에 대한 자세한 {@link IShoppingSaleQuestion 질문} 정보를 얻으세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우, 자신의 {@link IShoppingSale 판매} 질문에만\n액세스할 수 있습니다. 그렇지 않은 경우\n{@link IShoppingCustomer 고객}인 경우, {@link IShoppingSaleQuestion.secret} 값을 제외한 판매의 모든 질문에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 질문의 {@link IShoppingSaleQuestion.id }" + } + ], + "responses": { + "200": { + "description": "자세한 질문 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/questions/abridges": { + "patch": { + "summary": "모든 요약된 질문을 나열합니다.", + "description": "모든 축약된 질문을 나열합니다.\n\n{@link IShoppingSale 판매}의 모든 {@link IShoppingSaleQuestion.IAbridge 축약된 질문}을 나열합니다.\n\n보시다시피, 반환된 질문은 자세한 정보가 아니라 축약된 것입니다. 질문의 자세한 정보를 얻으려면 각 기사에 {@link at} 함수를 사용합니다.\n\n또한 반환된 질문에는 {@link IShoppingSaleQuestion.IAridge.answer}\n속성이 있는데, 이는 {@link IShoppingSeller}의 공식 답변을 의미합니다.\n또한 반환된 질문에는 다른\n원칙 속성에 대한 마스크 처리가 있는 또 다른 특수 속성\n{@link IShoppingSaleQuestion.IAridge.secret}이 있으며, 이는 관련된 행위자만 질문을 {@link at 읽을 수 있음을 의미합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매} 질문에만 액세스할 수 있습니다. 그렇지 않으면\n판매의 모든 질문에 접근할 수 있습니다.\n\n그런데, 원하시면 요청 본문에서\n{@link IShoppingSaleQuestion.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한, {@link IShoppingSaleQuestion.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약 정보가 포함된 페이지 번호 매기기 질문", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments": { + "patch": { + "summary": "모든 문의 사항 댓글 나열", + "description": "모든 문의 댓글을 나열합니다.\n\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}의 모든 {@link IShoppingSaleInquiryComment 문의 댓글}을 {@link IPage 페이지 매김}과 함께 나열합니다.\n\n원하는 경우 요청 본문에서 {@link IShoppingSaleInquiryComment.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingSaleInquiryComment.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n그런데, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매}의 문의에만 액세스할 수 있습니다. 그렇지 않은 경우 판매의 모든 문의에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 문의의 {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 문의 댓글", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "문의 댓글 작성", + "description": "문의 댓글을 작성하세요.\n\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}에 대한 {@link IShoppingSaleInquiryComment 문의 댓글}을 작성하세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우,\n자신의 {@link IShoppingSale 판매} 문의에만 문의 댓글을 작성할 수 있습니다.\n그렇지 않은 경우 판매의 모든 문의에 문의 댓글을 작성할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의의 {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "문의 댓글 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 문의 댓글", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { + "get": { + "summary": "문의 댓글 정보 가져오기", + "description": "문의 댓글 정보를 받으세요.\n\n{@link IShoppingSaleInquiryComment 문의 댓글}\n{@link IShoppingSaleQuestion 질문} 또는\n{@link IShoppingSaleReview 리뷰}에 대한 자세한 정보를 받으세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매}의 문의 댓글에만 액세스할 수 있습니다.\n그렇지 않은 경우 판매의 모든 문의 댓글에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속 문의사항 {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의 댓글 {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "자세한 문의 댓글 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "문의 댓글 업데이트", + "description": "문의 댓글 업데이트.\n\n{@link IShoppingSaleInquiryComment 문의 댓글}을 특정\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}로 업데이트합니다.\n\n그런데, 이 쇼핑몰의 일반 정책인\n댓글에 대한 댓글 수정은 실제로 기존 콘텐츠를 변경하지 않습니다.\n수정된 콘텐츠는 기존 댓글 기록에 누적되어\n새로운 {@link IShoppingSaleInquiryComment.ISnapshot 스냅샷}으로 기록됩니다. 그리고 이것은\n이 문의 댓글을 읽을 수 있는 모든 사람에게 공개됩니다.\n\n이는 고객이나 판매자가 댓글을 수정하고\n분쟁이 쉽게 발생하는 전자상거래의 특성으로 인해 상황을 조작하는 것을 방지하기 위한 것입니다. 즉, 증거를 보존하기 위한 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 문의의 {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의 댓글의 {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "문의 댓글의 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "문의 댓글의 새로 생성된 스냅샷 기록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews": { + "post": { + "summary": "리뷰 기사 작성", + "description": "리뷰 기사를 작성하세요.\n\n{@link IShoppingCustomer 고객}이 특정\n{@link IShoppingSale 세일}을 구매하고 {@link IShoppingDelivery가 배달}되면\n해당 세일에 대한 {@link IShoppingSaleReview 리뷰} 기사를 쓸 수 있습니다.\n\n구매하지 않고 리뷰 기사를 쓰려고 하거나 배송이 완료되지 않은 경우\n428 처리 불가 엔터티 오류가 발생합니다. 또한\n고객은 주문당 여러 리뷰 기사를 쓸 수 있지만 다음\n기사는 이전 기사로부터 2주 후에 작성할 수 있습니다. 그렇지 않은 경우\n428 처리 불가 엔터티 오류가 발생합니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "리뷰 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 리뷰", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "요약된 모든 리뷰 나열", + "description": "모든 요약된 리뷰를 나열합니다.\n\n{@link IShoppingSale 판매}의 모든 {@link IShoppingSaleReview.ISummary 요약된 리뷰}를 나열합니다.\n\n보시다시피, 반환된 리뷰는 자세히 설명하지 않고 요약합니다.\n리뷰의 자세한 정보를 얻으려면 각 기사에 대해 {@link adridges} 함수\n또는 {@link at} 함수를 사용합니다.\n\n또한 반환된 리뷰에는 {@link IShoppingSaleReview.ISummary.answer}\n속성이 있는데, 이는 {@link IShoppingSeller}의 공식 답변을 의미합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매} 리뷰에만 액세스할 수 있습니다. 그렇지 않은 경우\n판매의 모든 리뷰에 액세스할 수 있습니다.\n\n그런데, 원하는 경우 요청 본문에서\n{@link IShoppingSaleReview.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한, {@link IShoppingSaleReview.IRequest.sort 정렬 조건}을 구성하여\n레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "Belonged sale의 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약된 정보가 있는 페이지 번호 매기기 리뷰", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews/{id}": { + "post": { + "summary": "리뷰 업데이트", + "description": "리뷰 업데이트.\n\n{@link IShoppingSaleReview 리뷰}의 내용과 점수를 업데이트합니다.\n\n그런데, 이 쇼핑몰의 일반 정책인\n기사와 관련하여 질문 기사를 수정해도 실제로 기존\n내용은 변경되지 않습니다. 수정된 내용은 누적되어 기존\n기사 기록에 새\n{@link IShoppingSaleReview.ISnapshot 스냅샷}으로 기록됩니다. 그리고 이는 {@link IShoppingCustomer 고객}과\n{@link IShoppingSeller 판매자}를 포함한 모든 사람에게 공개되며, 기사를 볼 수 있는 사람은\n전체 편집 내역도 볼 수 있습니다.\n\n이는 고객이나 판매자가 기사를 수정하고 분쟁이 쉽게 발생하는 전자상거래의 특성상 상황을 조작하는 것을 방지하기 위한 것입니다. 즉, 증거를 보존하기 위한 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 리뷰의 {@link IShoppingSaleReview.id }" + } + ], + "requestBody": { + "description": "리뷰 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IUpdate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "리뷰의 새로 생성된 스냅샷 기록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "리뷰 정보 가져오기", + "description": "리뷰 정보를 얻으세요.\n\n{@link IShoppingSaleReview 리뷰}에서 {@link IShoppingSale 세일}에 대한 자세한 정보를 얻으세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우, 자신의 {@link IShoppingSale 세일} 리뷰에만 액세스할 수 있습니다. 그렇지 않은 경우\n{@link IShoppingCustomer 고객}인 경우, 모든 세일\n리뷰에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 세일의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 리뷰의 {@link IShoppingSaleReview.id }" + } + ], + "responses": { + "200": { + "description": "자세한 리뷰 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/reviews/abridges": { + "patch": { + "summary": "모든 요약 리뷰 나열", + "description": "모든 요약된 리뷰를 나열합니다.\n\n{@link IShoppingSale 판매}의 모든 {@link IShoppingSaleReview.IAbridge 요약된 리뷰}를 나열합니다.\n\n보시다시피, 반환된 리뷰는 자세한 정보가 아닌 요약된 것입니다.\n리뷰의 자세한 정보를 얻으려면 각 기사에 {@link at} 함수를 사용합니다.\n\n또한 반환된 리뷰에는 {@link IShoppingSaleReview.IAridge.answer}\n속성이 있는데, 이는 {@link IShoppingSeller}의 공식 답변을 의미합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매} 리뷰에만 액세스할 수 있습니다. 그렇지 않은 경우\n판매의 모든 리뷰에 액세스할 수 있습니다.\n\n그런데, 원하는 경우 요청 본문에서\n{@link IShoppingSaleReview.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한, {@link IShoppingSaleReview.IRequest.sort 정렬 조건}을 구성하여\n레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약 정보가 포함된 페이지 번호 매기기 리뷰", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/snapshots": { + "patch": { + "summary": "모든 스냅샷 나열", + "description": "모든 스냅샷을 나열합니다.\n\n{@link IShoppingSeller 판매자}가\n{@link IShoppingSale 판매}를 업데이트할 때마다 판매 기록은 업데이트되지 않지만 새로운\n{@link IShoppingSaleSnapshot 스냅샷} 레코드가 생성되어 판매 내역의\n무결성을 유지합니다. 이 API 함수는 이러한\n스냅샷 레코드를 나열하기 위한 것입니다.\n\n또한 반환 유형에서 볼 수 있듯이 반환된 스냅샷은\n자세한 정보가 아닌 요약되어 있습니다. 스냅샷의 자세한 정보를 얻으려면\n각 스냅샷에 대해 {@link at} 또는 {@link flipo} 함수를 사용합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매}의\n스냅샷에만 액세스할 수 있습니다. 그렇지 않은 경우 판매가\n종료되거나 중단되었더라도\n모든 판매 스냅샷에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 세일 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약 정보가 있는 페이지 번호 스냅샷", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/snapshots/{id}": { + "get": { + "summary": "스냅샷 정보 가져오기", + "description": "스냅샷 정보를 가져옵니다.\n\n자세한 정보가 포함된 {@link IShoppingSaleSnapshot 스냅샷}을 가져옵니다.\n\n반환 유형에서 볼 수 있듯이 반환된 스냅샷에는 {@link IShoppingSale 판매} 정보가 포함되지 않습니다. 판매 정보를 가져오려면\n대신 {@link flip} 함수를 사용하세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매} 스냅샷에만 액세스할 수 있습니다. 그렇지 않은 경우\n판매가 종료되거나 중단되었더라도 판매의 모든 스냅샷에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 스냅샷의 {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "스냅샷의 자세한 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/sales/{saleId}/snapshots/{id}/flip": { + "get": { + "summary": "뒤집힌 스냅샷 정보 가져오기", + "description": "뒤집힌 스냅샷 정보를 가져옵니다.\n\n뒤집힌 스냅샷의 {@link IShoppingSale 판매} 정보를 가져옵니다.\n\n반환 유형에서 볼 수 있듯이 이 함수는\n{@link IShoppingSale 판매} 정보를 반환합니다. 그런데 판매 정보는\n최신 정보가 아니라 스냅샷 측의 뒤집힌 정보입니다.\n\n또한, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매}의 스냅샷에만 액세스할 수 있습니다. 그렇지 않은 경우 판매가\n종료되거나 중단되었더라도 판매의 모든 스냅샷에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 스냅샷의 {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "스냅샷 측의 자세한 판매 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{channelCode}/categories": { + "patch": { + "summary": "자식 레코드가 있는 모든 카테고리를 나열합니다.", + "description": "모든 카테고리를 자식 레코드와 함께 나열합니다.\n\n{@link IShoppingChannelCategory.IHierarchical 카테고리}를 페이지 번호와 함께 나열합니다. 반환된 카테고리에는 자식 카테고리도 포함됩니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingChannelCategory.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingChannelCategory.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "소속된 채널의 {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "자식 카테고리가 있는 페이지가 매겨진 카테고리", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}": { + "get": { + "summary": "카테고리 정보 가져오기", + "description": "카테고리 정보 가져오기.\n\n자세한 {@link IShoppingChannelCategory 카테고리} 정보 가져오기.\n\n반환된 카테고리에는 계층적 자식 카테고리가 포함되고\n재귀적 부모 카테고리도 포함됩니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "소속된 채널의 {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 카테고리의 {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "자세한 카테고리 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}/invert": { + "get": { + "summary": "역순의 카테고리 정보 가져오기", + "description": "역전된 카테고리 정보를 가져옵니다.\n\n역전된 {@link IShoppingChannelCategory.IInvert 카테고리} 정보를 가져옵니다.\n\n반환된 카테고리에는 재귀적 부모 카테고리가 포함되지만\n계층적 자식 카테고리는 포함되지 않습니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "소속 채널의 {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 카테고리의 {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "자세한 카테고리 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels": { + "patch": { + "summary": "모든 채널 나열", + "description": "모든 채널을 나열합니다.\n\n모든 {@link IShoppingChannel 채널}을 페이지 번호로 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingChannel.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한 {@link IShoppingChannel.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 채널", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/hierarchical": { + "patch": { + "summary": "중첩된 카테고리가 있는 모든 채널을 나열합니다.", + "description": "중첩된 카테고리가 있는 모든 채널을 나열합니다.\n\n{@link IShoppingChannel.IHierarchical 채널}을 {@link IPage 페이지 매김}으로 나열합니다. 반환된 채널에는 중첩된 계층적\n{@link IShoppingChannelCategory.IHierarchical 카테고리}가 포함됩니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingChannel.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingChannel.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "페이지 매김, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "중첩된 카테고리가 있는 페이지 매김 채널", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{id}": { + "get": { + "summary": "채널 정보 가져오기", + "description": "채널 정보 가져오기.\n\n자세한 {@link IShoppingChannel.IHierarchical 채널} 정보 가져오기.\n\n반환된 채널 인스턴스에는 중첩된\n{@link IShoppingChannelCategory.IHierarchical 계층적 카테고리}\n정보도 포함됩니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 채널의 {@link IShoppingChannel.id }" + } + ], + "responses": { + "200": { + "description": "자세한 채널 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/channels/{code}/get": { + "get": { + "summary": "코드로 채널 정보 가져오기", + "description": "코드로 채널 정보를 가져옵니다.\n\n코드로 자세한 {@link IShoppingChannel.IHierarchical 채널} 정보를 가져옵니다.\n\n반환된 채널 인스턴스에는 중첩된\n{@link IShoppingChannelCategory.IHierarchical 계층적 범주}\n정보도 포함됩니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 채널의 {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "자세한 채널 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/sections": { + "patch": { + "summary": "모든 섹션을 나열합니다.", + "description": "모든 섹션을 나열합니다.\n\n모든 {@link IShoppingSection 섹션}을 페이지 번호로 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingSection.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한 {@link IShoppingSection.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Section" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 섹션", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/sections/{id}": { + "get": { + "summary": "섹션 정보 가져오기", + "description": "섹션 정보 가져오기.\n\n자세한 {@link IShoppingSection section} 정보 가져오기.", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 섹션의 {@link IShoppingSection.id }" + } + ], + "responses": { + "200": { + "description": "자세한 섹션 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/customers/systematic/sections/{code}/get": { + "get": { + "summary": "코드로 섹션 정보 가져오기", + "description": "코드로 섹션 정보 가져오기.\n\n코드로 자세한 {@link IShoppingSection section} 정보 가져오기", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 섹션의 {@link IShoppingSection.code }" + } + ], + "responses": { + "200": { + "description": "자세한 섹션 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/authenticate": { + "get": { + "summary": "판매자 정보 가져오기", + "description": "판매자 정보를 얻으세요.\n\n현재 {@link IShoppingCustomer 고객}의 {@link IShoppingSeller.IInvert 판매자} 정보를 얻으세요.\n\n현재 {@link IShoppingMember 회원}이 판매자가 아닌 경우\n403 금지 예외가 발생합니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "responses": { + "200": { + "description": "판매자 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "판매자로 가입", + "description": "판매자로 가입하세요.\n\n{@link IShoppingSeller.IJoin 가입 정보}로 판매자로 가입하세요.\n\n이 방법은 {@link IShoppingCustomer 고객}이 이미 {@link IShoppingMember 멤버십}에\n가입한 경우에만 허용됩니다. 그렇지 않은 경우, 그(녀)는\n이전에 이를 달성해야 합니다. 그렇지 않은 경우, 403 forbidden 예외가 발생합니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "가입 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IJoin" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "판매자 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/authenticate/login": { + "put": { + "summary": "판매자로 로그인", + "description": "판매자로 로그인합니다.\n\n{@link IShoppingSeller.ILogin 로그인 정보}로 판매자로 로그인합니다.\n\n이 메서드는\n{@link ShoppingApi.functional.customers.authenticate.login} 함수와 정확히 동일한 효과를 갖지만\n반환된 유형이 약간 다릅니다. 유사한 함수는 고객 정보에서 시작하는\n{@link IShoppingCustomer} 유형을 반환하므로\n`customer.member.seller`를 통해 판매자 정보에 액세스해야 합니다. 이와 대조적으로 이 메서드는 판매자 정보에서 시작하는\n{@link IShoppingSeller.IInvert} 유형을 반환하므로\n`seller.customer`를 통해 고객 정보에 액세스할 수 있습니다.\n\n물론 이 함수를 사용하려면 이전에 판매자로 {@link join}해야 했습니다. 그렇지 않으면 403 forbidden 예외가 발생합니다.", + "tags": [ + "Authenticate" + ], + "parameters": [], + "requestBody": { + "description": "로그인 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingMember.ILogin" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "판매자 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries": { + "patch": { + "summary": "배송 목록 가져오기", + "description": "배송 목록을 가져옵니다.\n\n{@link IPage 페이지 번호}를 사용하여 현재 {@link IShoppingSeller 판매자}의 {@link IShoppingDelivery.IInvert 배송} 목록을 가져옵니다.\n\n참고로, 반환된 배송에는 대상\n{@link IShoppingOrder.IInvertFromDelivery 주문} 정보가 포함됩니다. 물론\n관련 {@link IShoppingOrderGood 상품}만 주문에 포함됩니다.\n\n또한 요청 본문에서\n{@link IShoppingDelivery.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingDelivery.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호 매기기 배달", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingDelivery.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "배달 생성", + "description": "배송 만들기.\n\n{@link IShoppingDelivery 배송} 레코드를 타겟팅하여\n{@link IShoppingOrder 주문}, 해당 {@link IShoppingOrderGood 상품} 및\n{@link IShoppingSaleUnitStock 재고}({@link IShoppingDeliveryPiece})를\n{@link IShoppingDeliveryJourney 여정} 및\n{@link IShoppingDeliveryShipper 운송업체} 정보로 만듭니다.\n\n{@link IShoppingDeliveryPiece}의 구성은 필수를 초과해서는 안 됩니다. 어떤 부품이 필요한지 식별하려면 이 함수를 호출하기 전에\n대상 주문의\n{@link IShoppingOrderPublish.id}로 {@link incompletes} 함수를 호출하는 것이 좋습니다.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "배송 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 배송", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{id}": { + "get": { + "summary": "배송 받기", + "description": "배송 받기.\n\nID와 함께 {@link IShoppingDelivery.IInvert 배송} 정보를 가져옵니다.\n\n참고로, 반환된 배송에는 대상\n{@link IShoppingOrder.IInvertFromDelivery 주문} 정보가 포함됩니다. 물론\n관련 {@link IShoppingOrderGood 상품}만 주문에 포함됩니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 배송의 {@link IShoppingDelivery.id }" + } + ], + "responses": { + "200": { + "description": "대상 주문이 포함된 배송 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDelivery.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/incompletes": { + "patch": { + "summary": "미완료 품목 목록 가져오기", + "description": "불완전한 상품 목록을 가져옵니다.\n\n{@link IShoppingDeliveryPiece 불완전한 상품}의 대상\n주문 {@link IShoppingOrderPublish.id} 목록을 가져옵니다.\n\n대상 주문의 게시 ID를 지정하면 이 함수는\n{@link IShoppingDeliveryPiece.ICreate} 유형의 배열로 계산하여 주문의 불완전한 상품을 반환합니다.\n\n결과를 활용하여 통합 배송을 위한 거대한 {@link IShoppingDelivery 배송}을 만들 수 있으며,\n분할 배송을 위해 여러 배송을 만들 수도 있습니다.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "대상 주문 목록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "미완료 조각 목록", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.ICreate" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/journeys": { + "post": { + "summary": "새로운 여정 만들기", + "description": "새로운 여정을 만듭니다.\n\n{@link IShoppingDeliveryJourney 여정}을 새로 만듭니다.\n{@link IShoppingDelivery 배송}.\n\n이 작업은 관련 {@link IShoppingOrderGood.state}를 변경할 수 있습니다.\n또한 대상 여정의 유형이 \"배달 중\"인 경우 속성\n{@link IShoppingDeliveryJourney.completed_at}이 null인지 여부는 관련 상품의 상태에 영향을 미칩니다. 속성이 null이 아닌 경우 상태가\n\"도착\"이 됩니다. 그렇지 않은 경우 상태가 \"배달 중\"이 됩니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "Belonged delivery의 {@link IShoppingDelivery.id }" + } + ], + "requestBody": { + "description": "여정의 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 여정", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}/complete": { + "put": { + "summary": "여정 완료", + "description": "여정 완료.\n\n{@link IShoppingDeliveryJourney 여정}을 완료합니다.\n{@link IShoppingDelivery delivery}의\n{@link IShoppingDeliveryJourney.completed_at} 속성을 현재 시간으로 채웁니다.\n\n대상 여정의 유형이 \"배달 중\"인 경우 이 작업은 관련 {@link IShoppingOrderGood.state 상품의 상태}를 \"도착\"으로 변경할 수 있습니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 배송의 {@link IShoppingDelivery.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 여정의 {@link IShoppingDeliveryJourney.id }" + } + ], + "requestBody": { + "description": "여정 완료 시간", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.IComplete" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}": { + "delete": { + "summary": "여정 삭제", + "description": "여정 삭제.\n\n{@link IShoppingDelivery 배송}의 {@link IShoppingDeliveryJourney 여정}을 삭제합니다.\n\n여정 삭제가 소유한 배송의 마지막 여정인 경우 이 작업은\n관련 {@link IShoppingOrderGood.state}를 변경할 수 있습니다. 마지막 여정을 삭제하면 상태가 이전 상태로 롤백됩니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속 배송의 {@link IShoppingDelivery.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 여정의 {@link IShoppingDeliveryJourney.id }" + } + ], + "responses": { + "200": { + "description": "새로 생성된 여정", + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/deliveries/{deliveryId}/shippers": { + "post": { + "summary": "새로운 운송업체 생성", + "description": "새 운송업체를 만듭니다.\n\n{@link IShoppingDeliveryShipper 운송업체}를 {@link IShoppingDelivery 배송}의 새 {@link IShoppingDeliveryShipper 운송업체}로 만듭니다.\n\n이 작업은 관련된 {@link IShoppingOrder 주문} 또는 {@link IShoppingDeliveryJourney}\n또는 {@link IShoppingDeliveryPiece} 사례와 같은 {@link IShoppingOrderGood 상품}에는 영향을 미치지 않지만, 단지\n{@link IShoppingCustomer 고객}에게 알립니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "deliveryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속 배송의 {@link IShoppingDelivery.id }" + } + ], + "requestBody": { + "description": "운송업체의 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 운송업체", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/coupons": { + "post": { + "summary": "새 쿠폰 만들기", + "description": "새로운 쿠폰을 만드세요.\n\n주어진 정보로 새로운 {@link IShoppingCoupon 쿠폰}을 만드세요.\n\n그런데, {@link IShoppingSeller 판매자}인 경우, {@link IShoppingCouponSellerCriteria} 또는 {@link IShoppingCouponSaleCriteria} 조건을 포함해야 합니다. 이는\n{@link IShoppingAdministrator 관리자}만이\n시장 전체에서 사용할 수 있는 쿠폰을 만들 수 있기 때문입니다. 판매자는 자신의 {@link IShoppingSale 판매}로 사용 범위를 제한해야 합니다.\n\n물론, 관리자가 시장 전체에서 사용할 수 있는 일반 쿠폰을 만들 계획인 경우, 관리자는 영향을 받을 판매자의 동의를 받아야 합니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "쿠폰 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 쿠폰", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "모든 쿠폰을 나열합니다.", + "description": "모든 쿠폰을 나열합니다.\n\n모든 {@link IShoppingCoupon 쿠폰}을 페이지 번호로 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingCoupon.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한, {@link IShoppingCoupon.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n참고로, {@link IShoppingCustomer 고객}인 경우\n{@link IShoppingCouponTicket ticketable} 쿠폰만 나열됩니다.\n그렇지 않으면 티켓이 없는 쿠폰도 나열됩니다.", + "tags": [ + "Discount" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호 매겨진 쿠폰", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/coupons/{id}": { + "delete": { + "summary": "쿠폰 삭제", + "description": "쿠폰 삭제.\n\n주어진 ID로 {@link IShoppingCoupon 쿠폰}을 삭제합니다.\n\n참고로, 대상 쿠폰에서 이미 발행된 {@link IShoppingCouponTicket 티켓}이 있다면\n영향을 받지 않습니다.\n해당 티켓은 만료 시간까지 유효합니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 쿠폰의 {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "쿠폰 정보 가져오기", + "description": "쿠폰 정보를 얻으세요.\n\n{@link IShoppingCoupon 쿠폰} 정보를 얻으세요.\n\n{@link IShoppingCustomer 고객}인 경우,\n{@link IShoppingCouponTicket ticketable} 쿠폰만 이용할 수 있습니다.\n티켓이 없는 쿠폰은 410 gone 오류를 일으킵니다. 그렇지 않은 경우\n{@link IShoppingSeller 판매자} 또는 {@link IShoppingAdministrator 관리자}인 경우,\n티켓이 없는 쿠폰도 이용할 수 있습니다.", + "tags": [ + "Discount" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 쿠폰의 {@link IShoppingCoupon.id }" + } + ], + "responses": { + "200": { + "description": "쿠폰 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/orders": { + "patch": { + "summary": "모든 주문 나열", + "description": "모든 주문을 나열합니다.\n\n모든 {@link IShoppingOrder 주문}을 페이지 번호로 나열합니다.\n\n원하는 경우 요청 본문에서 {@link IShoppingOrder.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingOrder.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n참고로, {@link IShoppingCustomer 고객}인 경우\n자신의 주문을 나열할 수 있으며 주문이 {@link IShoppingOrderPublish.paid_at paid}되었는지 여부는 중요하지 않습니다.\n\n그렇지 않은 경우 {@link IShoppingSeller 판매자} 또는\n{@link IShoppingAdministrator 관리자}인 경우\n유료 주문만 나열할 수 있습니다. 또한 판매자의 경우 관련 {@link IShoppingOrder.goods 상품}만 주문에 나열됩니다.", + "tags": [ + "Order" + ], + "parameters": [], + "requestBody": { + "description": "페이지 매김, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 매김된 주문", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/orders/{id}": { + "get": { + "summary": "주문 정보 가져오기", + "description": "주문 정보 가져오기.\n\n자세한 {@link IShoppingOrder 주문} 정보 가져오기.\n\n{@link IShoppingCustomer 고객}이 아니라면 아직 {@link IShoppingOrderPublish.paid_at paid}되지 않은 주문에\n액세스할 수 없습니다. 이 경우\n404 찾을 수 없음 오류가 발생합니다.", + "tags": [ + "Order" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 주문의 {@link IShoppingOrder.id }" + } + ], + "responses": { + "200": { + "description": "주문 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingOrder" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales": { + "post": { + "summary": "판매 생성", + "description": "판매를 만듭니다.\n\n{@link IShoppingSeller Seller}는 운영을 위해 새로운 {@link IShoppingSale}을 만듭니다.\n\n참고로 판매는 {@link IShoppingSaleUnit 단위}, {@link IShoppingSaleUnitOption 옵션}\n및 {@link IShoppingSaleUnitStock 주식}으로 구성된 복잡한 계층 구조를 가지고 있습니다. 따라서 새로운 판매를 만들기 전에 {@link IShoppingSale} 및 관련 DTO 문서를 읽는 것이 좋습니다.\n\nERD(Entity Relationship Diagram) 및 해당 설명 문서도 도움이 될 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "판매 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 판매", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "summary": "요약된 모든 판매를 나열합니다.", + "description": "모든 요약된 판매를 나열합니다.\n\n모든 {@link IShoppingSale.ISummary 요약된 판매}를 나열합니다.\n\n보시다시피, 반환된 판매는 자세히 설명되지 않고 요약됩니다. 판매의 자세한 정보를 얻으려면 각 판매에 대해 {@link at} 함수를 사용합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매}에만 액세스할 수 있습니다. 그렇지 않은 경우\n{@link IShoppingCustomer 고객}인 경우 시장에서 운영 중인 판매만 볼 수 있습니다. 미개봉, 마감 또는 중단된 판매는 볼 수 없습니다.\n\n그런데 원하는 경우 요청 본문에서\n{@link IShoppingSale.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingSale.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약된 정보가 포함된 페이지 번호 매기기 판매", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSale.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}": { + "put": { + "summary": "판매 업데이트", + "description": "판매 업데이트.\n\n{@link IShoppingSale 판매}를 새 정보로 업데이트합니다.\n\n그런데, 판매는 실제로 수정되지 않고 판매의 새로운\n{@link IShoppingSaleSnapshot 스냅샷} 기록을 만듭니다. 첫 번째 목적은\n판매의 무결성을 유지하는 것입니다. 판매 수정으로 인해 판매에 이미 적용된 {@link IShoppingOrder 주문}에 영향을 미치지 않아야 합니다.\n\n두 번째 목적은 A/B 테스트를 위한 것입니다. {@link IShoppingSeller 판매자}는\n가격, 콘텐츠 및 제품 구성을 변경하여 운영 성과를 입증해야 합니다. 이 스냅샷 개념이 도움이 될 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 세일의 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "세일의 새로운 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "새로운 스냅샷으로 업데이트된 세일", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "summary": "세일 정보 가져오기", + "description": "세일 정보 가져오기.\n\n자세한 정보가 포함된 {@link IShoppingSale 세일} 가져오기.\n\n{@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 세일}에만 액세스할 수 있습니다. 그렇지 않은 경우\n{@link IShoppingCustomer 고객}인 경우 시장에서 운영 중인\n세일에만 액세스할 수 있습니다. 미개봉, 마감 또는 중단된\n세일에는 액세스할 수 없습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "타겟 세일 {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "description": "세일 상세정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/open": { + "put": { + "summary": "세일 오픈 및 마감시간 변경", + "description": "판매 시작 및 종료 시간 변경.\n\n{@link IShoppingSale 판매}의 시작 및 종료 시간 업데이트.\n\n그런데 판매가 아직 시작 또는 종료된 경우, 시작 시간을 변경할 수 없습니다.\n반대로 판매가 이미 시작되었지만\n아직 종료되지 않은 경우, 종료 시간을 변경할 수 있습니다.\n\n물론 종료 시간이 시작 시간보다 짧거나 그렇지 않은 경우,\n428 처리 불가 엔티티 오류가 발생합니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 판매의 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "새로운 오픈 및 마감 시간", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.IUpdateOpeningTime" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/replica": { + "post": { + "summary": "판매 복제본 가져오기", + "description": "판매 복제본 가져오기.\n\n복제를 위한 대상 판매의 {@link IShoppingSale.ICreate} 유형 정보 가져오기\n\n\n비슷한 정보로 새 복제본\n{@link IShoppingSale 판매}를 만드는 데 유용할 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 판매의 {@link IShoppingSale.id }" + } + ], + "responses": { + "201": { + "description": "복제를 위한 판매 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/pause": { + "delete": { + "summary": "판매 일시 중지", + "description": "판매를 일시 중지합니다.\n\n{@link IShoppingSale 판매}를 {@link open opens} 상태에서 일시 중지합니다.\n따라서 판매는\n{@link restore restored}될 때까지 다시 운영할 수 없습니다. 그런데, {@link IShoppingCustomer customer}는\n여전히 {@link index}와 {@link at} API endpint에서 판매할 수 있지만\n\"paused\" 라벨이 붙습니다.\n\n또한, customer는 더 이상 쇼핑 카트에 넣을 수 없습니다.\n판매가 이미 쇼핑 카트에 들어갔더라도\n{@link IShoppingCartCommodity merchandise}는 쇼핑 카트에 나열되지 않습니다.\n또한, 일시 중지된 판매의 상품으로\n{@link IShoppingOrder 주문}을 적용할 수도 없습니다.\n\n그런데, 판매가 이미 주문에 적용된 경우, 주문은\n{@link IShoppingOrderPublish 게시}될 수 있으며\n{@link IShoppingSeller 판매자}는\n상품을 고객에게 {@link IShoppingDelivery 배달}해야 합니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "타겟 세일 {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/suspend": { + "delete": { + "summary": "세일 중단", + "description": "판매 중단.\n\n{@link IShoppingSale 판매}를 {@link open opens} 상태에서 중단합니다.\n따라서 판매는\n{@link restore restored}될 때까지 다시 운영될 수 없으며 {@link IShoppingCustomer customer}는 {@link index} 및 {@link at} API에서 판매를 볼 수 없습니다.\n\n또한 고객은 더 이상 쇼핑 카트에 넣을 수 없습니다.\n판매가 이미 쇼핑 카트에 들어갔더라도\n{@link IShoppingCartCommodity merchandise}는 쇼핑 카트에 나열되지 않습니다.\n또한 중단된 판매의 상품에\n{@link IShoppingOrder 주문}을 적용할 수도 없습니다.\n\n그런데 판매가 이미 주문에 적용된 경우 주문은\n{@link IShoppingOrderPublish published}될 수 있으며\n{@link IShoppingSeller seller}는 고객에게 상품을 {@link IShoppingDelivery 배송}해야 합니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 판매의 {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{id}/restore": { + "put": { + "description": "판매 복원\n\n{@link IShoppingSale 판매}를 {@link pause paused} 또는\n{@link suspension suspended} 상태에서 복원\n\n따라서 판매는\n{@link IShoppingSale.closed_at closing time}에 도달하지 않은 경우 다시 운영될 수 있습니다.\n또한, {@link IShoppingCustomer 고객}이 일시 중지 또는 일시 중지될 때 판매를\n쇼핑 카트에 넣은 경우\n{@link IShoppingCartCommodity 상품}이\n쇼핑 카트에 다시 나열됩니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "타겟세일 {@link IShoppingSale.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{questionId}/answer": { + "post": { + "summary": "답변글을 작성하세요", + "description": "답변 기사를 작성하세요.\n\n{@link IShoppingCustomer}가 작성한 특정 {@link IShoppingSaleInquiry 질문 기사}에 대한 공식적인 {@link IShoppingSaleInquiryAnswer 답변 기사}를 작성하세요.\n\n이것은 질문 기사당 하나만 작성할 수 있는 공식적인 답변입니다(하지만 {@link update 업데이트 가능}). 따라서 {@link IShoppingSeller 판매자}가 신중하게 작성하도록 안내해야 합니다.\n\n또한 판매자는 질문 기사에 원하는 만큼 {@link IShoppingSaleInquiryComment 댓글}을 작성할 수 있으므로\n추가적인 커뮤니케이션에 유용할 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "questionId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 질문의 {@link IShoppingSaleQuestion.id }" + } + ], + "requestBody": { + "description": "답변 문서의 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 답변 문서", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "답변 문서 업데이트", + "description": "답변 기사 업데이트.\n\n공식적인 {@link IShoppingSaleInquiryAnswer 답변 기사}를\n{@link IShoppingCustomer}가 작성한\n특정 {@link IShoppingSaleInquiry 질문 기사}로 업데이트합니다.\n\n그런데, 이 쇼핑몰의\n기사와 관련된 일반 정책과 마찬가지로 질문 기사를 수정해도 실제로\n기존 콘텐츠는 변경되지 않습니다. 수정된 콘텐츠는 누적되어\n기존 기사 레코드에 새\n{@link IShoppingSaleInquiryAnswer.ISnapshot 스냅샷}으로 기록됩니다. 그리고 이는 {@link IShoppingCustomer 고객}과\n{@link IShoppingSeller 판매자}를 포함한 모든 사람에게 공개되며, 기사를 볼 수 있는 사람은\n전체 편집 내역도 볼 수 있습니다.\n\n이는 고객이나 판매자가 기사를 수정하고\n분쟁이 쉽게 발생하는 전자상거래의 특성상 상황을 조작하는 것을 방지하기 위한 것입니다. 즉, 증거를 보존하기 위한 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "questionId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 질문의 {@link IShoppingSaleQuestion.id }" + } + ], + "requestBody": { + "description": "답변 기사의 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "답변 기사의 새로 생성된 스냅샷 기록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments": { + "patch": { + "summary": "모든 문의 의견 나열", + "description": "모든 문의 댓글을 나열합니다.\n\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}의 모든 {@link IShoppingSaleInquiryComment 문의 댓글}을 {@link IPage 페이지 매김}과 함께 나열합니다.\n\n원하는 경우 요청 본문에서 {@link IShoppingSaleInquiryComment.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingSaleInquiryComment.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n그런데, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매}의 문의에만 액세스할 수 있습니다. 그렇지 않은 경우 판매의 모든 문의에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 문의의 {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 문의 댓글", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "문의 댓글 작성", + "description": "문의 댓글을 작성하세요.\n\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}에 대한 {@link IShoppingSaleInquiryComment 문의 댓글}을 작성하세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우,\n자신의 {@link IShoppingSale 판매} 문의에만 문의 댓글을 작성할 수 있습니다.\n그렇지 않은 경우 판매의 모든 문의에 문의 댓글을 작성할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의의 {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "문의 댓글 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 문의 댓글", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { + "get": { + "summary": "문의 댓글 정보 가져오기", + "description": "문의 댓글 정보를 받으세요.\n\n{@link IShoppingSaleInquiryComment 문의 댓글}\n{@link IShoppingSaleQuestion 질문} 또는\n{@link IShoppingSaleReview 리뷰}에 대한 자세한 정보를 받으세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매}의 문의 댓글에만 액세스할 수 있습니다.\n그렇지 않은 경우 판매의 모든 문의 댓글에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속 문의사항 {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의 댓글 {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "자세한 문의 댓글 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "문의 댓글 업데이트", + "description": "문의 댓글 업데이트.\n\n{@link IShoppingSaleInquiryComment 문의 댓글}을 특정\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}로 업데이트합니다.\n\n그런데, 이 쇼핑몰의 일반 정책인\n댓글에 대한 댓글 수정은 실제로 기존 콘텐츠를 변경하지 않습니다.\n수정된 콘텐츠는 기존 댓글 기록에 누적되어\n새로운 {@link IShoppingSaleInquiryComment.ISnapshot 스냅샷}으로 기록됩니다. 그리고 이것은\n이 문의 댓글을 읽을 수 있는 모든 사람에게 공개됩니다.\n\n이는 고객이나 판매자가 댓글을 수정하고\n분쟁이 쉽게 발생하는 전자상거래의 특성으로 인해 상황을 조작하는 것을 방지하기 위한 것입니다. 즉, 증거를 보존하기 위한 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 문의의 {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의 댓글의 {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "문의 댓글의 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "문의 댓글의 새로 생성된 스냅샷 레코드", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions": { + "patch": { + "summary": "요약된 모든 질문을 나열", + "description": "요약된 모든 질문을 나열합니다.\n\n{@link IShoppingSale 판매}의 모든 {@link IShoppingSaleQuestion.ISummary 요약된 질문}을 나열합니다.\n\n보시다시피, 반환된 질문은 자세히 설명하지 않고 요약합니다. 질문의 자세한 정보를 얻으려면 각 기사에 대해 {@link adridges} 함수\n또는 {@link at} 함수를 사용합니다.\n\n또한 반환된 질문에는 {@link IShoppingSaleQuestion.ISummary.answer}\n속성이 있는데, 이는 {@link IShoppingSeller}의 공식 답변을 의미합니다.\n또한 반환된 질문에는 다른 특별한 속성인\n{@link IShoppingSaleQuestion.ISummary.secret}이 있는데, 이는 다른\n원칙 속성에 대한 마스킹이 있으며, 이는 관련된 행위자만 질문을 {@link at 읽을 수 있음을 의미합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우, 자신의 {@link IShoppingSale 판매} 질문에만\n액세스할 수 있습니다. 그렇지 않은 경우,\n판매의 모든 질문에 액세스할 수 있습니다.\n\n그런데, 원하는 경우 요청 본문에서\n{@link IShoppingSaleQuestion.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한, {@link IShoppingSaleQuestion.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약된 정보가 있는 페이지 번호 매기기 질문", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/abridges": { + "patch": { + "summary": "모든 요약된 질문 나열", + "description": "모든 축약된 질문을 나열합니다.\n\n{@link IShoppingSale 판매}의 모든 {@link IShoppingSaleQuestion.IAbridge 축약된 질문}을 나열합니다.\n\n보시다시피, 반환된 질문은 자세한 정보가 아니라 축약된 것입니다. 질문의 자세한 정보를 얻으려면 각 기사에 {@link at} 함수를 사용합니다.\n\n또한 반환된 질문에는 {@link IShoppingSaleQuestion.IAridge.answer}\n속성이 있는데, 이는 {@link IShoppingSeller}의 공식 답변을 의미합니다.\n또한 반환된 질문에는 다른\n원칙 속성에 대한 마스크 처리가 있는 또 다른 특수 속성\n{@link IShoppingSaleQuestion.IAridge.secret}이 있으며, 이는 관련된 행위자만 질문을 {@link at 읽을 수 있음을 의미합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매} 질문에만 액세스할 수 있습니다. 그렇지 않으면\n판매의 모든 질문에 접근할 수 있습니다.\n\n그런데, 원하시면 요청 본문에서\n{@link IShoppingSaleQuestion.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한, {@link IShoppingSaleQuestion.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약 정보가 있는 페이지 번호 매기기 질문", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleQuestion.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/questions/{id}": { + "get": { + "summary": "질문 정보 받기", + "description": "질문 정보를 얻으세요.\n\n{@link IShoppingSale 판매}에 대한 자세한 {@link IShoppingSaleQuestion 질문} 정보를 얻으세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우, 자신의 {@link IShoppingSale 판매} 질문에만\n액세스할 수 있습니다. 그렇지 않은 경우\n{@link IShoppingCustomer 고객}인 경우, {@link IShoppingSaleQuestion.secret} 값을 제외한 판매의 모든 질문에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 질문의 {@link IShoppingSaleQuestion.id }" + } + ], + "responses": { + "200": { + "description": "자세한 질문 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleQuestion" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{reviewId}/answer": { + "post": { + "summary": "답변 기사 작성", + "description": "답변 기사를 작성하세요.\n\n{@link IShoppingCustomer}가 작성한 특정 {@link IShoppingSaleInquiry 리뷰 기사}에 대한 공식적인 {@link IShoppingSaleInquiryAnswer 답변 기사}를 작성하세요.\n\n리뷰 기사당 하나만 쓸 수 있는 공식적인 답변입니다(하지만 {@link update 업데이트 가능}). 따라서 {@link IShoppingSeller 판매자}가 신중하게 작성하도록 안내해야 합니다.\n\n또한 판매자는 리뷰 기사에 원하는 만큼 {@link IShoppingSaleInquiryComment 댓글}을 쓸 수 있으므로\n추가적인 커뮤니케이션에 유용할 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 세일의 {@link IShoppingSale.id }" + }, + { + "name": "reviewId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 리뷰의 {@link IShoppingSaleReview.id }" + } + ], + "requestBody": { + "description": "답변 기사의 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 답변 기사", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "답변 기사 업데이트", + "description": "답변 기사 업데이트.\n\n공식적인 {@link IShoppingSaleInquiryAnswer 답변 기사}를\n{@link IShoppingCustomer}가 작성한\n특정 {@link IShoppingSaleInquiry 리뷰 기사}로 업데이트합니다.\n\n그런데, 이 쇼핑몰의\n기사와 관련된 일반 정책과 마찬가지로 리뷰 기사를 수정해도 실제로\n기존 콘텐츠는 변경되지 않습니다. 수정된 콘텐츠는 누적되어\n기존 기사 레코드에 새\n{@link IShoppingSaleInquiryAnswer.ISnapshot 스냅샷}으로 기록됩니다. 그리고 이는 {@link IShoppingCustomer 고객}과\n{@link IShoppingSeller 판매자}를 포함한 모든 사람에게 공개되며, 기사를 볼 수 있는 사람은\n전체 편집 내역도 볼 수 있습니다.\n\n이는 고객이나 판매자가 기사를 수정하고\n분쟁이 쉽게 발생하는 전자상거래의 특성상 상황을 조작하는 것을 방지하기 위한 것입니다. 즉, 증거를 보존하기 위한 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "reviewId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 리뷰의 {@link IShoppingSaleReview.id }" + } + ], + "requestBody": { + "description": "답변 기사의 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IBbsArticle.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "답변 기사의 새로 생성된 스냅샷 기록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments": { + "patch": { + "summary": "모든 문의 댓글 나열", + "description": "모든 문의 댓글을 나열합니다.\n\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}의 모든 {@link IShoppingSaleInquiryComment 문의 댓글}을 {@link IPage 페이지 매김}과 함께 나열합니다.\n\n원하는 경우 요청 본문에서 {@link IShoppingSaleInquiryComment.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingSaleInquiryComment.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.\n\n그런데, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매}의 문의에만 액세스할 수 있습니다. 그렇지 않은 경우 판매의 모든 문의에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 문의의 {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 문의 댓글", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "문의 댓글 작성", + "description": "문의 댓글을 작성하세요.\n\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}에 대한 {@link IShoppingSaleInquiryComment 문의 댓글}을 작성하세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우,\n자신의 {@link IShoppingSale 판매} 문의에만 문의 댓글을 작성할 수 있습니다.\n그렇지 않은 경우 판매의 모든 문의에 문의 댓글을 작성할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "타겟 문의 {@link IShoppingSaleInquiry.id }" + } + ], + "requestBody": { + "description": "문의댓글 생성정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "새로 생성된 문의댓글", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { + "get": { + "summary": "문의댓글 정보 가져오기", + "description": "문의 댓글 정보를 받으세요.\n\n{@link IShoppingSaleInquiryComment 문의 댓글}\n{@link IShoppingSaleQuestion 질문} 또는\n{@link IShoppingSaleReview 리뷰}에 대한 자세한 정보를 받으세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매}의 문의 댓글에만 액세스할 수 있습니다.\n그렇지 않은 경우 판매의 모든 문의 댓글에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속 문의사항 {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의 댓글 {@link IShoppingSaleInquiryComment.id }" + } + ], + "responses": { + "200": { + "description": "자세한 문의 댓글 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "put": { + "summary": "문의 댓글 업데이트", + "description": "문의 댓글 업데이트.\n\n{@link IShoppingSaleInquiryComment 문의 댓글}을 특정\n{@link IShoppingSaleQuestion 질문} 또는 {@link IShoppingSaleReview 리뷰}로 업데이트합니다.\n\n그런데, 이 쇼핑몰의 일반 정책인\n댓글에 대한 댓글 수정은 실제로 기존 콘텐츠를 변경하지 않습니다.\n수정된 콘텐츠는 기존 댓글 기록에 누적되어\n새로운 {@link IShoppingSaleInquiryComment.ISnapshot 스냅샷}으로 기록됩니다. 그리고 이것은\n이 문의 댓글을 읽을 수 있는 모든 사람에게 공개됩니다.\n\n이는 고객이나 판매자가 댓글을 수정하고\n분쟁이 쉽게 발생하는 전자상거래의 특성으로 인해 상황을 조작하는 것을 방지하기 위한 것입니다. 즉, 증거를 보존하기 위한 것입니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 판매의 {@link IShoppingSale.id }" + }, + { + "name": "inquiryId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 문의의 {@link IShoppingSaleInquiry.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 문의 댓글의 {@link IShoppingSaleInquiryComment.id }" + } + ], + "requestBody": { + "description": "문의 댓글의 정보 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "문의 댓글의 새로 생성된 스냅샷 기록", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.ISnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews": { + "patch": { + "summary": "요약된 모든 리뷰를 나열합니다.", + "description": "모든 요약된 리뷰를 나열합니다.\n\n{@link IShoppingSale 판매}의 모든 {@link IShoppingSaleReview.ISummary 요약된 리뷰}를 나열합니다.\n\n보시다시피, 반환된 리뷰는 자세히 설명하지 않고 요약합니다.\n리뷰의 자세한 정보를 얻으려면 각 기사에 대해 {@link adridges} 함수\n또는 {@link at} 함수를 사용합니다.\n\n또한 반환된 리뷰에는 {@link IShoppingSaleReview.ISummary.answer}\n속성이 있는데, 이는 {@link IShoppingSeller}의 공식 답변을 의미합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매} 리뷰에만 액세스할 수 있습니다. 그렇지 않은 경우\n판매의 모든 리뷰에 액세스할 수 있습니다.\n\n그런데, 원하는 경우 요청 본문에서\n{@link IShoppingSaleReview.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한, {@link IShoppingSaleReview.IRequest.sort 정렬 조건}을 구성하여\n레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약된 정보가 있는 페이지 번호 매기기 리뷰", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/abridges": { + "patch": { + "summary": "모든 요약된 리뷰 나열", + "description": "모든 요약된 리뷰를 나열합니다.\n\n{@link IShoppingSale 판매}의 모든 {@link IShoppingSaleReview.IAbridge 요약된 리뷰}를 나열합니다.\n\n보시다시피, 반환된 리뷰는 자세한 정보가 아닌 요약된 것입니다.\n리뷰의 자세한 정보를 얻으려면 각 기사에 {@link at} 함수를 사용합니다.\n\n또한 반환된 리뷰에는 {@link IShoppingSaleReview.IAridge.answer}\n속성이 있는데, 이는 {@link IShoppingSeller}의 공식 답변을 의미합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매} 리뷰에만 액세스할 수 있습니다. 그렇지 않은 경우\n판매의 모든 리뷰에 액세스할 수 있습니다.\n\n그런데, 원하는 경우 요청 본문에서\n{@link IShoppingSaleReview.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한, {@link IShoppingSaleReview.IRequest.sort 정렬 조건}을 구성하여\n레코드의 시퀀스 순서를 사용자 정의할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "Belonged sale의 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 매기기, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약 정보가 포함된 페이지 번호 매기기 리뷰", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleReview.IAbridge" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/reviews/{id}": { + "get": { + "summary": "리뷰 정보 받기", + "description": "리뷰 정보를 얻으세요.\n\n{@link IShoppingSaleReview 리뷰}에 대한 자세한 정보를 얻으세요.\n{@link IShoppingSale 판매}.\n\n참고로, {@link IShoppingSeller 판매자}인 경우, 자신의 {@link IShoppingSale 판매} 리뷰에만 액세스할 수 있습니다. 그렇지 않은 경우\n{@link IShoppingCustomer 고객}인 경우 판매의 모든\n리뷰에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 리뷰의 {@link IShoppingSaleReview.id }" + } + ], + "responses": { + "200": { + "description": "자세한 리뷰 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleReview" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots/{id}/replica": { + "post": { + "summary": "스냅샷의 복제본 가져오기", + "description": "스냅샷의 복제본을 가져옵니다.\n\n복제를 위한 대상\n{@link IShoppingSaleSnapshot snapshot} 레코드의 {@link IShoppingSale.ICreate} 유형 정보를 가져옵니다.\n\n이전 스냅샷에서 새 복제 {@link IShoppingSale sale}\n를 만드는 데 유용합니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 스냅샷의 {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "201": { + "description": "복제를 위한 판매의 생성 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale.ICreate" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots": { + "patch": { + "summary": "모든 스냅샷을 나열합니다.", + "description": "모든 스냅샷을 나열합니다.\n\n{@link IShoppingSeller 판매자}가\n{@link IShoppingSale 판매}를 업데이트할 때마다 판매 기록은 업데이트되지 않지만 새로운\n{@link IShoppingSaleSnapshot 스냅샷} 레코드가 생성되어 판매 내역의\n무결성을 유지합니다. 이 API 함수는 이러한\n스냅샷 레코드를 나열하기 위한 것입니다.\n\n또한 반환 유형에서 볼 수 있듯이 반환된 스냅샷은\n자세한 정보가 아닌 요약되어 있습니다. 스냅샷의 자세한 정보를 얻으려면\n각 스냅샷에 대해 {@link at} 또는 {@link flipo} 함수를 사용합니다.\n\n참고로, {@link IShoppingSeller 판매자}인 경우 자신의 {@link IShoppingSale 판매}의\n스냅샷에만 액세스할 수 있습니다. 그렇지 않은 경우 판매가\n종료되거나 중단되었더라도\n모든 판매 스냅샷에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 세일 {@link IShoppingSale.id }" + } + ], + "requestBody": { + "description": "페이지 번호 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPage.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "요약 정보가 있는 페이지 번호 스냅샷", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleSnapshot.ISummary" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots/{id}": { + "get": { + "summary": "스냅샷 정보 가져오기", + "description": "스냅샷 정보를 가져옵니다.\n\n자세한 정보가 포함된 {@link IShoppingSaleSnapshot 스냅샷}을 가져옵니다.\n\n반환 유형에서 볼 수 있듯이 반환된 스냅샷에는 {@link IShoppingSale 판매} 정보가 포함되지 않습니다. 판매 정보를 가져오려면\n대신 {@link flip} 함수를 사용하세요.\n\n참고로, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매} 스냅샷에만 액세스할 수 있습니다. 그렇지 않은 경우\n판매가 종료되거나 중단되었더라도 판매의 모든 스냅샷에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 스냅샷의 {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "스냅샷의 자세한 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/snapshots/{id}/flip": { + "get": { + "summary": "뒤집힌 스냅샷 정보 가져오기", + "description": "뒤집힌 스냅샷 정보를 가져옵니다.\n\n뒤집힌 스냅샷의 {@link IShoppingSale 판매} 정보를 가져옵니다.\n\n반환 유형에서 볼 수 있듯이 이 함수는\n{@link IShoppingSale 판매} 정보를 반환합니다. 그런데 판매 정보는\n최신 정보가 아니라 스냅샷 측의 뒤집힌 정보입니다.\n\n또한, {@link IShoppingSeller 판매자}인 경우\n자신의 {@link IShoppingSale 판매}의 스냅샷에만 액세스할 수 있습니다. 그렇지 않은 경우 판매가\n종료되거나 중단되었더라도 판매의 모든 스냅샷에 액세스할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 스냅샷의 {@link IShoppingSaleSnapshot.id }" + } + ], + "responses": { + "200": { + "description": "스냅샷 측면의 자세한 판매 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSale" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements": { + "patch": { + "summary": "모든 보충제를 나열합니다.", + "description": "모든 보충제를 나열합니다.\n\n특정 {@link IShoppingSaleUnitStockSupplement 재고}의 모든 {@link IShoppingSaleUnitStockSupplement 보충제 내역}을 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingSaleUnitStockSupplement.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingSaleUnitStockSupplement.IRequest.sort} 속성을 구성하여\n레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소속된 유닛의 {@link IShoppingSaleUnit.id }" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 주식의 {@link IShoppingSaleUnitStock.id }" + } + ], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 보충제", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSaleUnitStockSupplement" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "post": { + "summary": "보충제 만들기", + "description": "보충제를 만듭니다.\n\n특정 {@link IShoppingSaleUnitStock 재고}의 {@link IShoppingSaleUnitStockSupplement 보충제 내역}을 만듭니다.\n\n따라서 대상 재고의 {@link IShoppingSaleUnitStockInventory.income 재고}는\n{@link IShoppingSaleUnitStockSupplement.value 보충제의 가치}만큼 증가합니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 단위의 {@link IShoppingSaleUnit.id }" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 재고의 {@link IShoppingSaleUnitStock.id }" + } + ], + "requestBody": { + "description": "보충제의 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.ICreate" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "보충제 생성", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements/{id}": { + "put": { + "summary": "보충제 업데이트", + "description": "보충제 업데이트.\n\n특정 {@link IShoppingSaleUnitStockSupplement 재고}의 {@link IShoppingSaleUnitStockSupplement 보충제}\n수량 값 업데이트.\n\n따라서 대상 재고의 {@link IShoppingSaleUnitStockInventory.income 재고}는\n{@link IShoppingSaleUnitStockSupplement.value 보충제 값}에 의해 변경됩니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 판매의 {@link IShoppingSale.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유한 단위의 {@link IShoppingSaleUnit.id }" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 주식의 {@link IShoppingSaleUnitStock.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 보충제의 {@link IShoppingSaleUnitStockSupplement.id }" + } + ], + "requestBody": { + "description": "보충제 정보(수량) 업데이트", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.ICreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "summary": "보충제 삭제", + "description": "보충제 삭제.\n\n특정\n{@link IShoppingSaleUnitStock 주식}의 {@link IShoppingSaleUnitStockSupplement 보충제} 삭제.\n\n따라서 대상 주식의 {@link IShoppingSaleUnitStockInventory.income 재고}는\n{@link IShoppingSaleUnitStockSupplement.value 보충제 가치}만큼 감소합니다.", + "tags": [ + "Sale" + ], + "parameters": [ + { + "name": "saleId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 판매의 {@link IShoppingSale.id }" + }, + { + "name": "unitId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "소유 단위의 {@link IShoppingSaleUnit.id }" + }, + { + "name": "stockId", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 재고의 {@link IShoppingSaleUnitStock.id }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 보충제의 {@link IShoppingSaleUnitStockSupplement.id }" + } + ], + "responses": { + "200": { + "content": { + "application/json": {} + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{channelCode}/categories": { + "patch": { + "summary": "자식 레코드가 있는 모든 범주를 나열합니다.", + "description": "모든 카테고리를 자식 레코드와 함께 나열합니다.\n\n{@link IShoppingChannelCategory.IHierarchical 카테고리}를 페이지 번호와 함께 나열합니다. 반환된 카테고리에는 자식 카테고리도 포함됩니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingChannelCategory.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingChannelCategory.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "소속된 채널의 {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "자식 카테고리가 있는 페이지가 매겨진 카테고리", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + } + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}": { + "get": { + "summary": "카테고리 정보 가져오기", + "description": "카테고리 정보 가져오기.\n\n자세한 {@link IShoppingChannelCategory 카테고리} 정보 가져오기.\n\n반환된 카테고리에는 계층적 자식 카테고리가 포함되고\n재귀적 부모 카테고리도 포함됩니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "소속된 채널의 {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 카테고리의 {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "자세한 카테고리 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}/invert": { + "get": { + "summary": "역순의 카테고리 정보 가져오기", + "description": "역전된 카테고리 정보를 가져옵니다.\n\n역전된 {@link IShoppingChannelCategory.IInvert 카테고리} 정보를 가져옵니다.\n\n반환된 카테고리에는 재귀적 부모 카테고리가 포함되지만\n계층적 자식 카테고리는 포함되지 않습니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "channelCode", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "소속 채널의 {@link IShoppingChannel.code }" + }, + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 카테고리의 {@link IShoppingChannelCategory.id }" + } + ], + "responses": { + "200": { + "description": "자세한 카테고리 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels": { + "patch": { + "summary": "모든 채널 나열", + "description": "모든 채널을 나열합니다.\n\n모든 {@link IShoppingChannel 채널}을 페이지 번호로 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingChannel.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한 {@link IShoppingChannel.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 채널", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/hierarchical": { + "patch": { + "summary": "중첩된 카테고리가 있는 모든 채널을 나열합니다.", + "description": "중첩된 카테고리가 있는 모든 채널을 나열합니다.\n\n{@link IShoppingChannel.IHierarchical 채널}을 {@link IPage 페이지 매김}으로 나열합니다. 반환된 채널에는 중첩된 계층적\n{@link IShoppingChannelCategory.IHierarchical 카테고리}가 포함됩니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingChannel.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다. 또한 {@link IShoppingChannel.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Systematic" + ], + "parameters": [], + "requestBody": { + "description": "페이지 매김, 검색 및 정렬에 대한 정보 요청", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "중첩된 카테고리가 있는 페이지 매김 채널", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{id}": { + "get": { + "summary": "채널 정보 가져오기", + "description": "채널 정보 가져오기.\n\n자세한 {@link IShoppingChannel.IHierarchical 채널} 정보 가져오기.\n\n반환된 채널 인스턴스에는 중첩된\n{@link IShoppingChannelCategory.IHierarchical 계층적 카테고리}\n정보도 포함됩니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 채널의 {@link IShoppingChannel.id }" + } + ], + "responses": { + "200": { + "description": "자세한 채널 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/channels/{code}/get": { + "get": { + "summary": "코드로 채널 정보 가져오기", + "description": "코드로 채널 정보를 가져옵니다.\n\n코드로 자세한 {@link IShoppingChannel.IHierarchical 채널} 정보를 가져옵니다.\n\n반환된 채널 인스턴스에는 중첩된\n{@link IShoppingChannelCategory.IHierarchical 계층적 범주}\n정보도 포함됩니다.", + "tags": [ + "Systematic" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 채널의 {@link IShoppingChannel.code }" + } + ], + "responses": { + "200": { + "description": "자세한 채널 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/sections": { + "patch": { + "summary": "모든 섹션을 나열합니다.", + "description": "모든 섹션을 나열합니다.\n\n모든 {@link IShoppingSection 섹션}을 페이지 번호로 나열합니다.\n\n원하는 경우 요청 본문에서\n{@link IShoppingSection.IRequest.search 검색 조건}을 구성하여 결과를 제한할 수 있습니다.\n또한 {@link IShoppingSection.IRequest.sort 정렬 조건}을 구성하여 레코드의 시퀀스 순서를 사용자 지정할 수 있습니다.", + "tags": [ + "Section" + ], + "parameters": [], + "requestBody": { + "description": "페이지 번호, 검색 및 정렬에 대한 요청 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection.IRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "페이지 번호가 매겨진 섹션", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IPageIShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/sections/{id}": { + "get": { + "summary": "섹션 정보 가져오기", + "description": "섹션 정보를 가져옵니다.\n\n자세한 {@link IShoppingSection section} 정보를 가져옵니다.", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "id", + "in": "path", + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "description": "대상 섹션의 {@link IShoppingSection.id }" + } + ], + "responses": { + "200": { + "description": "자세한 섹션 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + }, + "/shoppings/sellers/systematic/sections/{code}/get": { + "get": { + "summary": "코드로 섹션 정보를 가져옵니다.", + "description": "코드로 섹션 정보를 가져옵니다.\n\n코드로 자세한 {@link IShoppingSection section} 정보를 가져옵니다.", + "tags": [ + "Section" + ], + "parameters": [ + { + "name": "code", + "in": "path", + "schema": { + "type": "string" + }, + "required": true, + "description": "대상 섹션의 {@link IShoppingSection.code }" + } + ], + "responses": { + "200": { + "description": "자세한 섹션 정보", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IShoppingSection" + } + } + } + } + }, + "security": [ + { + "bearer": [] + } + ] + } + } + }, + "components": { + "schemas": { + "IPerformance": { + "type": "object", + "properties": { + "cpu": { + "$ref": "#/components/schemas/process.global.NodeJS.CpuUsage" + }, + "memory": { + "$ref": "#/components/schemas/process.global.NodeJS.MemoryUsage" + }, + "resource": { + "$ref": "#/components/schemas/process.global.NodeJS.ResourceUsage" + } + }, + "required": [ + "cpu", + "memory", + "resource" + ] + }, + "process.global.NodeJS.CpuUsage": { + "type": "object", + "properties": { + "user": { + "type": "number" + }, + "system": { + "type": "number" + } + }, + "required": [ + "user", + "system" + ] + }, + "process.global.NodeJS.MemoryUsage": { + "type": "object", + "properties": { + "rss": { + "type": "number", + "description": "Resident Set Size는 프로세스의 주 메모리 장치(총 할당된 메모리의 하위 집합)에서 차지하는 공간의 양으로, 모든 C++ 및 JavaScript 객체와 코드를 포함합니다." + }, + "heapTotal": { + "type": "number", + "title": "V8의 메모리 사용량을 나타냅니다.", + "description": "V8의 메모리 사용량을 나타냅니다." + }, + "heapUsed": { + "type": "number", + "title": "V8의 메모리 사용량을 나타냅니다.", + "description": "V8의 메모리 사용량을 나타냅니다." + }, + "external": { + "type": "number" + }, + "arrayBuffers": { + "type": "number", + "description": "V8의 메모리 사용량을 나타냅니다." + } + }, + "required": [ + "rss", + "heapTotal", + "heapUsed", + "external", + "arrayBuffers" + ] + }, + "process.global.NodeJS.ResourceUsage": { + "type": "object", + "properties": { + "fsRead": { + "type": "number" + }, + "fsWrite": { + "type": "number" + }, + "involuntaryContextSwitches": { + "type": "number" + }, + "ipcReceived": { + "type": "number" + }, + "ipcSent": { + "type": "number" + }, + "majorPageFault": { + "type": "number" + }, + "maxRSS": { + "type": "number" + }, + "minorPageFault": { + "type": "number" + }, + "sharedMemorySize": { + "type": "number" + }, + "signalsCount": { + "type": "number" + }, + "swappedOut": { + "type": "number" + }, + "systemCPUTime": { + "type": "number" + }, + "unsharedDataSize": { + "type": "number" + }, + "unsharedStackSize": { + "type": "number" + }, + "userCPUTime": { + "type": "number" + }, + "voluntaryContextSwitches": { + "type": "number" + } + }, + "required": [ + "fsRead", + "fsWrite", + "involuntaryContextSwitches", + "ipcReceived", + "ipcSent", + "majorPageFault", + "maxRSS", + "minorPageFault", + "sharedMemorySize", + "signalsCount", + "swappedOut", + "systemCPUTime", + "unsharedDataSize", + "unsharedStackSize", + "userCPUTime", + "voluntaryContextSwitches" + ] + }, + "ISystem": { + "type": "object", + "properties": { + "uid": { + "type": "number", + "title": "`ArrayBuffer` 및 `SharedArrayBuffer`에 할당된 메모리를 참조하며 모든 Node.js 버퍼를 포함합니다. 이는 외부 값에도 포함됩니다. Node.js가 임베디드 라이브러리로 사용되는 경우 `ArrayBuffer`에 대한 할당이 추적되지 않을 수 있으므로 이 값은 `0`일 수 있습니다.", + "description": "임의의 고유 ID" + }, + "arguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "임의의 고유 ID." + }, + "commit": { + "$ref": "#/components/schemas/ISystem.ICommit", + "title": "`process.argv`", + "description": "Git 커밋 정보" + }, + "package": { + "$ref": "#/components/schemas/ISystem.IPackage", + "description": "Git 커밋 정보." + }, + "created_at": { + "type": "string", + "title": "`package.json`", + "description": "이 서버의 생성 시간" + } + }, + "required": [ + "uid", + "arguments", + "commit", + "package", + "created_at" + ], + "description": "이 서버의 생성 시간." + }, + "ISystem.ICommit": { + "type": "object", + "properties": { + "shortHash": { + "type": "string" + }, + "branch": { + "type": "string" + }, + "hash": { + "type": "string" + }, + "subject": { + "type": "string" + }, + "sanitizedSubject": { + "type": "string" + }, + "body": { + "type": "string" + }, + "author": { + "$ref": "#/components/schemas/ISystem.ICommit.IUser" + }, + "committer": { + "$ref": "#/components/schemas/ISystem.ICommit.IUser" + }, + "authored_at": { + "type": "string" + }, + "commited_at": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shortHash", + "branch", + "hash", + "subject", + "sanitizedSubject", + "body", + "author", + "committer", + "authored_at", + "commited_at", + "tags" + ], + "description": "시스템 정보." + }, + "ISystem.ICommit.IUser": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "description": "Git 커밋 정보." + }, + "ISystem.IPackage": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "description": { + "type": "string" + }, + "main": { + "type": "string" + }, + "typings": { + "type": "string" + }, + "scripts": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "repository": { + "type": "object", + "properties": { + "type": { + "const": "git" + }, + "url": { + "type": "string" + } + }, + "required": [ + "type", + "url" + ] + }, + "author": { + "type": "string" + }, + "license": { + "type": "string" + }, + "bugs": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ] + }, + "homepage": { + "type": "string" + }, + "devDependencies": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "dependencies": { + "$ref": "#/components/schemas/Recordstringstring" + }, + "publishConfig": { + "type": "object", + "properties": { + "registry": { + "type": "string" + } + }, + "required": [ + "registry" + ] + }, + "files": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "version", + "description", + "scripts", + "repository", + "author", + "license", + "bugs", + "homepage", + "dependencies" + ], + "description": "Git 사용자 계정 정보." + }, + "Recordstringstring": { + "type": "object", + "properties": {}, + "description": "NPM 패키지 정보.", + "additionalProperties": { + "type": "string" + } + }, + "IShoppingAdministrator.IInvert": { + "type": "object", + "properties": { + "type": { + "const": "administrator", + "title": "T 유형의 속성 집합 K를 갖는 유형 구성", + "description": "고객 유형의 판별식" + }, + "member": { + "$ref": "#/components/schemas/IShoppingMember.IInvert", + "title": "고객 유형의 판별식.", + "description": "멤버십 가입 정보" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer.IInvert", + "title": "멤버십 가입 정보.", + "description": "고객, 연결 정보" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen", + "title": "고객, 연결 정보.", + "description": "실명 및 휴대폰 번호 인증 정보" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "실명 및 휴대폰 번호 인증 정보.", + "description": "기본 키" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키.", + "description": "레코드 생성 시간" + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "기록 생성 시간.\n\n다시 말해, 관리자가 가입한 시간입니다." + }, + "IShoppingMember.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "관리자 정보에서 시작하여 정보를 반전합니다.\n\n관리자 정보에 액세스하는 대신\n{@link IShoppingCustomer.member} -> {@link IShoppingMember.administrator},\n`IShoppingAdministrator.IInvert`는 관리자 정보에서 시작하여\n고객, 회원 및 {@link IShoppingCitizen 시민} 정보에 액세스합니다.", + "description": "기본 키" + }, + "nickname": { + "type": "string", + "title": "기본 키.", + "description": "회원을 고유하게 식별하는 별명" + }, + "emails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMemberEmail" + }, + "title": "회원을 고유하게 식별하는 별명.", + "description": "이메일 목록" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "이메일 목록.", + "description": "기록 생성 시간" + } + }, + "required": [ + "id", + "nickname", + "emails", + "created_at" + ], + "description": "기록 생성 시간.\n\n다른 말로, 회원이 가입한 시간." + }, + "IShoppingMemberEmail": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "회원의 정보 반전.\n\n이 반전 회원 정보는 아래와 같이 판매자와 관리자의 다른\n정보 반전에 사용되도록 설계되었습니다.\n\n- {@link IShoppingSeller.IInvert}\n- {@link IShoppingAdministrator.IInvert}", + "description": "기본 키" + }, + "value": { + "type": "string", + "format": "email", + "title": "기본 키.", + "description": "이메일 주소 값" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "이메일 주소 값.", + "description": "레코드 생성 시간" + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "레코드 생성 시간." + }, + "IShoppingCustomer.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "멤버의 이메일 주소.\n\n이 쇼핑몰 시스템에서는 여러 이메일 주소를\n한 {@link IShoppingMember 멤버}에 등록할 수 있습니다. 여러 이메일 주소를 계획할 필요가 없다면\n하나만 사용하세요.", + "description": "기본 키" + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "기본 키.", + "description": "소속 채널" + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "소속 채널.", + "description": "외부 사용자 정보" + }, + "href": { + "type": "string", + "format": "uri", + "title": "외부 사용자 정보.\n\n고객이 외부 서비스에서 온 경우.", + "description": "연결 주소" + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "연결 주소.\n\n클라이언트의 {@link window.location.href}와 동일합니다.", + "description": "참조자 주소" + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "참조자 주소.\n\n클라이언트의 {@link window.document.referrer}와 동일합니다.", + "description": "연결 IP 주소" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "연결 IP 주소.", + "description": "연결 레코드 생성 시간" + } + }, + "required": [ + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "연결 레코드 생성 시간." + }, + "IShoppingChannel": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "역전된 고객 정보.\n\n이 역전된 고객 정보는 아래와 같이 판매자와 관리자의\n다른 역전된 정보에 사용되도록 설계되었습니다.\n\n- {@link IShoppingSeller.IInvert}\n- {@link IShoppingAdministrator.IInvert}", + "description": "기본 키" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키.", + "description": "레코드 생성 시간" + }, + "code": { + "type": "string", + "title": "레코드 생성 시간.", + "description": "식별자 코드" + }, + "name": { + "type": "string", + "title": "식별자 코드.", + "description": "채널 이름" + } + }, + "required": [ + "id", + "created_at", + "code", + "name" + ], + "description": "채널 이름." + }, + "IShoppingExternalUser": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "채널 정보.\n\n`IShoppingChannel`은 시장에서 유통 채널을 형성하는 개념입니다.\n따라서 이 전자상거래 시스템에서 채널의 차이는\n다른 사이트 또는 애플리케이션이라는 것을 의미합니다.\n\n그런데, 쇼핑몰 시스템에 채널이 하나만 필요한 경우\n그냥 하나만 사용하세요. 이 개념은 향후 확장 가능하도록 설계되었습니다.", + "description": "기본 키" + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "기본 키.", + "description": "시민 활성화 정보" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "시민 활성화 정보.", + "description": "기록 생성 시간" + }, + "uid": { + "type": "string", + "title": "기록 생성 시간.\n\n다른 말로, 외부 사용자가 처음 연결한 시간.", + "description": "외부 시스템의 외부 사용자 식별자 키" + }, + "application": { + "type": "string", + "title": "외부 시스템의 외부 사용자 식별자 키.", + "description": "외부 서비스의 식별자 코드" + }, + "nickname": { + "type": "string", + "title": "외부 서비스의 식별자 코드.\n\n{@link IShoppingChannel.code}와 공통적으로 동일할 수 있습니다.", + "description": "외부 시스템의 외부 사용자 별명" + }, + "data": { + "description": "외부 시스템의 외부 사용자 별명." + } + }, + "required": [ + "id", + "citizen", + "created_at", + "uid", + "application", + "nickname", + "data" + ], + "description": "외부 시스템의 외부 사용자에 대한 추가 정보." + }, + "IShoppingCitizen": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "외부 사용자 정보.\n\n`IShoppingExternalUser`는 이 시스템이 외부 서비스에 연결하고 해당 사용자를 이 서비스의\n{@link IShoppingCustomer 고객}으로 환영해야 할 때 지정된 엔터티입니다.\n\n참고로, 외부 서비스에서 연결하는 고객은\n이 레코드가 있어야 하며, 외부 서비스 사용자는 두 가지\n속성 {@link application}과 {@link uid}를 통해 식별됩니다. 외부 서비스에서 연결된 고객이\n이 서비스에서\n{@link IShoppingCitizen 실명 인증}을 완료하면, 외부 서비스 사용자가 이 서비스에 다시 연결하고\n새로운 고객 인증 토큰을 발급할 때마다 실명 인증은\ncompleted로 시작합니다.\n\n그리고 {@link password}는 외부 서비스 시스템에서 사용자에게 발급한 비밀번호(소위 영구 사용자 인증 토큰)이며,\n실제 사용자 비밀번호가 아닙니다. 그러나 현재 외부 시스템 사용자와\n동일한 애플리케이션 및 uid를 입력한 고객의 경우, 이는\n이를 올바른 외부 시스템 사용자로 볼지 또는\n위반으로 볼지 여부를\n판단하기 위한 것입니다.\n\n또한 외부 서비스에서 수신한 추가 정보를 JSON 형식으로 데이터 필드에 기록할 수 있습니다.", + "description": "기본 키" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키.", + "description": "레코드 생성 시간" + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "레코드 생성 시간.", + "description": "휴대전화 번호" + }, + "name": { + "type": "string", + "title": "휴대전화 번호.", + "description": "실명 또는 동등한 별명" + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name" + ], + "description": "실명 또는 동등한 별명." + }, + "IShoppingAdministrator.IJoin": { + "type": "object", + "properties": {}, + "description": "시민 확인 정보.\n\n`IShoppingCitizen`은 사용자의\n{@link name 실명}과 {@link mobile} 입력 정보를 기록하는 엔티티입니다.\n\n참고로, 한국에서는 전자상거래 참여자에게 실명 인증이 요구되므로\n이름 속성이 중요합니다. 하지만\n해외의 상황은 다르므로 실제로는 모바일 속성이\n가장 중요하며, 개인 식별도 이 모바일을 기반으로 이루어집니다.\n\n물론 실명과 휴대전화 인증 정보는\n암호화되어 저장됩니다." + }, + "IShoppingMember.ILogin": { + "type": "object", + "properties": { + "email": { + "type": "string", + "format": "email", + "title": "가입 요청 정보.", + "description": "회원의 이메일 주소" + }, + "password": { + "type": "string", + "title": "회원의 이메일 주소.\n\n회원에게 이메일 주소가 여러 개 있는 경우 그 중 하나만 사용하세요.", + "description": "회원 계정의 비밀번호" + } + }, + "required": [ + "email", + "password" + ], + "description": "회원 계정의 비밀번호." + }, + "IShoppingCoupon": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "로그인 요청 정보.", + "description": "기본 키" + }, + "designer": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingAdministrator" + }, + { + "$ref": "#/components/schemas/IShoppingSeller" + } + ], + "title": "기본 키.", + "description": "쿠폰을 만든 디자이너" + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingCouponInventory", + "title": "쿠폰을 만든 디자이너.", + "description": "재고 정보" + }, + "criterias": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSectionCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSellerCriteria" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSaleCriteria" + }, + { + "$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": "재고 정보.", + "description": "기준 정보 목록" + }, + "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": "기준 정보 목록.", + "description": "할인 정보" + }, + "restriction": { + "$ref": "#/components/schemas/IShoppingCouponRestriction", + "title": "할인 정보.", + "description": "제한 정보" + }, + "name": { + "type": "string", + "title": "제한 정보.", + "description": "쿠폰의 대표 이름" + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "쿠폰의 대표 이름.", + "description": "쿠폰의 오픈 시간" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "쿠폰의 오픈 시간.", + "description": "쿠폰의 마감 시간" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "쿠폰의 마감 시간.\n\n이 시간 이후에는 티켓을 발급할 수 없습니다.\n\n그러나 이전에 발급된 티켓은 만료일까지 계속 사용할 수 있습니다.", + "description": "레코드의 생성 타이" + } + }, + "required": [ + "id", + "designer", + "inventory", + "criterias", + "discount", + "restriction", + "name", + "opened_at", + "closed_at", + "created_at" + ], + "description": "레코드의 생성 타이." + }, + "IShoppingAdministrator": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "할인 쿠폰.\n\n`IShoppingCoupon`은 쇼핑몰에서 할인 쿠폰을 상징하는 엔티티입니다.\n\n`IShoppingCoupon`은 할인 쿠폰에 대한 사양 정보만 포함합니다.\n\n이것은 할인 쿠폰의 발급을 의미하는 {@link IShoppingCouponTicket} 또는 지불을 의미하는 {@link IShoppingCouponTicketPayment}와는 다른 개념이라는 점에 유의하세요.\n\n또한 할인 쿠폰은 주문별로 적용되지만\n각각 고유한 제한이 있습니다. 예를 들어,\n{@link IShoppingCouponSellerCriteria}가 있는 쿠폰은 {@link IShoppingSeller}가 등록한 목록의\n{@link IShoppingSale}에만 사용할 수도 있고 사용하지 않을 수도 있습니다.\n또한, 할인 쿠폰을 사용하는 데에는\n{@link IShoppingCouponDiscount.threshold 최소 금액 제한}과\n{@link IShoppingCouponDiscount.limit 최대 할인 금액 제한}과 같은 제한이 있습니다.\n\n또한, 할인 쿠폰을 공개적으로 발행할지 또는\n특정 발행 코드를 아는 사람에게만 제공할지 설정할 수 있습니다. 또한\n발행된 할인 쿠폰에\n{@link IShoppingCouponRestriction.expired_at 만료 날짜}가 있거나\n특정 퍼널을 통해 들어온 고객에게만\n발행되는 것과 같은 제한이 있습니다.\n\n자세한 내용은 아래 속성과 나중에 설명하는\n자회사를 참조하세요.", + "description": "기본 키" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키.", + "description": "레코드 생성 시간" + } + }, + "required": [ + "id", + "created_at" + ], + "description": "레코드 생성 시간.\n\n다른 말로, 관리자가 가입한 시간입니다." + }, + "IShoppingSeller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "관리자 계정.\n\n`IShoppingAdministrator`는 쇼핑몰 시스템을 관리하는 사람을 구현한 엔티티로, {@link IShoppingMember 멤버십}에 가입합니다.\n\n참고로, 멤버십 가입 없이도 참여할 수 있는 {@link IShoppingCustomer 고객}과 달리 관리자는 멤버십에 가입해야 관리를 운영할 수 있습니다. 또한 관리자는\n{@link IShoppingCitizen 실명 및 모바일 인증}도 수행해야 합니다.", + "description": "기본 키" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키.", + "description": "기록의 생성 시간" + } + }, + "required": [ + "id", + "created_at" + ], + "description": "기록의 생성 시간.\n\n다른 말로, 판매자가 가입한 시간입니다." + }, + "IShoppingCouponInventory": { + "type": "object", + "properties": { + "volume": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "판매자 정보.\n\n`IShoppingSeller`는 판매 활동을 운영하기 위해\n{@link IShoppingSale sales}에 등록하고\n{@link IShoppingMember membership}에 가입하는 사람을 구체화한 엔티티입니다.\n\n참고로, 멤버십에 가입하지 않아도\n참여할 수 있는 {@link IShoppingCustomer customers}와 달리 판매자는 멤버십에 가입해야\n판매를 운영할 수 있습니다. 또한 판매자는\n{@link IShoppingCitizen 실명 및 모바일 인증}도 해야 합니다.", + "description": "모든 사람을 위한 남은 볼륨" + }, + "volume_per_citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "모든 사람을 위한 남은 볼륨.\n\n발행 수량에 제한이 있는 경우, 이 값을 초과하는 티켓을\n발행하는 것은 불가능해집니다.\n\n즉, N개의 쿠폰을 선착순으로 발행하는 개념이\n생성됩니다.", + "description": "시민당 남은 볼륨" + } + }, + "required": [ + "volume", + "volume_per_citizen" + ], + "description": "시민당 남은 볼륨.\n\n1인당 총 발행량에 대한 제한으로, 일반적으로\n1을 할당하여 동일한 시민에게 중복 발행을 제한하거나\n`nul`` 값을 사용하여 제한을 설정하지 않습니다.\n\n물론 N 값을 할당하면 동일한 시민에게 발행되는 총량을 제한할 수 있습니다." + }, + "IShoppingCouponChannelCriteria": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo" + }, + "minItems": 1, + "title": "쿠폰의 재고 정보.\n\n{@link IShoppingCoupon 쿠폰}이 제한된 재고로 설계된 경우\n이 `IShoppingCouponInventory` 구조는\n남은 재고 정보를 나타냅니다.", + "description": "대상 채널 및 카테고리 목록" + }, + "type": { + "const": "channel", + "title": "대상 채널 및 카테고리 목록.", + "description": "설명자 유형" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "설명자 유형.", + "description": "기준 방향" + } + }, + "required": [ + "channels", + "type", + "direction" + ], + "description": "기준 방향." + }, + "IShoppingCouponChannelCriteria.IChannelTo": { + "type": "object", + "properties": { + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "할인 쿠폰 채널에 대한 조건.\n\n`ishoppingcouponchannelcriteria`는\n{@link IShoppingCouponCriteriaBase}의 하위 유형 엔터티이며,\n특정 {@link IShoppingChannel 채널} 또는\n해당 채널의 {@link IShoppingChannelCategory 카테고리}에 대한 조건을 설정할 때 사용됩니다.\n\n{@link direction} 값이 \"include\"인 경우 쿠폰은 대상 채널(또는 카테고리)에만\n사용할 수 있습니다. 반대로 \"exclude\"인 경우\n사용할 수 없는 쿠폰입니다.", + "description": "대상 채널" + }, + "categories": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "minItems": 1 + } + ], + "title": "대상 채널.", + "description": "대상 카테고리 목록" + } + }, + "required": [ + "channel", + "categories" + ] + }, + "IShoppingChannelCategory.IInvert": { + "type": "object", + "properties": { + "parent": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + ], + "title": "대상 카테고리 목록.", + "description": "재귀적 구조가 있는 상위 카테고리 정보" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "재귀적 구조가 있는 상위 카테고리 정보.\n\n상위가 없는 경우 `null`이 됩니다.", + "description": "기본 키" + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "기본 키.", + "description": "상위 카테고리 ID" + }, + "name": { + "type": "string", + "title": "상위 카테고리 ID.", + "description": "카테고리의 대표 이름" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "카테고리의 대표 이름.\n\n이름은 상위 카테고리 내에서 고유해야 합니다. 상위가 없는 경우\n채널 내에서 부모 카테고리가 없는 경우 이름은 고유해야 합니다.", + "description": "레코드 생성 시간" + } + }, + "required": [ + "parent", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "레코드 생성 시간." + }, + "IShoppingCouponSectionCriteria": { + "type": "object", + "properties": { + "sections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSection" + }, + "minItems": 1, + "title": "부모 카테고리와 카테고리 정보를 반전합니다.", + "description": "포함 또는 제외할 대상 섹션" + }, + "type": { + "const": "section", + "title": "포함 또는 제외할 대상 섹션.", + "description": "설명자 유형" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "설명자 유형.", + "description": "기준의 방향" + } + }, + "required": [ + "sections", + "type", + "direction" + ], + "description": "기준의 방향." + }, + "IShoppingSection": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "할인 쿠폰 섹션에 대한 조건.\n\n`IShoppingCouponSectionCriteria`는\n{@link IShoppingCouponCriteriaBase}의 하위 유형 엔터티이며 특정 {@link IShoppingSection 섹션}에 대한 조건을 설정할 때 사용됩니다.\n\n{@link direction} 값이 \"include\"인 경우 쿠폰은 대상 {@link 섹션}에만\n사용할 수 있습니다. 반대로 \"exclude\"인 경우 쿠폰을\n사용할 수 없습니다.", + "description": "기본 키" + }, + "code": { + "type": "string", + "title": "기본 키.", + "description": "식별자 코드" + }, + "name": { + "type": "string", + "title": "식별자 코드.", + "description": "섹션의 대표 이름" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "섹션의 대표적 이름.", + "description": "레코드 생성 시간" + } + }, + "required": [ + "id", + "code", + "name", + "created_at" + ], + "description": "레코드 생성 시간." + }, + "IShoppingCouponSellerCriteria": { + "type": "object", + "properties": { + "sellers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "minItems": 1, + "title": "섹션 정보.\n\n`IShoppingSection`은 시장의 공간 정보를 나타내는 개념입니다.\n\n여기서 언급한 섹션을 오프라인 시장과 비교해보면, \"과일 코너\"나\n\"정육점 코너\"와 같이 매장 내에서 공간적으로 분리된 구역을 의미합니다. 따라서 {@link IShoppingSale sale} 엔터티에서는 여러 섹션을 동시에 분류할 수 없고, 단 하나의 섹션만 분류할 수 있습니다.\n\n그런데, 쇼핑몰 시스템에 섹션이 하나만 필요한 경우,\n단 하나만 사용하세요. 이 개념은 향후 확장 가능하도록 설계되었습니다.", + "description": "대상 판매자를 포함하거나 제외합니다." + }, + "type": { + "const": "seller", + "title": "대상 판매자를 포함하거나 제외합니다.", + "description": "설명자 유형" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "설명자 유형.", + "description": "기준의 방향" + } + }, + "required": [ + "sellers", + "type", + "direction" + ], + "description": "기준의 방향." + }, + "IShoppingCouponSaleCriteria": { + "type": "object", + "properties": { + "sales": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSale.ISummary" + }, + "minItems": 1, + "title": "할인 쿠폰 판매자에 대한 조건.\n\n`IShoppingCouponSellerCriteria`는\n{@link IShoppingCouponCriteriaBase}의 하위 유형 엔터티이며 특정 {@link IShoppingSeller 판매자}에 대한 조건을 설정할 때 사용됩니다.\n\n{@link direction} 값이 \"include\"인 경우 쿠폰은 대상 {@link seller}에만\n사용할 수 있습니다. 반대로 \"exclude\"인 경우 쿠폰을\n사용할 수 없습니다.", + "description": "포함 또는 제외할 대상 판매" + }, + "type": { + "const": "sale", + "title": "포함 또는 제외할 대상 판매", + "description": "설명자 유형" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "설명자 유형.", + "description": "기준의 방향" + } + }, + "required": [ + "sales", + "type", + "direction" + ], + "description": "기준의 방향." + }, + "IShoppingSale.ISummary": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "할인 쿠폰 판매 조건.\n\n`IShoppingCouponSaleCriteria`는\n{@link IShoppingCouponCriteriaBase}의 하위 유형 엔터티이며 특정 {@link IShoppingSale 판매}에 대한 조건을 설정할 때 사용됩니다.\n\n{@link direction} 값이 \"include\"인 경우 쿠폰은 대상 {@link 판매}에만\n사용할 수 있습니다. 반대로 \"exclude\"인 경우 쿠폰을\n사용할 수 없습니다.", + "description": "Belonged 섹션" + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "Belonged 섹션.", + "description": "판매를 등록한 판매자" + }, + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange", + "title": "판매를 등록한 판매자", + "description": "단위의 가격 범위" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "단위의 가격 범위", + "description": "판매의 기본 키" + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "판매의 기본 키.", + "description": "스냅샷의 기본 키" + }, + "latest": { + "type": "boolean", + "title": "스냅샷의 기본 키", + "description": "스냅샷이 최신인지 여부" + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "스냅샷이 최신인지 여부", + "description": "판매를 설명하는 설명 및 이미지 콘텐츠" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "판매를 설명하는 설명 및 이미지 콘텐츠", + "description": "채널 및 카테고리 목록" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "채널 및 카테고리 목록.\n\n판매가 등록된 채널 및 카테고리.", + "description": "검색 태그 목록" + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ISummary" + }, + "minItems": 1, + "title": "검색 태그 목록.", + "description": "단위 목록" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "단위 목록.\n\n판매에서 판매되는 개별 제품 구성 정보에 대한 기록. 각 {@link IShoppingSaleUnit 단위} 기록에는 구성 가능한\n{@link IShoppingSaleUnitOption 옵션},\n{@link IShoppingSaleUnitOptionCandidate 후보} 값(각 옵션에 대해) 및 {@link IShoppingSaleUnitStock 최종 재고}가 있으며, 이는\n각 옵션의 모든 후보 값을 선택하여 결정합니다.", + "description": "기록 생성 시간" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "기록 생성 시간.\n\n이 속성은 {@link opens_at}와 다릅니다.\n즉, 판매 시점이 열렸다는 의미입니다.", + "description": "기록의 마지막 업데이트 시간" + }, + "paused_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "기록의 마지막 업데이트 시간.\n\n다시 말해, 마지막 스냅샷의 생성 시간입니다.", + "description": "판매의 일시 중지 시간" + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "판매 일시 중지 시간.\n\n어떤 이유에서인지 판매자가 판매를 일시 중지했습니다.\n\n{@link IShoppingCustomer Customers}는 여전히 목록과 세부 정보 페이지에서 판매를 볼 수 있지만, 판매에는 경고 라벨이 있습니다.\n\"판매자가 판매를 일시 중지했습니다\".", + "description": "판매 일시 중지 시간" + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "판매 중단 시간.\n\n어떤 이유로 판매자가 판매를 중단했습니다.\n\n{@link IShoppingCustomer 고객}은 목록과 세부 정보 페이지에서 판매를 볼 수 없습니다. 소프트 삭제와 거의 동일하지만\n소유자\n{@link IShoppingSeller 판매자}가 여전히 판매를 보고 재개할 수 있다는 약간의 차이가 있습니다.\n\n물론, 이미 판매를 구매한 {@link IShoppingCustomer 고객}은\n{@link IShoppingOrder 주문} 페이지에서 판매를 볼 수 있습니다.", + "description": "판매 시작 시간" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "판매 시작 시간.", + "description": "판매 마감 시간" + } + }, + "required": [ + "section", + "seller", + "price_range", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "판매 마감 시간.\n\n이 값이 `null`이면 판매가 영원히 계속됩니다." + }, + "IShoppingSeller.IInvert": { + "type": "object", + "properties": { + "type": { + "const": "seller", + "title": "판매에 대한 요약 정보.\n\n이 요약 정보는 페이지 나누기에 사용됩니다.", + "description": "고객 유형에 대한 판별식" + }, + "member": { + "$ref": "#/components/schemas/IShoppingMember.IInvert", + "title": "고객 유형에 대한 판별식", + "description": "멤버십 가입 정보" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer.IInvert", + "title": "멤버십 가입 정보.", + "description": "고객, 연결 정보" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen", + "title": "고객, 연결 정보.", + "description": "실명 및 휴대폰 번호 인증 정보" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "실명 및 휴대폰 번호 인증 정보.", + "description": "기본 키" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키.", + "description": "기록 생성 시간" + } + }, + "required": [ + "type", + "member", + "customer", + "citizen", + "id", + "created_at" + ], + "description": "기록 생성 시간.\n\n다시 말해 판매자가 가입한 시간입니다." + }, + "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": "판매자 정보에서 시작하여 정보를 반전합니다.\n\n판매자 정보에 액세스하는 대신\n{@link IShoppingCustomer.member} -> {@link IShoppingMember.seller},\n`IShoppingSeller.IInvert`는 판매자 정보에서 시작하여\n고객, 회원 및 {@link IShoppingCitizen 시민} 정보에 대한 액세스가 반대로 이루어집니다.", + "description": "명목 가격" + }, + "real": { + "type": "number", + "minimum": 0, + "title": "명목 가격.\n\n이것은 지불해야 할 {@link 실제 실제 가격}이 아니라, 표시해야 할 명목 가격일 뿐입니다.\n이 값이 {@link 실제 실제 가격}보다 큰 경우, {@link IShoppingSeller 판매자}가 할인을 제공하는 것처럼 표시됩니다.", + "description": "지불해야 할 실제 가격" + } + }, + "required": [ + "nominal", + "real" + ], + "description": "지불해야 할 실제 가격." + }, + "IShoppingSaleContent.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "title": { + "type": "string" + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + } + } + }, + "required": [ + "id", + "title", + "thumbnails" + ] + }, + "IAttachmentFile": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "쇼핑 가격 인터페이스.", + "description": "기본 키" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키.", + "description": "첨부 파일 생성 시간" + }, + "name": { + "type": "string", + "maxLength": 255, + "title": "첨부 파일 생성 시간.", + "description": "확장자를 제외한 파일 이름" + }, + "extension": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "title": "파일 이름(확장자 제외).\n\n`.gitignore` 파일이 있는 경우, 그 이름은 빈 문자열입니다.", + "description": "확장자" + }, + "url": { + "type": "string", + "format": "uri", + "title": "확장자.\n\n`README`와 같은 경우 생략 가능.", + "description": "실제 파일의 URL 경로" + } + }, + "required": [ + "id", + "created_at", + "name", + "extension", + "url" + ], + "description": "실제 파일의 URL 경로." + }, + "IShoppingSaleChannel": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "title": "첨부 파일.\n\n현재 시스템에서 관리하는 모든 첨부 파일.\n\n참고로, `.gitignore` 또는 `README`와 같이 파일 {@link name}\n또는 {@link extension} 중 하나를 생략할 수 있지만, 둘 다 생략할 수는 없습니다.", + "description": "판매를 나열하는 채널의 카테고리 목록" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "판매를 나열한 채널의 카테고리 목록.\n\n비어 있는 경우 채널의 모든 카테고리가 판매를 나열한다는 의미입니다.", + "description": "기본 키" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키.", + "description": "레코드 생성 시간" + }, + "code": { + "type": "string", + "title": "레코드 생성 시간.", + "description": "식별자 코드" + }, + "name": { + "type": "string", + "title": "식별자 코드.", + "description": "채널 이름" + } + }, + "required": [ + "categories", + "id", + "created_at", + "code", + "name" + ], + "description": "채널 이름." + }, + "IShoppingSaleUnit.ISummary": { + "type": "object", + "properties": { + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "판매할 판매 대상 채널(및 카테고리).\n\n`IShoppingSaleChannel`은 {@link IShoppingChannel channel}에서 {@link IShoppingSale} 목록이 판매되는 방식을 표현하는 엔터티입니다.\n\n또한 {@link IShoppingChannelCategory categories}가 지정된 경우 판매가\n판매됨을 의미합니다. 그렇지 않은 경우 채널의 카테고리가 지정되지 않으면 채널의 모든 카테고리가\n대상 판매를 나열하고 있음을 의미합니다.", + "description": "기본 키" + }, + "name": { + "type": "string", + "title": "기본 키.", + "description": "단위의 대표 이름" + }, + "primary": { + "type": "boolean", + "title": "단위의 대표적 이름.", + "description": "단위가 기본인지 아닌지" + }, + "required": { + "type": "boolean", + "title": "단위가 기본인지 아닌지.\n\n라벨링 값일 뿐입니다.", + "description": "단위가 필요한지 아닌지" + } + }, + "required": [ + "price_range", + "id", + "name", + "primary", + "required" + ] + }, + "IShoppingCouponFunnelCriteria": { + "type": "object", + "properties": { + "funnels": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" + } + ] + }, + "minItems": 1, + "title": "단위가 필요한지 아닌지.\n\n단위가 필요한 경우 고객이 단위를 선택해야 합니다. 선택하지 않으면 고객이 구매할 수 없습니다.\n\n예를 들어 \"Macbook 세트\" 세일이 있고 단위 중 하나가\n\"Main Body\"인 경우 \"Main Body\" 단위 없이 \"Macbook 세트\"를 구매할 수 있습니까? 이 속성은 그런 경우에 해당합니다.", + "description": "타겟 퍼널 목록" + }, + "type": { + "const": "funnel", + "title": "타겟 퍼널 목록.", + "description": "설명자 유형" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ], + "title": "설명자 유형.", + "description": "기준의 방향" + } + }, + "required": [ + "funnels", + "type", + "direction" + ], + "description": "기준의 방향." + }, + "IShoppingCouponFunnelCriteria.IValueFunnel": { + "type": "object", + "properties": { + "kind": { + "oneOf": [ + { + "const": "url" + }, + { + "const": "referrer" + } + ], + "title": "할인 쿠폰의 퍼널을 제한합니다.\n\n`ishoppingcouponfunnelcriteria`는\n{@link IShoppingCouponCriteria}의 하위 유형 엔터티이며, 특정 경로에서 온 {@link IShoppingCustomer 고객}에게만 할인 쿠폰을 발급하거나 제외할 때 사용합니다.\n\n퍼널 제한은 3가지 방법으로 가능합니다. 첫 번째는\n{@link IShoppingCustomer.referrer}이며, 고객의 액세스 주소를 기록하는\n{@link IShoppingCustomer.href}를 구문 분석하여 특정 URL 또는 변수 단위로 제한을 만들 수 있습니다.", + "description": "퍼널 제한의 종류" + }, + "value": { + "type": "string", + "title": "퍼널 제한의 종류.", + "description": "대상 값" + } + }, + "required": [ + "kind", + "value" + ], + "description": "대상 값." + }, + "IShoppingCouponFunnelCriteria.IVariableFunnel": { + "type": "object", + "properties": { + "kind": { + "const": "variable", + "title": "값에 따른 퍼널 제한의 종류.", + "description": "퍼널 제한의 종류" + }, + "key": { + "type": "string", + "title": "퍼널 제한의 종류.", + "description": "대상 변수의 키" + }, + "value": { + "type": "string", + "title": "대상 변수의 키.", + "description": "대상 변수의 값" + } + }, + "required": [ + "kind", + "key", + "value" + ], + "description": "대상 변수의 값." + }, + "IShoppingCouponDiscount.IAmount": { + "type": "object", + "properties": { + "unit": { + "const": "amount", + "title": "변수에 따른 퍼널 제한의 종류.", + "description": "할인 단위를 금액으로" + }, + "value": { + "type": "number", + "title": "할인 단위를 금액으로\n\n주문 가격이 금액 값만큼 할인된다는 것을 의미합니다.", + "description": "할인 값을 금액으로" + }, + "threshold": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ], + "title": "할인 값을 금액으로.", + "description": "할인을 위한 최소 구매 금액" + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 + } + ], + "title": "할인을 위한 최소 구매 금액.\n\n이 값을 설정하면 할인 쿠폰을 이 값보다 적은 주문 총액에 적용할 수 없습니다.", + "description": "할인을 위한 최대 금액" + }, + "multiplicative": { + "type": "boolean", + "title": "할인을 위한 최대 금액.\n\n이 값을 설정하면 주문량에 관계없이 추가 할인이 제공되지 않습니다. 이 속성은 {@link multiplicative}가 `true`일 때만 의미가 있습니다.", + "description": "곱셈 여부" + } + }, + "required": [ + "unit", + "value", + "threshold", + "limit", + "multiplicative" + ], + "description": "곱셈 여부.\n\n이 속성이 `true`이면 할인 값은 {@link IShoppingCartCommodity.volume} 또는\n{@link IShoppingOrderGood.volume} 값에 곱해집니다. 또한 이 경우 {@link limit} 속성이 의미가 있습니다." + }, + "IShoppingCouponDiscount.IPercent": { + "type": "object", + "properties": { + "unit": { + "const": "percent", + "title": "금액 단위가 있는 할인 정보.", + "description": "할인 단위(백분율)" + }, + "value": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "할인 단위(백분율)\n\n주문 가격이 백분율 값만큼 할인된다는 의미입니다.", + "description": "할인 값(백분율)" + }, + "threshold": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ], + "title": "할인 값(백분율)", + "description": "할인을 위한 최소 구매 금액" + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 + } + ], + "title": "할인을 위한 최소 구매 금액.\n\n이 값을 설정하면 할인 쿠폰을 이 값보다 적은 주문 총액에 적용할 수 없습니다.", + "description": "할인 가능한 최대 금액" + } + }, + "required": [ + "unit", + "value", + "threshold", + "limit" + ], + "description": "할인 가능한 최대 금액.\n\n이 값을 설정하면 주문 수량에 관계없이 추가 할인이 제공되지 않습니다." + }, + "IShoppingCouponRestriction": { + "type": "object", + "properties": { + "access": { + "oneOf": [ + { + "const": "public" + }, + { + "const": "private" + } + ], + "title": "퍼센트 단위로 할인 정보.", + "description": "쿠폰의 액세스 수준" + }, + "exclusive": { + "type": "boolean", + "title": "쿠폰의 접근 수준.\n\n- public: public API에서 찾을 수 있음\n- private: public API에서 찾을 수 없음\n- 판매자 또는 관리자가 임의로 지정\n- 일회성 링크에서 발급", + "description": "독점 여부" + }, + "volume": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "독점성 여부.\n\n독점 할인 쿠폰은 다른 할인 쿠폰과\n독점적인 관계가 있으며 단독으로만\n사용할 수 있는 할인 쿠폰을 말합니다. 즉, 독점 할인 쿠폰을 사용하면 다른 할인 쿠폰을 같은\n{@link IShoppingOrder 주문} 또는 {@link IShoppingOrderGood good}에 사용할 수 없습니다.\n\n이 독점 속성은 곱셈과 매우 다른 개념이라는 점에 유의하세요. 곱셈은 같은 쿠폰을 곱하여 같은 주문의 여러 쿠폰에 적용할 수 있는지 여부를 의미하므로\n혼동하지 마세요.", + "description": "한정 수량 발행" + }, + "volume_per_citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "한정 수량 발행.\n\n발행 수량에 제한이 있는 경우 이 값을 초과하는 티켓을 발행하는 것은 불가능해집니다.\n\n즉, N개의 쿠폰을 선착순으로 발행하는 개념이 만들어집니다.", + "description": "1인당 한정 수량 발행" + }, + "expired_in": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "1인당 발행되는 수량 제한\n\n1인당 발행 총액 제한으로, 같은 시민에게 중복 발행을 제한하기 위해 1을 할당하거나, NULL 값을 사용하여 제한을 설정하지 않는 것이 일반적입니다.\n\n물론, N 값을 할당하면 같은 시민에게 발행되는 총액을 제한할 수 있습니다.", + "description": "만료일 값" + }, + "expired_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "만료일 값.\n\n할인 쿠폰 티켓이 발행된 후 N일 후에 만료된다는 개념.\n\n따라서 고객은 가능하면 발행된 날로부터 N일 이내에 티켓을 사용해야 합니다.", + "description": "만료일" + } + }, + "required": [ + "access", + "exclusive", + "volume", + "volume_per_citizen", + "expired_in", + "expired_at" + ], + "description": "만료일.\n\n할인 쿠폰 티켓이 발행된 후 YYYY-MM-DD 이후에 만료되는 개념.\n\nexpired_in을 사용하면 두 가지 제한이 가능하며, 그 중 만료일이 짧은 것을 사용합니다." + }, + "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": "쿠폰의 제한 정보.", + "description": "할인 정보" + }, + "restriction": { + "$ref": "#/components/schemas/IShoppingCouponRestriction", + "title": "할인 정보.", + "description": "제한 정보" + }, + "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": "제한 정보.", + "description": "쿠폰의 대표 이름" + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "쿠폰의 대표 이름.", + "description": "쿠폰의 오픈 시간" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "쿠폰의 오픈 시간.", + "description": "쿠폰의 마감 시간" + } + }, + "required": [ + "discount", + "restriction", + "criterias", + "disposable_codes", + "name", + "opened_at", + "closed_at" + ], + "description": "쿠폰의 마감 시간.\n\n이 시간 이후에는 티켓을 발급할 수 없습니다.\n\n그러나 이전에 발급된 티켓은 만료일까지 계속 사용할 수 있습니다." + }, + "IShoppingCouponChannelCriteria.ICreate": { + "type": "object", + "properties": { + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo.ICreate" + }, + "minItems": 1, + "title": "쿠폰의 생성 정보.", + "description": "대상 채널 및 카테고리 목록" + }, + "type": { + "const": "channel" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "channels", + "type", + "direction" + ], + "description": "대상 채널 및 카테고리 목록." + }, + "IShoppingCouponChannelCriteria.IChannelTo.ICreate": { + "type": "object", + "properties": { + "channel_code": { + "type": "string", + "title": "채널 기준의 생성 정보.", + "description": "대상 채널의 {@link IShoppingChannel.code}" + }, + "category_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + ], + "title": "대상 채널의 {@link IShoppingChannel.code}.", + "description": "대상 카테고리의 {@link IShoppingChannelCategory.id}" + } + }, + "required": [ + "channel_code", + "category_ids" + ], + "description": "대상 카테고리의 {@link IShoppingChannelCategory.id}." + }, + "IShoppingCouponSectionCriteria.ICreate": { + "type": "object", + "properties": { + "section_codes": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "title": "대상 채널 및 카테고리.", + "description": "대상 섹션의 {@link IShoppingSection.code} 목록" + }, + "type": { + "const": "section" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "section_codes", + "type", + "direction" + ], + "description": "대상 섹션의 {@link IShoppingSection.code} 목록." + }, + "IShoppingCouponSellerCriteria.ICreate": { + "type": "object", + "properties": { + "seller_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "minItems": 1, + "title": "섹션 기준의 생성 정보.", + "description": "대상 판매자의 {@link IShoppingSeller.id} 목록" + }, + "type": { + "const": "seller" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "seller_ids", + "type", + "direction" + ], + "description": "대상 판매자의 {@link IShoppingSeller.id} 목록." + }, + "IShoppingCouponSaleCriteria.ICreate": { + "type": "object", + "properties": { + "sale_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "minItems": 1, + "title": "판매자 기준의 생성 정보.", + "description": "대상 판매의 {@link IShoppingSale.id} 목록" + }, + "type": { + "const": "sale" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "sale_ids", + "type", + "direction" + ], + "description": "대상 판매의 {@link IShoppingSale.id} 목록." + }, + "IShoppingCouponFunnelCriteria.ICreate": { + "type": "object", + "properties": { + "funnels": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" + } + ] + }, + "minItems": 1, + "title": "판매 기준의 생성 정보.", + "description": "대상 퍼널 목록" + }, + "type": { + "const": "funnel" + }, + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] + } + }, + "required": [ + "funnels", + "type", + "direction" + ], + "description": "대상 퍼널 목록." + }, + "IPageIShoppingCoupon": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "퍼널 기준의 생성 정보.", + "description": "페이지 정보" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + }, + "title": "페이지 정보.", + "description": "레코드 목록" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록." + }, + "IPage.IPagination": { + "type": "object", + "properties": { + "current": { + "type": "integer", + "title": "페이지.\n\n페이지 정보가 있는 레코드 모음.", + "description": "현재 페이지 번호" + }, + "limit": { + "type": "integer", + "title": "현재 페이지 번호.", + "description": "페이지당 레코드 제한" + }, + "records": { + "type": "integer", + "title": "페이지당 레코드 제한.", + "description": "데이터베이스의 총 레코드 수" + }, + "pages": { + "type": "integer", + "title": "데이터베이스의 총 레코드 수", + "description": "총 페이지 수" + } + }, + "required": [ + "current", + "limit", + "records", + "pages" + ], + "description": "총 페이지 수\n\n상한선을 적용한 {@link records} / {@link limit}와 같음." + }, + "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": "페이지 정보.", + "description": "페이지 번호" + }, + "limit": { + "type": "integer", + "title": "페이지 번호.", + "description": "페이지당 레코드 제한" + } + } + }, + "IShoppingCoupon.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + }, + "IPageIShoppingDeposit": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "페이지당 레코드 제한.", + "description": "페이지 정보" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeposit" + }, + "title": "페이지 정보.", + "description": "레코드 목록" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록." + }, + "IShoppingDeposit": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "id", + "created_at", + "code", + "source", + "direction" + ] + }, + "IShoppingDeposit.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingDeposit.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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음.", + "description": "페이지 번호" + }, + "limit": { + "type": "integer", + "title": "페이지 번호.", + "description": "페이지당 레코드 제한" + } + } + }, + "IShoppingDeposit.IRequest.ISearch": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + } + }, + "IShoppingDeposit.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "code", + "source", + "direction" + ] + }, + "IPageIShoppingMileage": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "페이지당 레코드 제한.", + "description": "페이지 정보" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileage" + }, + "title": "페이지 정보.", + "description": "레코드 목록" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록." + }, + "IShoppingMileage": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "id", + "value", + "created_at", + "code", + "source", + "direction" + ] + }, + "IShoppingMileage.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingMileage.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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음.", + "description": "페이지 번호" + }, + "limit": { + "type": "integer", + "title": "페이지 번호.", + "description": "페이지당 레코드 제한" + } + } + }, + "IShoppingMileage.IRequest.ISearch": { + "type": "object", + "properties": { + "source": { + "type": "string" + }, + "code": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + } + }, + "IShoppingMileage.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + } + }, + "required": [ + "code", + "source", + "direction", + "value" + ] + }, + "IPageIShoppingMileageDonation": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "페이지당 레코드 제한.", + "description": "페이지 정보" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileageDonation" + }, + "title": "페이지 정보.", + "description": "레코드 목록" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록." + }, + "IShoppingMileageDonation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "administrator": { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen" + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "administrator", + "citizen", + "value", + "reason", + "created_at" + ] + }, + "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": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음.", + "description": "페이지 번호" + }, + "limit": { + "type": "integer", + "title": "페이지 번호.", + "description": "페이지당 레코드 제한" + } + } + }, + "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" + } + } + }, + "IShoppingMileageDonation.ICreate": { + "type": "object", + "properties": { + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "citizen_id", + "value", + "reason" + ] + }, + "IPageIShoppingOrder": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "페이지당 레코드 제한.", + "description": "페이지 정보" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrder" + }, + "title": "페이지 정보.", + "description": "레코드 목록" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록." + }, + "IShoppingOrder": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음.", + "description": "기본 키" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "기본 키.", + "description": "주문을 신청한 고객" + }, + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood" + }, + "minItems": 1, + "title": "주문을 신청한 고객.", + "description": "주문의 상품 목록" + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice", + "title": "주문의 상품 목록.", + "description": "할인을 포함한 가격 정보" + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish" + } + ], + "title": "할인을 포함한 가격 정보.\n\n참고로, 이 가격 값은 {@link volume} 값에 곱해졌습니다.\n따라서 {@link volume} 값이 목표\n{@link IShoppingCartCommodity.volume}와 같더라도 이 가격 값은\n{@link IShoppingCartCommodity.price} 값과 다를 수 있습니다.", + "description": "주문 완료 및 결제 정보" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "주문 완료 및 결제 정보.", + "description": "레코드 생성 시간" + } + }, + "required": [ + "id", + "customer", + "goods", + "price", + "publish", + "created_at" + ], + "description": "레코드 생성 시간." + }, + "IShoppingCustomer": { + "type": "object", + "properties": { + "type": { + "const": "customer", + "title": "주문 신청 정보.\n\n`IShoppingOrder`는 {@link IShoppingCustomer customer}의\n주문 신청 정보를 구현하는 엔터티입니다. 그러나 지금은\n아직 \"주문 신청\" 단계에 있으며 \"주문 확인\" 단계는 아닙니다.\n\n그리고 고객이 주문을 신청하자마자 대상 쇼핑 카트의 모든\n{@link IShoppingCartCommodity 상품}이 {@link IShoppingOrderGood 상품}으로\n승격되고, 해당 상품 레코드가 이 `IShoppingOrder` 아래에 생성됩니다.\n\n물론 대상 쇼핑 카트의 모든 상품이\n{@link IShoppingOrderGood}가 되는 것은 아니지만, 고객이 선택한 상품만\n{@link IShoppingOrderGood}가 됩니다.", + "description": "고객 유형에 대한 판별식" + }, + "member": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMember" + } + ], + "title": "고객 유형에 대한 판별식.", + "description": "회원 정보" + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "회원 정보.\n\n고객이 회원으로 가입한 경우.", + "description": "시민 정보" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "시민 정보.\n\n고객이 실명과 휴대전화 번호를 확인한 경우.", + "description": "기본 키" + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "기본 키.", + "description": "소속 채널" + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "소속 채널.", + "description": "외부 사용자 정보" + }, + "href": { + "type": "string", + "format": "uri", + "title": "외부 사용자 정보.\n\n고객이 외부 서비스에서 온 경우.", + "description": "연결 주소" + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "연결 주소.\n\n클라이언트의 {@link window.location.href}와 동일합니다.", + "description": "참조자 주소" + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "참조자 주소.\n\n클라이언트의 {@link window.document.referrer}와 동일합니다.", + "description": "연결 IP 주소" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "연결 IP 주소.", + "description": "연결 레코드 생성 시간" + } + }, + "required": [ + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ], + "description": "연결 레코드 생성 시간." + }, + "IShoppingMember": { + "type": "object", + "properties": { + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "고객 정보이지만 사람이 아니라 연결 기준입니다.\n\n`IShoppingCustomer`는 문자 그대로 시장에 고객으로 참여한 사람들의 정보를 구현한 개체입니다. 그런데 `IShoppingCustomer`는 사람이 아니라 연결 기준입니다. 따라서\n같은 사람이 쇼핑몰에 여러 번 접속하더라도 `IShoppingCustomer`에 여러 개의\n레코드가 생성됩니다.\n\n이것의 첫 번째 목적은 고객의 유입 경로를 자세히 추적하는 것이고\n같은 사람이 비회원으로 들어온 경우,\n{@link IShoppingCartCommodity가 쇼핑 카트에 상품을 넣습니다},\n{@link IShoppingCitizen 실명}만 인증하거나 {@link IShoppingOrderPublish 결제} 시점에\n등록/로그인하는 경우입니다.\n두 번째입니다. 마지막으로 아래와 같이 다양한 방식으로\n사람이 쇼핑몰에서 수행하는 활동을 정확하게 추적하는 것입니다.\n\n- 동일한 사람이 {@link IShoppingExternalUser 외부 서비스}에서 온 경우\n- 동일한 사람이 여러 계정을 만드는 경우\n- 동일한 사람이 비회원으로 {@link IShoppingCitizen 실명 인증}만으로 {@link IShoppingOrderPublish 구매}를 하는 경우\n- 동일한 사람이 동시에 {@link IShoppingSeller 판매자}와 {@link IShoppingAdministrator 관리자} 역할을 하는 경우\n\n따라서 `IShoppingCustomer`는 동일한\n{@link IShoppingCitizen}, {@link IShoppingMember}, 및\n{@link IShoppingExternalUser}를 가진 여러 레코드를 가질 수 있습니다. 또한 고객이 실명을 확인한 후\n멤버십에 가입하거나\n외부 서비스의 사용자가 된 후 당사 서비스에 가입하는 경우 모든 관련 레코드가 한 번에 변경됩니다.\n따라서 고객의 식별 및 추적을 매우\n체계적으로 수행할 수 있습니다.", + "description": "시민 정보" + }, + "seller": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSeller" + } + ], + "title": "시민 정보.\n\n휴대폰 번호와 실명으로 시민으로 인증된 경우에만.\n\n참고로, 회원이 판매자 또는 관리자로 가입한 경우\n이 시민 정보는 다음과 같아야 합니다.", + "description": "판매자 정보" + }, + "administrator": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingAdministrator" + } + ], + "title": "판매자 정보.\n\n회원이 판매자로도 가입한 경우.", + "description": "관리자 정보" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "관리자 정보.\n\n회원이 관리자로도 가입한 경우.", + "description": "기본 키" + }, + "nickname": { + "type": "string", + "title": "기본 키.", + "description": "회원을 고유하게 식별하는 별명" + }, + "emails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMemberEmail" + }, + "title": "회원을 고유하게 식별하는 별명.", + "description": "이메일 목록" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "이메일 목록.", + "description": "레코드 생성 시간" + } + }, + "required": [ + "citizen", + "seller", + "administrator", + "id", + "nickname", + "emails", + "created_at" + ], + "description": "레코드 생성 시간.\n\n다른 말로, 회원이 가입한 시간." + }, + "IShoppingOrderGood": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "회원 계정.\n\n`IShoppingMember`는\n{@link IShoppingCustomer}가 이 쇼핑몰 시스템의 회원으로 가입할 때를 상징하는 엔터티입니다.\n\n`IShoppingMember`가 판매자 또는 관리자 속성을 가지고 있는 경우, 이는\n{@link IShoppingCustomer}가 {@link IShoppingSeller 판매자}\n또는 {@link IShoppingAdministrator 관리자} 역할을 동시에 수행한다는 것을 의미합니다.", + "description": "기본 키" + }, + "commodity": { + "$ref": "#/components/schemas/IShoppingCartCommodity", + "title": "기본 키.", + "description": "상품의 기반이 되는 상품" + }, + "volume": { + "type": "integer", + "title": "상품의 기반이 되는 상품.", + "description": "상품의 볼륨" + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice.ISummary", + "title": "상품의 볼륨.\n\n값을 {@link IShoppingCartCommodityStock.quantity}에 곱함.\n그 목적은 {@link IShoppingCartCommodity.volume}과 정확히 동일하지만\n{@link IShoppingCartCommodity} 레코드가 결제될 때까지 재사용 가능하기 때문에\n다시 작성되었습니다.", + "description": "할인 및 배수 볼륨을 포함한 가격 정보" + }, + "state": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "할인 및 배수 볼륨을 포함한 가격 정보.", + "description": "상품에 대한 배송 상태" + }, + "confirmed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "상품에 대한 배송 상태.", + "description": "주문 상품의 확인 시간" + } + }, + "required": [ + "id", + "commodity", + "volume", + "price", + "state", + "confirmed_at" + ], + "description": "주문 상품 확인 시간.\n\n확인되면 고객은 환불이나 교환을 요청할 수 없습니다.\n\n확인은 다음 경우에 따라 이루어집니다.\n\n- 고객이 직접 합니다.\n- 배송 후 14일." + }, + "IShoppingCartCommodity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "주문을 구성하는 개별 상품에 대한 정보.\n\n`IShoppingOrderGood`는 {@link IShoppingCustomer 고객}이 주문한 각 상품을 나타내는 엔터티이며, 이 레코드는 고객의 {@link IShoppingOrder 주문} 요청으로 인해 쇼핑 카트의 제품 {@link IShoppingCartCommodity 상품}을 상품으로 업그레이드하는 과정에서 생성됩니다.\n\n그리고 `IShoppingOrderGood`는 {@link IShoppingCartCommodity}와 마찬가지로 {@link IShoppingSaleSnapshot 판매 스냅샷} 목록에 해당하는 개념입니다.\n\n참고로 `IShoppingOrderGood`에는 {@link IShoppingCartCommodity.volume}에 속하는 것과 별도로 {@link volume} 정보도 포함되어 있습니다.\n이는 쇼핑 카트에 3권의 책을 넣은 다음 실제 주문 신청 과정에서 4권으로 변경하는 경우가 있기 때문입니다. 이는 상품 정보를 직접 변경하는 대신 현재 엔터티의 볼륨 속성을 변경하여 쇼핑 카트의 재사용성을 높이기 위한 것입니다.\n\n또한 `IShoppingOrderGood`는 주문 후 프로세스, 즉 애프터 서비스(A/S)의 가장 기본적인 단위가 됩니다. 예를 들어, 고객의 제품을 받은 후 주문 확인은 {@link confirmed_at}\n속성에 기록됩니다. 또한 `IShoppingOrderGood`는 고객이 주문한 제품에 대해\n교환 또는 환불을 발급하거나 요청하는 단위입니다.", + "description": "기본 키" + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.IInvert", + "title": "기본 키.", + "description": "상품 관점에서 판매 정보(스냅샷)를 반전합니다." + }, + "orderable": { + "type": "boolean", + "title": "상품 관점에서 판매 정보(스냅샷)를 반전합니다.", + "description": "현재 상품이 주문 가능한지 여부" + }, + "pseudo": { + "type": "boolean", + "title": "현재 상품이 주문 가능한지 여부\n\n이 속성이 `false`이면 상품은 주문할 수 없습니다. 왜냐하면\n이미 주문되었기 때문입니다.", + "description": "현재 상품이 가짜인지 여부" + }, + "volume": { + "type": "integer", + "minimum": 1, + "title": "현재 상품이 가짜 상품인지 아닌지 여부.\n\n이 속성이 `true`인 경우, 상품은 진짜 상품이 아니라\n단지 할인 효과를 계산하기 위한 가짜 정보일 뿐입니다.\n{@link IShoppingCoupon 쿠폰}.", + "description": "구매할 상품의 양" + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "구매할 상품의 양.\n\n자식\n{@link IShoppingSaleUnitStock.IInvert.quantity} 값에 곱해지는 세트 수를 나타내는 값.", + "description": "상품의 가격" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "상품 가격.\n\n참고로, 이 가격 값은\n{@link volume} 값에 곱해지지 않았습니다. 그저 자식\n{@link IShoppingSaleUnitStock.IInvert.price} 값의 가격을 합산한 것입니다.", + "description": "레코드 생성 시간" + } + }, + "required": [ + "id", + "sale", + "orderable", + "pseudo", + "volume", + "price", + "created_at" + ], + "description": "레코드 생성 시간." + }, + "IShoppingSaleSnapshot.IInvert": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "쇼핑 카트의 품목.\n\n`IShoppingCartCommodity`는 {@link IShoppingCustomer customer}가 {@link IShoppingOrder 구매}를 염두에 두고 쇼핑 카트에 넣은 품목의 {@link IShoppingSaleSnapshot 스냅샷}을 나타내는 엔터티입니다. 그리고 고객이 이를 향후 실제 주문으로 계속 진행하는 경우 `IShoppingCartCommodity`는 {@link IShoppingOrderGood}로 변경됩니다.\n\n그리고 쇼핑 카트에 판매 스냅샷을 추가하는 동안 고객은 불가피하게\n목록 스냅샷 내에서 특정 {@link IShoppingSaleUnit 단위}와 {@link IShoppingSaleUnitStock 최종 재고}를 선택합니다.\n이러한 단위와 재고에 대한 정보는 자회사인 {@link IShoppingCartCommodityStock}에 기록됩니다. 또한 대상 상품의 스냅샷 세트 수를 나타내는 {@link volume} 속성이 있습니다. 이 \"볼륨\"은 각 구성 요소의 수량인\n{@link IShoppingSaleUnitStock.IInvert.quantity}에 곱해지는 값입니다.", + "description": "소속 섹션의 정보" + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "소속 섹션의 정보.", + "description": "판매를 등록한 판매자" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "판매를 등록한 판매자.", + "description": "판매의 기본 키" + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "판매의 기본 키.", + "description": "스냅샷의 기본 키" + }, + "latest": { + "type": "boolean", + "title": "스냅샷의 기본 키.", + "description": "스냅샷이 최신인지 여부" + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "스냅샷이 최신인지 여부.", + "description": "판매를 설명하는 설명 및 이미지 콘텐츠" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "판매를 설명하는 설명 및 이미지 콘텐츠.", + "description": "채널 및 카테고리 목록" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "채널 및 카테고리 목록.\n\n판매가 등록된 채널 및 카테고리.", + "description": "검색 태그 목록" + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.IInvert" + }, + "minItems": 1, + "title": "검색 태그 목록.", + "description": "단위 목록" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "단위 목록.\n\n판매에서 판매되는 개별 제품 구성 정보에 대한 기록. 각 {@link IShoppingSaleUnit 단위} 기록에는 구성 가능한\n{@link IShoppingSaleUnitOption 옵션},\n{@link IShoppingSaleUnitOptionCandidate 후보} 값(각 옵션에 대해) 및 {@link IShoppingSaleUnitStock 최종 재고}가 있으며, 이는\n각 옵션의 모든 후보 값을 선택하여 결정합니다.", + "description": "기록 생성 시간" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "기록 생성 시간.\n\n이 속성은 {@link opens_at}와 다릅니다.\n즉, 판매 시점이 열렸다는 의미입니다.", + "description": "기록의 마지막 업데이트 시간" + }, + "paused_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "기록의 마지막 업데이트 시간.\n\n다시 말해, 마지막 스냅샷의 생성 시간입니다.", + "description": "판매의 일시 중지 시간" + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "판매 일시 중지 시간.\n\n어떤 이유에서인지 판매자가 판매를 일시 중지했습니다.\n\n{@link IShoppingCustomer Customers}는 여전히 목록과 세부 정보 페이지에서 판매를 볼 수 있지만, 판매에는 경고 라벨이 있습니다.\n\"판매자가 판매를 일시 중지했습니다\".", + "description": "판매 일시 중지 시간" + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "판매 중단 시간.\n\n어떤 이유로 판매자가 판매를 중단했습니다.\n\n{@link IShoppingCustomer 고객}은 목록과 세부 정보 페이지에서 판매를 볼 수 없습니다. 소프트 삭제와 거의 동일하지만\n소유자\n{@link IShoppingSeller 판매자}가 여전히 판매를 보고 재개할 수 있다는 약간의 차이가 있습니다.\n\n물론, 이미 판매를 구매한 {@link IShoppingCustomer 고객}은\n{@link IShoppingOrder 주문} 페이지에서 판매를 볼 수 있습니다.", + "description": "판매 시작 시간" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "판매 시작 시간.", + "description": "판매 마감 시간" + } + }, + "required": [ + "section", + "seller", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "판매 마감 시간.\n\n이 값이 `null`이면 판매는 영원히 계속됩니다." + }, + "IShoppingSaleUnit.IInvert": { + "type": "object", + "properties": { + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock.IInvert" + }, + "minItems": 1, + "title": "상품 관점에서 판매 스냅샷의 정보를 반전합니다.\n\n`IShoppingSaleSnapshot.IInvert`는 {@link IShoppingCommodity} 관점에서 스냅샷을 표현하는 데 사용되는 구조로, {@link IShoppingCartCommodityStock} 엔터티에 해당합니다.\n\n따라서 `IShoppingSaleSnapshot.IInvert`는 모든\n{@link IShoppingSaleUnit 단위}와 {@link IShoppingSaleUnitStock 재고} 스냅샷 레코드를 포함하지 않고, {@link IShoppingCartCommodity 쇼핑 카트}에 넣은 일부 레코드만 포함합니다.", + "description": "최종 재고 목록" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "최종 재고 목록.", + "description": "기본 키" + }, + "name": { + "type": "string", + "title": "기본 키.", + "description": "단위의 대표 이름" + }, + "primary": { + "type": "boolean", + "title": "단위의 대표 이름.", + "description": "단위가 기본인지 아닌지" + }, + "required": { + "type": "boolean", + "title": "단위가 기본인지 아닌지.\n\n라벨링 값일 뿐입니다.", + "description": "단위가 필수인지 아닌지" + } + }, + "required": [ + "stocks", + "id", + "name", + "primary", + "required" + ] + }, + "IShoppingSaleUnitStock.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "단위가 필요한지 여부.\n\n단위가 필요한 경우, 고객은 단위를 선택해야 합니다. 선택하지 않으면\n고객은 구매할 수 없습니다.\n\n예를 들어, \"Macbook 세트\" 세일이 있고 단위 중 하나가\n\"본체\"인 경우, \"본체\" 단위 없이 \"Macbook 세트\"를 구매할 수 있습니까? 이 속성은 그런 경우를 위한 것입니다.", + "description": "기본 키" + }, + "name": { + "type": "string", + "title": "기본 키.", + "description": "재고의 대표 이름" + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "재고의 대표 이름.", + "description": "재고 가격" + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "재고 가격.", + "description": "카트에 있는 재고의 수량" + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockInventory", + "title": "카트에 있는 재고 수량.", + "description": "재고의 현재 재고 상태" + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice.IInvert" + }, + "title": "재고의 현재 재고 상태.", + "description": "선택 목록" + } + }, + "required": [ + "id", + "name", + "price", + "quantity", + "inventory", + "choices" + ], + "description": "선택 목록.\n\n각 옵션에 대해 기록되는 값." + }, + "IShoppingSaleUnitStockInventory": { + "type": "object", + "properties": { + "income": { + "type": "integer", + "title": "카트에서 정보를 반전합니다.", + "description": "총 수입 수량" + }, + "outcome": { + "type": "integer", + "title": "총 수입 수량.", + "description": "총 결과 수량" + } + }, + "required": [ + "income", + "outcome" + ], + "description": "총 결과 수량." + }, + "IShoppingSaleUnitStockChoice.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "최종 재고의 재고 정보.", + "description": "기본 키" + }, + "option": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.IInvert" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ], + "title": "기본 키.", + "description": "대상 옵션" + }, + "candidate": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate" + } + ], + "title": "대상 옵션.", + "description": "선택된 후보 값" + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ], + "title": "선택된 후보 값.", + "description": "기록된 값" + } + }, + "required": [ + "id", + "option", + "candidate", + "value" + ], + "description": "기록된 값." + }, + "IShoppingSaleUnitSelectableOption.IInvert": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "카트에서 정보를 반전합니다.", + "description": "기본 키" + }, + "type": { + "const": "select", + "title": "기본 키.", + "description": "선택 가능한 옵션의 유형에 대한 판별식" + }, + "name": { + "type": "string", + "title": "선택 가능한 옵션의 유형에 대한 판별식.", + "description": "옵션의 이름을 나타냅니다." + }, + "variable": { + "type": "boolean", + "title": "옵션의 이름을 나타냅니다.", + "description": "옵션이 가변적인지 여부" + } + }, + "required": [ + "id", + "type", + "name", + "variable" + ] + }, + "IShoppingSaleUnitDescriptiveOption": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "옵션이 가변적인지 여부\n\n현재 옵션의 유형이 \"선택\"인 경우, 이 속성은\n다른 후보 값을 선택하는 것이 최종 주식에 영향을 미치는지 여부를 의미합니다.", + "description": "기본 키" + }, + "type": { + "oneOf": [ + { + "const": "string" + }, + { + "const": "number" + }, + { + "const": "boolean" + } + ], + "title": "기본 키.", + "description": "설명적 옵션의 유형" + }, + "name": { + "type": "string", + "title": "설명적 옵션의 유형.\n\n구매 시 입력해야 하는 입력 값.", + "description": "읽을 수 있는 옵션 이름" + } + }, + "required": [ + "id", + "type", + "name" + ], + "description": "읽을 수 있는 옵션 이름." + }, + "IShoppingSaleUnitOptionCandidate": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "설명적 옵션.\n\n옵션 유형이 `\"select\"`가 아닌 경우, 해당 옵션은 설명적이라는 의미입니다. 즉, {@link IShoppingCustomer 고객}이 {@link IShoppingOrder 구매}에 대한 값을 작성해야 합니다. 또한, 고객이 옵션에 대해 무엇을 작성하든 {@link IShoppingSaleUnitStock 최종 재고}에는 영향을 미치지 않습니다.\n\n다시 말해, 설명적 옵션은 정보 전송을 위한 것입니다.", + "description": "기본 키" + }, + "name": { + "type": "string", + "title": "기본 키.", + "description": "후보 값의 이름을 나타냅니다." + } + }, + "required": [ + "id", + "name" + ], + "description": "후보 값의 이름을 나타냅니다." + }, + "IShoppingOrderPrice.ISummary": { + "type": "object", + "properties": { + "cash": { + "type": "number", + "minimum": 0, + "title": "옵션 내에서 선택할 수 있는 후보 값.\n\n`IShoppingSaleUnitOptionCandidate`는 개별\n후보 값을 나타내는 엔터티로,\n{@link IShoppingSaleUnitSelectableOption 옵션의 \"select\" 유형}에서 선택할 수 있습니다.\n\n- 예\n- RAM: 8GB, 16GB, 32GB\n- GPU: RTX 3060, RTX 4080, TESLA\n- 라이선스: 개인, 상업, 교육\n\n그런데, 속한 옵션이 \"select\" 유형이 아니면 이 엔터티는 절대\n사용되지 않습니다.", + "description": "현금 결제 금액" + }, + "deposit": { + "type": "number", + "minimum": 0, + "title": "현금 결제 금액.", + "description": "보증금 결제 금액" + }, + "mileage": { + "type": "number", + "minimum": 0, + "title": "보증금 결제 금액.", + "description": "마일리지 결제 금액" + }, + "ticket": { + "type": "number", + "minimum": 0, + "title": "마일리지 결제 금액.", + "description": "할인 쿠폰 티켓 결제 금액" + }, + "nominal": { + "type": "number", + "minimum": 0, + "title": "할인 쿠폰 티켓 결제 금액.", + "description": "액면가" + }, + "real": { + "type": "number", + "minimum": 0, + "title": "명목 가격.\n\n이것은 지불해야 할 {@link 실제 실제 가격}이 아니라, 보여야 할 명목 가격일 뿐입니다.\n이 값이 {@link 실제 실제 가격}보다 크면\n{@link IShoppingSeller 판매자}가 할인을 제공하는 것처럼 표시됩니다.", + "description": "실제 지불 가격" + } + }, + "required": [ + "cash", + "deposit", + "mileage", + "ticket", + "nominal", + "real" + ], + "description": "실제 지불 가격." + }, + "IShoppingOrderPrice": { + "type": "object", + "properties": { + "ticket_payments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicketPayment" + }, + "title": "주문 가격의 요약 정보.", + "description": "할인 쿠폰 티켓 결제 목록" + }, + "cash": { + "type": "number", + "minimum": 0, + "title": "할인 쿠폰 티켓 결제 목록.", + "description": "현금 결제 금액" + }, + "deposit": { + "type": "number", + "minimum": 0, + "title": "현금 결제 금액.", + "description": "보증금 결제 금액" + }, + "mileage": { + "type": "number", + "minimum": 0, + "title": "보증금 결제 금액.", + "description": "마일리지 결제 금액" + }, + "ticket": { + "type": "number", + "minimum": 0, + "title": "마일리지 결제 금액.", + "description": "할인 쿠폰 티켓 결제 금액" + }, + "nominal": { + "type": "number", + "minimum": 0, + "title": "할인 쿠폰 티켓 결제 금액.", + "description": "명목 가격" + }, + "real": { + "type": "number", + "minimum": 0, + "title": "명목 가격.\n\n이것은 지불해야 할 {@link real real price}가 아니라, 보여야 할 명목 가격일 뿐입니다.\n이 값이 {@link real real price}보다 큰 경우, {@link IShoppingSeller seller}가 할인을 제공하는 것처럼 표시됩니다.", + "description": "지불해야 할 실제 가격" + } + }, + "required": [ + "ticket_payments", + "cash", + "deposit", + "mileage", + "ticket", + "nominal", + "real" + ], + "description": "지불해야 할 실제 가격." + }, + "IShoppingCouponTicketPayment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "할인을 포함한 주문의 가격 정보.", + "description": "기본 키" + }, + "ticket": { + "$ref": "#/components/schemas/IShoppingCouponTicket", + "title": "기본 키.", + "description": "대상 티켓" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "대상 티켓.", + "description": "레코드 생성 시간" + } + }, + "required": [ + "id", + "ticket", + "created_at" + ], + "description": "레코드 생성 시간." + }, + "IShoppingCouponTicket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "할인 쿠폰 티켓 결제 세부 정보.\n\n`IShoppingCouponTicketPayment`는 {@link IShoppingOrder 주문}의 {@link IShoppingCouponTicket}에 대한 결제\n정보를 구현하는 엔터티이며, 소비자가 주문하기 위해 발급받은 할인 쿠폰 티켓을 사용하여 결제 금액을 공제할 때 사용됩니다.\n\n그리고 {@link IShoppingOrder} 자체는 주문이 완료되는 상황에서 사용되는 엔터티가 아니라 주문 요청을 표현하도록 설계된 엔터티이므로 이\n`IShoppingCouponTicketPayment` 레코드를 생성한다고 해서 실제로 첨부된 티켓이\n사라지는 것은 아닙니다. {@link IShoppingCustomer 고객}\n{@link IShoppingOrderPublish.paid_at이 결제를 완료하고} 주문을 확인할 때까지 티켓은 일종의 보증금으로 이해될 수 있습니다.\n\n또한 이 기록은 고객이 티켓 결제를 취소하면 삭제될 수 있지만, 귀속 주문 자체가 취소되면 삭제될 수도 있습니다.", + "description": "기본 키" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "기본 키.", + "description": "쿠폰 티켓을 받은 고객" + }, + "coupon": { + "$ref": "#/components/schemas/IShoppingCoupon", + "title": "쿠폰 티켓을 받은 고객.", + "description": "대상 쿠폰" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "대상 쿠폰.", + "description": "레코드 생성 시간" + }, + "expired_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "레코드 생성 시간.", + "description": "티켓 만료 시간" + } + }, + "required": [ + "id", + "customer", + "coupon", + "created_at", + "expired_at" + ], + "description": "티켓 만료 시간." + }, + "IShoppingOrderPublish": { + "type": "object", + "properties": { + "deliveries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDelivery" + }, + "title": "할인 쿠폰 티켓 발행 세부 정보.\n\n`IShoppingCouponTicket`은 {@link IShoppingCustomer 고객}이 발행한\n{@link IShoppingCoupon 할인 쿠폰} 티켓을 상징하는 엔티티입니다.\n\n그리고 대상 할인 쿠폰 사양 자체에 만료일이 있는 경우\n만료일은 expired_at에 기록되고 해당 만료일 이후에는 자동으로\n폐기됩니다. 물론, 마감일 내에 주문에 할인 쿠폰을 사용하더라도 상관없습니다.", + "description": "배송 목록" + }, + "state": { + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "배송 목록.\n\n{@link IShoppingOrder 주문}은 여러 번 배송될 수 있습니다.\n물론, 반대의 경우도 가능합니다. 즉,\n{@link IShoppingDelivery 배송}은 여러 주문으로 구성될 수 있습니다.", + "description": "배송에 대한 주문 상태" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "배송에 대한 주문 상태.", + "description": "기본 키" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키.", + "description": "레코드 생성 시간" + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "레코드 생성 시간.", + "description": "주문이 결제된 시간" + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "주문이 결제된 시간.", + "description": "결제가 취소된 시간" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress", + "title": "결제가 취소된 시간입니다.", + "description": "{@link IShoppingOrderGood 상품}을 배송할 주소입니다." + } + }, + "required": [ + "deliveries", + "state", + "id", + "created_at", + "paid_at", + "cancelled_at", + "address" + ], + "description": "{@link IShoppingOrderGood 상품}을 배송할 주소입니다." + }, + "IShoppingDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "주문 완료 및 결제 정보.\n\n`IShoppingOrderPublish`는 {@link IShoppingCustomer 고객}이 자신의\n{@link IShoppingOrder 주문}에 대해 지불하여 주문을 완료하는 일련의 프로세스를 구현하는 엔터티입니다. 그리고 주문이 {@link paid_at 완료된 후에야 {@link IShoppingSeller 판매자}가 고객이 자신의 제품을 구매했다는 것을 인식할 수 있습니다.\n\n그런데 `IShoppingOrderPublish` 레코드가\n존재한다고 해서 결제가 완료되었다는 의미는 아닙니다. 물론\n\"신용카드\"와 \"Google Pay\"의 경우 결제 신청과 결제가 동시에 발생합니다.\n그러나 \"은행 송금\"이나 \"가상 계좌 결제\"와 같이 결제 신청 후에 결제가 이루어지는 경우도 있습니다.\n따라서 결제 완료를 확인하려면 반드시\n{@link paid_at} 속성을 확인하세요.\n\n또한 결제가 완료된 후에도 갑자기\n취소되는 경우가 있을 수 있으니 이 점도 유의하시기 바랍니다.", + "description": "기본 키" + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "기본 키.", + "description": "상품을 배달한 판매자" + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + }, + "title": "상품을 배달한 판매자.", + "description": "배송 여정 목록" + }, + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece" + }, + "minItems": 1, + "title": "배송 여정 목록.", + "description": "배송 부품 목록" + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + }, + "title": "배송 부품 목록.", + "description": "배송 발송인 목록" + }, + "state": { + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "배송 발송인 목록.", + "description": "배송 상태" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "배송 상태.", + "description": "레코드 생성 시간" + } + }, + "required": [ + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "레코드 생성 시간." + }, + "IShoppingDeliveryJourney": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "배송 정보.\n\n{@link IShoppingOrderGood 상품}을\n{@link IShoppingCustomer 고객}에게 배송할 때, {@link IShoppingSeller 판매자}는\n여러 {@link IShoppingSaleUnitStock 재고}, 상품을 한 번에 배송할 수 있습니다. 또한\n물리적 제약으로 인해\n재고나 상품을 여러 번 배송할 수 있습니다.\n물량이나 무게 문제.\n\n위에서 볼 수 있듯이, 배송과\n{@link IShoppingOrder 주문}(또는 {@link IShoppingOrderGood 상품}) 간의 관계는 1: 1 또는\nN: 1이 아니라 M: N입니다. 엔터티 `IShoppingDelivery`는 자회사인\n{@link IShoppingDeliveryPiece}를 통해 대상 재고나 상품을 참조하여 이러한\n관계를 나타내도록 설계되었습니다.\n\n또한 배송은 한 단계로 끝나지 않습니다.\n제조, 계획, 배송 및 배송과 같은 여러 프로세스가 있습니다. 이러한 단계는\n다른 자회사 {@link IShoppingDeliveryJourney}에 의해 표현됩니다.", + "description": "기본 키" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키.", + "description": "레코드 생성 시간" + }, + "deleted_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "레코드 생성 시간.", + "description": "레코드 삭제 시간" + }, + "type": { + "oneOf": [ + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + } + ], + "title": "레코드 삭제 시간.", + "description": "여정 유형" + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "여정 유형.\n\n- 준비\n- 제조\n- 운송\n- 배달", + "description": "여정 제목" + }, + "description": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "여정 제목.", + "description": "여정 설명" + }, + "started_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "여정 설명.", + "description": "여정 시작 시간" + }, + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "여정 시작 시간.", + "description": "여정 완료 시간" + } + }, + "required": [ + "id", + "created_at", + "deleted_at", + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "여정 완료 시간." + }, + "IShoppingDeliveryPiece": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "배송 여정.\n\n`IShoppingDeliveryJourney`는 {@link IShoppingDelivery}의 자회사로,\n배송의 각 여정을 설명합니다. 참고로, 여정이라는 단어는\n{@link IShoppingCustomer 고객}에게 {@link IShoppingOrderGood 상품}을 준비, 발송,\n배달하는 것과 같은 배송 프로세스의 각 단계를 의미합니다.", + "description": "기본 키" + }, + "publish_id": { + "type": "string", + "format": "uuid", + "title": "기본 키.", + "description": "대상 주문의 {@link IShoppingOrderPublish.id}" + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "대상 주문의 {@link IShoppingOrderPublish.id}.", + "description": "대상 상품의 {@link IShoppingOrderGood.id}" + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "대상 상품의 {@link IShoppingOrderGood.id}.", + "description": "대상 재고의 {@link IShoppingSaleUnitStock.id}" + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "대상 재고의 {@link IShoppingSaleUnitStock.id}.", + "description": "재고 수량" + } + }, + "required": [ + "id", + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "재고 수량.\n\n분할 배송을 표현하는 정밀 값이 될 수 있습니다." + }, + "IShoppingDeliveryShipper": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "company": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "id", + "created_at", + "company", + "name", + "mobile" + ] + }, + "IShoppingAddress": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "어떤 재고가 배달되는지.\n\n`IShoppingDeliveryPiece`는 {@link IShoppingDelivery}의 자회사로,\n각 {@link IShoppingOrder}의\n{@link IShoppingSaleUnitStock 재고}에 대해 얼마나 많은 수량이 배달되는지 설명합니다.\n\n참고로, 주문은 양이나 무게 문제로 인해 여러 번 배달될 수 있으므로\n단일 재고에 대해 여러 개의 `IShoppingDeliveryPiece`\n레코드가 있을 수 있습니다.", + "description": "기본 키" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키.", + "description": "레코드 생성 시간" + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "레코드 생성 시간.", + "description": "연락할 휴대전화 번호" + }, + "name": { + "type": "string", + "title": "연락할 휴대전화 번호", + "description": "주소의 대표 이름" + }, + "country": { + "type": "string", + "title": "주소의 대표 이름.\n\n수신자의 이름이 될 때도 있고, 지명이 될 때도 있습니다.", + "description": "국가 이름" + }, + "province": { + "type": "string", + "title": "국가 이름", + "description": "주 이름" + }, + "city": { + "type": "string", + "title": "주 이름", + "description": "도시 이름" + }, + "department": { + "type": "string", + "title": "도시 이름", + "description": "부서 이름" + }, + "possession": { + "type": "string", + "title": "부서 이름", + "description": "거리 이름, 건물 번호, 방 번호가 포함된 자세한 주소" + }, + "zip_code": { + "type": "string", + "title": "거리 이름, 건물 번호, 방 번호가 포함된 자세한 주소", + "description": "우편번호" + }, + "special_note": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "우편번호.", + "description": "필요한 경우 특별 설명" + } + }, + "required": [ + "id", + "created_at", + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ], + "description": "필요한 경우 특별 설명" + }, + "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": "주소 정보", + "description": "페이지 번호" + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지당 레코드 제한" + } + }, + "description": "페이지당 레코드 제한" + }, + "IShoppingOrder.IRequest.ISearch": { + "type": "object", + "properties": { + "min_price": { + "type": "number" + }, + "max_price": { + "type": "number" + }, + "paid": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + } + }, + "IShoppingSale.IRequest.ISearch": { + "type": "object", + "properties": { + "show_paused": { + "type": "boolean" + }, + "show_suspended": { + "oneOf": [ + { + "const": "only" + }, + { + "type": "boolean" + } + ] + }, + "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" + }, + "count": { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.ICountRange" + } + } + }, + "IShoppingSaleReview.IInvertSearch.IScoreRange": { + "type": "object", + "properties": { + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "IShoppingSaleReview.IInvertSearch.ICountRange": { + "type": "object", + "properties": { + "minimum": { + "type": "integer" + }, + "maximum": { + "type": "integer" + } + } + }, + "IShoppingSeller.IRequest.ISearch": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "mobile": { + "type": "string", + "pattern": "^[0-9]*$" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string", + "format": "email" + }, + "nickname": { + "type": "string" + } + } + }, + "IPageIShoppingSale.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "페이지별 레코드 제한", + "description": "페이지 번호 및 검색/정렬 조건이 있는 주문 요청" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSale.ISummary" + }, + "title": "페이지 정보", + "description": "페이지 정보" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "IShoppingSale.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch", + "title": "레코드 목록", + "description": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음" + }, + "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" + } + ] + }, + "title": "검색 조건", + "description": "검색 조건" + }, + "page": { + "type": "integer", + "title": "정렬 조건", + "description": "정렬 조건" + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + }, + "description": "페이지당 레코드 제한" + }, + "IShoppingSale": { + "type": "object", + "properties": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "페이지당 레코드 제한.", + "description": "페이지 매김 및 검색/정렬 옵션이 있는 요약된 판매 요청." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "소속 섹션", + "description": "소속 섹션." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "판매를 등록한 판매자", + "description": "판매를 등록한 판매자." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "판매의 기본 키", + "description": "판매의 기본 키." + }, + "latest": { + "type": "boolean", + "title": "스냅샷의 기본 키", + "description": "스냅샷의 기본 키." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent", + "title": "스냅샷이 최신인지 여부", + "description": "스냅샷이 최신인지 여부" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "판매를 설명하는 설명 및 이미지 콘텐츠", + "description": "판매를 설명하는 설명 및 이미지 콘텐츠." + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "채널 및 카테고리 목록", + "description": "채널 및 카테고리 목록.\n\n판매가 등록된 채널 및 카테고리." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit" + }, + "minItems": 1, + "title": "검색 태그 목록", + "description": "검색 태그 목록." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "단위 목록", + "description": "단위 목록.\n\n판매에서 판매되는 개별 제품 구성 정보에 대한 기록. 각 {@link IShoppingSaleUnit 단위} 기록에는 구성 가능한\n{@link IShoppingSaleUnitOption 옵션},\n{@link IShoppingSaleUnitOptionCandidate 후보} 값(각 옵션에 대해) 및 {@link IShoppingSaleUnitStock 최종 재고}가 있으며, 이는\n각 옵션의 모든 후보 값을 선택하여 결정합니다." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "기록 생성 시간", + "description": "기록 생성 시간.\n\n이 속성은 {@link opens_at}와 다릅니다.\n즉, 판매 시점이 열렸다는 의미입니다." + }, + "paused_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "기록의 마지막 업데이트 시간", + "description": "기록의 마지막 업데이트 시간.\n\n다시 말해, 마지막 스냅샷의 생성 시간입니다." + }, + "suspended_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "판매의 일시 중지 시간", + "description": "판매 일시 중지 시간.\n\n어떤 이유에서인지 판매자가 판매를 일시 중지했습니다.\n\n{@link IShoppingCustomer Customers}는 여전히 목록과 세부 정보 페이지에서 판매를 볼 수 있지만, 판매에는 경고 라벨이 있습니다.\n\"판매자가 판매를 일시 중지했습니다\"." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "판매 일시 중지 시간", + "description": "판매 중단 시간.\n\n어떤 이유로 판매자가 판매를 중단했습니다.\n\n{@link IShoppingCustomer 고객}은 목록과 세부 정보 페이지에서 판매를 볼 수 없습니다. 소프트 삭제와 거의 동일하지만\n소유자\n{@link IShoppingSeller 판매자}가 여전히 판매를 보고 재개할 수 있다는 약간의 차이가 있습니다.\n\n물론 이미 판매를 구매한 {@link IShoppingCustomer 고객}은\n{@link IShoppingOrder 주문} 페이지에서 판매를 볼 수 있습니다." + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "판매 시작 시간", + "description": "판매 시작 시간." + } + }, + "required": [ + "section", + "seller", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" + ], + "description": "판매 마감 시간" + }, + "IShoppingSaleContent": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "판매 마감 시간.\n\n이 값이 `null`이면 판매는 영원히 계속됩니다.", + "description": "판매자 판매 제품.\n\n`IShoppingSale`은 {@link ISoppingSeller 판매자}가 등록한 \"제품 판매\"(판매) 정보를 구현하는 엔터티입니다. 그리고 판매의 주요\n정보는 주요 `IShoppingSale`가 아닌 하위 {@link IShoppingSaleSnapshot}에 기록됩니다. 판매자가 이전에 등록된\n항목을 변경하면 기존 `IShoppingSale` 레코드는 변경되지 않지만 새로운\n{@link IShoppingSaleSnapshot 스냅샷} 레코드가 생성됩니다.\n\n이는 판매자가 품목의 구성 요소나\n가격을 변경하더라도 고객이 특정 품목을 구매한 후 {@link IShoppingCustomer 고객}의\n{@link IShoppingOrder 구매 내역}을 완벽하게 보존하기 위한 것입니다. 또한 구성 요소나\n가격을 변경하고 각 사례에서 성과를 측정하는 소위 A/B\n테스트에서 판매자를 지원하기 위한 것입니다." + }, + "title": { + "type": "string", + "title": "기본 키", + "description": "기본 키." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "콘텐츠 제목", + "description": "콘텐츠 제목." + }, + "body": { + "type": "string", + "title": "본문 콘텐츠 형식", + "description": "본문 콘텐츠 형식.\n\n`html`, `md`, `txt`와 같은 파일 확장자와 동일한 의미." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + }, + "title": "본문 콘텐츠", + "description": "본문 콘텐츠." + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + }, + "title": "첨부 파일 목록", + "description": "첨부 파일 목록." + } + }, + "required": [ + "id", + "title", + "format", + "body", + "files", + "thumbnails" + ], + "description": "썸네일 목록" + }, + "IShoppingSaleUnit": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ] + }, + "title": "썸네일 목록.", + "description": "판매 스냅샷의 콘텐츠 정보.\n\n`IShoppingSaleContent`는 {@link IShoppingSale}의 설명 콘텐츠를 구현하는 엔터티입니다." + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock" + }, + "minItems": 1, + "title": "옵션 목록", + "description": "옵션 목록." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "최종 재고 목록", + "description": "최종 재고 목록." + }, + "name": { + "type": "string", + "title": "기본 키", + "description": "기본 키." + }, + "primary": { + "type": "boolean", + "title": "단위의 대표 이름", + "description": "단위의 대표 이름." + }, + "required": { + "type": "boolean", + "title": "단위가 기본인지 아닌지", + "description": "단위가 기본인지 아닌지.\n\n라벨링 값일 뿐입니다." + } + }, + "required": [ + "options", + "stocks", + "id", + "name", + "primary", + "required" + ], + "description": "단위가 필수인지 아닌지" + }, + "IShoppingSaleUnitSelectableOption": { + "type": "object", + "properties": { + "candidates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate" + }, + "minItems": 1, + "title": "단위가 필요한지 여부.\n\n단위가 필요한 경우, 고객은 단위를 선택해야 합니다. 선택하지 않으면, 고객은 구매할 수 없습니다.\n\n예를 들어, \"Macbook 세트\" 세일이 있고 단위 중 하나가\n\"본체\"인 경우, \"본체\" 단위 없이 \"Macbook 세트\"를 구매할 수 있습니까? 이 속성은 그런 경우를 위한 것입니다.", + "description": "판매에서 처리되는 제품 구성 정보.\n\n`IShoppingSaleUnit`은 {@link IShoppingSale 판매}에서 처리되는 \"개별 제품\"\n정보를 구현하는 엔터티입니다.\n\n참고로 `IShoppingSaleUnit`이 1: N의 대수 관계로\n{@link IShoppingSaleSnapshot}과 분리된 이유는\n한 상품에 여러 제품이 판매되는 경우가 있기 때문입니다. 이는\n소위 \"묶음 상품\"의 경우입니다.\n\n- 일반 제품(Mackbook 세트)에서 묶음\n- 본체\n- 키보드\n- 마우스\n- Apple Care(무료 A/S 바우처)\n\n그리고 다시 말하지만 `IShoppingSaleUnit`은 그 자체로\n{@link IShoppingCustomer 고객}이 {@link IShoppingOrder 구매할\n{@link IShoppingSaleUnitStock 최종 재고}를 의미하지 않습니다.\n최종 재고는 모든 주어진\n{@link IShoppingSaleUnitOption 옵션}과 해당\n{@link IShoppingSaleUnitOptionCandidate 후보 값}을 선택한 후에만 찾을 수 있습니다.\n\n예를 들어, Macbook을 구매하더라도 최종 재고는 모든 옵션(CPU/RAM/SSD) 등을 선택한 후에만 결정됩니다." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "후보 값 목록", + "description": "후보 값 목록." + }, + "type": { + "const": "select", + "title": "기본 키", + "description": "기본 키." + }, + "name": { + "type": "string", + "title": "선택 가능한 옵션의 유형에 대한 판별식", + "description": "선택 가능한 옵션의 유형에 대한 판별식." + }, + "variable": { + "type": "boolean", + "title": "옵션의 이름을 나타냅니다.", + "description": "옵션의 이름을 나타냅니다." + } + }, + "required": [ + "candidates", + "id", + "type", + "name", + "variable" + ], + "description": "옵션이 가변적인지 여부" + }, + "IShoppingSaleUnitStock": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "옵션이 가변적인지 여부\n\n현재 옵션의 유형이 \"선택\"인 경우 이 속성은\n다른 후보 값을 선택하면 최종 주식에 영향을 미치는지 여부를 의미합니다.", + "description": "판매용 단위에 대한 개별 옵션 정보.\n\n`IShoppingSaleUnitSelectableOption`은\n{@link IShoppingSaleUnit}의 자회사로,\n{@link IShoppingSale 판매}에서 개별 제품을 나타내며, 단위에 대한 개별\n선택 가능한 옵션 정보를 나타내도록 설계된 엔터티입니다.\n\n- 옵션의 예\n- 선택 가능한 옵션\n- 컴퓨터: CPU, RAM, SSD 등\n- 의류: 사이즈, 색상, 스타일 등\n- 설명적 옵션\n- 조각\n- 간단한 질문\n\n{@link variable} 속성 값이 `true`이면\n{@link IShoppingCustomer 고객}이 구매하는 최종 재고는 {@link IShoppingSaleUnitOptionCandidate 후보 값}의\n선택에 따라 변경됩니다.\n\n반대로 \"select\"가 아닌 유형이거나 {@link variable}\n속성 값이 \"false\"인 경우, 이는 단순한 정보 전송을 넘어 의미가 없는 옵션입니다. 따라서 고객이 구매 시 어떤 가치를 선택하든\n이 경우 옵션은\n{@link IShoppingSaleUnitStock 최종 재고}에 영향을 미치지 않습니다." + }, + "name": { + "type": "string", + "title": "기본 키", + "description": "기본 키." + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "주식의 대표 이름", + "description": "주식의 대표 이름." + }, + "inventory": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockInventory", + "title": "주식 가격", + "description": "주식 가격." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice" + }, + "title": "주식의 현재 재고 상태", + "description": "주식의 현재 재고 상태." + } + }, + "required": [ + "id", + "name", + "price", + "inventory", + "choices" + ], + "description": "선택 목록" + }, + "IShoppingSaleUnitStockChoice": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "선택 목록.\n\n각 옵션에 대해 선택되는 후보 값.", + "description": "판매용 단위에 대한 최종 구성 요소 정보.\n\n`IShoppingSaleUnitStock`은 {@link IShoppingSaleUnit}의 자회사로, 판매용 제품 카탈로그를 나타내며, 모든 {@link IShoppingSaleUnitSelectableOption 옵션}(변수 \"select\" 유형)과 해당 단위의\n{@link IShoppingSaleUnitOptionCandidate candidate} 값을 선택하여 구성된 일종의 최종 재고입니다.\n고객이 실제로 구매하는 것은 \"상품\" 그 자체입니다.\n\n- 제품 이름) MacBook\n- 옵션\n- CPU: {i3, i5, i7, i9}\n- RAM: {8GB, 16GB, 32GB, 64GB, 96GB}\n- SSD: {256GB, 512GB, 1TB}\n- 최종 재고 수: 4 * 5 * 3 = 60\n\n참고로, 귀속 단위의 `IShoppingSaleUnitStock` 레코드의 총 수는\n데카르트 곱을 사용하여 얻을 수 있습니다. 즉, 각\n(변수 \"select\" 유형) 옵션이 가질 수 있는 모든 후보 값에 사례 수를 곱하여 얻은\n값은 단위의 총\n최종 재고 수입니다.\n\n물론 단일 변수 \"select\" 유형 옵션이 없으면 단위의 최종 재고 수는\n1개에 불과합니다." + }, + "option_id": { + "type": "string", + "format": "uuid", + "description": "기본 키" + }, + "candidate_id": { + "type": "string", + "format": "uuid", + "description": "기본 키." + } + }, + "required": [ + "id", + "option_id", + "candidate_id" + ], + "description": "대상 옵션의 {@link IShoppingSaleUnitOption.id}" + }, + "IPageIShoppingSaleInquiryComment": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "대상 후보의 {@link IShoppingSaleUnitOptionCandidate.id}", + "description": "최종 재고의 선택 정보.\n\n`IShoppingSaleUnitStockChoice`는 각 변수 \"select\"\n유형의\n{@link IShoppingSaleUnitSelectableOption option}이 각 {@link IShoppingSaleUnitStock stock}에 대해 선택되었는지와\n{@link IShoppingSaleUnitOptionCandidate candidate value}가 그 안에서 선택되었는지를 나타내는 엔티티입니다.\n\n물론, 바인딩된 {@link IShoppingSaleUnit unit}에\n옵션이 없는 경우 이 엔티티도 무시할 수 있습니다." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "기록 목록" + }, + "IShoppingSaleInquiryComment": { + "type": "object", + "properties": { + "writer": { + "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": "기록 목록.", + "description": "페이지.\n\n페이지 정보가 있는 기록 모음." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "댓글 작성자", + "description": "댓글 작성자.\n\n고객과 판매자 모두 판매 문의에 댓글을 쓸 수 있습니다.\n\n그런데, 고객에 대한 제한은 없지만 판매자는\n판매를 등록한 사람이어야 합니다." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "기본 키", + "description": "기본 키." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticleComment.ISnapshot" + }, + "minItems": 1, + "title": "상위 댓글의 ID", + "description": "상위 댓글의 ID." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "스냅샷 콘텐츠 목록", + "description": "스냅샷 콘텐츠 목록.\n\n댓글이 생성될 때 처음 생성되고,\n댓글이 수정될 때마다 누적됩니다." + } + }, + "required": [ + "writer", + "id", + "parent_id", + "snapshots", + "created_at" + ], + "description": "댓글 생성 시간" + }, + "IBbsArticleComment.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "댓글 생성 시간.", + "description": "문의 게시물에 작성된 댓글.\n\n`IShoppingSaleInquiryComment`는 {@link IBbsArticleComment}의 하위 유형 엔터티이며,\n{@link IShoppingCustomer 고객}이 작성한\n{@link IShoppingSaleInquiry 문의}에 대해 여러 사람과 소통하고자 할 때 사용됩니다.\n\n참고로, 관련 당사자만\n{@link IShoppingSeller 판매자}에 대한 댓글을 작성할 수 있지만\n{@link IShoppingCustomer 고객}에 대한 제한은 없습니다. 즉, 모든 고객은\n문의를 작성한 사람이 아니더라도 자유롭게 댓글을 작성할 수 있습니다." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키", + "description": "기본 키." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "스냅샷 레코드 생성 시간", + "description": "스냅샷 레코드 생성 시간.\n\n즉, 생성 시간 또는 업데이트 시간 또는 주석." + }, + "body": { + "type": "string", + "title": "본문 형식", + "description": "본문 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "주석의 본문 내용", + "description": "주석의 본문 내용." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "첨부 파일 목록" + }, + "IAttachmentFile.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "maxLength": 255, + "title": "첨부 파일 목록.", + "description": "댓글의 스냅샷.\n\n`IBbsArticleComment.ISnapshot`은 댓글의 내용을 포함하는\n스냅샷 엔터티입니다.\n\n{@link IBbsArticleComment}에서 언급했듯이, 증거를 보관하고 사기를 방지하기 위해 설계되었습니다." + }, + "extension": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "title": "확장자를 제외한 파일 이름", + "description": "확장자를 제외한 파일 이름.\n\n`.gitignore` 파일이 있는 경우, 해당 이름은 빈 문자열입니다." + }, + "url": { + "type": "string", + "format": "uri", + "title": "확장자", + "description": "확장자.\n\n`README` 케이스처럼 생략 가능." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "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": "실제 파일의 URL 경로", + "description": "실제 파일의 URL 경로." + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + }, + "description": "페이지당 레코드 제한" + }, + "IShoppingSaleInquiryComment.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "body": { + "type": "string" + } + } + }, + "IShoppingSaleInquiryComment.ICreate": { + "type": "object", + "properties": { + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "페이지당 레코드 제한.", + "description": "페이지 매김 및 검색/정렬 옵션이 있는 댓글 요청." + }, + "body": { + "type": "string", + "title": "본문 형식", + "description": "본문 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "댓글의 본문 내용", + "description": "댓글의 본문 내용." + } + }, + "required": [ + "format", + "body", + "files" + ], + "description": "첨부 파일 목록" + }, + "IShoppingSaleInquiryComment.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "첨부 파일 목록.", + "description": "댓글의 생성 정보." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키", + "description": "기본 키." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "스냅샷 레코드 생성 시간", + "description": "스냅샷 레코드 생성 시간.\n\n즉, 생성 시간 또는 업데이트 시간 또는 댓글." + }, + "body": { + "type": "string", + "title": "본문 형식", + "description": "본문 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "댓글의 본문 내용", + "description": "댓글의 본문 내용." + } + }, + "required": [ + "id", + "created_at", + "format", + "body", + "files" + ], + "description": "첨부 파일 목록" + }, + "IPageIShoppingSaleQuestion.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "첨부 파일 목록.", + "description": "댓글의 스냅샷 내용." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.ISummary" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "IShoppingSaleQuestion.ISummary": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "레코드 목록.", + "description": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "질문 기사가 비밀인지 아닌지", + "description": "질문 기사가 비밀인지 아닌지.\n\n비밀 기사인 경우 작성자 고객과 관련 판매자만\n자세한 내용을 볼 수 있습니다." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary" + } + ], + "title": "문의를 작성한 고객", + "description": "문의를 작성한 고객." + }, + "read_by_seller": { + "type": "boolean", + "title": "판매자의 문의에 대한 공식 답변", + "description": "판매자의 문의에 대한 공식 답변." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "판매자가 문의를 봤는지 여부", + "description": "판매자가 문의를 봤는지 여부" + }, + "title": { + "type": "string", + "title": "기본 키", + "description": "기본 키." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "마지막 스냅샷의 제목", + "description": "마지막 스냅샷의 제목." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "기사의 생성 시간", + "description": "기사 생성 시간." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "기사 수정 시간" + }, + "IShoppingSaleInquiryAnswer.ISummary": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "기사 수정 시간.\n\n즉, 마지막 스냅샷이 생성된 시간입니다.", + "description": "질문의 요약 정보." + }, + "title": { + "type": "string", + "title": "기본 키", + "description": "기본 키." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "마지막 스냅샷의 제목", + "description": "마지막 스냅샷의 제목." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "기사 생성 시간", + "description": "기사 생성 시간." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ] + }, + "IShoppingSaleQuestion.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSaleInquiry.IRequest.ISearch", + "title": "기사 수정 시간", + "description": "기사 수정 시간.\n\n즉, 마지막 스냅샷이 생성된 시간입니다." + }, + "sort": { + "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": "검색 조건", + "description": "검색 조건." + }, + "page": { + "type": "integer", + "title": "정렬 조건", + "description": "정렬 조건." + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + }, + "description": "페이지당 레코드 수 제한" + }, + "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.IAbridge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "페이지당 레코드 수 제한.", + "description": "페이지 검색/정렬 옵션이 있는 요약 정보 요청." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleQuestion.IAbridge" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "IShoppingSaleQuestion.IAbridge": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "레코드 목록.", + "description": "페이지.\n\n페이지 정보가 있는 레코드 모음." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "질문 기사가 비밀인지 아닌지", + "description": "질문 기사가 비밀인지 아닌지.\n\n비밀 기사인 경우 작성자 고객과 관련 판매자만\n자세한 내용을 볼 수 있습니다." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.IAbridge" + } + ], + "title": "문의를 작성한 고객", + "description": "문의를 작성한 고객." + }, + "read_by_seller": { + "type": "boolean", + "title": "판매자의 문의에 대한 공식 답변", + "description": "판매자의 문의에 대한 공식 답변." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "판매자가 문의를 봤는지 여부", + "description": "판매자가 문의를 봤는지 여부" + }, + "title": { + "type": "string", + "title": "기본 키", + "description": "기본 키." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "마지막 스냅샷의 제목", + "description": "마지막 스냅샷의 제목." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "기사의 생성 시간", + "description": "기사 생성 시간." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "기사 수정 시간", + "description": "기사 수정 시간.\n\n즉, 마지막 스냅샷이 생성된 시간입니다." + }, + "body": { + "type": "string", + "title": "본문 형식", + "description": "본문 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미입니다." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "기사의 본문 내용", + "description": "기사의 본문 내용." + } + }, + "required": [ + "secret", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "첨부 파일 목록" + }, + "IShoppingSaleInquiryAnswer.IAbridge": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "첨부 파일 목록.", + "description": "질문의 요약 정보." + }, + "title": { + "type": "string", + "title": "기본 키", + "description": "기본 키." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "마지막 스냅샷의 제목", + "description": "마지막 스냅샷의 제목." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "기사 생성 시간", + "description": "기사 생성 시간." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "기사 수정 시간", + "description": "기사 수정 시간.\n\n즉, 마지막 스냅샷이 생성된 시간입니다." + }, + "body": { + "type": "string", + "title": "본문 형식", + "description": "본문 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미입니다." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "기사 본문 내용", + "description": "기사 본문 내용." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ] + }, + "IShoppingSaleQuestion": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "첨부 파일 목록", + "description": "첨부 파일 목록." + }, + "type": { + "const": "question", + "title": "질문 기사가 비밀인지 아닌지", + "description": "질문 기사가 비밀인지 아닌지 여부.\n\n비밀 기사인 경우 작성자 고객과 관련 판매자만\n자세한 내용을 볼 수 있습니다." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "파생 문의 유형", + "description": "파생 문의 유형.\n\n- `question`: {@link IShoppingSaleQuestion}\n- `review`: {@link IShoppingSaleReview}" + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + ], + "title": "문의를 작성한 고객", + "description": "문의를 작성한 고객." + }, + "read_by_seller": { + "type": "boolean", + "title": "판매자의 문의에 대한 공식 답변", + "description": "판매자의 문의에 대한 공식 답변." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "판매자가 문의를 보았는지 여부", + "description": "판매자가 문의를 봤는지 여부." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + }, + "minItems": 1, + "title": "기본 키", + "description": "기본 키." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "스냅샷 콘텐츠 목록", + "description": "스냅샷 콘텐츠 목록.\n\n기사가 생성될 때 처음 생성되고\n기사가 수정될 때마다 누적됩니다." + } + }, + "required": [ + "secret", + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "기사 생성 시간" + }, + "IShoppingSaleInquiryAnswer": { + "type": "object", + "properties": { + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "기사 생성 시간.", + "description": "판매 스냅샷에 대한 질문.\n\n`IShoppingSaleQuestion`은 {@link IShoppingSaleInquiry}의 하위 유형 엔터티이며,\n{@link IShoppingCustomer 고객}이 {@link IShoppingSeller 판매자가 등록한 {@link IShoppingSale 판매}(당시 {@link IShoppingSaleSnapshot 스냅샷})에 대해 무언가를 묻고자 할 때 사용됩니다.\n\n그리고 대부분 쇼핑몰과 마찬가지로 `IShoppingSaleQuestion`도 {@link secret} 속성을 제공하여 판매자와 질문을 작성한 고객만 볼 수 있는 \"비밀 메시지\"를 만들 수 있습니다." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "답변을 작성한 판매자", + "description": "답변을 작성한 판매자." + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IBbsArticle.ISnapshot" + }, + "minItems": 1, + "title": "기본 키", + "description": "기본 키." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "스냅샷 콘텐츠 목록", + "description": "스냅샷 콘텐츠 목록.\n\n기사가 생성될 때 처음 생성되고\n기사가 수정될 때마다 누적됩니다." + } + }, + "required": [ + "seller", + "id", + "snapshots", + "created_at" + ], + "description": "기사 생성 시간" + }, + "IBbsArticle.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "기사 생성 시간.", + "description": "판매 스냅샷에 대한 질문에 대한 답변.\n\n`IShoppingSaleInquiryAnswer`는 {@link IShoppingSeller 판매자}가 작성한 공식\n답변을 구현한 엔티티로, {@link IShoppingCustomer 고객}이 작성한\n{@link IShoppingSaleInquiry 문의}에 대한\n{@link IShoppingSaleInquiry 문의}입니다.\n\n물론 이와 같은 공식 답변을 작성하는 것 외에도\n판매자가 귀속 문의에서\n{@link IShoppingSaleInquiryComment 댓글}을 통해 문의한 고객 및 여러 고객과 소통할 수도 있습니다.\n\n참고로, 이 답변에 대한 댓글을 작성할 수 없습니다.\n사람들이 문의 문서에 대한 댓글을 작성하도록 권장합니다. 이는\n문의와 답변 문서에 댓글이 분산되는 것을 방지하기 위한 것입니다." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키", + "description": "기본 키." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "스냅샷 레코드 생성 시간", + "description": "스냅샷 레코드 생성 시간.\n\n즉, 기사 생성 시간 또는 업데이트 시간." + }, + "title": { + "type": "string", + "title": "본문 형식", + "description": "본문 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미." + }, + "body": { + "type": "string", + "title": "기사 제목", + "description": "기사 제목." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "기사 본문 내용", + "description": "기사 본문 내용." + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "첨부 파일 목록" + }, + "IPageIShoppingSaleReview.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "첨부 파일 목록.", + "description": "기사의 스냅샷.\n\n`IBbsArticle.ISnapshot`은 {@link IBbsArticle}에서 언급된 대로 기사의 내용을 포함하는 스냅샷 엔터티입니다. 기사의 내용은\n증거를 보관하고 사기를 방지하기 위해 기사 레코드와 분리됩니다." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISummary" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "IShoppingSaleReview.ISummary": { + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "레코드 목록.", + "description": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "리뷰 점수", + "description": "리뷰 점수." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary" + } + ], + "title": "문의를 작성한 고객", + "description": "문의를 작성한 고객." + }, + "read_by_seller": { + "type": "boolean", + "title": "판매자의 문의에 대한 공식 답변", + "description": "판매자의 문의에 대한 공식 답변." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "판매자가 문의를 보았는지 여부", + "description": "판매자가 문의를 보았는지 여부" + }, + "title": { + "type": "string", + "title": "기본 키", + "description": "기본 키." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "마지막 스냅샷의 제목", + "description": "마지막 스냅샷의 제목." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "기사 생성 시간", + "description": "기사 생성 시간." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "기사 수정 시간" + }, + "IShoppingSaleReview.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest.ISearch", + "title": "기사 수정 시간.\n\n즉, 마지막 스냅샷이 생성된 시간입니다.", + "description": "리뷰의 요약 정보." + }, + "sort": { + "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": "검색 조건", + "description": "검색 조건." + }, + "page": { + "type": "integer", + "title": "정렬 조건", + "description": "정렬 조건." + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + }, + "description": "페이지당 레코드 수 제한" + }, + "IShoppingSaleReview.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" + }, + "minimum": { + "type": "number", + "minimum": 0, + "maximum": 100 + }, + "maximum": { + "type": "number", + "minimum": 0, + "maximum": 100 + } + } + }, + "IPageIShoppingSaleReview.IAbridge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "페이지당 레코드 수 제한.", + "description": "페이지 검색/정렬 옵션이 있는 요약 정보 요청." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.IAbridge" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "IShoppingSaleReview.IAbridge": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "레코드 목록.", + "description": "페이지.\n\n페이지 정보가 있는 레코드 모음." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "리뷰 점수", + "description": "리뷰 점수." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.IAbridge" + } + ], + "title": "문의를 작성한 고객", + "description": "문의를 작성한 고객." + }, + "read_by_seller": { + "type": "boolean", + "title": "판매자의 문의에 대한 공식 답변", + "description": "판매자의 문의에 대한 공식 답변." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "판매자가 문의를 보았는지 여부", + "description": "판매자가 문의를 보았는지 여부" + }, + "title": { + "type": "string", + "title": "기본 키", + "description": "기본 키." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "마지막 스냅샷의 제목", + "description": "마지막 스냅샷의 제목." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "기사 생성 시간", + "description": "기사 생성 시간." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "기사 수정 시간", + "description": "기사 수정 시간.\n\n즉, 마지막 스냅샷이 생성된 시간입니다." + }, + "body": { + "type": "string", + "title": "본문 형식", + "description": "본문 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "기사의 본문 내용", + "description": "기사의 본문 내용." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at", + "format", + "body", + "files" + ], + "description": "첨부 파일 목록" + }, + "IShoppingSaleReview": { + "type": "object", + "properties": { + "type": { + "const": "review", + "title": "첨부 파일 목록.", + "description": "리뷰의 요약 정보." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "파생 문의 유형", + "description": "파생 문의 유형.\n\n- `question`: {@link IShoppingSaleQuestion}\n- `review`: {@link IShoppingSaleReview}" + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer" + } + ], + "title": "문의를 작성한 고객", + "description": "문의를 작성한 고객." + }, + "read_by_seller": { + "type": "boolean", + "title": "판매자가 문의에 대한 공식 답변", + "description": "판매자가 문의에 대한 공식 답변." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "판매자가 문의를 봤는지 여부", + "description": "판매자가 문의를 봤는지 여부" + }, + "snapshots": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISnapshot" + }, + "minItems": 1, + "title": "기본 키", + "description": "기본 키." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "스냅샷 콘텐츠 목록", + "description": "스냅샷 콘텐츠 목록.\n\n기사가 생성될 때 처음 생성되고\n기사가 수정될 때마다 누적됩니다." + } + }, + "required": [ + "type", + "customer", + "answer", + "read_by_seller", + "id", + "snapshots", + "created_at" + ], + "description": "기사 생성 시간" + }, + "IShoppingSaleReview.ISnapshot": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "기사 생성 시간.", + "description": "판매 스냅샷에 대한 리뷰.\n\n`IShoppingSaleReview`는 {@link IShoppingSaleInquiry}의 하위 유형 엔터티이며,\n{@link IShoppingCustomer 고객}이 {@link IShoppingSeller 판매자}가 제품으로 등록한\n{@link IShoppingSale 판매}(당시 {@link IShoppingSaleSnapshot 스냅샷})를 구매하고\n리뷰와 평가를 남길 때 사용됩니다.\n\n참고로 `IShoppingSaleReview`와\n{@link IShoppingOrderGod shopping_order_goods}는 N: 1의 대수적 관계를 가지고 있지만, 이는 고객이 동일한 제품에 대해\n무한정 리뷰를 계속 쓸 수 있다는 것을 의미하지는 않습니다.\n리뷰를 한 번 작성하면 한 달 후에 추가 리뷰를 작성할 수 있는 것과 같은 제한이 있지 않을까요?" + }, + "id": { + "type": "string", + "title": "리뷰 점수", + "description": "리뷰 점수." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키", + "description": "기본 키." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "스냅샷 레코드 생성 시간", + "description": "스냅샷 레코드 생성 시간.\n\n즉, 기사 생성 시간 또는 업데이트 시간." + }, + "title": { + "type": "string", + "title": "본문 형식", + "description": "본문 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미." + }, + "body": { + "type": "string", + "title": "기사 제목", + "description": "기사 제목." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "기사 본문 내용", + "description": "기사 본문 내용." + } + }, + "required": [ + "score", + "id", + "created_at", + "format", + "title", + "body", + "files" + ], + "description": "첨부 파일 목록" + }, + "IPageIShoppingSaleSnapshot.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "첨부 파일 목록.", + "description": "리뷰 기사의 스냅샷 내용." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleSnapshot.ISummary" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "IShoppingSaleSnapshot.ISummary": { + "type": "object", + "properties": { + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange", + "title": "기록 목록.", + "description": "페이지.\n\n페이지 정보가 있는 기록 모음." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "단위의 가격 범위", + "description": "단위의 가격 범위." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "판매의 기본 키", + "description": "판매의 기본 키." + }, + "latest": { + "type": "boolean", + "title": "스냅샷의 기본 키", + "description": "스냅샷의 기본 키." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "스냅샷이 최신인지 여부", + "description": "스냅샷이 최신인지 여부" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "판매를 설명하는 설명 및 이미지 콘텐츠", + "description": "판매를 설명하는 설명 및 이미지 콘텐츠" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "채널 및 카테고리 목록", + "description": "채널 및 카테고리 목록.\n\n판매가 등록된 채널 및 카테고리." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ISummary" + }, + "minItems": 1, + "title": "검색 태그 목록", + "description": "검색 태그 목록." + } + }, + "required": [ + "price_range", + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units" + ], + "description": "단위 목록" + }, + "IPage.IRequest": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "title": "단위 목록.\n\n판매에서 판매되는 개별 제품 구성 정보에 대한 기록. 각 {@link IShoppingSaleUnit 단위} 기록에는 구성 가능한\n{@link IShoppingSaleUnitOption 옵션},\n{@link IShoppingSaleUnitOptionCandidate 후보} 값(각 옵션에 대해) 및 {@link IShoppingSaleUnitStock 최종 재고}가 있으며, 각 옵션의 모든 후보 값을 선택하여\n결정합니다.", + "description": "판매 스냅샷의 요약 정보." + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + }, + "description": "페이지당 기록 제한" + }, + "IShoppingSaleSnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "페이지당 레코드 제한.", + "description": "페이지 요청 데이터" + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "판매의 기본 키", + "description": "판매의 기본 키." + }, + "latest": { + "type": "boolean", + "title": "스냅샷의 기본 키", + "description": "스냅샷의 기본 키." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent", + "title": "스냅샷이 최신인지 여부", + "description": "스냅샷이 최신인지 여부." + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel" + }, + "minItems": 1, + "title": "판매를 설명하는 설명 및 이미지 콘텐츠", + "description": "판매를 설명하는 설명 및 이미지 콘텐츠." + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "채널 및 카테고리 목록", + "description": "채널 및 카테고리 목록.\n\n판매가 등록된 채널 및 카테고리." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit" + }, + "minItems": 1, + "title": "검색 태그 목록", + "description": "검색 태그 목록." + } + }, + "required": [ + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units" + ], + "description": "단위 목록" + }, + "IShoppingChannelCategory": { + "type": "object", + "properties": { + "parent": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + } + ], + "title": "단위 목록.\n\n판매에서 판매되는 개별 제품 구성 정보에 대한 기록\n. 각 {@link IShoppingSaleUnit 단위} 기록에는 구성 가능한\n{@link IShoppingSaleUnitOption 옵션},\n{@link IShoppingSaleUnitOptionCandidate 후보} 값이 있으며, 각 옵션에 대한\n{@link IShoppingSaleUnitOptionCandidate 후보} 값과\n각 옵션의 모든 후보 값을 선택하여 결정된 {@link IShoppingSaleUnitStock 최종 재고}가 있습니다.", + "description": "판매의 스냅샷 기록.\n\n`IShoppingSaleSnapshot`은 판매의 스냅샷을 구현하는 엔터티이며\nERD(엔터티 관계 다이어그램)는 다음과 같이 `shopping_sale_snapshots` 테이블의 역할을 설명합니다.\n\n> {@link IShoppingSale shopping_sales}는\n> {@link IShoppingSeller 판매자가 등록한 \"제품 판매\"(판매) 정보를 구현하는 엔터티입니다. 그리고 판매의 주요 정보는\n> 메인 {@link IShoppingSale shopping_sales}가 아닌 하위 `shopping_sale_snapshots`에 기록됩니다. 판매자가 이전에\n> 등록된 항목을 변경하면 기존 {@link IShoppingSale shopping_sales} 레코드는\n> 변경되지 않지만 새 스냅샷 레코드가 생성됩니다.\n>\n> 이는 판매자가 품목의 구성 요소나 가격을 변경하더라도 고객이 특정 품목을 구매한 후 {@link IShoppingCustomer 고객}의\n> {@link IShoppingOrder 구매 내역}을 완벽하게 보존하기 위한 것입니다.\n> 또한 구성 요소나 가격을 변경하고 각 경우 성과를 측정하는 소위 A/B 테스트에서 판매자를 지원하기 위한 것입니다.\n> \n\n그런데 프런트엔드 개발자가 사용하는 DTO(Data Transfer Object) 수준에서는 {@link IShoppingSale}과 `IShoppingSaleSnapshot`을 엄격하게 구분하지 않고 일반적으로 {@link IShoppingSale}과 스냅샷을 함께 처리합니다.\n\n하지만 DTO 수준에서 엄격하게 구분하지 않더라도 \"스냅샷\"이라는 단어와 개념은 여전히 중요하므로 \"스냅샷\"이라는 개념을 올바르게 이해하는 것이 좋습니다." + }, + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "상위 카테고리 정보", + "description": "상위 카테고리 정보." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "계층 구조의 자식 카테고리 목록", + "description": "계층 구조의 자식 카테고리 목록." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "기본 키", + "description": "기본 키." + }, + "name": { + "type": "string", + "title": "상위 카테고리의 ID", + "description": "상위 카테고리의 ID." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "카테고리의 대표 이름", + "description": "카테고리의 대표 이름.\n\n이름은 상위 카테고리 내에서 고유해야 합니다. 상위가 없는 경우\n이름은 부모 카테고리가 없는 채널 내에서 고유해야 합니다." + } + }, + "required": [ + "parent", + "children", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "레코드 생성 시간" + }, + "IShoppingChannelCategory.IHierarchical": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "레코드 생성 시간.", + "description": "채널의 카테고리.\n\n`IShoppingChannelCategory`는 특정 {@link IShoppingChannel 채널} 내의 분류 카테고리를 나타내는 개념이며, 쇼핑몰에서 일반적으로 \"카테고리\"라고 하는 개념과 정확히 같습니다.\n\n그리고 `IShoppingChannelCategory`는 {@link IShoppingSection}과 다릅니다.\n{@link IShoppingSection}은 오프라인 시장에서 독립적인 공간 정보인 \"코너\"를 나타내며, {@link IShoppingSale 세일}에서 동시에 분류할 수 없습니다. 게다가 `IShoppingChannelCategory`는 세일에서 동시에 여러 카테고리로 분류할 수 있습니다.\n\n제품 | 섹션(코너) | 카테고리\n-------------|------------------|-----------------------------------\n소고기 | 정육점 코너 | 냉동식품, 육류, 좋아하는 음식\n포도 | 과일 코너 | 신선한 음식, 좋아하는 음식\n\n또한 `IShoppingChannelCategory`는 1:N 자기 재귀적 관계를 가지고 있기 때문에\n아래와 같은 계층적 구조를 표현할 수 있습니다. 따라서 각 채널은\n원하는 대로 자체 카테고리 분류를 설정할 수 있습니다.\n\n- 식품 > 육류 > 냉동\n- 전자제품 > 노트북 > 15인치\n- 잡화 > 지갑\n\n또한 `IShoppingChannelCategory`는 서로 병합되도록 설계되어\n언제든지 카테고리를 편집할 부담이 없습니다." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "계층 구조의 자식 카테고리 목록", + "description": "계층 구조의 자식 카테고리 목록." + }, + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "기본 키", + "description": "기본 키." + }, + "name": { + "type": "string", + "title": "상위 카테고리의 ID", + "description": "상위 카테고리의 ID." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "카테고리의 대표 이름", + "description": "카테고리의 대표 이름.\n\n이름은 부모 카테고리 내에서 고유해야 합니다. 부모가 없는 경우\n이름은 부모 카테고리가 없는 채널 내에서 고유해야 합니다." + } + }, + "required": [ + "children", + "id", + "parent_id", + "name", + "created_at" + ], + "description": "레코드 생성 시간" + }, + "IShoppingChannelCategory.ICreate": { + "type": "object", + "properties": { + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "레코드 생성 시간.", + "description": "자식 카테고리가 있는 계층적 카테고리 정보." + }, + "name": { + "type": "string", + "title": "상위 카테고리의 ID", + "description": "상위 카테고리의 ID." + } + }, + "required": [ + "parent_id", + "name" + ], + "description": "카테고리의 대표 이름" + }, + "IRecordMerge": { + "type": "object", + "properties": { + "keep": { + "type": "string", + "format": "uuid", + "title": "카테고리의 대표 이름.\n\n이름은 상위 카테고리 내에서 고유해야 합니다. 상위가 없는 경우\n이름은 상위 카테고리가 없는 채널 내에서 고유해야 합니다.", + "description": "카테고리의 생성 정보." + }, + "absorbed": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "병합 후 보관할 대상 레코드", + "description": "병합 후 보관할 대상 레코드.\n\n병합 프로세스 후, {@link 흡수} 레코드가\n이 {@link keep} 레코드로 병합됩니다." + } + }, + "required": [ + "keep", + "absorbed" + ], + "description": "병합 후 {@link keep}에 흡수됩니다." + }, + "IShoppingChannel.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "병합 후 {@link keep}에 흡수됩니다.", + "description": "레코드 병합 DTO.\n\n`IRecordMerge`는 레코드를 병합하기 위한 구조입니다.\n\n`merge`는 여러 {@link IRecordMerge.absorbed}\n레코드를 삭제하는 대신 {@link IRecordMerge.keep}에 병합하는 것을 의미합니다.\n\n대상 `table`의 종속 테이블 중 외래 키 열에\n고유 제약 조건이 있는 경우 이러한 종속 테이블도 병합 프로세스를 수행합니다.\n\n물론 해당 종속 테이블 아래에 다른 종속 테이블이 있는 경우 병합 프로세스도 재귀적으로 수행합니다.\n이러한 재귀적 병합 프로세스는 자체 재귀적(트리 구조) 테이블에도 여전히 작동합니다." + }, + "name": { + "type": "string", + "title": "식별자 코드", + "description": "식별자 코드." + } + }, + "required": [ + "code", + "name" + ], + "description": "채널 이름" + }, + "IShoppingChannel.IUpdate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "채널 이름.", + "description": "채널 생성 정보." + } + }, + "required": [ + "name" + ], + "description": "채널 이름" + }, + "IPageIShoppingChannel": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "채널 이름.", + "description": "채널 정보 업데이트." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannel" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "IShoppingChannel.IRequest": { + "type": "object", + "properties": { + "search": { + "$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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "레코드 목록.", + "description": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음." + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + }, + "description": "페이지당 레코드 제한" + }, + "IShoppingChannel.IRequest.ISearch": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "IPageIShoppingChannel.IHierarchical": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "페이지당 레코드 제한.", + "description": "페이지 번호 및 검색/정렬 옵션이 있는 채널 요청." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "IShoppingChannel.IHierarchical": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" + }, + "title": "레코드 목록.", + "description": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "계층 구조가 있는 자식 카테고리", + "description": "계층 구조가 있는 자식 카테고리." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키", + "description": "기본 키." + }, + "code": { + "type": "string", + "title": "레코드 생성 시간", + "description": "레코드 생성 시간." + }, + "name": { + "type": "string", + "title": "식별자 코드", + "description": "식별자 코드." + } + }, + "required": [ + "categories", + "id", + "created_at", + "code", + "name" + ], + "description": "채널 이름" + }, + "IShoppingSection.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "채널 이름.", + "description": "자식 카테고리가 있는 계층적 채널 정보." + }, + "name": { + "type": "string", + "title": "식별자 코드", + "description": "식별자 코드." + } + }, + "required": [ + "code", + "name" + ], + "description": "섹션의 대표 이름" + }, + "IShoppingSection.IUpdate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "섹션의 대표 이름.", + "description": "섹션의 생성 정보." + } + }, + "required": [ + "name" + ], + "description": "섹션의 대표 이름" + }, + "IPageIShoppingSection": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "섹션의 대표 이름.", + "description": "섹션의 정보 업데이트." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSection" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "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": "레코드 목록.", + "description": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음." + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + }, + "description": "페이지당 레코드 제한" + }, + "IShoppingSection.IRequest.ISearch": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "IShoppingCustomer.IAuthorized": { + "type": "object", + "properties": { + "setHeaders": { + "type": "object", + "properties": { + "Authorization": { + "type": "string" + } + }, + "required": [ + "Authorization" + ] + }, + "token": { + "$ref": "#/components/schemas/IShoppingCustomer.IToken" + }, + "type": { + "const": "customer", + "title": "페이지당 레코드 제한.", + "description": "페이지 번호 및 검색/정렬 옵션이 있는 섹션 요청." + }, + "member": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMember" + } + ], + "title": "고객 유형에 대한 판별식", + "description": "고객 유형에 대한 판별식." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen" + } + ], + "title": "회원 정보", + "description": "회원 정보.\n\n고객이 회원으로 가입한 경우." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "시민 정보", + "description": "시민 정보.\n\n고객이 실명과 휴대전화 번호를 확인한 경우." + }, + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "기본 키", + "description": "기본 키." + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser" + } + ], + "title": "소속 채널", + "description": "소속 채널." + }, + "href": { + "type": "string", + "format": "uri", + "title": "외부 사용자 정보", + "description": "외부 사용자 정보.\n\n고객이 외부 서비스에서 온 경우." + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ], + "title": "연결 주소", + "description": "연결 주소.\n\n클라이언트의 {@link window.location.href}와 동일합니다." + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ], + "title": "참조자 주소", + "description": "참조자 주소.\n\n클라이언트의 {@link window.document.referrer}와 동일합니다." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "연결 IP 주소", + "description": "연결 IP 주소." + } + }, + "required": [ + "setHeaders", + "token", + "type", + "member", + "citizen", + "id", + "channel", + "external_user", + "href", + "referrer", + "ip", + "created_at" + ] + }, + "IShoppingCustomer.IToken": { + "type": "object", + "properties": { + "access": { + "type": "string" + }, + "refresh": { + "type": "string" + }, + "expired_at": { + "type": "string", + "format": "date-time" + }, + "refreshable_until": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "access", + "refresh", + "expired_at", + "refreshable_until" + ] + }, + "IShoppingCustomer.IRefresh": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + }, + "IShoppingCustomer.ICreate": { + "type": "object", + "properties": { + "channel_code": { + "type": "string" + }, + "external_user": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingExternalUser.ICreate" + } + ] + }, + "href": { + "type": "string", + "format": "uri" + }, + "referrer": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uri" + } + ] + }, + "ip": { + "oneOf": [ + { + "type": "string", + "format": "ipv4" + }, + { + "type": "string", + "format": "ipv6" + } + ] + } + }, + "required": [ + "channel_code", + "external_user", + "href", + "referrer" + ] + }, + "IShoppingExternalUser.ICreate": { + "type": "object", + "properties": { + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + ], + "title": "연결 레코드의 생성 시간", + "description": "연결 레코드의 생성 시간." + }, + "application": { + "type": "string", + "title": "시민 활성화 정보", + "description": "시민 활성화 정보." + }, + "uid": { + "type": "string", + "title": "외부 서비스의 식별자 코드", + "description": "외부 서비스의 식별자 코드.\n\n{@link IShoppingChannel.code}와 공통적으로 동일할 수 있습니다." + }, + "nickname": { + "type": "string", + "title": "외부 시스템의 외부 사용자의 식별자 키", + "description": "외부 시스템의 외부 사용자의 식별자 키" + }, + "password": { + "type": "string", + "title": "외부 시스템의 외부 사용자의 별명", + "description": "외부 시스템의 외부 사용자의 별명" + }, + "data": { + "description": "외부 시스템의 외부 사용자의 비밀번호" + } + }, + "required": [ + "citizen", + "application", + "uid", + "nickname", + "password", + "data" + ], + "description": "외부 시스템의 외부 사용자 비밀번호.\n\n이 비밀번호는 외부 서비스에서 사용자에게 발급한 비밀번호이며,\n실제 사용자 비밀번호는 아닙니다. 그러나\n현재 외부 시스템 사용자와 동일한\n애플리케이션 및 코드를 입력한 {@link IShoppingCustomer 고객}의 경우,\n이를 올바른 외부 시스템 사용자로 볼지\n위반으로 볼지 여부를 결정하기 위한 것입니다." + }, + "IShoppingCitizen.ICreate": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "외부 시스템의 외부 사용자에 대한 추가 정보.", + "description": "외부 사용자의 생성 정보." + }, + "name": { + "type": "string", + "title": "휴대전화 번호", + "description": "휴대전화 번호." + } + }, + "required": [ + "mobile", + "name" + ], + "description": "실명 또는 동등한 별명" + }, + "IShoppingMember.IJoin": { + "type": "object", + "properties": { + "nickname": { + "type": "string", + "title": "실명 또는 동등한 별명.", + "description": "국민 확인 생성 정보." + }, + "citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCitizen.ICreate" + } + ], + "title": "회원을 고유하게 식별하는 별명", + "description": "회원을 고유하게 식별하는 별명." + }, + "email": { + "type": "string", + "format": "email", + "title": "국민 정보", + "description": "국민 정보." + }, + "password": { + "type": "string", + "title": "회원의 이메일 주소", + "description": "회원의 이메일 주소.\n\n회원에게 여러 개의 이메일 주소가 있는 경우 그 중 하나만 사용하세요." + } + }, + "required": [ + "nickname", + "citizen", + "email", + "password" + ], + "description": "회원 계정의 비밀번호" + }, + "IShoppingMember.IPasswordChange": { + "type": "object", + "properties": { + "oldbie": { + "type": "string", + "title": "회원 계정의 비밀번호.", + "description": "가입 요청 정보." + }, + "newbie": { + "type": "string", + "title": "현재 비밀번호", + "description": "현재 비밀번호." + } + }, + "required": [ + "oldbie", + "newbie" + ], + "description": "변경할 새 비밀번호" + }, + "IPageIShoppingCouponTicket": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "변경할 새 비밀번호.", + "description": "비밀번호 변경 정보 요청." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "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": "레코드 목록.", + "description": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음." + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + } + }, + "IShoppingCouponTicket.ICreate": { + "type": "object", + "properties": { + "coupon_id": { + "type": "string", + "format": "uuid" + } + }, + "required": [ + "coupon_id" + ] + }, + "IPageIShoppingDepositCharge": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "페이지당 레코드 제한", + "description": "페이지당 레코드 제한." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDepositCharge" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "IShoppingDepositCharge": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer" + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDepositChargePublish" + } + ] + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "value": { + "type": "number" + } + }, + "required": [ + "id", + "customer", + "publish", + "created_at", + "value" + ] + }, + "IShoppingDepositChargePublish": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "created_at": { + "type": "string", + "format": "date-time" + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at" + ] + }, + "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": "레코드 목록.", + "description": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음." + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + } + }, + "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": { + "oneOf": [ + { + "const": "published" + }, + { + "const": "pending" + }, + { + "const": "payed" + }, + { + "const": "cancelled" + } + ] + }, + "publish": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "payment": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "required": [ + "state" + ] + }, + "IShoppingDepositCharge.ICreate": { + "type": "object", + "properties": { + "value": { + "type": "number" + } + }, + "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": "페이지당 레코드 제한", + "description": "페이지당 레코드 제한." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDepositHistory" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "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" + }, + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "citizen", + "deposit", + "source_id", + "value", + "balance", + "created_at" + ] + }, + "IShoppingDepositHistory.IRequest": { + "type": "object", + "properties": { + "search": { + "$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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "레코드 목록.", + "description": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음." + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + } + }, + "IShoppingDepositHistory.IRequest.ISearch": { + "type": "object", + "properties": { + "deposit": { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "IPageIShoppingMileageHistory": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "페이지당 레코드 제한", + "description": "페이지당 레코드 제한." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileageHistory" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "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" + ] + }, + "IShoppingMileageHistory.IRequest": { + "type": "object", + "properties": { + "search": { + "$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" + } + ] + } + }, + "page": { + "type": "integer", + "title": "레코드 목록.", + "description": "페이지.\n\n페이지 번호 정보가 있는 레코드 모음." + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + } + }, + "IShoppingMileageHistory.IRequest.ISearch": { + "type": "object", + "properties": { + "mileage": { + "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + }, + "citizen_id": { + "type": "string", + "format": "uuid" + }, + "from": { + "type": "string", + "format": "date-time" + }, + "to": { + "type": "string", + "format": "date-time" + }, + "minimum": { + "type": "number", + "minimum": 0 + }, + "maximum": { + "type": "number", + "minimum": 0 + } + } + }, + "IPageIShoppingCartCommodity": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "페이지당 레코드 수 제한", + "description": "페이지당 레코드 수 제한." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodity" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "IShoppingCartCommodity.IRequest": { + "type": "object", + "properties": { + "search": { + "$ref": "#/components/schemas/IShoppingCartCommodity.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" + }, + { + "const": "-commodity.price" + }, + { + "const": "-commodity.volume" + }, + { + "const": "-commodity.volumed_price" + }, + { + "const": "-commodity.created_at" + }, + { + "const": "+commodity.price" + }, + { + "const": "+commodity.volume" + }, + { + "const": "+commodity.volumed_price" + }, + { + "const": "+commodity.created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "레코드 목록.", + "description": "페이지.\n\n페이지 번호가 있는 레코드 모음." + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + } + }, + "IShoppingCartCommodity.IRequest.ISearch": { + "type": "object", + "properties": { + "min_price": { + "type": "number" + }, + "max_price": { + "type": "number" + }, + "min_volumed_price": { + "type": "number" + }, + "max_volumed_price": { + "type": "number" + }, + "sale": { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + } + }, + "IShoppingCartCommodity.ICreate": { + "type": "object", + "properties": { + "sale_id": { + "type": "string", + "format": "uuid", + "title": "페이지당 레코드 제한", + "description": "페이지당 레코드 제한." + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodityStock.ICreate" + }, + "minItems": 1, + "title": "대상 판매 {@link IShoppingSale.id}", + "description": "대상 판매 {@link IShoppingSale.id}." + }, + "volume": { + "type": "integer", + "minimum": 1, + "title": "구매할 주식 목록", + "description": "구매할 주식 목록." + }, + "accumulate": { + "type": "boolean", + "title": "구매할 상품의 양", + "description": "구매할 상품의 볼륨.\n\n자식\n{@link IShoppingSaleUnitStock.IInvert.quantity} 값에 곱해지는 세트 수를 나타내는 값." + } + }, + "required": [ + "sale_id", + "stocks", + "volume" + ], + "description": "볼륨을 누적할지 여부" + }, + "IShoppingCartCommodityStock.ICreate": { + "type": "object", + "properties": { + "unit_id": { + "type": "string", + "format": "uuid", + "title": "볼륨을 누적할지 여부.\n\n이 속성이 `false`가 아니고 동일한 주식 및 옵션으로 구성된 동일한 상품이 있는 경우 볼륨은 기존 상품에 누적됩니다.\n\n그렇지 않으면 중복된 상품이 새로 생성됩니다.", + "description": "쇼핑 카트 상품의 생성 정보." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "대상 단위의 {@link IShoppingSaleUnit.id}", + "description": "대상 단위의 {@link IShoppingSaleUnit.id}." + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodityStockChoice.ICreate" + }, + "title": "대상 재고의 {@link IShoppingSaleUnitStock.id}", + "description": "대상 재고의 {@link IShoppingSaleUnitStock.id}.\n\n{@link choices} 속성과 일치해야 합니다." + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "각 옵션에 대한 선택 사항의 생성 정보", + "description": "각 옵션에 대한 선택 사항의 생성 정보" + } + }, + "required": [ + "unit_id", + "stock_id", + "choices", + "quantity" + ], + "description": "구매할 재고 수량" + }, + "IShoppingCartCommodityStockChoice.ICreate": { + "type": "object", + "properties": { + "option_id": { + "type": "string", + "format": "uuid", + "title": "구매할 재고 수량.\n\n이 값은 {@link IShoppingCartCommodity.volume}에 곱해집니다.", + "description": "쇼핑 카트의 상품 재고에 대한 생성 정보.\n\n레코드가 생성될 때 해당 구조는\n{@link IShoppingSaleSnapshotUnit.IInvert} 및\n{@link IShoppingSaleSnapshotUnitStock.IInvert}입니다." + }, + "candidate_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "대상 옵션의 {@link IShoppingSaleUnitOption.id}", + "description": "대상 옵션의 {@link IShoppingSaleUnitOption.id}." + }, + "value": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ], + "title": "대상 후보의 {@link IShoppingSaleUnitOptionCandidate.id}", + "description": "대상 후보자의 {@link IShoppingSaleUnitOptionCandidate.id}.\n\n대상 옵션의 유형이 `select`인 경우 이 속성은 `null`이 아니지만\n값을 가집니다." + } + }, + "required": [ + "option_id", + "candidate_id", + "value" + ], + "description": "옵션에 대한 기록된 값" + }, + "IShoppingCartCommodity.IUpdate": { + "type": "object", + "properties": { + "volume": { + "type": "integer", + "minimum": 1, + "title": "옵션에 대한 기록된 값.\n\n대상 옵션의 유형이 `select`가 아니라 `boolean`, `number` 또는 `string`과 같은 원자 유형 값인 경우 이 속성은\n`null`이 아니지만 일치하는 원자 값을 가집니다.", + "description": "각 옵션에 대한 선택 사항의 생성 정보.\n\n레코드가 생성될 때 해당 구조는\n{@link IShoppingSaleUnitStockChoice.IInvert}." + } + }, + "required": [ + "volume" + ], + "description": "구매할 상품의 양" + }, + "IShoppingCartDiscountable": { + "type": "object", + "properties": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "combinations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.ICombination" + } + } + }, + "required": [ + "deposit", + "mileage", + "combinations" + ] + }, + "IShoppingCartDiscountable.ICombination": { + "type": "object", + "properties": { + "coupons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + }, + "tickets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartDiscountable.IEntry" + } + }, + "amount": { + "type": "number" + } + }, + "required": [ + "coupons", + "tickets", + "entries", + "amount" + ] + }, + "IShoppingCartDiscountable.IEntry": { + "type": "object", + "properties": { + "commodity_id": { + "type": "string", + "format": "uuid" + }, + "pseudo": { + "type": "boolean" + }, + "coupon_id": { + "type": "string", + "format": "uuid" + }, + "amount": { + "type": "number" + } + }, + "required": [ + "commodity_id", + "pseudo", + "coupon_id", + "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": { + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood.ICreate" + }, + "title": "구매할 상품의 양.\n\n자식\n{@link IShoppingSaleUnitStock.IInvert.quantity} 값에 곱해지는 세트 수를 나타내는 값.", + "description": "쇼핑 카트 상품의 정보 업데이트." + } + }, + "required": [ + "goods" + ], + "description": "주문의 상품 목록" + }, + "IShoppingOrderGood.ICreate": { + "type": "object", + "properties": { + "commodity_id": { + "type": "string", + "format": "uuid", + "title": "주문의 상품 목록.", + "description": "주문 기기의 생성 정보." + }, + "volume": { + "type": "integer", + "title": "대상 상품의 {@link IShoppingCartCommodity.id}", + "description": "대상 상품의 {@link IShoppingCartCommodity.id}." + } + }, + "required": [ + "commodity_id", + "volume" + ], + "description": "상품의 볼륨" + }, + "IShoppingOrderDiscountable": { + "type": "object", + "properties": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "combinations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.ICombination" + } + } + }, + "required": [ + "deposit", + "mileage", + "combinations" + ] + }, + "IShoppingOrderDiscountable.ICombination": { + "type": "object", + "properties": { + "coupons": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCoupon" + } + }, + "tickets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponTicket" + } + }, + "entries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderDiscountable.IEntry" + } + }, + "amount": { + "type": "number" + } + }, + "required": [ + "coupons", + "tickets", + "entries", + "amount" + ] + }, + "IShoppingOrderDiscountable.IEntry": { + "type": "object", + "properties": { + "good_id": { + "type": "string", + "format": "uuid" + }, + "coupon_id": { + "type": "string", + "format": "uuid" + }, + "amount": { + "type": "number" + } + }, + "required": [ + "good_id", + "coupon_id", + "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": { + "deposit": { + "type": "number" + }, + "mileage": { + "type": "number" + }, + "coupon_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "deposit", + "mileage", + "coupon_ids" + ] + }, + "IShoppingOrderPublish.ICashCreate": { + "type": "object", + "properties": { + "type": { + "const": "cash" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress.ICreate" + }, + "vendor": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "type", + "address", + "vendor", + "uid" + ] + }, + "IShoppingAddress.ICreate": { + "type": "object", + "properties": { + "mobile": { + "type": "string", + "pattern": "^[0-9]*$", + "title": "상품의 볼륨.\n\n값을 {@link IShoppingCartCommodityStock.quantity}에 곱함.\n목적은 {@link IShoppingCartCommodity.volume}과 정확히 동일하지만\n{@link IShoppingCartCommodity} 레코드는 결제까지 재사용 가능하기 때문에 다시 작성됨.", + "description": "상품의 생성 정보." + }, + "name": { + "type": "string", + "title": "연락할 휴대전화 번호", + "description": "연락할 휴대전화 번호." + }, + "country": { + "type": "string", + "title": "주소의 대표 이름", + "description": "주소의 대표 이름.\n\n수신자의 이름이 될 때도 있고, 지명이 될 때도 있습니다." + }, + "province": { + "type": "string", + "title": "국가 이름", + "description": "국가 이름." + }, + "city": { + "type": "string", + "title": "도 이름", + "description": "도 이름." + }, + "department": { + "type": "string", + "title": "도시 이름", + "description": "도시 이름." + }, + "possession": { + "type": "string", + "title": "부서 이름", + "description": "부서 이름." + }, + "zip_code": { + "type": "string", + "title": "거리 이름, 건물 번호, 방 번호가 포함된 자세한 주소", + "description": "거리 이름, 건물 번호, 방 번호가 포함된 자세한 주소." + }, + "special_note": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "우편번호 또는 우편번호", + "description": "우편번호 또는 우편번호" + } + }, + "required": [ + "mobile", + "name", + "country", + "province", + "city", + "department", + "possession", + "zip_code", + "special_note" + ] + }, + "IShoppingOrderPublish.IZeroCreate": { + "type": "object", + "properties": { + "type": { + "const": "zero" + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress.ICreate" + } + }, + "required": [ + "type", + "address" + ] + }, + "IShoppingSaleQuestion.ICreate": { + "type": "object", + "properties": { + "secret": { + "type": "boolean", + "title": "필요한 경우 특별 설명", + "description": "필요한 경우 특별 설명." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "질문 기사가 비밀인지 여부", + "description": "질문 기사가 비밀인지 여부.\n\n비밀 기사인 경우 작성자 고객 및 관련 판매자만\n자세한 내용을 볼 수 있습니다." + }, + "title": { + "type": "string", + "title": "본문 형식", + "description": "본문 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미." + }, + "body": { + "type": "string", + "title": "기사 제목", + "description": "기사 제목." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "기사 본문 내용", + "description": "기사 본문 내용." + } + }, + "required": [ + "secret", + "format", + "title", + "body", + "files" + ], + "description": "첨부 파일 목록" + }, + "IBbsArticle.ICreate": { + "type": "object", + "properties": { + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "첨부 파일 목록.", + "description": "질문의 생성 정보." + }, + "title": { + "type": "string", + "title": "본문 형식", + "description": "본문 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미입니다." + }, + "body": { + "type": "string", + "title": "기사 제목", + "description": "기사 제목." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "기사 본문 내용", + "description": "기사 본문 내용." + } + }, + "required": [ + "format", + "title", + "body", + "files" + ], + "description": "첨부 파일 목록" + }, + "IShoppingSaleReview.ICreate": { + "type": "object", + "properties": { + "good_id": { + "type": "string", + "format": "uuid", + "title": "첨부 파일 목록.", + "description": "기사 생성 정보." + }, + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "대상 상품 {@link IShoppingOrderGood.id}", + "description": "대상 상품 {@link IShoppingOrderGood.id}." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "리뷰 점수", + "description": "리뷰 점수." + }, + "title": { + "type": "string", + "title": "본문 형식", + "description": "본문 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미입니다." + }, + "body": { + "type": "string", + "title": "기사 제목", + "description": "기사 제목." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "기사의 내용 본문", + "description": "기사의 내용 본문." + } + }, + "required": [ + "good_id", + "score", + "format", + "title", + "body", + "files" + ], + "description": "첨부 파일 목록" + }, + "IShoppingSaleReview.IUpdate": { + "type": "object", + "properties": { + "score": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "첨부 파일 목록.", + "description": "리뷰의 생성 정보." + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "리뷰의 점수", + "description": "리뷰의 점수." + }, + "title": { + "type": "string", + "title": "본문의 형식", + "description": "본문의 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미." + }, + "body": { + "type": "string", + "title": "기사의 제목", + "description": "기사의 제목." + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "기사의 내용 본문", + "description": "기사의 내용 본문." + } + }, + "required": [ + "score", + "format", + "title", + "body", + "files" + ], + "description": "첨부 파일 목록" + }, + "IShoppingSeller.IJoin": { + "type": "object", + "properties": {} + }, + "IPageIShoppingDelivery.IInvert": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "첨부 파일 목록.", + "description": "리뷰의 정보 업데이트." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDelivery.IInvert" + }, + "title": "페이지 정보", + "description": "페이지 정보." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록" + }, + "IShoppingDelivery.IInvert": { + "type": "object", + "properties": { + "orders": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrder.IInvertFromDelivery" + }, + "minItems": 1, + "title": "레코드 목록.", + "description": "페이지.\n\n페이지 정보가 있는 레코드 모음." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "배송 주문 목록", + "description": "배송 주문 목록." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller", + "title": "기본 키", + "description": "기본 키." + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney" + }, + "title": "상품을 배송한 판매자", + "description": "상품을 배송한 판매자." + }, + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece" + }, + "minItems": 1, + "title": "배송 여정 목록", + "description": "배송 여정 목록." + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper" + }, + "title": "배송 조각 목록", + "description": "배송 조각 목록." + }, + "state": { + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "배송 발송인 목록", + "description": "배송 발송인 목록." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "배송 상태", + "description": "배송 상태" + } + }, + "required": [ + "orders", + "id", + "seller", + "journeys", + "pieces", + "shippers", + "state", + "created_at" + ], + "description": "레코드 생성 시간" + }, + "IShoppingOrder.IInvertFromDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "레코드 생성 시간.", + "description": "배송 정보를 반전합니다." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "기본 키", + "description": "기본 키." + }, + "goods": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingOrderGood" + }, + "minItems": 1, + "title": "주문을 신청한 고객", + "description": "주문을 신청한 고객." + }, + "price": { + "$ref": "#/components/schemas/IShoppingOrderPrice", + "title": "주문의 상품 목록", + "description": "주문의 상품 목록." + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish.IInvertFromDelivery" + } + ], + "title": "할인을 포함한 가격 정보", + "description": "할인을 포함한 가격 정보." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "주문 완료 및 결제 정보", + "description": "주문 완료 및 결제 정보." + } + }, + "required": [ + "id", + "customer", + "goods", + "price", + "publish", + "created_at" + ], + "description": "레코드 생성 시간" + }, + "IShoppingOrderPublish.IInvertFromDelivery": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "레코드 생성 시간.", + "description": "배송 정보를 반전합니다." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키", + "description": "기본 키." + }, + "paid_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "레코드 생성 시간", + "description": "레코드 생성 시간." + }, + "cancelled_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "주문이 결제된 시간", + "description": "주문이 결제된 시간." + }, + "address": { + "$ref": "#/components/schemas/IShoppingAddress", + "title": "결제가 취소된 시간", + "description": "결제가 취소된 시간." + } + }, + "required": [ + "id", + "created_at", + "paid_at", + "cancelled_at", + "address" + ], + "description": "{@link IShoppingOrderGood 상품}을 배송할 주소" + }, + "IShoppingDelivery.IRequest": { + "type": "object", + "properties": { + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-delivery.created_at" + }, + { + "const": "+delivery.created_at" + } + ] + } + }, + "page": { + "type": "integer", + "title": "{@link IShoppingOrderGood 상품}을 배송할 주소.", + "description": "배송에서 정보를 반전합니다." + }, + "limit": { + "type": "integer", + "title": "페이지 번호", + "description": "페이지 번호." + } + } + }, + "IShoppingDelivery.ICreate": { + "type": "object", + "properties": { + "pieces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryPiece.ICreate" + }, + "minItems": 1, + "title": "페이지당 레코드 수 제한", + "description": "페이지당 레코드 수 제한" + }, + "journeys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryJourney.ICreate" + }, + "title": "배송 품목 목록", + "description": "배송품 목록." + }, + "shippers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDeliveryShipper.ICreate" + }, + "title": "배송 여정 목록", + "description": "배송 여정 목록.\n\n이는 초기 데이터이며, 배송 생성 후 여정 데이터를 축적할 수도 있습니다." + } + }, + "required": [ + "pieces", + "journeys", + "shippers" + ], + "description": "배송 발송자 목록" + }, + "IShoppingDeliveryPiece.ICreate": { + "type": "object", + "properties": { + "publish_id": { + "type": "string", + "format": "uuid", + "title": "배송 발송자 목록.", + "description": "배송 생성 정보." + }, + "good_id": { + "type": "string", + "format": "uuid", + "title": "대상 주문 {@link IShoppingOrderPublish.id}", + "description": "대상 주문 {@link IShoppingOrderPublish.id}." + }, + "stock_id": { + "type": "string", + "format": "uuid", + "title": "대상 상품 {@link IShoppingOrderGood.id}", + "description": "대상 상품 {@link IShoppingOrderGood.id}." + }, + "quantity": { + "type": "number", + "minimum": 0, + "title": "대상 재고의 {@link IShoppingSaleUnitStock.id}", + "description": "대상 재고의 {@link IShoppingSaleUnitStock.id}." + } + }, + "required": [ + "publish_id", + "good_id", + "stock_id", + "quantity" + ], + "description": "재고 수량" + }, + "IShoppingDeliveryJourney.ICreate": { + "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + } + ], + "title": "재고 수량.\n\n분할 배송을 표현하는 정밀한 값이 될 수 있습니다.", + "description": "배송 품목의 생성 정보." + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "여정 유형", + "description": "여정 유형.\n\n- 준비\n- 제조\n- 배송\n- 배달" + }, + "description": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "여정 제목", + "description": "여정 제목." + }, + "started_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "여정 설명", + "description": "여정 설명." + }, + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "여정 시작 시간", + "description": "여정 시작 시간." + } + }, + "required": [ + "type", + "title", + "description", + "started_at", + "completed_at" + ], + "description": "여정 완료 시간" + }, + "IShoppingDeliveryShipper.ICreate": { + "type": "object", + "properties": { + "company": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "name": { + "type": "string" + }, + "mobile": { + "type": "string" + } + }, + "required": [ + "company", + "name", + "mobile" + ] + }, + "IShoppingDeliveryPiece.IRequest": { + "type": "object", + "properties": { + "publish_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + }, + "required": [ + "publish_ids" + ] + }, + "IShoppingDeliveryJourney.IComplete": { + "type": "object", + "properties": { + "completed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "여정 완료 시간.", + "description": "배송 여정 생성 정보." + } + }, + "required": [ + "completed_at" + ], + "description": "여정 완료 시간." + }, + "IShoppingSale.ICreate": { + "type": "object", + "properties": { + "section_code": { + "type": "string", + "title": "여정 완료 시간.", + "description": "배송 여정 완료 정보." + }, + "status": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "paused" + }, + { + "const": "suspended" + } + ], + "title": "소속 섹션의 {@link IShoppingSection.code}", + "description": "소속 섹션의 {@link IShoppingSection.code}." + }, + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "판매의 초기 상태", + "description": "판매의 초기 상태.\n\n`null` 또는 `undefined`: 제한 없음\n`paused`: {@link ITimestamps.paused_at paused} 상태로 시작\n`suspended`: {@link ITimestamps.suspended_at suspended} 상태로 시작" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "판매 시작 시간", + "description": "판매 종료 시간" + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.ICreate" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel.ICreate" + } + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ICreate" + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "section_code", + "opened_at", + "closed_at", + "content", + "channels", + "units", + "tags" + ], + "description": "판매 종료 시간\n\n이 값이 `null`이면 판매는 영원히 계속됩니다." + }, + "IShoppingSaleContent.ICreate": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ] + }, + "body": { + "type": "string" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + } + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + } + } + }, + "required": [ + "title", + "format", + "body", + "files", + "thumbnails" + ] + }, + "IShoppingSaleChannel.ICreate": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "판매 생성 정보", + "description": "대상 채널의 {@link IShoppingChannel.code}" + }, + "category_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "title": "대상 채널의 {@link IShoppingChannel.code}.", + "description": "대상 카테고리의 {@link IShoppingChannelCategory.id} 목록" + } + }, + "required": [ + "code", + "category_ids" + ], + "description": "대상 카테고리의 {@link IShoppingChannelCategory.id} 목록.\n\n비어 있는 경우 채널의 모든 카테고리가 판매를 등록한다는 의미입니다." + }, + "IShoppingSaleUnit.ICreate": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption.ICreate" + } + ] + }, + "title": "판매할 대상 채널(및 카테고리)의 생성 정보.", + "description": "옵션 목록" + }, + "stocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStock.ICreate" + }, + "minItems": 1, + "title": "옵션 목록.", + "description": "최종 재고 목록" + }, + "name": { + "type": "string", + "title": "최종 재고 목록.", + "description": "단위의 대표 이름" + }, + "primary": { + "type": "boolean", + "title": "단위의 대표 이름.", + "description": "단위가 기본 단위인지 아닌지 여부" + }, + "required": { + "type": "boolean", + "title": "단위가 기본인지 아닌지.\n\n라벨링 값일 뿐입니다.", + "description": "단위가 필요한지 아닌지" + } + }, + "required": [ + "options", + "stocks", + "name", + "primary", + "required" + ], + "description": "단위가 필요한지 아닌지.\n\n단위가 필요한 경우 고객이 단위를 선택해야 합니다. 선택하지 않으면 고객이 구매할 수 없습니다.\n\n예를 들어 \"Macbook 세트\" 세일이 있고 단위 중 하나가\n\"Main Body\"인 경우 \"Main Body\" 단위 없이 \"Macbook 세트\"를 구매할 수 있습니까? 이 속성은 그런 경우를 위한 것입니다." + }, + "IShoppingSaleUnitSelectableOption.ICreate": { + "type": "object", + "properties": { + "type": { + "const": "select", + "title": "세일 단위의 생성 정보.", + "description": "선택 가능한 옵션의 유형에 대한 판별식" + }, + "name": { + "type": "string", + "title": "선택 가능한 옵션의 유형에 대한 판별식.", + "description": "옵션의 이름을 나타냅니다." + }, + "variable": { + "type": "boolean", + "title": "옵션의 이름을 나타냅니다.", + "description": "옵션이 가변적인지 여부" + }, + "candidates": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate.ICreate" + }, + "minItems": 1, + "title": "옵션이 가변적인지 여부.\n\n현재 옵션의 유형이 \"select\"인 경우, 이 속성은\n다른 후보 값을 선택하면 최종 주식에 영향을 미치는지 여부를 의미합니다.", + "description": "후보 값 목록" + } + }, + "required": [ + "type", + "name", + "variable", + "candidates" + ], + "description": "후보 값 목록." + }, + "IShoppingSaleUnitOptionCandidate.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "선택 가능한 옵션의 생성 정보.", + "description": "후보 값의 이름을 나타냅니다." + } + }, + "required": [ + "name" + ], + "description": "후보 값의 이름을 나타냅니다." + }, + "IShoppingSaleUnitDescriptiveOption.ICreate": { + "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "const": "string" + }, + { + "const": "number" + }, + { + "const": "boolean" + } + ], + "title": "후보 값의 생성 정보.", + "description": "설명 옵션의 유형" + }, + "name": { + "type": "string", + "title": "설명 옵션의 유형.\n\n구매 시 어떤 입력된 값을 써야 하는지.", + "description": "옵션의 읽을 수 있는 이름" + } + }, + "required": [ + "type", + "name" + ], + "description": "옵션의 읽을 수 있는 이름." + }, + "IShoppingSaleUnitStock.ICreate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "설명 옵션의 생성 정보.", + "description": "주식의 대표 이름" + }, + "price": { + "$ref": "#/components/schemas/IShoppingPrice", + "title": "주식의 대표 이름.", + "description": "주식의 가격" + }, + "quantity": { + "type": "integer", + "minimum": 1, + "title": "주식의 가격.", + "description": "초기 재고 수량" + }, + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockChoice.ICreate" + }, + "title": "초기 재고 수량.", + "description": "선택 목록" + } + }, + "required": [ + "name", + "price", + "quantity", + "choices" + ], + "description": "선택 목록.\n\n각 옵션에 대해 선택된 후보 값." + }, + "IShoppingSaleUnitStockChoice.ICreate": { + "type": "object", + "properties": { + "option_index": { + "type": "integer", + "description": "주식 생성 정보." + }, + "candidate_index": { + "type": "integer", + "description": "대상 옵션의 인덱스 번호({@link IShoppingSaleUnit.ICreate.options})." + } + }, + "required": [ + "option_index", + "candidate_index" + ], + "description": "대상 후보의 인덱스 번호({@link IShoppingSaleUnitSelectableOption.ICreate.candidates})." + }, + "IShoppingSaleSnapshot.ICreate": { + "type": "object", + "properties": { + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.ICreate" + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleChannel.ICreate" + } + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit.ICreate" + }, + "minItems": 1 + }, + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "content", + "channels", + "units", + "tags" + ], + "description": "주식 선택 생성 정보." + }, + "IShoppingSale.IUpdateOpeningTime": { + "type": "object", + "properties": { + "opened_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "스냅샷 생성 정보.", + "description": "판매 시작 시간" + }, + "closed_at": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ], + "title": "판매 시작 시간.", + "description": "판매 종료 시간" + } + }, + "required": [ + "opened_at", + "closed_at" + ], + "description": "판매 마감 시간.\n\n이 값이 `null`이면 판매는 영원히 계속됩니다." + }, + "IShoppingSaleInquiryAnswer.ISnapshot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "판매 시작 시간 정보를 업데이트합니다.", + "description": "기본 키" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "기본 키.", + "description": "스냅샷 레코드 생성 시간" + }, + "format": { + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], + "title": "스냅샷 레코드 생성 시간.\n\n즉, 기사 생성 시간 또는 업데이트 시간입니다.", + "description": "본문 형식" + }, + "title": { + "type": "string", + "title": "본문 형식.\n\n`html`, `md`, `txt`와 같은 확장자와 동일한 의미입니다.", + "description": "기사 제목" + }, + "body": { + "type": "string", + "title": "기사 제목.", + "description": "기사 본문 내용" + }, + "files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile.ICreate" + }, + "title": "기사 본문 내용.", + "description": "첨부 파일 목록" + } + }, + "required": [ + "id", + "created_at", + "format", + "title", + "body", + "files" + ] + }, + "IPageIShoppingSaleUnitStockSupplement": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "첨부 파일 목록.", + "description": "페이지 정보" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement" + }, + "title": "페이지 정보.", + "description": "레코드 목록" + } + }, + "required": [ + "pagination", + "data" + ], + "description": "레코드 목록." + }, + "IShoppingSaleUnitStockSupplement": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "페이지.\n\n페이지 정보가 있는 레코드 모음.", + "description": "기본 키" + }, + "value": { + "type": "integer", + "title": "기본 키.", + "description": "보충 수량" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "보충 수량.", + "description": "레코드 생성 시간" + } + }, + "required": [ + "id", + "value", + "created_at" + ], + "description": "레코드 생성 시간.\n\n다시 말해, 재고가 보충되는 시간입니다." + }, + "IShoppingSaleUnitStockSupplement.IRequest": { + "type": "object", + "properties": { + "sort": { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + } + ] + }, + "title": "재고 수량 보충.\n\n아시나요? {@link IShoppingSaleUnitStock 재고}가 {@link IShoppingSaleUnitStock.ICreate.quantity 초기 재고 수량}을 초과하여 판매된 경우\n재고가 없어 더 이상 판매할 수 없습니다. 그런 경우\n{@link IShoppingSeller}는 어떻게 해야 할까요?\n\n재고가 매진되면 판매자는 이 `IShoppingSaleUnitStockSupplement` 레코드를 등록하여 재고 레코드를 보충할 수 있습니다. 맞습니다. 이\n`IShoppingSaleUnitStockSupplement`는 소유한 재고의\n재고 수량 보충을 구현하는 엔터티입니다.", + "description": "정렬 가능한 열" + }, + "page": { + "type": "integer", + "title": "정렬 가능한 열.", + "description": "페이지 번호" + }, + "limit": { + "type": "integer", + "title": "페이지 번호.", + "description": "페이지당 레코드 수 제한" + } + }, + "description": "페이지당 레코드 수 제한." + }, + "IShoppingSaleUnitStockSupplement.ICreate": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "title": "재고 보충 목록에 대한 정보 요청.", + "description": "보충 수량" + } + }, + "required": [ + "value" + ], + "description": "보충 수량." + } + }, + "securitySchemes": { + "bearer": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } + }, + "tags": [ + { + "name": "Monitor" + }, + { + "name": "Authenticate" + }, + { + "name": "Discount" + }, + { + "name": "Order" + }, + { + "name": "Sale" + }, + { + "name": "Systematic" + }, + { + "name": "Section" + } + ], + "x-samchon-emended": true +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..64aa4d7 --- /dev/null +++ b/package.json @@ -0,0 +1,53 @@ +{ + "name": "@samchon/json-translator", + "version": "0.1.0", + "description": "", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "scripts": { + "prepare": "ts-patch install", + "build": "npm run build:main && npm run build:test", + "build:main": "rimraf lib && tsc", + "build:test": "rimraf bin && tsc -p test/tsconfig.json", + "dev": "npm run build:test -- --watch", + "test": "node bin/test" + }, + "keywords": [ + "google-translate-api", + "json-translate", + "translate" + ], + "author": "Jeongho Nam", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/samchon/json-translator" + }, + "bugs": { + "url": "https://github.com/samchon/json-translator/issues" + }, + "homepage": "https://github.com/samchon/json-translator", + "dependencies": { + "@google-cloud/translate": "^8.5.0" + }, + "devDependencies": { + "@nestia/e2e": "^0.7.0", + "@trivago/prettier-plugin-sort-imports": "^4.3.0", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", + "prettier": "^3.3.3", + "source-map-support": "^0.5.21", + "ts-node": "^10.9.2", + "ts-patch": "^3.2.1", + "typescript": "5.5.4", + "typescript-transform-paths": "^3.5.1", + "typia": "^6.11.2" + }, + "files": [ + "lib", + "src", + "LICENSE", + "README.md", + "package.json" + ] +} diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..8fd5405 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,14 @@ +module.exports = { + parser: "typescript", + printWidth: 80, + semi: true, + tabWidth: 2, + trailingComma: "all", + plugins: [ + require.resolve("@trivago/prettier-plugin-sort-imports"), + ], + importOrder: ["", "^[./]"], + importOrderSeparation: true, + importOrderSortSpecifiers: true, + importOrderParserPlugins: ["decorators-legacy", "typescript"], +}; diff --git a/src/JsonTranslator.ts b/src/JsonTranslator.ts new file mode 100644 index 0000000..b715b37 --- /dev/null +++ b/src/JsonTranslator.ts @@ -0,0 +1,167 @@ +import { Translate } from "@google-cloud/translate/build/src/v2"; + +export class JsonTranslator { + private readonly service_: Translate; + + public constructor(options?: ConstructorParameters[0]) { + this.service_ = new Translate(options); + } + + public async translate(props: JsonTranslator.IProps): Promise { + const collection: ICollection = prepareCollection(props); + const translated: string[] = []; + const from: string | undefined = + props.from ?? (await this.detect(collection.raw)); + + let queue: Array = []; + let bytes: number = 0; + const execute = async () => { + if (queue.length) { + const [response] = await this.service_.translate( + queue.map((p) => p.text), + { + from, + to: props.to, + }, + ); + translated.push(...response); + } + queue = []; + bytes = 0; + }; + + for (const text of collection.raw) { + const length: number = new Blob([text]).size; + if (bytes >= 150_000 || queue.length >= 128) await execute(); + + const last: IPiece | undefined = queue.at(-1); + if (last === undefined || last.length + SEPARATOR.length + length >= 500) + queue.push({ + text, + length, + }); + else { + last.text += SEPARATOR + text; + last.length += length; + } + bytes += length; + } + if (queue.length) await execute(); + + const transformed: string[] = translated + .map((s) => s.split(SEPARATOR)) + .flat(); + collection.setters.forEach((setter, i) => { + if (transformed[i]) setter(transformed[i]); + }); + return collection.output; + } + + public async detect(texts: string[]): Promise { + if (texts.length === 0) return undefined; + const [response] = await this.service_.detect( + texts + .slice() + .sort((a, b) => b.length - a.length) + .at(0)!, + ); + const res: string | undefined = response.language ?? undefined; + return res === "und" ? undefined : res; + } +} +export namespace JsonTranslator { + export interface IProps { + input: T; + from?: string; + to: string; + filter?: (explore: IExplore) => boolean; + } + export interface IExplore { + object: object | null; + key: string | null; + index: number | null; + accessor: string[]; + value: string; + } +} + +interface IPiece { + text: string; + length: number; +} +const SEPARATOR = " //|-0-|\\ "; + +interface ICollection { + output: any; + raw: string[]; + setters: Array>; +} +type Setter = (input: T) => void; + +const prepareCollection = (props: JsonTranslator.IProps): ICollection => { + const collection: ICollection = { + output: JSON.parse(JSON.stringify(props.input)), + raw: [], + setters: [], + }; + visitCollectionData({ + filter: props.filter, + collection, + setter: (x) => (collection.output = x), + value: collection.output, + explore: { + object: null, + key: null, + index: null, + accessor: ["$input"], + }, + }); + return collection; +}; + +const visitCollectionData = (next: { + filter: JsonTranslator.IProps["filter"]; + collection: ICollection; + setter: Setter; + value: any; + explore: Omit; +}): void => { + if (typeof next.value === "string" && next.value.trim().length !== 0) { + if ( + next.filter && + !next.filter({ + ...next.explore, + value: next.value, + }) + ) + return; + next.collection.raw.push(next.value); + next.collection.setters.push(next.setter); + } else if (Array.isArray(next.value)) + next.value.forEach((elem, i) => + visitCollectionData({ + ...next, + explore: { + ...next.explore, + index: i, + accessor: [...next.explore.accessor, i.toString()], + }, + setter: (x) => (next.value[i] = x), + value: elem, + }), + ); + else if (typeof next.value === "object" && next.value !== null) + Object.entries(next.value).forEach(([key, elem]) => + visitCollectionData({ + ...next, + explore: { + ...next.explore, + object: next.value, + key, + accessor: [...next.explore.accessor, key], + }, + setter: (x) => (next.value[key] = x), + value: elem, + }), + ); +}; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..2d5fcc9 --- /dev/null +++ b/src/index.ts @@ -0,0 +1 @@ +export * from "./JsonTranslator"; diff --git a/test/features/test_bbs_article.ts b/test/features/test_bbs_article.ts new file mode 100644 index 0000000..31892fd --- /dev/null +++ b/test/features/test_bbs_article.ts @@ -0,0 +1,23 @@ +import { JsonTranslator } from "@samchon/translate-json"; +import fs from "fs"; + +import input from "../../assets/input/bbs.article.json"; + +export const test_bbs_article = async ( + translator: JsonTranslator, +): Promise => { + for (const lang of ["ko", "ja", "ar"]) + await fs.promises.writeFile( + `${__dirname}/../../../assets/output/bbs.article.${lang}.json`, + JSON.stringify( + await translator.translate({ + input, + to: lang, + filter: ({ key }) => key === "title" || key === "body", + }), + null, + 2, + ), + "utf8", + ); +}; diff --git a/test/features/test_connector_swagger.ts b/test/features/test_connector_swagger.ts new file mode 100644 index 0000000..fd72b62 --- /dev/null +++ b/test/features/test_connector_swagger.ts @@ -0,0 +1,27 @@ +import { JsonTranslator } from "@samchon/translate-json"; +import fs from "fs"; + +import input from "../../assets/input/connector.swagger.json"; + +export const test_connector_swagger = async ( + translator: JsonTranslator, +): Promise => { + for (const lang of ["ko", "ja", "ar"]) + await fs.promises.writeFile( + `${__dirname}/../../../assets/output/connector.swagger.${lang}.json`, + JSON.stringify( + await translator.translate({ + input, + to: lang, + filter: (explore) => + explore.key === "title" || + explore.key === "description" || + explore.key === "summary" || + explore.key === "x-wrtn-placeholder", + }), + null, + 2, + ), + "utf8", + ); +}; diff --git a/test/features/test_shopping_swagger.ts b/test/features/test_shopping_swagger.ts new file mode 100644 index 0000000..fee6465 --- /dev/null +++ b/test/features/test_shopping_swagger.ts @@ -0,0 +1,27 @@ +import { JsonTranslator } from "@samchon/translate-json"; +import fs from "fs"; + +import input from "../../assets/input/shopping.swagger.json"; + +export const test_connector_swagger = async ( + translator: JsonTranslator, +): Promise => { + for (const lang of ["ko", "ja", "ar"]) + await fs.promises.writeFile( + `${__dirname}/../../../assets/output/shopping.swagger.${lang}.json`, + JSON.stringify( + await translator.translate({ + input, + to: lang, + filter: (explore) => + explore.key === "title" || + explore.key === "description" || + explore.key === "summary" || + explore.key === "x-wrtn-placeholder", + }), + null, + 2, + ), + "utf8", + ); +}; diff --git a/test/index.ts b/test/index.ts new file mode 100644 index 0000000..ec734aa --- /dev/null +++ b/test/index.ts @@ -0,0 +1,48 @@ +import { DynamicExecutor } from "@nestia/e2e"; +import { JsonTranslator } from "@samchon/translate-json"; +import chalk from "chalk"; +import dotenv from "dotenv"; +import dotenvExpand from "dotenv-expand"; + +const EXTENSION = __filename.substring(0, __filename.length - 2); +if (EXTENSION === "js") require("source-map-support").install(); + +const main = async (): Promise => { + // PREPARE ASSETS + dotenvExpand.expand(dotenv.config()); + const translator: JsonTranslator = new JsonTranslator({ + credentials: JSON.parse(process.env.CREDENTIALS ?? "{}"), + }); + + // DO TEST + const report: DynamicExecutor.IReport = await DynamicExecutor.validate({ + prefix: "test_", + location: __dirname + "/features", + parameters: () => [translator], + onComplete: (exec) => { + const trace = (str: string) => + console.log(` - ${chalk.green(exec.name)}: ${str}`); + if (exec.error === null) { + const elapsed: number = + new Date(exec.completed_at).getTime() - + new Date(exec.started_at).getTime(); + trace(`${chalk.yellow(elapsed.toLocaleString())} ms`); + } else trace(chalk.red(exec.error.name)); + }, + }); + + // REPORT EXCEPTIONS + const exceptions: Error[] = report.executions + .filter((exec) => exec.error !== null) + .map((exec) => exec.error!); + if (exceptions.length === 0) { + console.log("Success"); + console.log("Elapsed time", report.time.toLocaleString(), `ms`); + } else { + for (const exp of exceptions) console.log(exp); + console.log("Failed"); + console.log("Elapsed time", report.time.toLocaleString(), `ms`); + } + if (exceptions.length) process.exit(-1); +}; +main().catch(console.error); diff --git a/test/tsconfig.json b/test/tsconfig.json new file mode 100644 index 0000000..ab772d7 --- /dev/null +++ b/test/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "target": "ESNext", + "outDir": "../bin", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "resolveJsonModule": true, + "paths": { + "@samchon/translate-json": ["../src/index.ts"], + "@samchon/translate-json/lib/*": ["../src/*"], + }, + "plugins": [ + { "transform": "typescript-transform-paths" }, + ] + }, + "include": ["../src", "../test"] +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c21c8ed --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,113 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "ES5", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "lib": [ + "DOM", + "ES2020", + ], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./lib", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "include": ["src"] +} From 6ef20b94714d5a85120eec87de17742798480ae8 Mon Sep 17 00:00:00 2001 From: Jeongho Nam Date: Tue, 15 Oct 2024 20:45:53 +0900 Subject: [PATCH 2/2] Add `.env` file to `.gitignore` --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e018f7e..49f1690 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ node_modules/ package-lock.json pnpm-lock.yaml -env.ts \ No newline at end of file +env.ts +.env \ No newline at end of file