From 1f743f5e50ca0b187d5caf4c994102853edf8b45 Mon Sep 17 00:00:00 2001 From: Jeongho Nam Date: Wed, 18 Dec 2024 15:56:51 +0900 Subject: [PATCH] Adapt `@samchon/openapi` update. Special update for a commercial project performing LLM function calling to the Restful API. --- benchmark/package.json | 2 +- package.json | 2 +- packages/benchmark/package.json | 2 +- packages/core/package.json | 10 +- packages/e2e/package.json | 2 +- packages/editor/package.json | 4 +- packages/fetcher/package.json | 8 +- .../migrate/assets/input/v3.0/shopping.json | 17027 ---------------- .../migrate/assets/input/v3.1/shopping31.json | 11358 +++++++---- packages/migrate/package.json | 4 +- packages/migrate/src/MigrateApplication.ts | 6 +- ...lyzer.ts => MigrateApplicationAnalyzer.ts} | 2 +- .../analyzers/MigrateControllerAnalyzer.ts | 71 +- packages/migrate/src/module.ts | 2 +- .../src/programmers/MigrateNestProgrammer.ts | 4 +- packages/sdk/package.json | 12 +- packages/sdk/src/analyses/AccessorAnalyzer.ts | 22 +- .../src/analyses/TypedHttpRouteAnalyzer.ts | 2 +- .../analyses/TypedWebSocketRouteAnalyzer.ts | 2 +- .../generates/internal/E2eFileProgrammer.ts | 4 +- .../generates/internal/SdkFileProgrammer.ts | 2 +- .../internal/SwaggerOperationComposer.ts | 2 + .../sdk/src/structures/ITypedHttpRoute.ts | 2 +- .../src/structures/ITypedWebSocketRoute.ts | 2 +- test/features/all/swagger.json | 23 +- .../swagger.json | 299 +- .../app-globalPrefix-versionUri/swagger.json | 86 +- test/features/app-globalPrefix/swagger.json | 94 +- test/features/app-routerModule/swagger.json | 81 +- test/features/app-versionHeader/swagger.json | 84 +- test/features/app-versionUri/swagger.json | 70 +- test/features/app/swagger.json | 84 +- test/features/beautify-4/swagger.json | 30 +- test/features/beautify-false/swagger.json | 2 +- test/features/beautify/swagger.json | 30 +- test/features/body-config-assert/swagger.json | 2 +- .../body-config-assertClone/swagger.json | 2 +- .../body-config-assertEquals/swagger.json | 2 +- .../body-config-assertPrune/swagger.json | 2 +- test/features/body-config-equals/swagger.json | 2 +- test/features/body-config-is/swagger.json | 2 +- .../body-config-validate/swagger.json | 2 +- .../body-config-validateClone/swagger.json | 2 +- .../body-config-validateEquals/swagger.json | 2 +- .../body-config-validatePrune/swagger.json | 2 +- .../body-generic-default/swagger.json | 2 +- test/features/body-manual-assert/swagger.json | 2 +- test/features/body-manual-is/swagger.json | 2 +- .../body-manual-validate/swagger.json | 2 +- test/features/body-optional/swagger.json | 25 +- test/features/body/swagger.json | 2 +- test/features/cli-config-project/swagger.json | 2 +- test/features/cli-config/swagger.json | 2 +- test/features/cli-project/swagger.json | 2 +- .../swagger.json | 2 +- .../features/clone-and-propagate/swagger.json | 294 +- test/features/clone-implicit/swagger.json | 16 +- test/features/clone-native/swagger.json | 16 +- test/features/clone-tags/swagger.json | 27 +- .../clone-type-create-duplicate/swagger.json | 2 +- test/features/config-pattern/swagger.json | 2 +- test/features/configurations/bbs.swagger.json | 70 +- .../configurations/common.swagger.json | 16 +- test/features/date/swagger.json | 2 +- test/features/duplicated/swagger.json | 2 +- test/features/e2e/swagger.json | 2 +- test/features/encrypted/swagger.json | 49 +- test/features/exception-filter/swagger.json | 2 +- .../exception-with-propagate/swagger.json | 2 +- test/features/exception/swagger.json | 30 +- test/features/fastify/swagger.json | 2 +- test/features/headers-decompose/swagger.json | 37 +- test/features/headers/swagger.json | 37 +- test/features/ignore/swagger.json | 24 +- test/features/kebab/swagger.json | 23 +- test/features/method/swagger.json | 23 +- .../multipart-form-data-fastify/swagger.json | 23 +- .../features/multipart-form-data/swagger.json | 23 +- test/features/no-transform/swagger.json | 84 +- test/features/non-equals/swagger.json | 2 +- test/features/openapi_v2/swagger.json | 80 +- test/features/openapi_v3/swagger.json | 80 +- test/features/operationId/swagger.json | 23 +- test/features/param-validate/swagger.json | 93 +- test/features/param/swagger.json | 93 +- test/features/plain/swagger.json | 2 +- test/features/propagate/swagger.json | 2 +- .../query-decompose-false/swagger.json | 30 +- .../query-decompose-true/swagger.json | 2 +- test/features/query/swagger.json | 44 +- .../features/route-manual-assert/swagger.json | 2 +- test/features/route-manual-is/swagger.json | 2 +- .../route-manual-stringify/swagger.json | 2 +- .../swagger.json | 2 +- .../swagger.json | 2 +- .../route-manual-validate-log/swagger.json | 2 +- .../route-manual-validate/swagger.json | 2 +- test/features/route/swagger.json | 2 +- test/features/security/swagger.json | 50 +- test/features/simulate/swagger.json | 2 +- test/features/status/swagger.json | 2 +- test/features/swagger-customizer/swagger.json | 12 +- test/features/swagger-example/swagger.json | 203 +- test/features/swagger-extensions/swagger.json | 14 +- .../swagger.json" | 2 +- test/features/swagger/swagger.json | 2 +- test/features/tags/swagger.json | 26 +- test/features/variable/swagger.json | 2 +- test/features/websocket-clone/swagger.json | 2 +- test/features/websocket/swagger.json | 2 +- test/package.json | 6 +- 111 files changed, 9797 insertions(+), 21303 deletions(-) delete mode 100644 packages/migrate/assets/input/v3.0/shopping.json rename packages/migrate/src/analyzers/{MigrateAnalyzer.ts => MigrateApplicationAnalyzer.ts} (90%) diff --git a/benchmark/package.json b/benchmark/package.json index 465b3bf48..b5a8d3f9d 100644 --- a/benchmark/package.json +++ b/benchmark/package.json @@ -42,7 +42,7 @@ "reflect-metadata": "^0.2.2", "tgrid": "^1.1.0", "tstl": "^3.0.0", - "typia": "^7.4.1" + "typia": "^7.5.0" }, "devDependencies": { "@types/autocannon": "^7.9.0", diff --git a/package.json b/package.json index df6c12930..8af2ea441 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@nestia/station", - "version": "4.4.2", + "version": "4.5.0", "description": "Nestia station", "scripts": { "build": "node deploy build", diff --git a/packages/benchmark/package.json b/packages/benchmark/package.json index 208abbc14..a6a5bbe6d 100644 --- a/packages/benchmark/package.json +++ b/packages/benchmark/package.json @@ -34,7 +34,7 @@ "ts-patch": "^3.3.0", "typescript": "~5.7.2", "typescript-transform-paths": "^3.4.7", - "typia": "^7.4.1", + "typia": "^7.5.0", "uuid": "^10.0.0" }, "dependencies": { diff --git a/packages/core/package.json b/packages/core/package.json index 1edade749..eeb240256 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@nestia/core", - "version": "4.4.2-dev.20241217", + "version": "4.5.0-dev.20241218-2", "description": "Super-fast validation decorators of NestJS", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -39,7 +39,7 @@ "@nestia/fetcher": "workspace:^", "@nestjs/common": ">=7.0.1", "@nestjs/core": ">=7.0.1", - "@samchon/openapi": "^2.2.1", + "@samchon/openapi": "^2.3.0", "detect-ts-node": "^1.0.5", "get-function-location": "^2.0.0", "glob": "^7.2.0", @@ -48,16 +48,16 @@ "reflect-metadata": ">=0.1.12", "rxjs": ">=6.0.3", "tgrid": "^1.1.0", - "typia": "^7.4.1", + "typia": "^7.5.0", "ws": "^7.5.3" }, "peerDependencies": { - "@nestia/fetcher": ">=4.4.2-dev.20241217", + "@nestia/fetcher": ">=4.5.0-dev.20241218-2", "@nestjs/common": ">=7.0.1", "@nestjs/core": ">=7.0.1", "reflect-metadata": ">=0.1.12", "rxjs": ">=6.0.3", - "typia": ">=7.4.1 <8.0.0" + "typia": ">=7.5.0 <8.0.0" }, "devDependencies": { "@nestjs/common": "^10.4.13", diff --git a/packages/e2e/package.json b/packages/e2e/package.json index ba9ad8a0f..c63729e8c 100644 --- a/packages/e2e/package.json +++ b/packages/e2e/package.json @@ -41,7 +41,7 @@ "ts-patch": "^3.3.0", "typescript": "~5.7.2", "typescript-transform-paths": "^3.4.7", - "typia": "^7.4.1" + "typia": "^7.5.0" }, "files": [ "lib", diff --git a/packages/editor/package.json b/packages/editor/package.json index 19bb96d0b..b5a2a6d6a 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -35,12 +35,12 @@ "dependencies": { "@mui/material": "^5.15.6", "@nestia/migrate": "workspace:^", - "@samchon/openapi": "^2.2.1", + "@samchon/openapi": "^2.3.0", "@stackblitz/sdk": "^1.11.0", "js-yaml": "^4.1.0", "prettier": "3.3.3", "react-mui-fileuploader": "^0.5.2", - "typia": "^7.4.1" + "typia": "^7.5.0" }, "devDependencies": { "@eslint/js": "^9.13.0", diff --git a/packages/fetcher/package.json b/packages/fetcher/package.json index 7228b5ca2..3605b9d83 100644 --- a/packages/fetcher/package.json +++ b/packages/fetcher/package.json @@ -1,6 +1,6 @@ { "name": "@nestia/fetcher", - "version": "4.4.2-dev.20241217", + "version": "4.5.0-dev.20241218-2", "description": "Fetcher library of Nestia SDK", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -26,8 +26,8 @@ }, "homepage": "https://nestia.io", "dependencies": { - "@samchon/openapi": "^2.2.1", - "typia": "^7.4.1" + "@samchon/openapi": "^2.3.0", + "typia": "^7.5.0" }, "peerDependencies": { "typescript": ">= 4.8.0" @@ -38,7 +38,7 @@ "@typescript-eslint/parser": "^5.46.1", "rimraf": "^3.0.2", "typescript": "~5.7.2", - "typia": "^7.4.1" + "typia": "^7.5.0" }, "files": [ "README.md", diff --git a/packages/migrate/assets/input/v3.0/shopping.json b/packages/migrate/assets/input/v3.0/shopping.json deleted file mode 100644 index 09fddbf21..000000000 --- a/packages/migrate/assets/input/v3.0/shopping.json +++ /dev/null @@ -1,17027 +0,0 @@ -{ - "openapi": "3.0.1", - "servers": [ - { - "url": "http://localhost:37001", - "description": "Local Server" - } - ], - "info": { - "version": "0.2.0", - "title": "@samchon/shopping-backend", - "description": "Backend for shopping", - "license": { - "name": "MIT" - } - }, - "paths": { - "/monitors/health": { - "get": { - "tags": [ - "Monitor" - ], - "parameters": [], - "responses": { - "200": { - "description": "" - } - }, - "summary": "Health check API", - "description": "Health check API." - } - }, - "/monitors/performance": { - "get": { - "tags": [ - "Monitor" - ], - "parameters": [], - "responses": { - "200": { - "description": "Performance info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IPerformance" - } - } - } - } - }, - "summary": "Get performance information", - "description": "Get performance information.\n\nGet perofmration information composed with CPU, memory and resource usage." - } - }, - "/monitors/system": { - "get": { - "tags": [ - "Monitor" - ], - "parameters": [], - "responses": { - "200": { - "description": "System info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ISystem" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/authenticate": { - "get": { - "tags": [ - "Authenticate" - ], - "parameters": [], - "responses": { - "200": { - "description": "Admin info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" - } - } - } - } - }, - "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." - }, - "post": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/authenticate/login": { - "put": { - "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" - } - } - } - } - }, - "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," - } - }, - "/shoppings/admins/coupons": { - "post": { - "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" - } - } - } - } - }, - "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." - }, - "patch": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/coupons/{id}": { - "delete": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target coupon's ", - "required": true - } - ], - "responses": { - "200": { - "description": "" - } - }, - "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." - }, - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target coupon's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Coupon info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingCoupon" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/deposits": { - "patch": { - "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" - } - } - } - } - }, - "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}." - }, - "post": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/deposits/{id}": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target deposit's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Deposit metadata", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingDeposit" - } - } - } - } - }, - "summary": "Get a deposit metadata", - "description": "Get a deposit metadata.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its ID." - }, - "delete": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target deposit's ", - "required": true - } - ], - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/admins/deposits/{code}/get": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "code", - "in": "path", - "schema": { - "type": "string" - }, - "description": "", - "required": true - } - ], - "responses": { - "200": { - "description": "Deposit metadata", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingDeposit" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/mileages": { - "patch": { - "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" - } - } - } - } - }, - "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}." - }, - "post": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/mileages/{id}": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target mileage's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Mileage metadata", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingMileage" - } - } - } - } - }, - "summary": "Get a mileage metadata", - "description": "Get a mileage metadata.\n\nGet a {@link IShoppingMileage mileage} metadata information with its ID." - }, - "delete": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target mileage's ", - "required": true - } - ], - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/admins/mileages/{code}/get": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "code", - "in": "path", - "schema": { - "type": "string" - }, - "description": "", - "required": true - } - ], - "responses": { - "200": { - "description": "Mileage metadata", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingMileage" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/mileages/donations": { - "patch": { - "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" - } - } - } - } - }, - "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}." - }, - "post": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/mileages/donations/{id}": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target history's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Mileage donation history", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingMileageDonation" - } - } - } - } - }, - "summary": "Get a mileage donation history", - "description": "Get a mileage donation history.\n\nGet a {@link IShoppingMileageDonation mileage donation history} with its ID." - } - }, - "/shoppings/admins/orders": { - "patch": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/orders/{id}": { - "get": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target order's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Order info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingOrder" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/sales": { - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/admins/sales/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target sale's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed sale information", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSale" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry comment's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed inquiry comment info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleInquiryComment" - } - } - } - } - }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." - }, - "put": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry comment's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/sales/{saleId}/questions": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/admins/sales/{saleId}/questions/abridges": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/admins/sales/{saleId}/questions/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target question's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed question info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleQuestion" - } - } - } - } - }, - "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`." - } - }, - "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry comment's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed inquiry comment info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleInquiryComment" - } - } - } - } - }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." - }, - "put": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry comment's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/sales/{saleId}/reviews": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/admins/sales/{saleId}/reviews/abridges": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/admins/sales/{saleId}/reviews/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target review's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed review info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleReview" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/sales/{saleId}/snapshots": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/sales/{saleId}/snapshots/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target snapshot's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed information of the snapshot", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleSnapshot" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/sales/{saleId}/snapshots/{id}/flip": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target snapshot's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed sale information in the snapshot side", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSale" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/systematic/channels/{channelCode}/categories": { - "post": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "channelCode", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Belonged channel's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "patch": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "channelCode", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Belonged channel's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Paginated categories with children categories", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" - } - } - } - } - } - }, - "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}." - } - }, - "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}": { - "put": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "channelCode", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Belonged channel's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target category's ", - "required": true - } - ], - "requestBody": { - "description": "Update info of the category", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannelCategory.ICreate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "" - } - }, - "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." - }, - "get": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "channelCode", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Belonged channel's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target category's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed category info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannelCategory" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/systematic/channels/{channelCode}/categories/merge": { - "delete": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "channelCode", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Belonged channel's ", - "required": true - } - ], - "requestBody": { - "description": "Merge info of the categories", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IRecordMerge" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}/invert": { - "get": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "channelCode", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Belonged channel's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target category's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed category info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/systematic/channels": { - "post": { - "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" - } - } - } - } - }, - "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." - }, - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/admins/systematic/channels/{id}": { - "put": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target channel's ", - "required": true - } - ], - "requestBody": { - "description": "Update info of the channel", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannel.IUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "" - } - }, - "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." - }, - "get": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target channel's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed channel info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/systematic/channels/merge": { - "delete": { - "tags": [ - "Systematic" - ], - "parameters": [], - "requestBody": { - "description": "Request info of the merge", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IRecordMerge" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/admins/systematic/channels/hierarchical": { - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/admins/systematic/channels/{code}/get": { - "get": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "code", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target channel's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed channel info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" - } - } - } - } - }, - "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." - } - }, - "/shoppings/admins/systematic/sections": { - "post": { - "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" - } - } - } - } - }, - "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." - }, - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/admins/systematic/sections/{id}": { - "put": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target section's ", - "required": true - } - ], - "requestBody": { - "description": "Update info of the section", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSection.IUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "" - } - }, - "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." - }, - "get": { - "tags": [ - "Section" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target section's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed section info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSection" - } - } - } - } - }, - "summary": "Get a section info", - "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." - } - }, - "/shoppings/admins/systematic/sections/merge": { - "delete": { - "tags": [ - "Systematic" - ], - "parameters": [], - "requestBody": { - "description": "input Request info of the merge", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IRecordMerge" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/admins/systematic/sections/{code}/get": { - "get": { - "tags": [ - "Section" - ], - "parameters": [ - { - "name": "code", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target section's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed section info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSection" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/authenticate/refresh": { - "patch": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/authenticate": { - "get": { - "tags": [ - "Authenticate" - ], - "parameters": [], - "responses": { - "200": { - "description": "Current customer information", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingCustomer" - } - } - } - } - }, - "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}." - }, - "post": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/authenticate/join": { - "post": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/authenticate/login": { - "put": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/authenticate/activate": { - "post": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/authenticate/external": { - "post": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/authenticate/password/change": { - "put": { - "tags": [ - "Authenticate" - ], - "parameters": [], - "requestBody": { - "description": "New password and current password", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingMember.IPasswordChange" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/customers/coupons": { - "patch": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/coupons/{id}": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target coupon's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Coupon info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingCoupon" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/coupons/tickets": { - "patch": { - "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" - } - } - } - } - }, - "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}." - }, - "post": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/coupons/tickets/{id}": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target coupon ticket's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Coupon ticket info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingCouponTicket" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/deposits/charges": { - "patch": { - "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" - } - } - } - } - }, - "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}." - }, - "post": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/deposits/charges/{id}": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target deposit charge's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Deposit charge info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingDepositCharge" - } - } - } - } - }, - "summary": "Get a deposit charge info", - "description": "Get a deposit charge info.\n\nGet a {@link IShoppingDepositCharge deposit charge} information." - }, - "put": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target deposit charge's ", - "required": true - } - ], - "requestBody": { - "description": "Value to change", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingDepositCharge.ICreate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "" - } - }, - "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." - }, - "delete": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target deposit charge's ", - "required": true - } - ], - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/customers/deposits/charges/{chargeId}/publish/able": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "chargeId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target charge's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Whether the charge is publishable or not", - "content": { - "application/json": { - "schema": { - "type": "boolean" - } - } - } - } - }, - "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" - } - }, - "/shoppings/customers/deposits/charges/{chargeId}/publish": { - "post": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "chargeId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target charge's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/deposits/histories": { - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/customers/deposits/histories/{id}": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "", - "required": true - } - ], - "responses": { - "200": { - "description": "Deposit history info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingDepositHistory" - } - } - } - } - }, - "summary": "Get a deposit history info", - "description": "Get a deposit history info.\n\nGet a {@link IShoppingDepositHistory deposit history} information." - } - }, - "/shoppings/customers/deposits/histories/balance": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [], - "responses": { - "200": { - "description": "Balance of the deposit", - "content": { - "application/json": { - "schema": { - "type": "number" - } - } - } - } - }, - "summary": "Get balance of the deposit", - "description": "Get balance of the deposit.\n\nGet current balance of the deposit of the {@link IShoppingCustomer customer}." - } - }, - "/shoppings/customers/mileages/histories": { - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/customers/mileages/histories/{id}": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target mileage history's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Mileage history info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingMileageHistory" - } - } - } - } - }, - "summary": "Get a mileage history info", - "description": "Get a mileage history info.\n\nGet a {@link IShoppingMileageHistory mileage history} information." - } - }, - "/shoppings/customers/mileages/histories/balance": { - "get": { - "tags": [ - "Discount" - ], - "parameters": [], - "responses": { - "200": { - "description": "Balance of the mileage", - "content": { - "application/json": { - "schema": { - "type": "number" - } - } - } - } - }, - "summary": "Get balance of the mileage", - "description": "Get balance of the mileage.\n\nGet current balance of the mileage of the {@link IShoppingCustomer customer}." - } - }, - "/shoppings/customers/carts/{cartId}/commodities": { - "patch": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid", - "nullable": true - }, - "description": "Belonged cart's ID", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "post": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid", - "nullable": true - }, - "description": "Belonged cart's ID", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/carts/{cartId}/commodities/{id}": { - "get": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid", - "nullable": true - }, - "description": "Belonged cart's ID", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target commodity's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed commodity info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingCartCommodity" - } - } - } - } - }, - "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." - }, - "put": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid", - "nullable": true - }, - "description": "Belonged cart's ID", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target commodity's ", - "required": true - } - ], - "requestBody": { - "description": "Update info of the commodity (volume)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingCartCommodity.IUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "" - } - }, - "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." - }, - "delete": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid", - "nullable": true - }, - "description": "Belonged cart's ID", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target commodity's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Newly created commodity" - } - }, - "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." - } - }, - "/shoppings/customers/carts/{cartId}/commodities/{id}/replica": { - "get": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid", - "nullable": true - }, - "description": "Belonged cart's ID", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target commodity's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Creation info of the commodity for replication", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/carts/{cartId}/commodities/discountable": { - "patch": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid", - "nullable": true - }, - "description": "Belonged cart's ID", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/orders": { - "post": { - "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" - } - } - } - } - }, - "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." - }, - "patch": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/orders/{id}": { - "delete": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target order's ", - "required": true - } - ], - "responses": { - "200": { - "description": "" - } - }, - "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." - }, - "get": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target order's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Order info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingOrder" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/orders/{id}/price": { - "get": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target order's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed price info with discount", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingOrderPrice" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/customers/orders/{id}/discountable": { - "patch": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target order's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/orders/{id}/discount": { - "put": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target order's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/orders/{orderId}/goods/{id}/confirm": { - "put": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "orderId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged order's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target good's ", - "required": true - } - ], - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/customers/orders/{orderId}/publish/able": { - "get": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "orderId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target order's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Whether the order is publishable or not", - "content": { - "application/json": { - "schema": { - "type": "boolean" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/orders/{orderId}/publish": { - "post": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "orderId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target order's ", - "required": true - } - ], - "requestBody": { - "description": "Creation info of the publish", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingOrderPublish.ICashCreate" - }, - { - "$ref": "#/components/schemas/IShoppingOrderPublish.IZeroCreate" - } - ] - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "Newly created publish", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingOrderPublish" - } - } - } - } - }, - "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." - }, - "delete": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "orderId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target order's ", - "required": true - } - ], - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/customers/sales": { - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/customers/sales/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target sale's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed sale information", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSale" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry comment's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed inquiry comment info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleInquiryComment" - } - } - } - } - }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." - }, - "put": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry comment's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/sales/{saleId}/questions": { - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - }, - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/customers/sales/{saleId}/questions/{id}": { - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target question's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target question's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed question info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleQuestion" - } - } - } - } - }, - "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`." - } - }, - "/shoppings/customers/sales/{saleId}/questions/abridges": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry comment's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed inquiry comment info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleInquiryComment" - } - } - } - } - }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." - }, - "put": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry comment's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/sales/{saleId}/reviews": { - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/customers/sales/{saleId}/reviews/{id}": { - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target review's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target review's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed review info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleReview" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/sales/{saleId}/reviews/abridges": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/customers/sales/{saleId}/snapshots": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/sales/{saleId}/snapshots/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target snapshot's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed information of the snapshot", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleSnapshot" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/sales/{saleId}/snapshots/{id}/flip": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target snapshot's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed sale information in the snapshot side", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSale" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/systematic/channels/{channelCode}/categories": { - "patch": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "channelCode", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Belonged channel's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Paginated categories with children categories", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" - } - } - } - } - } - }, - "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}." - } - }, - "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}": { - "get": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "channelCode", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Belonged channel's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target category's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed category info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannelCategory" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}/invert": { - "get": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "channelCode", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Belonged channel's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target category's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed category info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/systematic/channels": { - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/customers/systematic/channels/hierarchical": { - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/customers/systematic/channels/{id}": { - "get": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target channel's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed channel info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/systematic/channels/{code}/get": { - "get": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "code", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target channel's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed channel info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" - } - } - } - } - }, - "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." - } - }, - "/shoppings/customers/systematic/sections": { - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/customers/systematic/sections/{id}": { - "get": { - "tags": [ - "Section" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target section's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed section info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSection" - } - } - } - } - }, - "summary": "Get a section info", - "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." - } - }, - "/shoppings/customers/systematic/sections/{code}/get": { - "get": { - "tags": [ - "Section" - ], - "parameters": [ - { - "name": "code", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target section's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed section info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSection" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/authenticate": { - "get": { - "tags": [ - "Authenticate" - ], - "parameters": [], - "responses": { - "200": { - "description": "Seller info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSeller.IInvert" - } - } - } - } - }, - "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." - }, - "post": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/authenticate/login": { - "put": { - "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" - } - } - } - } - }, - "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," - } - }, - "/shoppings/sellers/deliveries": { - "patch": { - "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" - } - } - } - } - }, - "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}." - }, - "post": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/deliveries/{id}": { - "get": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target delivery's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Delivery info with target orders", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingDelivery.IInvert" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/deliveries/incompletes": { - "patch": { - "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" - } - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/deliveries/{deliveryId}/journeys": { - "post": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "deliveryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged delivery's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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\"." - } - }, - "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}/complete": { - "put": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "deliveryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged delivery's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target journey's ", - "required": true - } - ], - "requestBody": { - "description": "Completion time of the journey", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingDeliveryJourney.IComplete" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "" - } - }, - "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\"." - } - }, - "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}": { - "delete": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "deliveryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged delivery's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target journey's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Newly created journey" - } - }, - "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." - } - }, - "/shoppings/sellers/deliveries/{deliveryId}/shippers": { - "post": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "deliveryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged delivery's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/sellers/coupons": { - "post": { - "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" - } - } - } - } - }, - "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." - }, - "patch": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/coupons/{id}": { - "delete": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target coupon's ", - "required": true - } - ], - "responses": { - "200": { - "description": "" - } - }, - "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." - }, - "get": { - "tags": [ - "Discount" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target coupon's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Coupon info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingCoupon" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/orders": { - "patch": { - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/orders/{id}": { - "get": { - "tags": [ - "Order" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target order's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Order info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingOrder" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales": { - "post": { - "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" - } - } - } - } - }, - "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." - }, - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/sellers/sales/{id}": { - "put": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target sale's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed sale information", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSale" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{id}/open": { - "put": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target sale's ", - "required": true - } - ], - "requestBody": { - "description": "New opening and closing time", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSale.IUpdateOpeningTime" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{id}/replica": { - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target sale's ", - "required": true - } - ], - "responses": { - "201": { - "description": "Creation info of the sale for replication", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSale.ICreate" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{id}/pause": { - "delete": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target sale's ", - "required": true - } - ], - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{id}/suspend": { - "delete": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target sale's ", - "required": true - } - ], - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{id}/restore": { - "put": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target sale's ", - "required": true - } - ], - "responses": { - "200": { - "description": "" - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{saleId}/questions/{questionId}/answer": { - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "questionId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target question's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "put": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "questionId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target question's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry comment's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed inquiry comment info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleInquiryComment" - } - } - } - } - }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." - }, - "put": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry comment's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{saleId}/questions": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/sellers/sales/{saleId}/questions/abridges": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/sellers/sales/{saleId}/questions/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target question's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed question info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleQuestion" - } - } - } - } - }, - "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`." - } - }, - "/shoppings/sellers/sales/{saleId}/reviews/{reviewId}/answer": { - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "reviewId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target review's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "put": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "reviewId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target review's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry comment's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed inquiry comment info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleInquiryComment" - } - } - } - } - }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." - }, - "put": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "inquiryId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged inquiry's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target inquiry comment's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{saleId}/reviews": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/sellers/sales/{saleId}/reviews/abridges": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/sellers/sales/{saleId}/reviews/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target review's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed review info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleReview" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{saleId}/snapshots/{id}/replica": { - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target snapshot's ", - "required": true - } - ], - "responses": { - "201": { - "description": "Creation info of the sale for replication", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSale.ICreate" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{saleId}/snapshots": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target sale's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{saleId}/snapshots/{id}": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target snapshot's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed information of the snapshot", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleSnapshot" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{saleId}/snapshots/{id}/flip": { - "get": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target snapshot's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed sale information in the snapshot side", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSale" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements": { - "patch": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "unitId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged unit's ", - "required": true - }, - { - "name": "stockId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target stock's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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." - }, - "post": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "unitId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged unit's ", - "required": true - }, - { - "name": "stockId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target stock's ", - "required": true - } - ], - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements/{id}": { - "put": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "unitId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged unit's ", - "required": true - }, - { - "name": "stockId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target stock's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target supplement's ", - "required": true - } - ], - "requestBody": { - "description": "Update info (quantity) of the supplement", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSaleUnitStockSupplement.ICreate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "" - } - }, - "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}." - }, - "delete": { - "tags": [ - "Sale" - ], - "parameters": [ - { - "name": "saleId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged sale's ", - "required": true - }, - { - "name": "unitId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Belonged unit's ", - "required": true - }, - { - "name": "stockId", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target stock's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target supplement's ", - "required": true - } - ], - "responses": { - "200": { - "description": "" - } - }, - "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}." - } - }, - "/shoppings/sellers/systematic/channels/{channelCode}/categories": { - "patch": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "channelCode", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Belonged channel's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Paginated categories with children categories", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IHierarchical" - } - } - } - } - } - }, - "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}." - } - }, - "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}": { - "get": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "channelCode", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Belonged channel's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target category's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed category info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannelCategory" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}/invert": { - "get": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "channelCode", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Belonged channel's ", - "required": true - }, - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target category's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed category info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/systematic/channels": { - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/sellers/systematic/channels/hierarchical": { - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/sellers/systematic/channels/{id}": { - "get": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target channel's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed channel info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/systematic/channels/{code}/get": { - "get": { - "tags": [ - "Systematic" - ], - "parameters": [ - { - "name": "code", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target channel's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed channel info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingChannel.IHierarchical" - } - } - } - } - }, - "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." - } - }, - "/shoppings/sellers/systematic/sections": { - "patch": { - "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" - } - } - } - } - }, - "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}." - } - }, - "/shoppings/sellers/systematic/sections/{id}": { - "get": { - "tags": [ - "Section" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "schema": { - "type": "string", - "format": "uuid" - }, - "description": "Target section's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed section info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSection" - } - } - } - } - }, - "summary": "Get a section info", - "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." - } - }, - "/shoppings/sellers/systematic/sections/{code}/get": { - "get": { - "tags": [ - "Section" - ], - "parameters": [ - { - "name": "code", - "in": "path", - "schema": { - "type": "string" - }, - "description": "Target section's ", - "required": true - } - ], - "responses": { - "200": { - "description": "Detailed section info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IShoppingSection" - } - } - } - } - }, - "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." - } - } - }, - "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" - } - }, - "nullable": false, - "required": [ - "cpu", - "memory", - "resource" - ] - }, - "process.global.NodeJS.CpuUsage": { - "type": "object", - "properties": { - "user": { - "type": "number" - }, - "system": { - "type": "number" - } - }, - "nullable": false, - "required": [ - "user", - "system" - ] - }, - "process.global.NodeJS.MemoryUsage": { - "type": "object", - "properties": { - "rss": { - "type": "number" - }, - "heapTotal": { - "type": "number" - }, - "heapUsed": { - "type": "number" - }, - "external": { - "type": "number" - }, - "arrayBuffers": { - "type": "number" - } - }, - "nullable": false, - "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" - } - }, - "nullable": false, - "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" - }, - "title": "`process", - "description": "`process.argv`" - }, - "commit": { - "$ref": "#/components/schemas/ISystem.ICommit", - "title": "Git commit info", - "description": "Git commit info." - }, - "package": { - "$ref": "#/components/schemas/ISystem.IPackage", - "title": "`package", - "description": "`package.json`" - }, - "created_at": { - "type": "string", - "title": "Creation time of this server", - "description": "Creation time of this server." - } - }, - "nullable": false, - "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" - } - } - }, - "nullable": false, - "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" - } - }, - "nullable": false, - "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": { - "type": "string", - "enum": [ - "git" - ] - }, - "url": { - "type": "string" - } - }, - "nullable": false, - "required": [ - "type", - "url" - ] - }, - "author": { - "type": "string" - }, - "license": { - "type": "string" - }, - "bugs": { - "type": "object", - "properties": { - "url": { - "type": "string" - } - }, - "nullable": false, - "required": [ - "url" - ] - }, - "homepage": { - "type": "string" - }, - "devDependencies": { - "$ref": "#/components/schemas/Recordstringstring" - }, - "dependencies": { - "$ref": "#/components/schemas/Recordstringstring" - }, - "publishConfig": { - "type": "object", - "properties": { - "registry": { - "type": "string" - } - }, - "nullable": false, - "required": [ - "registry" - ] - }, - "files": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "nullable": false, - "required": [ - "name", - "version", - "description", - "scripts", - "repository", - "author", - "license", - "bugs", - "homepage", - "dependencies" - ], - "description": "NPM package info." - }, - "Recordstringstring": { - "type": "object", - "properties": {}, - "nullable": false, - "description": "Construct a type with a set of properties K of type T" - }, - "IShoppingAdministrator.IInvert": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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": { - "$ref": "#/components/schemas/IShoppingExternalUser.Nullable", - "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": { - "type": "string", - "format": "uri", - "nullable": true, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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.Nullable": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "citizen": { - "$ref": "#/components/schemas/IShoppingCitizen.Nullable", - "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." - }, - "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." - }, - "data": { - "description": "Additional information about external user from the external\nsystem." - } - }, - "nullable": true, - "required": [ - "id", - "citizen", - "created_at", - "application", - "uid", - "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.Nullable": { - "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." - } - }, - "nullable": true, - "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." - }, - "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." - } - }, - "nullable": false, - "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": {}, - "nullable": false, - "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." - } - }, - "nullable": false, - "required": [ - "email", - "password" - ], - "description": "Login request info." - }, - "IShoppingCoupon.ICreate": { - "type": "object", - "properties": { - "discount": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingCouponDiscount.IAmount" - }, - { - "$ref": "#/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" - } - ] - } - }, - "disposable_codes": { - "type": "array", - "items": { - "type": "string" - } - }, - "name": { - "type": "string", - "title": "Representative name of the coupon", - "description": "Representative name of the coupon." - }, - "opened_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Opening time of the coupon", - "description": "Opening time of the coupon." - }, - "closed_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "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." - } - }, - "nullable": false, - "required": [ - "discount", - "restriction", - "criterias", - "disposable_codes", - "name", - "opened_at", - "closed_at" - ], - "description": "Creation information of the coupon." - }, - "IShoppingCouponDiscount.IAmount": { - "type": "object", - "properties": { - "unit": { - "type": "string", - "enum": [ - "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": { - "type": "number", - "minimum": 0, - "nullable": true, - "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": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true, - "nullable": true, - "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." - } - }, - "nullable": false, - "required": [ - "unit", - "value", - "threshold", - "limit", - "multiplicative" - ], - "description": "Discount information with amount unit." - }, - "IShoppingCouponDiscount.IPercent": { - "type": "object", - "properties": { - "unit": { - "type": "string", - "enum": [ - "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", - "maximum": 100, - "minimum": 0, - "title": "Discount value as percent", - "description": "Discount value as percent." - }, - "threshold": { - "type": "number", - "minimum": 0, - "nullable": true, - "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": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true, - "nullable": true, - "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." - } - }, - "nullable": false, - "required": [ - "unit", - "value", - "threshold", - "limit" - ], - "description": "Discount information with percent unit." - }, - "IShoppingCouponRestriction": { - "type": "object", - "properties": { - "access": { - "type": "string", - "enum": [ - "public", - "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": { - "type": "integer", - "nullable": true, - "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": { - "type": "integer", - "nullable": true, - "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": { - "type": "integer", - "nullable": true, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "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." - } - }, - "nullable": false, - "required": [ - "access", - "exclusive", - "volume", - "volume_per_citizen", - "expired_in", - "expired_at" - ], - "description": "Restriction 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": { - "type": "string", - "enum": [ - "channel" - ] - }, - "direction": { - "type": "string", - "enum": [ - "include", - "exclude" - ] - } - }, - "nullable": false, - "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", - "description": "Target channel's {@link IShoppingChannel.code }." - }, - "category_ids": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "nullable": true, - "title": "Target categories' {@link IShoppingChannelCategory", - "description": "Target categories' {@link IShoppingChannelCategory.id }s." - } - }, - "nullable": false, - "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", - "description": "List of target section's {@link IShoppingSection.code }s." - }, - "type": { - "type": "string", - "enum": [ - "section" - ] - }, - "direction": { - "type": "string", - "enum": [ - "include", - "exclude" - ] - } - }, - "nullable": false, - "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", - "description": "List of target seller's {@link IShoppingSeller.id }s." - }, - "type": { - "type": "string", - "enum": [ - "seller" - ] - }, - "direction": { - "type": "string", - "enum": [ - "include", - "exclude" - ] - } - }, - "nullable": false, - "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", - "description": "List of target sale's {@link IShoppingSale.id }s." - }, - "type": { - "type": "string", - "enum": [ - "sale" - ] - }, - "direction": { - "type": "string", - "enum": [ - "include", - "exclude" - ] - } - }, - "nullable": false, - "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": { - "type": "string", - "enum": [ - "funnel" - ] - }, - "direction": { - "type": "string", - "enum": [ - "include", - "exclude" - ] - } - }, - "nullable": false, - "required": [ - "funnels", - "type", - "direction" - ], - "description": "Creation information of the funnel criteria." - }, - "IShoppingCouponFunnelCriteria.IValueFunnel": { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "url", - "referrer" - ], - "title": "Kind of funnel restriction", - "description": "Kind of funnel restriction." - }, - "value": { - "type": "string", - "title": "Target value", - "description": "Target value." - } - }, - "nullable": false, - "required": [ - "kind", - "value" - ], - "description": "Kind of funnel restriction by a value." - }, - "IShoppingCouponFunnelCriteria.IVariableFunnel": { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "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." - } - }, - "nullable": false, - "required": [ - "kind", - "key", - "value" - ], - "description": "Kind of funnel restriction by a variable." - }, - "IShoppingCoupon": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "designer": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingSeller" - }, - { - "$ref": "#/components/schemas/IShoppingAdministrator" - } - ], - "title": "Designer who've made the coupon", - "description": "Designer who've made the coupon." - }, - "inventory": { - "$ref": "#/components/schemas/IShoppingCouponInventory", - "title": "Inventory information", - "description": "Inventory information." - }, - "criterias": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingCouponCriteria" - }, - "title": "List of criteria informations", - "description": "List of criteria informations." - }, - "discount": { - "$ref": "#/components/schemas/IShoppingCouponDiscount", - "title": "Discount information", - "description": "Discount information." - }, - "restriction": { - "$ref": "#/components/schemas/IShoppingCouponRestriction", - "title": "Restriction information", - "description": "Restriction information." - }, - "name": { - "type": "string", - "title": "Representative name of the coupon", - "description": "Representative name of the coupon." - }, - "opened_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Opening time of the coupon", - "description": "Opening time of the coupon." - }, - "closed_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "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." - } - }, - "nullable": false, - "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." - }, - "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." - } - }, - "nullable": false, - "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." - }, - "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." - } - }, - "nullable": false, - "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." - }, - "IShoppingCouponInventory": { - "type": "object", - "properties": { - "volume": { - "type": "integer", - "nullable": true, - "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": { - "type": "integer", - "nullable": true, - "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." - } - }, - "nullable": false, - "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." - }, - "IShoppingCouponCriteria": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingCouponChannelCriteria" - }, - { - "$ref": "#/components/schemas/IShoppingCouponSectionCriteria" - }, - { - "$ref": "#/components/schemas/IShoppingCouponSellerCriteria" - }, - { - "$ref": "#/components/schemas/IShoppingCouponSaleCriteria" - }, - { - "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria" - } - ], - "description": "Union type of the criteria.\n\n`IShoppingCouponCriteria` is an union typed structure that embodies the\nconditions for applying a {@link IShoppingCoupon discount coupon}. All\nof individual entities are imposing constraints on the reference unit of\na discount coupon were created by inheritig\n{@link IShoppingCouponCriteriaBase } type.\n\nAlso, individual entities can be specified by using the if condition on\nthe {@link type } property. For example, if the {@link type } value is\n`section`, {@link IShoppingCouponSectionCriteria } type would be specified,\nso that you can access to the target\n{@link IShoppingCouponSectionCriteria.section } directly. For reference,\nthis concept is called a descriminated union in TypeScript.\n\n```typescript\nconst union: IShoppingCouponCriteria;\nif (union.type === \"section\")\n union.section; // IShoppingCouponSectionCriteria.section\n```\n\nIn addition, constraints on reference units can be specified through the\n{@link direction } property to proceed as an inclusion condition or,\nconversely, as an exclusion condition. If the direction value is \"include\",\nthe coupon is applicable only to the reference object. Conversely, if the\ndirection value is \"exclude\", it is a coupon that cannot be applied to the\nreference object." - }, - "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": { - "type": "string", - "enum": [ - "channel" - ], - "title": "Descrimanator type", - "description": "Descrimanator type." - }, - "direction": { - "type": "string", - "enum": [ - "include", - "exclude" - ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." - } - }, - "nullable": false, - "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": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" - }, - "minItems": 1, - "nullable": true, - "title": "List of target categories", - "description": "List of target categories." - } - }, - "nullable": false, - "required": [ - "channel", - "categories" - ] - }, - "IShoppingChannelCategory.IInvert": { - "type": "object", - "properties": { - "parent": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert.Nullable", - "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": { - "type": "string", - "format": "uuid", - "nullable": true, - "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." - } - }, - "nullable": false, - "required": [ - "parent", - "id", - "parent_id", - "name", - "created_at" - ], - "description": "Invert category information with parent category." - }, - "IShoppingChannelCategory.IInvert.Nullable": { - "type": "object", - "properties": { - "parent": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert.Nullable", - "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": { - "type": "string", - "format": "uuid", - "nullable": true, - "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." - } - }, - "nullable": true, - "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": { - "type": "string", - "enum": [ - "section" - ], - "title": "Descrimanator type", - "description": "Descrimanator type." - }, - "direction": { - "type": "string", - "enum": [ - "include", - "exclude" - ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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": { - "type": "string", - "enum": [ - "seller" - ], - "title": "Descrimanator type", - "description": "Descrimanator type." - }, - "direction": { - "type": "string", - "enum": [ - "include", - "exclude" - ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." - } - }, - "nullable": false, - "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": { - "type": "string", - "enum": [ - "sale" - ], - "title": "Descrimanator type", - "description": "Descrimanator type." - }, - "direction": { - "type": "string", - "enum": [ - "include", - "exclude" - ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." - } - }, - "nullable": false, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Opening time of the sale", - "description": "Opening time of the sale." - }, - "closed_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Closing time of the sale", - "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." - } - }, - "nullable": false, - "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": { - "type": "string", - "enum": [ - "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." - } - }, - "nullable": false, - "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" - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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" - } - } - }, - "nullable": false, - "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": { - "type": "string", - "maxLength": 8, - "minLength": 1, - "nullable": true, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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": { - "type": "string", - "enum": [ - "funnel" - ], - "title": "Descrimanator type", - "description": "Descrimanator type." - }, - "direction": { - "type": "string", - "enum": [ - "include", - "exclude" - ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." - } - }, - "nullable": false, - "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." - }, - "IShoppingCouponDiscount": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingCouponDiscount.IAmount" - }, - { - "$ref": "#/components/schemas/IShoppingCouponDiscount.IPercent" - } - ], - "description": "Discount information of the coupon.\n\n`IShoppingCouponDiscount` is a type representing the discount information\nof a {@link IShoppingCoupon }. Also, it is an union type that divided\nby the {@link unit } of the discount value, `amount` or `percent`." - }, - "IShoppingCoupon.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingCoupon.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-coupon.name", - "-coupon.unit", - "-coupon.value", - "-coupon.created_at", - "-coupon.opened_at", - "-coupon.closed_at", - "+coupon.name", - "+coupon.unit", - "+coupon.value", - "+coupon.created_at", - "+coupon.opened_at", - "+coupon.closed_at" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false - }, - "IShoppingCoupon.IRequest.ISearch": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "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", - "default": 100, - "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." - } - }, - "nullable": false, - "required": [ - "current", - "limit", - "records", - "pages" - ], - "description": "Page information." - }, - "IShoppingDeposit.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-deposit.source", - "-deposit.code", - "-deposit.direction", - "+deposit.source", - "+deposit.code", - "+deposit.direction" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false - }, - "IShoppingDeposit.IRequest.ISearch": { - "type": "object", - "properties": { - "source": { - "type": "string" - }, - "code": { - "type": "string" - }, - "direction": { - "type": "number", - "enum": [ - 1, - -1 - ] - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "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": { - "$ref": "#/components/schemas/IShoppingDeposit.Direction" - } - }, - "nullable": false, - "required": [ - "id", - "created_at", - "code", - "source", - "direction" - ] - }, - "IShoppingDeposit.Direction": { - "type": "number", - "enum": [ - 1, - -1 - ] - }, - "IShoppingDeposit.ICreate": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "source": { - "type": "string" - }, - "direction": { - "type": "number", - "enum": [ - 1, - -1 - ] - } - }, - "nullable": false, - "required": [ - "code", - "source", - "direction" - ] - }, - "IShoppingMileage.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-mileage.source", - "-mileage.code", - "-mileage.direction", - "+mileage.source", - "+mileage.code", - "+mileage.direction" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false - }, - "IShoppingMileage.IRequest.ISearch": { - "type": "object", - "properties": { - "source": { - "type": "string" - }, - "code": { - "type": "string" - }, - "direction": { - "type": "number", - "enum": [ - 1, - -1 - ] - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." - }, - "IShoppingMileage": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "value": { - "type": "number", - "nullable": true - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "code": { - "type": "string" - }, - "source": { - "type": "string" - }, - "direction": { - "$ref": "#/components/schemas/IShoppingMileage.Direction" - } - }, - "nullable": false, - "required": [ - "id", - "value", - "created_at", - "code", - "source", - "direction" - ] - }, - "IShoppingMileage.Direction": { - "type": "number", - "enum": [ - 1, - -1 - ] - }, - "IShoppingMileage.ICreate": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "source": { - "type": "string" - }, - "direction": { - "type": "number", - "enum": [ - 1, - -1 - ] - }, - "value": { - "type": "number", - "nullable": true - } - }, - "nullable": false, - "required": [ - "code", - "source", - "direction", - "value" - ] - }, - "IShoppingMileageDonation.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingMileageDonation.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-donation.created_at", - "-donation.value", - "-donation.reason", - "+donation.created_at", - "+donation.value", - "+donation.reason" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false - }, - "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" - } - }, - "nullable": false - }, - "IShoppingCitizen.IRequest.ISearch": { - "type": "object", - "properties": { - "mobile": { - "type": "string", - "pattern": "^[0-9]*$" - }, - "name": { - "type": "string" - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "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" - } - }, - "nullable": false, - "required": [ - "id", - "administrator", - "citizen", - "value", - "reason", - "created_at" - ] - }, - "IShoppingMileageDonation.ICreate": { - "type": "object", - "properties": { - "citizen_id": { - "type": "string", - "format": "uuid" - }, - "value": { - "type": "number" - }, - "reason": { - "type": "string" - } - }, - "nullable": false, - "required": [ - "citizen_id", - "value", - "reason" - ] - }, - "IShoppingOrder.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingOrder.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-order.price", - "-order.quantity", - "-order.created_at", - "-order.publish.paid_at", - "+order.price", - "+order.quantity", - "+order.created_at", - "+order.publish.paid_at" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false, - "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": { - "type": "boolean", - "nullable": true - }, - "sale": { - "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" - } - }, - "nullable": false - }, - "IShoppingSale.IRequest.ISearch": { - "type": "object", - "properties": { - "show_paused": { - "type": "boolean" - }, - "show_suspended": { - "oneOf": [ - { - "type": "string", - "enum": [ - "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" - } - }, - "nullable": false - }, - "IShoppingPrice.ISearch": { - "type": "object", - "properties": { - "minimum": { - "type": "number" - }, - "maximum": { - "type": "number" - } - }, - "nullable": false - }, - "IShoppingSaleReview.IInvertSearch": { - "type": "object", - "properties": { - "score": { - "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.IScoreRange" - }, - "count": { - "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.ICountRange" - } - }, - "nullable": false - }, - "IShoppingSaleReview.IInvertSearch.IScoreRange": { - "type": "object", - "properties": { - "minimum": { - "type": "number", - "maximum": 100, - "minimum": 0 - }, - "maximum": { - "type": "number", - "maximum": 100, - "minimum": 0 - } - }, - "nullable": false - }, - "IShoppingSaleReview.IInvertSearch.ICountRange": { - "type": "object", - "properties": { - "minimum": { - "type": "integer" - }, - "maximum": { - "type": "integer" - } - }, - "nullable": false - }, - "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" - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "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": { - "$ref": "#/components/schemas/IShoppingOrderPublish.Nullable", - "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." - } - }, - "nullable": false, - "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": { - "type": "string", - "enum": [ - "customer" - ], - "title": "Discriminant for the type of customer", - "description": "Discriminant for the type of customer." - }, - "member": { - "$ref": "#/components/schemas/IShoppingMember.Nullable", - "title": "Membership information", - "description": "Membership information.\n\nIf the customer has joined as a member." - }, - "citizen": { - "$ref": "#/components/schemas/IShoppingCitizen.Nullable", - "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": { - "$ref": "#/components/schemas/IShoppingExternalUser.Nullable", - "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": { - "type": "string", - "format": "uri", - "nullable": true, - "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." - } - }, - "nullable": false, - "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.Nullable": { - "type": "object", - "properties": { - "citizen": { - "$ref": "#/components/schemas/IShoppingCitizen.Nullable", - "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": { - "$ref": "#/components/schemas/IShoppingSeller.Nullable", - "title": "Seller information", - "description": "Seller information.\n\nIf the member also signed up as a seller." - }, - "administrator": { - "$ref": "#/components/schemas/IShoppingAdministrator.Nullable", - "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." - } - }, - "nullable": true, - "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." - }, - "IShoppingSeller.Nullable": { - "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." - } - }, - "nullable": true, - "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." - }, - "IShoppingAdministrator.Nullable": { - "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." - } - }, - "nullable": true, - "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." - }, - "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": { - "type": "string", - "enum": [ - "none", - "underway", - "preparing", - "manufacturing", - "shipping", - "delivering", - "arrived" - ], - "nullable": true, - "title": "State of delivery about the good", - "description": "State of delivery about the good." - }, - "confirmed_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Opening time of the sale", - "description": "Opening time of the sale." - }, - "closed_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Closing time of the sale", - "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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": { - "$ref": "#/components/schemas/IShoppingSaleUnitOption.IInvert", - "title": "Target option", - "description": "Target option." - }, - "candidate": { - "$ref": "#/components/schemas/IShoppingSaleUnitOptionCandidate.Nullable", - "title": "Selected candidate value", - "description": "Selected candidate value." - }, - "value": { - "oneOf": [ - { - "type": "string", - "nullable": true - }, - { - "type": "number", - "nullable": true - }, - { - "type": "boolean", - "nullable": true - } - ], - "title": "Written value", - "description": "Written value." - } - }, - "nullable": false, - "required": [ - "id", - "option", - "candidate", - "value" - ], - "description": "Invert information from the cart." - }, - "IShoppingSaleUnitOption.IInvert": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.IInvert" - }, - { - "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" - } - ], - "description": "Inversely referenced information of the option." - }, - "IShoppingSaleUnitSelectableOption.IInvert": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "type": { - "type": "string", - "enum": [ - "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." - } - }, - "nullable": false, - "required": [ - "id", - "type", - "name", - "variable" - ] - }, - "IShoppingSaleUnitDescriptiveOption": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "type": { - "type": "string", - "enum": [ - "string", - "number", - "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." - } - }, - "nullable": false, - "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.Nullable": { - "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." - } - }, - "nullable": true, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Expiration time of the ticket", - "description": "Expiration time of the ticket." - } - }, - "nullable": false, - "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.Nullable": { - "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": { - "$ref": "#/components/schemas/IShoppingDelivery.State", - "title": "State of the order, about the deliveries", - "description": "State of the order, about the deliveries." - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of the record", - "description": "Creation time of the record." - }, - "paid_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Time when the order was paid", - "description": "Time when the order was paid." - }, - "cancelled_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "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." - } - }, - "nullable": true, - "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": { - "$ref": "#/components/schemas/IShoppingDelivery.State", - "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." - } - }, - "nullable": false, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Deletion time of the record", - "description": "Deletion time of the record." - }, - "type": { - "$ref": "#/components/schemas/IShoppingDeliveryJourney.Type", - "title": "Type of journey", - "description": "Type of journey.\n\n- preparing\n- manufacturing\n- shipping\n- delivering" - }, - "title": { - "type": "string", - "nullable": true, - "title": "Title of journey", - "description": "Title of journey." - }, - "description": { - "type": "string", - "nullable": true, - "title": "Description of journey", - "description": "Description of journey." - }, - "started_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Start time of the journey", - "description": "Start time of the journey." - }, - "completed_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Completion time of the journey", - "description": "Completion time of the journey." - } - }, - "nullable": false, - "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}." - }, - "IShoppingDeliveryJourney.Type": { - "type": "string", - "enum": [ - "preparing", - "manufacturing", - "shipping", - "delivering" - ] - }, - "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", - "description": "Target order's {@link IShoppingOrderPublish.id }." - }, - "good_id": { - "type": "string", - "format": "uuid", - "title": "Target good's {@link IShoppingOrderGood", - "description": "Target good's {@link IShoppingOrderGood.id }." - }, - "stock_id": { - "type": "string", - "format": "uuid", - "title": "Target stock's {@link IShoppingSaleUnitStock", - "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." - } - }, - "nullable": false, - "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": { - "type": "string", - "nullable": true - }, - "name": { - "type": "string" - }, - "mobile": { - "type": "string" - } - }, - "nullable": false, - "required": [ - "id", - "created_at", - "company", - "name", - "mobile" - ] - }, - "IShoppingDelivery.State": { - "type": "string", - "enum": [ - "none", - "underway", - "preparing", - "manufacturing", - "shipping", - "delivering", - "arrived" - ], - "description": "State of delivery\n\n- `none`: No delivery or journey record\n- `underway`: Some pieces are over preparing, but others are not\n- `preparing`: At least preparing\n- `manufacturing`: At least manufacturing\n- `shipping`: At least shipping\n- `delivering`: At least delivering\n- `arrived`: Every pieces are arrived" - }, - "IShoppingAddress": { - "type": "object", - "properties": { - "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": { - "type": "string", - "nullable": true, - "title": "Special description if required", - "description": "Special description if required." - } - }, - "nullable": false, - "required": [ - "id", - "created_at", - "mobile", - "name", - "country", - "province", - "city", - "department", - "possession", - "zip_code", - "special_note" - ], - "description": "The address information." - }, - "IShoppingSale.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch", - "title": "Search conditions", - "description": "Search conditions." - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-seller.created_at", - "-seller.goods.payments.real", - "-seller.goods.publish_count", - "-seller.reviews.average", - "-seller.reviews.count", - "-goods.publish_count", - "-goods.payments.real", - "-reviews.average", - "-reviews.count", - "-sale.created_at", - "-sale.updated_at", - "-sale.opened_at", - "-sale.closed_at", - "-sale.content.title", - "-sale.price_range.lowest.real", - "-sale.price_range.highest.real", - "+seller.created_at", - "+seller.goods.payments.real", - "+seller.goods.publish_count", - "+seller.reviews.average", - "+seller.reviews.count", - "+goods.publish_count", - "+goods.payments.real", - "+reviews.average", - "+reviews.count", - "+sale.created_at", - "+sale.updated_at", - "+sale.opened_at", - "+sale.closed_at", - "+sale.content.title", - "+sale.price_range.lowest.real", - "+sale.price_range.highest.real" - ] - }, - "title": "Sorting conditions", - "description": "Sorting conditions." - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false, - "description": "Request of summarized sales with pagination and searching/sorting options." - }, - "IPageIShoppingSale.ISummary": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/IPage.IPagination", - "title": "Page information", - "description": "Page information." - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSale.ISummary" - }, - "title": "List of records", - "description": "List of records." - } - }, - "nullable": false, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." - }, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Opening time of the sale", - "description": "Opening time of the sale." - }, - "closed_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Closing time of the sale", - "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." - } - }, - "nullable": false, - "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": { - "$ref": "#/components/schemas/IShoppingSaleContent.Type", - "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." - } - }, - "nullable": false, - "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 }." - }, - "IShoppingSaleContent.Type": { - "type": "string", - "enum": [ - "html", - "md", - "txt" - ] - }, - "IShoppingSaleUnit": { - "type": "object", - "properties": { - "options": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSaleUnitOption" - }, - "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." - } - }, - "nullable": false, - "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." - }, - "IShoppingSaleUnitOption": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" - }, - { - "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption" - } - ], - "description": "Individual option information on units for sale.\n\n`IShoppingSaleUnitOption` is a subsidiary entity of\n{@link IShoppingSaleUnit } that represents individual products in the\n{@link IShoppingSale sale}, and is an entity designed to represent individual\noption information for the unit.\n\nAlso, `IShoppingSaleUnitOption` is an union type of two entities,\n{@link IShoppingSaleUnitSelectableOption } and\n{@link IShoppingSaleUnitDescriptiveOption }. To specify the detailed type of\nthem, just use the `if` statement to the {@link type } property like below:\n\n```typescript\nif (option.type === \"select\")\n option.candidates; // IShoppingSaleUnitSelectableOption\n```\n\n- Examples of Options\n - selectable options\n - Computer: CPU, RAM, SSD, etc.\n - Clothes: size, color, style, etc.\n - descriptive options\n - Engrave\n - Simple question\n\nIf the type of option is a variable value in \"select\", the final stock that the\n{@link IShoppingCustomer customer} will purchase changes depending on the\nselection of the {@link IShoppingSaleUnitOptionCandidate candidate value}.\n\nConversely, if it is a type other than \"select\", or if the type is \"select\" but\nvariable is false, this is an option that has no meaning beyond simple information\ntransfer. Therefore, no matter what value the customer enters and chooses when\npurchasing it, the option in this case does not affect the\n{@link IShoppingSaleUnitStock final stock}." - }, - "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": { - "type": "string", - "enum": [ - "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." - } - }, - "nullable": false, - "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}." - }, - "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." - } - }, - "nullable": false, - "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." - }, - "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." - } - }, - "nullable": false, - "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", - "title": "Target option's {@link IShoppingSaleUnitOption", - "description": "Target option's {@link IShoppingSaleUnitOption.id }" - }, - "candidate_id": { - "type": "string", - "format": "uuid", - "title": "Target candidate's {@link IShoppingSaleUnitOptionCandidate", - "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }" - } - }, - "nullable": false, - "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." - }, - "IShoppingSaleInquiryComment.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-created_at", - "+created_at" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false, - "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" - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." - }, - "IShoppingSaleInquiryComment": { - "type": "object", - "properties": { - "writer": { - "$ref": "#/components/schemas/IShoppingActorEntity", - "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": { - "type": "string", - "format": "uuid", - "nullable": true, - "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." - } - }, - "nullable": false, - "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." - }, - "IShoppingActorEntity": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" - }, - { - "$ref": "#/components/schemas/IShoppingSeller.IInvert" - }, - { - "$ref": "#/components/schemas/IShoppingCustomer" - } - ] - }, - "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": { - "$ref": "#/components/schemas/IBbsArticleComment.Format", - "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." - } - }, - "nullable": false, - "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." - }, - "IBbsArticleComment.Format": { - "type": "string", - "enum": [ - "html", - "md", - "txt" - ] - }, - "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": { - "type": "string", - "maxLength": 8, - "minLength": 1, - "nullable": true, - "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." - } - }, - "nullable": false, - "required": [ - "name", - "extension", - "url" - ] - }, - "IShoppingSaleInquiryComment.ICreate": { - "type": "object", - "properties": { - "format": { - "type": "string", - "enum": [ - "html", - "md", - "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." - } - }, - "nullable": false, - "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": { - "$ref": "#/components/schemas/IBbsArticleComment.Format", - "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." - } - }, - "nullable": false, - "required": [ - "id", - "created_at", - "format", - "body", - "files" - ], - "description": "Snapshot content of the comment." - }, - "IShoppingSaleQuestion.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingSaleInquiry.IRequest.ISearch", - "title": "Search conditions", - "description": "Search conditions." - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-created_at", - "+created_at", - "-nickname", - "-answered_at", - "-title", - "-updated_at", - "+nickname", - "+answered_at", - "+title", - "+updated_at" - ] - }, - "title": "Sorting conditions", - "description": "Sorting conditions." - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false, - "description": "Request of summarized informations with pagination searching/sorting options." - }, - "IShoppingSaleInquiry.IRequest.ISearch": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "nickname": { - "type": "string" - }, - "answered": { - "type": "boolean", - "nullable": true - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "title_or_body": { - "type": "string" - }, - "from": { - "type": "string", - "format": "date-time" - }, - "to": { - "type": "string", - "format": "date-time" - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "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": { - "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary.Nullable", - "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." - } - }, - "nullable": false, - "required": [ - "secret", - "customer", - "answer", - "read_by_seller", - "id", - "title", - "created_at", - "updated_at" - ], - "description": "Summarized information of the question." - }, - "IShoppingSaleInquiryAnswer.ISummary.Nullable": { - "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." - } - }, - "nullable": true, - "required": [ - "seller", - "id", - "title", - "created_at", - "updated_at" - ] - }, - "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." - } - }, - "nullable": false, - "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": { - "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.IAbridge.Nullable", - "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": { - "$ref": "#/components/schemas/IBbsArticle.Format", - "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." - } - }, - "nullable": false, - "required": [ - "secret", - "customer", - "answer", - "read_by_seller", - "id", - "title", - "created_at", - "updated_at", - "format", - "body", - "files" - ], - "description": "Abridged information of the question." - }, - "IShoppingSaleInquiryAnswer.IAbridge.Nullable": { - "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": { - "$ref": "#/components/schemas/IBbsArticle.Format", - "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." - } - }, - "nullable": true, - "required": [ - "seller", - "id", - "title", - "created_at", - "updated_at", - "format", - "body", - "files" - ] - }, - "IBbsArticle.Format": { - "type": "string", - "enum": [ - "html", - "md", - "txt" - ] - }, - "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": { - "type": "string", - "enum": [ - "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": { - "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.Nullable", - "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." - } - }, - "nullable": false, - "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.Nullable": { - "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." - } - }, - "nullable": true, - "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": { - "$ref": "#/components/schemas/IBbsArticle.Format", - "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." - } - }, - "nullable": false, - "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." - }, - "IShoppingSaleReview.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingSaleReview.IRequest.ISearch", - "title": "Search conditions", - "description": "Search conditions." - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-created_at", - "+created_at", - "-nickname", - "-answered_at", - "-title", - "-updated_at", - "+nickname", - "+answered_at", - "+title", - "+updated_at", - "-score", - "+score" - ] - }, - "title": "Sorting conditions", - "description": "Sorting conditions." - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false, - "description": "Request of summarized informations with pagination searching/sorting options." - }, - "IShoppingSaleReview.IRequest.ISearch": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "nickname": { - "type": "string" - }, - "answered": { - "type": "boolean", - "nullable": true - }, - "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", - "maximum": 100, - "minimum": 0 - }, - "maximum": { - "type": "number", - "maximum": 100, - "minimum": 0 - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "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": { - "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary.Nullable", - "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." - } - }, - "nullable": false, - "required": [ - "score", - "customer", - "answer", - "read_by_seller", - "id", - "title", - "created_at", - "updated_at" - ], - "description": "Summarized information of the review." - }, - "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." - } - }, - "nullable": false, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." - }, - "IShoppingSaleReview.IAbridge": { - "type": "object", - "properties": { - "score": { - "type": "number", - "maximum": 100, - "minimum": 0, - "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": { - "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.IAbridge.Nullable", - "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": { - "$ref": "#/components/schemas/IBbsArticle.Format", - "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." - } - }, - "nullable": false, - "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": { - "type": "string", - "enum": [ - "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": { - "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.Nullable", - "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." - } - }, - "nullable": false, - "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", - "maximum": 100, - "minimum": 0, - "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": { - "$ref": "#/components/schemas/IBbsArticle.Format", - "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." - } - }, - "nullable": false, - "required": [ - "score", - "id", - "created_at", - "format", - "title", - "body", - "files" - ], - "description": "Snapshot content of the review article." - }, - "IPage.IRequest": { - "type": "object", - "properties": { - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false, - "description": "Page request data" - }, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "required": [ - "price_range", - "id", - "snapshot_id", - "latest", - "content", - "channels", - "tags", - "units" - ], - "description": "Summarized information of the sale snapshot." - }, - "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." - } - }, - "nullable": false, - "required": [ - "id", - "snapshot_id", - "latest", - "content", - "channels", - "tags", - "units" - ], - "description": "Snapshot record of sale.\n\n`IShoppingSaleSnapshot` is an entity that embodies a snapshot of a sale,\nand the ERD (Entity Relationship Diagram) describes the role of the\n`shopping_sale_snapshots` table as follows:\n\n> {@link IShoppingSale shopping_sales} is an entity that embodies\n> \"product sales\" (sales) information registered by the\n> {@link IShoppingSeller seller}. And the main information of the sale is\n> recorded in the sub `shopping_sale_snapshots`, not in the main\n> {@link IShoppingSale shopping_sales}. When a seller changes a previously\n> registered item, the existing {@link IShoppingSale shopping_sales} record\n> is not changed, but a new snapshot record is created.\n>\n> This is to preserve the {@link IShoppingCustomer customer}'s\n> {@link IShoppingOrder purchase history} flawlessly after the customer\n> purchases a specific item, even if the seller changes the components or price\n> of the item. It is also intended to support sellers in so-called A/B testing,\n> which involves changing components or prices and measuring the performance\n> in each case.\n\nBy the way, DTO (Data Transfer Object) level used by the front-end developer,\nit does not distinguish {@link IShoppingSale } and `IShoppingSaleSnapshot`\nstrictly, and generally handles {@link IShoppingSale } and snapshot together.\n\nBut even though the DTO level does not strictly distinguish them, the word and\nconcept of \"snapshot\" is still important, so it is recommended to understand\nthe concept of \"snapshot\" properly." - }, - "IShoppingChannelCategory.ICreate": { - "type": "object", - "properties": { - "parent_id": { - "type": "string", - "format": "uuid", - "nullable": true, - "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." - } - }, - "nullable": false, - "required": [ - "parent_id", - "name" - ], - "description": "Creation information of the category." - }, - "IShoppingChannelCategory": { - "type": "object", - "properties": { - "parent": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert.Nullable", - "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": { - "type": "string", - "format": "uuid", - "nullable": true, - "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." - } - }, - "nullable": false, - "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": { - "type": "string", - "format": "uuid", - "nullable": true, - "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." - } - }, - "nullable": false, - "required": [ - "children", - "id", - "parent_id", - "name", - "created_at" - ], - "description": "Hierarchical category information with children categories." - }, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "required": [ - "name" - ], - "description": "Updating information of the channel." - }, - "IShoppingChannel.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingChannel.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-channel.code", - "-channel.name", - "-channel.created_at", - "+channel.code", - "+channel.name", - "+channel.created_at" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false, - "description": "Request of the channels with pagination and searching/sorting options." - }, - "IShoppingChannel.IRequest.ISearch": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." - }, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "required": [ - "name" - ], - "description": "Updating information of the section." - }, - "IShoppingSection.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingSection.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-section.code", - "-section.name", - "-section.created_at", - "+section.code", - "+section.name", - "+section.created_at" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false, - "description": "Request of the sections with pagination and searching/sorting options." - }, - "IShoppingSection.IRequest.ISearch": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." - }, - "IShoppingCustomer.IRefresh": { - "type": "object", - "properties": { - "value": { - "type": "string" - } - }, - "nullable": false, - "required": [ - "value" - ] - }, - "IShoppingCustomer.IAuthorized": { - "type": "object", - "properties": { - "setHeaders": { - "type": "object", - "properties": { - "Authorization": { - "type": "string" - } - }, - "nullable": false, - "required": [ - "Authorization" - ] - }, - "token": { - "$ref": "#/components/schemas/IShoppingCustomer.IToken" - }, - "type": { - "type": "string", - "enum": [ - "customer" - ], - "title": "Discriminant for the type of customer", - "description": "Discriminant for the type of customer." - }, - "member": { - "$ref": "#/components/schemas/IShoppingMember.Nullable", - "title": "Membership information", - "description": "Membership information.\n\nIf the customer has joined as a member." - }, - "citizen": { - "$ref": "#/components/schemas/IShoppingCitizen.Nullable", - "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": { - "$ref": "#/components/schemas/IShoppingExternalUser.Nullable", - "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": { - "type": "string", - "format": "uri", - "nullable": true, - "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." - } - }, - "nullable": false, - "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" - } - }, - "nullable": false, - "required": [ - "access", - "refresh", - "expired_at", - "refreshable_until" - ] - }, - "IShoppingCustomer.ICreate": { - "type": "object", - "properties": { - "channel_code": { - "type": "string" - }, - "external_user": { - "$ref": "#/components/schemas/IShoppingExternalUser.ICreate.Nullable" - }, - "href": { - "type": "string", - "format": "uri" - }, - "referrer": { - "type": "string", - "format": "uri", - "nullable": true - }, - "ip": { - "oneOf": [ - { - "type": "string", - "format": "ipv4" - }, - { - "type": "string", - "format": "ipv6" - } - ] - } - }, - "nullable": false, - "required": [ - "channel_code", - "external_user", - "href", - "referrer" - ] - }, - "IShoppingExternalUser.ICreate.Nullable": { - "type": "object", - "properties": { - "citizen": { - "$ref": "#/components/schemas/IShoppingCitizen.ICreate.Nullable", - "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." - } - }, - "nullable": true, - "required": [ - "citizen", - "application", - "uid", - "nickname", - "password", - "data" - ], - "description": "Creation information of external user." - }, - "IShoppingCitizen.ICreate.Nullable": { - "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." - } - }, - "nullable": true, - "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": { - "$ref": "#/components/schemas/IShoppingCitizen.ICreate.Nullable", - "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." - } - }, - "nullable": false, - "required": [ - "nickname", - "citizen", - "email", - "password" - ], - "description": "Joining request info." - }, - "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." - } - }, - "nullable": false, - "required": [ - "mobile", - "name" - ], - "description": "Creation information of citizen verification." - }, - "IShoppingExternalUser.ICreate": { - "type": "object", - "properties": { - "citizen": { - "$ref": "#/components/schemas/IShoppingCitizen.ICreate.Nullable", - "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." - } - }, - "nullable": false, - "required": [ - "citizen", - "application", - "uid", - "nickname", - "password", - "data" - ], - "description": "Creation information of external user." - }, - "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." - } - }, - "nullable": false, - "required": [ - "oldbie", - "newbie" - ], - "description": "Request info of password change." - }, - "IShoppingCouponTicket.IRequest": { - "type": "object", - "properties": { - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-ticket.created_at", - "-ticket.expired_at", - "+ticket.created_at", - "+ticket.expired_at" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." - }, - "IShoppingCouponTicket.ICreate": { - "type": "object", - "properties": { - "coupon_id": { - "type": "string", - "format": "uuid" - } - }, - "nullable": false, - "required": [ - "coupon_id" - ] - }, - "IShoppingDepositCharge.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingDepositCharge.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-created_at", - "+created_at", - "-value", - "-publish.created_at", - "-publish.paid_at", - "+value", - "+publish.created_at", - "+publish.paid_at" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false - }, - "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": { - "type": "string", - "enum": [ - "pending", - "published", - "payed", - "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" - } - }, - "nullable": false - } - }, - "nullable": false - } - }, - "nullable": false, - "required": [ - "state" - ] - }, - "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." - } - }, - "nullable": false, - "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": { - "$ref": "#/components/schemas/IShoppingDepositChargePublish.Nullable" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "value": { - "type": "number" - } - }, - "nullable": false, - "required": [ - "id", - "customer", - "publish", - "created_at", - "value" - ] - }, - "IShoppingDepositChargePublish.Nullable": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "paid_at": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "cancelled_at": { - "type": "string", - "format": "date-time", - "nullable": true - } - }, - "nullable": true, - "required": [ - "id", - "created_at", - "paid_at", - "cancelled_at" - ] - }, - "IShoppingDepositCharge.ICreate": { - "type": "object", - "properties": { - "value": { - "type": "number" - } - }, - "nullable": false, - "required": [ - "value" - ] - }, - "IShoppingDepositChargePublish.ICreate": { - "type": "object", - "properties": { - "vendor": { - "type": "string" - }, - "uid": { - "type": "string" - } - }, - "nullable": false, - "required": [ - "vendor", - "uid" - ] - }, - "IShoppingDepositChargePublish": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "paid_at": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "cancelled_at": { - "type": "string", - "format": "date-time", - "nullable": true - } - }, - "nullable": false, - "required": [ - "id", - "created_at", - "paid_at", - "cancelled_at" - ] - }, - "IShoppingDepositHistory.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingDepositHistory.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-deposit.source", - "-deposit.code", - "-deposit.direction", - "+deposit.source", - "+deposit.code", - "+deposit.direction", - "-history.value", - "-history.created_at", - "+history.value", - "+history.created_at" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false - }, - "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 - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "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" - } - }, - "nullable": false, - "required": [ - "id", - "citizen", - "deposit", - "source_id", - "value", - "balance", - "created_at" - ] - }, - "IShoppingMileageHistory.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingMileageHistory.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-mileage.source", - "-mileage.code", - "-mileage.direction", - "+mileage.source", - "+mileage.code", - "+mileage.direction", - "-history.value", - "-history.created_at", - "+history.value", - "+history.created_at" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false - }, - "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 - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "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" - } - }, - "nullable": false, - "required": [ - "id", - "citizen", - "mileage", - "source_id", - "value", - "balance", - "created_at" - ] - }, - "IShoppingCartCommodity.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingCartCommodity.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-seller.created_at", - "-seller.goods.payments.real", - "-seller.goods.publish_count", - "-seller.reviews.average", - "-seller.reviews.count", - "-goods.publish_count", - "-goods.payments.real", - "-reviews.average", - "-reviews.count", - "-sale.created_at", - "-sale.updated_at", - "-sale.opened_at", - "-sale.closed_at", - "-sale.content.title", - "-sale.price_range.lowest.real", - "-sale.price_range.highest.real", - "+seller.created_at", - "+seller.goods.payments.real", - "+seller.goods.publish_count", - "+seller.reviews.average", - "+seller.reviews.count", - "+goods.publish_count", - "+goods.payments.real", - "+reviews.average", - "+reviews.count", - "+sale.created_at", - "+sale.updated_at", - "+sale.opened_at", - "+sale.closed_at", - "+sale.content.title", - "+sale.price_range.lowest.real", - "+sale.price_range.highest.real", - "-commodity.price", - "-commodity.volume", - "-commodity.volumed_price", - "-commodity.created_at", - "+commodity.price", - "+commodity.volume", - "+commodity.volumed_price", - "+commodity.created_at" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false - }, - "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" - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." - }, - "IShoppingCartCommodity.ICreate": { - "type": "object", - "properties": { - "sale_id": { - "type": "string", - "format": "uuid", - "title": "Target sale's {@link IShoppingSale", - "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": { - "default": true, - "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." - } - }, - "nullable": false, - "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", - "description": "Target unit's {@link IShoppingSaleUnit.id }." - }, - "stock_id": { - "type": "string", - "format": "uuid", - "title": "Target stock's {@link IShoppingSaleUnitStock", - "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 }." - } - }, - "nullable": false, - "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", - "description": "Target option's {@link IShoppingSaleUnitOption.id }." - }, - "candidate_id": { - "type": "string", - "format": "uuid", - "nullable": true, - "title": "Target candidate's {@link IShoppingSaleUnitOptionCandidate", - "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": "string", - "nullable": true - }, - { - "type": "number", - "nullable": true - }, - { - "type": "boolean", - "nullable": true - } - ], - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "required": [ - "volume" - ], - "description": "Update information of a shopping cart commodity." - }, - "IShoppingCartDiscountable.IRequest": { - "type": "object", - "properties": { - "commodity_ids": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "nullable": true - }, - "pseudos": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" - } - } - }, - "nullable": false, - "required": [ - "commodity_ids", - "pseudos" - ] - }, - "IShoppingCartDiscountable": { - "type": "object", - "properties": { - "deposit": { - "type": "number" - }, - "mileage": { - "type": "number" - }, - "combinations": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingCartDiscountable.ICombination" - } - } - }, - "nullable": false, - "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" - } - }, - "nullable": false, - "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" - } - }, - "nullable": false, - "required": [ - "commodity_id", - "pseudo", - "coupon_id", - "amount" - ] - }, - "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." - } - }, - "nullable": false, - "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", - "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." - } - }, - "nullable": false, - "required": [ - "commodity_id", - "volume" - ], - "description": "Creation information of the good." - }, - "IShoppingOrderDiscountable.IRequest": { - "type": "object", - "properties": { - "good_ids": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "nullable": true - } - }, - "nullable": false, - "required": [ - "good_ids" - ] - }, - "IShoppingOrderDiscountable": { - "type": "object", - "properties": { - "deposit": { - "type": "number" - }, - "mileage": { - "type": "number" - }, - "combinations": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingOrderDiscountable.ICombination" - } - } - }, - "nullable": false, - "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" - } - }, - "nullable": false, - "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" - } - }, - "nullable": false, - "required": [ - "good_id", - "coupon_id", - "amount" - ] - }, - "IShoppingOrderPrice.ICreate": { - "type": "object", - "properties": { - "deposit": { - "type": "number" - }, - "mileage": { - "type": "number" - }, - "coupon_ids": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - }, - "nullable": false, - "required": [ - "deposit", - "mileage", - "coupon_ids" - ] - }, - "IShoppingOrderPublish.ICashCreate": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "cash" - ] - }, - "address": { - "$ref": "#/components/schemas/IShoppingAddress.ICreate" - }, - "vendor": { - "type": "string" - }, - "uid": { - "type": "string" - } - }, - "nullable": false, - "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": { - "type": "string", - "nullable": true, - "title": "Special description if required", - "description": "Special description if required." - } - }, - "nullable": false, - "required": [ - "mobile", - "name", - "country", - "province", - "city", - "department", - "possession", - "zip_code", - "special_note" - ] - }, - "IShoppingOrderPublish.IZeroCreate": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "zero" - ] - }, - "address": { - "$ref": "#/components/schemas/IShoppingAddress.ICreate" - } - }, - "nullable": false, - "required": [ - "type", - "address" - ] - }, - "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": { - "$ref": "#/components/schemas/IShoppingDelivery.State", - "title": "State of the order, about the deliveries", - "description": "State of the order, about the deliveries." - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of the record", - "description": "Creation time of the record." - }, - "paid_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Time when the order was paid", - "description": "Time when the order was paid." - }, - "cancelled_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "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." - } - }, - "nullable": false, - "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." - }, - "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": { - "type": "string", - "enum": [ - "html", - "md", - "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." - } - }, - "nullable": false, - "required": [ - "secret", - "format", - "title", - "body", - "files" - ], - "description": "Creation information of the question." - }, - "IBbsArticle.ICreate": { - "type": "object", - "properties": { - "format": { - "type": "string", - "enum": [ - "html", - "md", - "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." - } - }, - "nullable": false, - "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", - "description": "Target good's {@link IShoppingOrderGood.id }." - }, - "score": { - "type": "number", - "maximum": 100, - "minimum": 0, - "title": "Score of the review", - "description": "Score of the review." - }, - "format": { - "type": "string", - "enum": [ - "html", - "md", - "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." - } - }, - "nullable": false, - "required": [ - "good_id", - "score", - "format", - "title", - "body", - "files" - ], - "description": "Creation information of the review." - }, - "IShoppingSaleReview.IUpdate": { - "type": "object", - "properties": { - "score": { - "type": "number", - "maximum": 100, - "minimum": 0, - "title": "Score of the review", - "description": "Score of the review." - }, - "format": { - "type": "string", - "enum": [ - "html", - "md", - "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." - } - }, - "nullable": false, - "required": [ - "score", - "format", - "title", - "body", - "files" - ], - "description": "Updating information of the review." - }, - "IShoppingSeller.IJoin": { - "type": "object", - "properties": {}, - "nullable": false - }, - "IShoppingDelivery.IRequest": { - "type": "object", - "properties": { - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-delivery.created_at", - "+delivery.created_at" - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false - }, - "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." - } - }, - "nullable": false, - "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": { - "$ref": "#/components/schemas/IShoppingDelivery.State", - "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." - } - }, - "nullable": false, - "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": { - "$ref": "#/components/schemas/IShoppingOrderPublish.IInvertFromDelivery.Nullable", - "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." - } - }, - "nullable": false, - "required": [ - "id", - "customer", - "goods", - "price", - "publish", - "created_at" - ], - "description": "Invert information from delivery." - }, - "IShoppingOrderPublish.IInvertFromDelivery.Nullable": { - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Time when the order was paid", - "description": "Time when the order was paid." - }, - "cancelled_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "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." - } - }, - "nullable": true, - "required": [ - "id", - "created_at", - "paid_at", - "cancelled_at", - "address" - ], - "description": "Invert information from the delivery." - }, - "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." - } - }, - "nullable": false, - "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", - "description": "Target order's {@link IShoppingOrderPublish.id }." - }, - "good_id": { - "type": "string", - "format": "uuid", - "title": "Target good's {@link IShoppingOrderGood", - "description": "Target good's {@link IShoppingOrderGood.id }." - }, - "stock_id": { - "type": "string", - "format": "uuid", - "title": "Target stock's {@link IShoppingSaleUnitStock", - "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." - } - }, - "nullable": false, - "required": [ - "publish_id", - "good_id", - "stock_id", - "quantity" - ], - "description": "Creation information of the delivery piece." - }, - "IShoppingDeliveryJourney.ICreate": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "preparing", - "manufacturing", - "shipping", - "delivering" - ], - "title": "Type of journey", - "description": "Type of journey.\n\n- preparing\n- manufacturing\n- shipping\n- delivering" - }, - "title": { - "type": "string", - "nullable": true, - "title": "Title of journey", - "description": "Title of journey." - }, - "description": { - "type": "string", - "nullable": true, - "title": "Description of journey", - "description": "Description of journey." - }, - "started_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Start time of the journey", - "description": "Start time of the journey." - }, - "completed_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Completion time of the journey", - "description": "Completion time of the journey." - } - }, - "nullable": false, - "required": [ - "type", - "title", - "description", - "started_at", - "completed_at" - ], - "description": "Creation information of the delivery journey." - }, - "IShoppingDeliveryShipper.ICreate": { - "type": "object", - "properties": { - "company": { - "type": "string", - "nullable": true - }, - "name": { - "type": "string" - }, - "mobile": { - "type": "string" - } - }, - "nullable": false, - "required": [ - "company", - "name", - "mobile" - ] - }, - "IShoppingDeliveryPiece.IRequest": { - "type": "object", - "properties": { - "publish_ids": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - }, - "nullable": false, - "required": [ - "publish_ids" - ] - }, - "IShoppingDeliveryJourney.IComplete": { - "type": "object", - "properties": { - "completed_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Completion time of the journey", - "description": "Completion time of the journey." - } - }, - "nullable": false, - "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", - "description": "Belonged section's {@link IShoppingSection.code }." - }, - "status": { - "type": "string", - "enum": [ - "paused", - "suspended" - ], - "nullable": true, - "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": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Opening time of the sale", - "description": "Opening time of the sale." - }, - "closed_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "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" - } - } - }, - "nullable": false, - "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": { - "type": "string", - "enum": [ - "html", - "md", - "txt" - ] - }, - "body": { - "type": "string" - }, - "files": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IAttachmentFile.ICreate" - } - }, - "thumbnails": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IAttachmentFile.ICreate" - } - } - }, - "nullable": false, - "required": [ - "title", - "format", - "body", - "files", - "thumbnails" - ] - }, - "IShoppingSaleChannel.ICreate": { - "type": "object", - "properties": { - "code": { - "type": "string", - "title": "Target channel's {@link IShoppingChannel", - "description": "Target channel's {@link IShoppingChannel.code }." - }, - "category_ids": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "title": "List of target categories' {@link IShoppingChannelCategory", - "description": "List of target categories' {@link IShoppingChannelCategory.id }s.\n\nIf empty, it means all categories of the channel is listing the sale." - } - }, - "nullable": false, - "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/IShoppingSaleUnitDescriptiveOption.ICreate" - }, - { - "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.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." - } - }, - "nullable": false, - "required": [ - "options", - "stocks", - "name", - "primary", - "required" - ], - "description": "Creation information of sale unit." - }, - "IShoppingSaleUnitDescriptiveOption.ICreate": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "string", - "number", - "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." - } - }, - "nullable": false, - "required": [ - "type", - "name" - ], - "description": "Creation information of the descriptive option." - }, - "IShoppingSaleUnitSelectableOption.ICreate": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "required": [ - "name" - ], - "description": "Creation information of the candidate value." - }, - "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." - } - }, - "nullable": false, - "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 }." - } - }, - "nullable": false, - "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" - } - } - }, - "nullable": false, - "required": [ - "content", - "channels", - "units", - "tags" - ], - "description": "Creation information of the snapshot." - }, - "IShoppingSale.IUpdateOpeningTime": { - "type": "object", - "properties": { - "opened_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Opening time of the sale", - "description": "Opening time of the sale." - }, - "closed_at": { - "type": "string", - "format": "date-time", - "nullable": true, - "title": "Closing time of the sale", - "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." - } - }, - "nullable": false, - "required": [ - "opened_at", - "closed_at" - ], - "description": "Update opening time information of sale." - }, - "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." - } - }, - "nullable": false, - "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." - }, - "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": { - "$ref": "#/components/schemas/IBbsArticle.Format", - "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." - } - }, - "nullable": false, - "required": [ - "id", - "created_at", - "format", - "title", - "body", - "files" - ] - }, - "IShoppingSaleUnitStockSupplement.IRequest": { - "type": "object", - "properties": { - "sort": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "-created_at", - "+created_at" - ] - }, - "title": "Sortable columns", - "description": "Sortable columns." - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "default": 100, - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "nullable": false, - "description": "Request information of the stock supplement list." - }, - "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." - } - }, - "nullable": false, - "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." - } - }, - "nullable": false, - "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.ICreate": { - "type": "object", - "properties": { - "value": { - "type": "integer", - "title": "Supplemented quantity", - "description": "Supplemented quantity." - } - }, - "nullable": false, - "required": [ - "value" - ], - "description": "Creation information of the supplement." - } - }, - "securitySchemes": { - "bearer": { - "type": "apiKey", - "name": "Authorization", - "in": "header" - } - } - } -} \ No newline at end of file diff --git a/packages/migrate/assets/input/v3.1/shopping31.json b/packages/migrate/assets/input/v3.1/shopping31.json index c814d219f..ac45be063 100644 --- a/packages/migrate/assets/input/v3.1/shopping31.json +++ b/packages/migrate/assets/input/v3.1/shopping31.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "0.4.0", + "version": "0.11.0", "title": "@samchon/shopping-backend", "description": "Backend for shopping", "license": { @@ -17,21 +17,32 @@ "paths": { "/monitors/health": { "get": { + "summary": "Health check API", + "description": "Health check API.", "tags": [ "Monitor" ], "parameters": [], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Health check API", - "description": "Health check API." + "x-samchon-accessor": [ + "monitors", + "health", + "get" + ], + "x-samchon-controller": "MonitorHealthController" } }, "/monitors/performance": { "get": { + "summary": "Get performance information", + "description": "Get performance information.\n\nGet perofmration information composed with CPU, memory and resource usage.", "tags": [ "Monitor" ], @@ -48,12 +59,18 @@ } } }, - "summary": "Get performance information", - "description": "Get performance information.\n\nGet perofmration information composed with CPU, memory and resource usage." + "x-samchon-accessor": [ + "monitors", + "performance", + "get" + ], + "x-samchon-controller": "MonitorPerformanceController" } }, "/monitors/system": { "get": { + "summary": "Get system information", + "description": "Get system information.\n\nGet system information with commit and package information.\n\nAs such information is a type of sensitive, response be encrypted.", "tags": [ "Monitor" ], @@ -70,12 +87,18 @@ } } }, - "summary": "Get system information", - "description": "Get system information.\n\nGet system information with commit and package information.\n\nAs such information is a type of sensitive, response be encrypted." + "x-samchon-accessor": [ + "monitors", + "system", + "get" + ], + "x-samchon-controller": "MonitorSystemController" } }, "/shoppings/admins/authenticate": { "get": { + "summary": "Get administrator information", + "description": "Get administrator information.\n\nGet {@link IShoppingAdministrator.IInvert administrator} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an administrator,\nit throws 403 forbidden exception.", "tags": [ "Authenticate" ], @@ -92,10 +115,22 @@ } } }, - "summary": "Get administrator information", - "description": "Get administrator information.\n\nGet {@link IShoppingAdministrator.IInvert administrator} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an administrator,\nit throws 403 forbidden exception." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "authenticate", + "get" + ], + "x-samchon-controller": "ShoppingAdminAuthenticateController" }, "post": { + "summary": "Join as an administrator", + "description": "Join as an administrator.\n\nJoin as an administrator with {@link IShoppingAdministrator.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown.", "tags": [ "Authenticate" ], @@ -123,12 +158,24 @@ } } }, - "summary": "Join as an administrator", - "description": "Join as an administrator.\n\nJoin as an administrator with {@link IShoppingAdministrator.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "authenticate", + "join" + ], + "x-samchon-controller": "ShoppingAdminAuthenticateController" } }, "/shoppings/admins/authenticate/login": { "put": { + "summary": "Login as an administrator", + "description": "Login as an administrator.\n\nLogin as an administrator with {@link IShoppingAdministrator.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login} function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer} type that starting from the customer information, so\nthat you have to access to the administrator info through\n`customer.member.administrator`. In contrast with that, this method returns\n{@link IShoppingAdministrator.IInvert} type that starting from the administrator\ninfo, so that can access to the customer info through `administrator.customer`.\n\nOf course, to use this function, you had to {@link join} as an administrator\nbefore. If not, 403 forbidden exception would be thrown,", "tags": [ "Authenticate" ], @@ -156,12 +203,24 @@ } } }, - "summary": "Login as an administrator", - "description": "Login as an administrator.\n\nLogin as an administrator with {@link IShoppingAdministrator.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login } function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer } type that starting from the customer information, so\nthat you have to access to the administrator info through\n`customer.member.administrator`. In contrast with that, this method returns\n{@link IShoppingAdministrator.IInvert } type that starting from the administrator\ninfo, so that can access to the customer info through `administrator.customer`.\n\nOf course, to use this function, you had to {@link join } as an administrator\nbefore. If not, 403 forbidden exception would be thrown," + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "authenticate", + "login" + ], + "x-samchon-controller": "ShoppingAdminAuthenticateController" } }, "/shoppings/admins/coupons": { "post": { + "summary": "Create a new coupon", + "description": "Create a new coupon.\n\nCreate a new {@link IShoppingCoupon coupon} with given information.\n\nBy the way, if you are a {@link IShoppingSeller seller}, you have to\nadd include direction's {@link IShoppingCouponSellerCriteria} or\n{@link IShoppingCouponSaleCriteria} condition. This is because only\n{@link IShoppingAdministrator administrators} can create a coupon\nwhich can be used throughout the market. Seller must limit the usage\nrange by his/her {@link IShoppingSale sale(s)}.\n\nOf course, when adminstrator is planning to make a general coupon\nthat can be used throughout the market, the administrator must\nget agree from the sellers who are going to be affected.", "tags": [ "Discount" ], @@ -189,10 +248,22 @@ } } }, - "summary": "Create a new coupon", - "description": "Create a new coupon.\n\nCreate a new {@link IShoppingCoupon coupon} with given information.\n\nBy the way, if you are a {@link IShoppingSeller seller}, you have to\nadd include direction's {@link IShoppingCouponSellerCriteria } or\n{@link IShoppingCouponSaleCriteria } condition. This is because only\n{@link IShoppingAdministrator administrators} can create a coupon\nwhich can be used throughout the market. Seller must limit the usage\nrange by his/her {@link IShoppingSale sale(s)}.\n\nOf course, when adminstrator is planning to make a general coupon\nthat can be used throughout the market, the administrator must\nget agree from the sellers who are going to be affected." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "coupons", + "create" + ], + "x-samchon-controller": "ShoppingAdminCouponController" }, "patch": { + "summary": "List up every coupons", + "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up.", "tags": [ "Discount" ], @@ -220,12 +291,24 @@ } } }, - "summary": "List up every coupons", - "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "coupons", + "index" + ], + "x-samchon-controller": "ShoppingAdminCouponController" } }, "/shoppings/admins/coupons/{id}": { "delete": { + "summary": "Erase a coupon", + "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time.", "tags": [ "Discount" ], @@ -236,19 +319,34 @@ "schema": { "type": "string" }, - "description": "Target coupon's ", - "required": true + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase a coupon", - "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "coupons", + "erase" + ], + "x-samchon-controller": "ShoppingAdminCouponController" }, "get": { + "summary": "Get a coupon info", + "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible.", "tags": [ "Discount" ], @@ -259,8 +357,8 @@ "schema": { "type": "string" }, - "description": "Target coupon's ", - "required": true + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" } ], "responses": { @@ -275,12 +373,24 @@ } } }, - "summary": "Get a coupon info", - "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "coupons", + "at" + ], + "x-samchon-controller": "ShoppingAdminCouponController" } }, "/shoppings/admins/deposits": { "patch": { + "summary": "Get deposit metadata list", + "description": "Get deposit metadata list.\n\nList up every {@link IShoppingDeposit deposit} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDeposit.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingDeposit.IRequest.sort sort condition}.", "tags": [ "Discount" ], @@ -308,10 +418,22 @@ } } }, - "summary": "Get deposit metadata list", - "description": "Get deposit metadata list.\n\nList up every {@link IShoppingDeposit deposit} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDeposit.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingDeposit.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "deposits", + "index" + ], + "x-samchon-controller": "ShoppingAdminDepositController" }, "post": { + "summary": "Create a new deposit metadata", + "description": "Create a new deposit metadata.\n\nCreate a new {@link IShoppingDeposit deposit} metadata.\n\nThis action means that adding a new origin reason of deposit's income/outcome.\nOf course, creating a new deposit record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side.", "tags": [ "Discount" ], @@ -339,12 +461,24 @@ } } }, - "summary": "Create a new deposit metadata", - "description": "Create a new deposit metadata.\n\nCreate a new {@link IShoppingDeposit deposit} metadata.\n\nThis action means that adding a new origin reason of deposit's income/outcome.\nOf course, creating a new deposit record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "deposits", + "create" + ], + "x-samchon-controller": "ShoppingAdminDepositController" } }, "/shoppings/admins/deposits/{id}": { "get": { + "summary": "Get a deposit metadata", + "description": "Get a deposit metadata.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its ID.", "tags": [ "Discount" ], @@ -356,8 +490,8 @@ "type": "string", "format": "uuid" }, - "description": "Target deposit's ", - "required": true + "required": true, + "description": " Target deposit's {@link IShoppingDeposit.id }" } ], "responses": { @@ -372,10 +506,22 @@ } } }, - "summary": "Get a deposit metadata", - "description": "Get a deposit metadata.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its ID." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "deposits", + "at" + ], + "x-samchon-controller": "ShoppingAdminDepositController" }, "delete": { + "summary": "Erase a deposit metadata", + "description": "Erase a deposit metadata.\n\nErase a {@link IShoppingDeposit deposit} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the deposit's reason why.", "tags": [ "Discount" ], @@ -387,21 +533,36 @@ "type": "string", "format": "uuid" }, - "description": "Target deposit's ", - "required": true + "required": true, + "description": " Target deposit's {@link IShoppingDeposit.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase a deposit metadata", - "description": "Erase a deposit metadata.\n\nErase a {@link IShoppingDeposit deposit} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the deposit's reason why." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "deposits", + "erase" + ], + "x-samchon-controller": "ShoppingAdminDepositController" } }, "/shoppings/admins/deposits/{code}/get": { "get": { + "summary": "Get a deposit metadata by its code", + "description": "Get a deposit metadata by its code.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its code.", "tags": [ "Discount" ], @@ -412,7 +573,6 @@ "schema": { "type": "string" }, - "description": "", "required": true } ], @@ -428,12 +588,24 @@ } } }, - "summary": "Get a deposit metadata by its code", - "description": "Get a deposit metadata by its code.\n\nGet a {@link IShoppingDeposit deposit} metadata information with its code." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "deposits", + "get" + ], + "x-samchon-controller": "ShoppingAdminDepositController" } }, "/shoppings/admins/mileages": { "patch": { + "summary": "Get mileage metadata list", + "description": "Get mileage metadata list.\n\nList up every {@link IShoppingMileage mileage} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileage.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingMileage.IRequest.sort sort condition}.", "tags": [ "Discount" ], @@ -461,10 +633,22 @@ } } }, - "summary": "Get mileage metadata list", - "description": "Get mileage metadata list.\n\nList up every {@link IShoppingMileage mileage} metadata informations\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileage.IRequest.search search condition} in the request body.\nAlso, it is possible to customize sequence order of records by configuring\n{@link IShoppingMileage.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "index" + ], + "x-samchon-controller": "ShoppingAdminMileageController" }, "post": { + "summary": "Create a new mileage metadata", + "description": "Create a new mileage metadata.\n\nCreate a new {@link IShoppingMileage mileage} metadata.\n\nThis action means that adding a new origin reason of mileage's income/outcome.\nOf course, creating a new mileage record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side.", "tags": [ "Discount" ], @@ -492,12 +676,24 @@ } } }, - "summary": "Create a new mileage metadata", - "description": "Create a new mileage metadata.\n\nCreate a new {@link IShoppingMileage mileage} metadata.\n\nThis action means that adding a new origin reason of mileage's income/outcome.\nOf course, creating a new mileage record does not mean that automatically\nincrease or decrease the {@link IShoppingCustomer customer}'s balance\nfollowing the record's reason why. The logic must be developed manually\nin the backend side." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "create" + ], + "x-samchon-controller": "ShoppingAdminMileageController" } }, "/shoppings/admins/mileages/{id}": { "get": { + "summary": "Get a mileage metadata", + "description": "Get a mileage metadata.\n\nGet a {@link IShoppingMileage mileage} metadata information with its ID.", "tags": [ "Discount" ], @@ -509,8 +705,8 @@ "type": "string", "format": "uuid" }, - "description": "Target mileage's ", - "required": true + "required": true, + "description": " Target mileage's {@link IShoppingMileage.id }" } ], "responses": { @@ -525,10 +721,22 @@ } } }, - "summary": "Get a mileage metadata", - "description": "Get a mileage metadata.\n\nGet a {@link IShoppingMileage mileage} metadata information with its ID." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "at" + ], + "x-samchon-controller": "ShoppingAdminMileageController" }, "delete": { + "summary": "Erase a mileage metadata", + "description": "Erase a mileage metadata.\n\nErase a {@link IShoppingMileage mileage} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the mileage's reason why.", "tags": [ "Discount" ], @@ -540,21 +748,36 @@ "type": "string", "format": "uuid" }, - "description": "Target mileage's ", - "required": true + "required": true, + "description": " Target mileage's {@link IShoppingMileage.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase a mileage metadata", - "description": "Erase a mileage metadata.\n\nErase a {@link IShoppingMileage mileage} metadata, so that no more\n{@link IShoppingCustomer customer}'s balance does not be increased or\ndecreased by the mileage's reason why." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "erase" + ], + "x-samchon-controller": "ShoppingAdminMileageController" } }, "/shoppings/admins/mileages/{code}/get": { "get": { + "summary": "Get a mileage metadata by its code", + "description": "Get a mileage metadata by its code.\n\nGet a {@link IShoppingMileage mileage} metadata information with its code.", "tags": [ "Discount" ], @@ -565,7 +788,6 @@ "schema": { "type": "string" }, - "description": "", "required": true } ], @@ -581,12 +803,24 @@ } } }, - "summary": "Get a mileage metadata by its code", - "description": "Get a mileage metadata by its code.\n\nGet a {@link IShoppingMileage mileage} metadata information with its code." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "get" + ], + "x-samchon-controller": "ShoppingAdminMileageController" } }, "/shoppings/admins/mileages/donations": { "patch": { + "summary": "List up every mileage donation histories", + "description": "List up every mileage donation histories.\n\nList up every {@link IShoppingMileageDonation mileage donation histories}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageDonation.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingMileageDonation.IRequest.sort sort}.", "tags": [ "Discount" ], @@ -614,10 +848,23 @@ } } }, - "summary": "List up every mileage donation histories", - "description": "List up every mileage donation histories.\n\nList up every {@link IShoppingMileageDonation mileage donation histories}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageDonation.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingMileageDonation.IRequest.sort sort}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "donations", + "index" + ], + "x-samchon-controller": "ShoppingAdminMileageDonationController" }, "post": { + "summary": "Donate a mileage to a citizen", + "description": "Donate a mileage to a citizen.\n\nDonate a mileage to a specific {@link IShoppingCitizen citizen} from\ncurrent {@link IShoppingAdministrator administrator}, with detailed\nreason why.\n\nNote that, as donating mileage affects to the citizen's balance and\ncurrent shopping mall's operating profit, administrator must archive\nthe detailed reason why the mileage is donated.", "tags": [ "Discount" ], @@ -645,12 +892,25 @@ } } }, - "summary": "Donate a mileage to a citizen", - "description": "Donate a mileage to a citizen.\n\nDonate a mileage to a specific {@link IShoppingCitizen citizen} from\ncurrent {@link IShoppingAdministrator administrator}, with detailed\nreason why.\n\nNote that, as donating mileage affects to the citizen's balance and\ncurrent shopping mall's operating profit, administrator must archive\nthe detailed reason why the mileage is donated." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "donations", + "create" + ], + "x-samchon-controller": "ShoppingAdminMileageDonationController" } }, "/shoppings/admins/mileages/donations/{id}": { "get": { + "summary": "Get a mileage donation history", + "description": "Get a mileage donation history.\n\nGet a {@link IShoppingMileageDonation mileage donation history} with its ID.", "tags": [ "Discount" ], @@ -662,8 +922,8 @@ "type": "string", "format": "uuid" }, - "description": "Target history's ", - "required": true + "required": true, + "description": " Target history's {@link IShoppingMileageDonation.id }" } ], "responses": { @@ -678,12 +938,25 @@ } } }, - "summary": "Get a mileage donation history", - "description": "Get a mileage donation history.\n\nGet a {@link IShoppingMileageDonation mileage donation history} with its ID." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "mileages", + "donations", + "at" + ], + "x-samchon-controller": "ShoppingAdminMileageDonationController" } }, "/shoppings/admins/orders": { "patch": { + "summary": "List up every orders", + "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order.", "tags": [ "Order" ], @@ -711,12 +984,24 @@ } } }, - "summary": "List up every orders", - "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "orders", + "index" + ], + "x-samchon-controller": "ShoppingAdminOrderController" } }, "/shoppings/admins/orders/{id}": { "get": { + "summary": "Get an order info", + "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown.", "tags": [ "Order" ], @@ -728,8 +1013,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { @@ -744,12 +1029,24 @@ } } }, - "summary": "Get an order info", - "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "orders", + "at" + ], + "x-samchon-controller": "ShoppingAdminOrderController" } }, "/shoppings/admins/sales": { "patch": { + "summary": "List up every summarized sales", + "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at} function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -777,12 +1074,24 @@ } } }, - "summary": "List up every summarized sales", - "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at } function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "index" + ], + "x-samchon-controller": "ShoppingAdminSaleController" } }, "/shoppings/admins/sales/{id}": { "get": { + "summary": "Get a sale info", + "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales.", "tags": [ "Sale" ], @@ -794,8 +1103,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { @@ -810,12 +1119,24 @@ } } }, - "summary": "Get a sale info", - "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "at" + ], + "x-samchon-controller": "ShoppingAdminSaleController" } }, "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments": { "patch": { + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales.", "tags": [ "Sale" ], @@ -827,8 +1148,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -837,8 +1158,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -864,10 +1185,24 @@ } } }, - "summary": "List up every inquiry comments", - "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "comments", + "index" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionCommentController" }, "post": { + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales.", "tags": [ "Sale" ], @@ -879,8 +1214,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -889,8 +1224,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry's ", - "required": true + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -916,12 +1251,26 @@ } } }, - "summary": "Create an inquiry comment", - "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "comments", + "create" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionCommentController" } }, "/shoppings/admins/sales/{saleId}/questions/{inquiryId}/comments/{id}": { "get": { + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales.", "tags": [ "Sale" ], @@ -933,8 +1282,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -943,8 +1292,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -953,8 +1302,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "responses": { @@ -969,10 +1318,24 @@ } } }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "comments", + "at" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionCommentController" }, "put": { + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -984,8 +1347,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -994,8 +1357,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -1004,8 +1367,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "requestBody": { @@ -1031,12 +1394,26 @@ } } }, - "summary": "Update an inquiry comment", - "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "comments", + "update" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionCommentController" } }, "/shoppings/admins/sales/{saleId}/questions": { "patch": { + "summary": "List up every summarized questions", + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges} function\nor {@link at} function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret} with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -1048,8 +1425,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -1075,12 +1452,25 @@ } } }, - "summary": "List up every summarized questions", - "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "index" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionController" } }, "/shoppings/admins/sales/{saleId}/questions/abridges": { "patch": { + "summary": "List up every abridged questions", + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at} function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret} with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -1092,8 +1482,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -1119,12 +1509,25 @@ } } }, - "summary": "List up every abridged questions", - "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "abridges" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionController" } }, "/shoppings/admins/sales/{saleId}/questions/{id}": { "get": { + "summary": "Get a question info", + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret}\nvalue is `false`.", "tags": [ "Sale" ], @@ -1136,8 +1539,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -1146,8 +1549,8 @@ "type": "string", "format": "uuid" }, - "description": "Target question's ", - "required": true + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" } ], "responses": { @@ -1162,12 +1565,25 @@ } } }, - "summary": "Get a question info", - "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "questions", + "at" + ], + "x-samchon-controller": "ShoppingAdminSaleQuestionController" } }, "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments": { "patch": { + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales.", "tags": [ "Sale" ], @@ -1179,8 +1595,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -1189,8 +1605,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -1216,10 +1632,24 @@ } } }, - "summary": "List up every inquiry comments", - "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "comments", + "index" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewCommentController" }, "post": { + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales.", "tags": [ "Sale" ], @@ -1231,8 +1661,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -1241,8 +1671,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry's ", - "required": true + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -1268,12 +1698,26 @@ } } }, - "summary": "Create an inquiry comment", - "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "comments", + "create" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewCommentController" } }, "/shoppings/admins/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { "get": { + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales.", "tags": [ "Sale" ], @@ -1285,8 +1729,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -1295,8 +1739,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -1305,8 +1749,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "responses": { @@ -1321,10 +1765,24 @@ } } }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "comments", + "at" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewCommentController" }, "put": { + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -1336,8 +1794,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -1346,8 +1804,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -1356,8 +1814,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "requestBody": { @@ -1383,12 +1841,26 @@ } } }, - "summary": "Update an inquiry comment", - "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "comments", + "update" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewCommentController" } }, "/shoppings/admins/sales/{saleId}/reviews": { "patch": { + "summary": "List up every summarized reviews", + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges} function\nor {@link at} function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -1400,8 +1872,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -1427,12 +1899,25 @@ } } }, - "summary": "List up every summarized reviews", - "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "index" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewController" } }, "/shoppings/admins/sales/{saleId}/reviews/abridges": { "patch": { + "summary": "List up every abridged reviews", + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at} function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -1444,8 +1929,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -1471,12 +1956,25 @@ } } }, - "summary": "List up every abridged reviews", - "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "abridges" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewController" } }, "/shoppings/admins/sales/{saleId}/reviews/{id}": { "get": { + "summary": "Get a review info", + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales.", "tags": [ "Sale" ], @@ -1488,8 +1986,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -1498,8 +1996,8 @@ "type": "string", "format": "uuid" }, - "description": "Target review's ", - "required": true + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" } ], "responses": { @@ -1514,12 +2012,25 @@ } } }, - "summary": "Get a review info", - "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "reviews", + "at" + ], + "x-samchon-controller": "ShoppingAdminSaleReviewController" } }, "/shoppings/admins/sales/{saleId}/snapshots": { "patch": { + "summary": "List up every snapshots", + "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at} or {@link flipo} function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended.", "tags": [ "Sale" ], @@ -1531,8 +2042,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -1558,12 +2069,25 @@ } } }, - "summary": "List up every snapshots", - "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at } or {@link flipo } function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "snapshots", + "index" + ], + "x-samchon-controller": "ShoppingAdminSaleSnapshotController" } }, "/shoppings/admins/sales/{saleId}/snapshots/{id}": { "get": { + "summary": "Get a snapshot info", + "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip} function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended.", "tags": [ "Sale" ], @@ -1575,8 +2099,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -1585,8 +2109,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -1601,12 +2125,25 @@ } } }, - "summary": "Get a snapshot info", - "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip } function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "snapshots", + "at" + ], + "x-samchon-controller": "ShoppingAdminSaleSnapshotController" } }, "/shoppings/admins/sales/{saleId}/snapshots/{id}/flip": { "get": { + "summary": "Get a flipped snapshot info", + "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended.", "tags": [ "Sale" ], @@ -1618,8 +2155,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -1628,8 +2165,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -1644,12 +2181,25 @@ } } }, - "summary": "Get a flipped snapshot info", - "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "sales", + "snapshots", + "flip" + ], + "x-samchon-controller": "ShoppingAdminSaleSnapshotController" } }, "/shoppings/admins/systematic/channels/{channelCode}/categories": { "post": { + "summary": "Create a new category", + "description": "Create a new category.\n\nCreate a new {@link IShoppingChannelCategory category} of a\n{@link IShoppingChannel channel} with given name. If required, it is\npossible to specify the parent category by its ID.", "tags": [ "Systematic" ], @@ -1660,8 +2210,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" } ], "requestBody": { @@ -1687,10 +2237,24 @@ } } }, - "summary": "Create a new category", - "description": "Create a new category.\n\nCreate a new {@link IShoppingChannelCategory category} of a\n{@link IShoppingChannel channel} with given name. If required, it is\npossible to specify the parent category by its ID." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "categories", + "create" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelCategoryController" }, "patch": { + "summary": "List up every categories with children records", + "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -1701,8 +2265,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" } ], "responses": { @@ -1720,12 +2284,26 @@ } } }, - "summary": "List up every categories with children records", - "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "categories", + "index" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelCategoryController" } }, "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}": { "put": { + "summary": "Update a category", + "description": "Update a category.\n\nUpdate a {@link IShoppingChannelCategory category}'s name. If required,\nit is possible to change the parent category by its ID. Of course, detaching\nfrom the parent category so that becoming the root category is also possible.", "tags": [ "Systematic" ], @@ -1736,8 +2314,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -1745,8 +2323,8 @@ "schema": { "type": "string" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "requestBody": { @@ -1762,13 +2340,30 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Update a category", - "description": "Update a category.\n\nUpdate a {@link IShoppingChannelCategory category}'s name. If required,\nit is possible to change the parent category by its ID. Of course, detaching\nfrom the parent category so that becoming the root category is also possible." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "categories", + "update" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelCategoryController" }, "get": { + "summary": "Get a category info", + "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too.", "tags": [ "Systematic" ], @@ -1779,8 +2374,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -1789,8 +2384,8 @@ "type": "string", "format": "uuid" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "responses": { @@ -1805,12 +2400,26 @@ } } }, - "summary": "Get a category info", - "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "categories", + "at" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelCategoryController" } }, "/shoppings/admins/systematic/channels/{channelCode}/categories/merge": { "delete": { + "summary": "Merge multiple categories into one", + "description": "Merge multiple categories into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannelCategory category}, because it is a systematic\nentity affecting to all other core entities like\n{@link IShoppingSale sales}. Instead of deleting, you can merge multiple\ncategories into one.\n\nIf you specify a category to absorb others, then all of other categories\nwill be merged into the specified one. Also, subsidiary entities of\ncategories also be merged and their references also be merged cascadingly.", "tags": [ "Systematic" ], @@ -1821,8 +2430,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" } ], "requestBody": { @@ -1838,15 +2447,32 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Merge multiple categories into one", - "description": "Merge multiple categories into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannelCategory category}, because it is a systematic\nentity affecting to all other core entities like\n{@link IShoppingSale sales}. Instead of deleting, you can merge multiple\ncategories into one.\n\nIf you specify a category to absorb others, then all of other categories\nwill be merged into the specified one. Also, subsidiary entities of\ncategories also be merged and their references also be merged cascadingly." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "categories", + "merge" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelCategoryController" } }, "/shoppings/admins/systematic/channels/{channelCode}/categories/{id}/invert": { "get": { + "summary": "Get a category info of inverted", + "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories.", "tags": [ "Systematic" ], @@ -1857,8 +2483,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -1867,8 +2493,8 @@ "type": "string", "format": "uuid" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "responses": { @@ -1883,12 +2509,26 @@ } } }, - "summary": "Get a category info of inverted", - "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "categories", + "invert" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelCategoryController" } }, "/shoppings/admins/systematic/channels": { "post": { + "summary": "Create a new channel", + "description": "Create a new channel.\n\nCreate a new {@link IShoppingChannel channel} with given code and name.\n\nAs channel means an individual market,\n{@link IShoppingAdministrator administrator} should perform this action\nonly when a new application being registered.", "tags": [ "Systematic" ], @@ -1916,10 +2556,23 @@ } } }, - "summary": "Create a new channel", - "description": "Create a new channel.\n\nCreate a new {@link IShoppingChannel channel} with given code and name.\n\nAs channel means an individual market,\n{@link IShoppingAdministrator administrator} should perform this action\nonly when a new application being registered." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "create" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" }, "patch": { + "summary": "List up every channels", + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -1947,12 +2600,25 @@ } } }, - "summary": "List up every channels", - "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "index" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" } }, "/shoppings/admins/systematic/channels/{id}": { "put": { + "summary": "Update a channel", + "description": "Update a channel.\n\nUpdate a {@link IShoppingChannel channel}'s name.\n\nNote that, it is not possible to change the channel's code. If you want to\nto do it forcibly, then {@link create} new one and {@link merge} with it.", "tags": [ "Systematic" ], @@ -1964,8 +2630,8 @@ "type": "string", "format": "uuid" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.code }" } ], "requestBody": { @@ -1981,13 +2647,29 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Update a channel", - "description": "Update a channel.\n\nUpdate a {@link IShoppingChannel channel}'s name.\n\nNote that, it is not possible to change the channel's code. If you want to\nto do it forcibly, then {@link create } new one and {@link merge } with it." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "update" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" }, "get": { + "summary": "Get a channel info", + "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations.", "tags": [ "Systematic" ], @@ -1999,8 +2681,8 @@ "type": "string", "format": "uuid" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.id }" } ], "responses": { @@ -2015,12 +2697,25 @@ } } }, - "summary": "Get a channel info", - "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "at" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" } }, "/shoppings/admins/systematic/channels/merge": { "delete": { + "summary": "Merge multiple channels into one", + "description": "Merge multiple channels into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannel channel}, because it is a systematic entity\naffecting to all other core entities like customers, members and\nsales. Instead of deleting, you can merge multiple channels into one.\n\nIf you specify a channel to absorb others, then all of other channels\nwill be merged into the specified one. Also, subsidiary entities of\nchannels also be merged and their references also be merged cascadingly.", "tags": [ "Systematic" ], @@ -2038,15 +2733,31 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Merge multiple channels into one", - "description": "Merge multiple channels into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingChannel channel}, because it is a systematic entity\naffecting to all other core entities like customers, members and\nsales. Instead of deleting, you can merge multiple channels into one.\n\nIf you specify a channel to absorb others, then all of other channels\nwill be merged into the specified one. Also, subsidiary entities of\nchannels also be merged and their references also be merged cascadingly." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "merge" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" } }, "/shoppings/admins/systematic/channels/hierarchical": { "patch": { + "summary": "List up every channels with nested categories", + "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -2074,12 +2785,25 @@ } } }, - "summary": "List up every channels with nested categories", - "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "hierarchical" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" } }, "/shoppings/admins/systematic/channels/{code}/get": { "get": { + "summary": "Get a channel info by its code", + "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations.", "tags": [ "Systematic" ], @@ -2090,8 +2814,8 @@ "schema": { "type": "string" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.code }" } ], "responses": { @@ -2106,12 +2830,25 @@ } } }, - "summary": "Get a channel info by its code", - "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "channels", + "get" + ], + "x-samchon-controller": "ShoppingAdminSystematicChannelController" } }, "/shoppings/admins/systematic/sections": { "post": { + "summary": "Create a new section", + "description": "Create a new section.\n\nCreate a new {@link IShoppingSection section} with given code and name.\n\nAs section means a spatial unit of a market that handling different type\nof products with other section, {@link IShoppingAdministrator administrator}\nshould perform this action only when a new section being required.", "tags": [ "Systematic" ], @@ -2139,10 +2876,23 @@ } } }, - "summary": "Create a new section", - "description": "Create a new section.\n\nCreate a new {@link IShoppingSection section} with given code and name.\n\nAs section means a spatial unit of a market that handling different type\nof products with other section, {@link IShoppingAdministrator administrator}\nshould perform this action only when a new section being required." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "sections", + "create" + ], + "x-samchon-controller": "ShoppingAdminSystematicSectionController" }, "patch": { + "summary": "List up every sections", + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}.", "tags": [ "Section" ], @@ -2170,12 +2920,25 @@ } } }, - "summary": "List up every sections", - "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "sections", + "index" + ], + "x-samchon-controller": "ShoppingAdminSystematicSectionController" } }, "/shoppings/admins/systematic/sections/{id}": { "put": { + "summary": "Update a section", + "description": "Update a section.\n\nUpdate a {@link IShoppingSection section}'s name.\n\nNote that, it is not possible to change the section's code. If you want to\nto do it forcibly, then {@link create} new one and {@link merge} with it.", "tags": [ "Systematic" ], @@ -2187,8 +2950,8 @@ "type": "string", "format": "uuid" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.code }" } ], "requestBody": { @@ -2204,13 +2967,29 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Update a section", - "description": "Update a section.\n\nUpdate a {@link IShoppingSection section}'s name.\n\nNote that, it is not possible to change the section's code. If you want to\nto do it forcibly, then {@link create } new one and {@link merge } with it." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "sections", + "update" + ], + "x-samchon-controller": "ShoppingAdminSystematicSectionController" }, "get": { + "summary": "Get a section info", + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information.", "tags": [ "Section" ], @@ -2222,8 +3001,8 @@ "type": "string", "format": "uuid" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.id }" } ], "responses": { @@ -2238,12 +3017,25 @@ } } }, - "summary": "Get a section info", - "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "sections", + "at" + ], + "x-samchon-controller": "ShoppingAdminSystematicSectionController" } }, "/shoppings/admins/systematic/sections/merge": { "delete": { + "summary": "Merge multiple sections into one", + "description": "Merge multiple sections into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingSection section}, because it is a systematic entity\naffecting to all other core entities like {@link IShoppingSale sales}.\nInstead of deleting, you can merge multiple sections into one.\n\nIf you specify a section to absorb others, then all of other sections\nwill be merged into the specified one. Also, subsidiary entities of\nsections also be merged and their references also be merged cascadingly.", "tags": [ "Systematic" ], @@ -2261,15 +3053,31 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Merge multiple sections into one", - "description": "Merge multiple sections into one.\n\nIn this shopping mall system, it is not possible to delete a\n{@link IShoppingSection section}, because it is a systematic entity\naffecting to all other core entities like {@link IShoppingSale sales}.\nInstead of deleting, you can merge multiple sections into one.\n\nIf you specify a section to absorb others, then all of other sections\nwill be merged into the specified one. Also, subsidiary entities of\nsections also be merged and their references also be merged cascadingly." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "sections", + "merge" + ], + "x-samchon-controller": "ShoppingAdminSystematicSectionController" } }, "/shoppings/admins/systematic/sections/{code}/get": { "get": { + "summary": "Get a section info by its code", + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code.", "tags": [ "Section" ], @@ -2280,8 +3088,8 @@ "schema": { "type": "string" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.code }" } ], "responses": { @@ -2296,12 +3104,25 @@ } } }, - "summary": "Get a section info by its code", - "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "admins", + "systematic", + "sections", + "get" + ], + "x-samchon-controller": "ShoppingAdminSystematicSectionController" } }, "/shoppings/customers/authenticate/refresh": { "patch": { + "summary": "Refresh the authentication token", + "description": "Refresh the authentication token.\n\nCreate a new {@link IShoppingCustomer.IToken.access access token} of a\n{@link IShoppingCustomer customer} with the pre-issued\n{@link IShoppingCustomer.IToken.refresh refresh} token.\n\nNote that, this function is available until the\n{@link IShoppingCustomer.IToken.refreshable_until} value.", "tags": [ "Authenticate" ], @@ -2329,12 +3150,19 @@ } } }, - "summary": "Refresh the authentication token", - "description": "Refresh the authentication token.\n\nCreate a new {@link IShoppingCustomer.IToken.access access token} of a\n{@link IShoppingCustomer customer} with the pre-issued\n{@link IShoppingCustomer.IToken.refresh refresh} token.\n\nNote that, this function is available until the\n{@link IShoppingCustomer.IToken.refreshable_until } value." + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "refresh" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" } }, "/shoppings/customers/authenticate": { "get": { + "summary": "Get current customer info", + "description": "Get current customer info.\n\nGet current {@link IShoppingCustomer customer} information from the\n{@link IShoppingCustomer.IToken.access access token}.", "tags": [ "Authenticate" ], @@ -2351,10 +3179,22 @@ } } }, - "summary": "Get current customer info", - "description": "Get current customer info.\n\nGet current {@link IShoppingCustomer customer} information from the\n{@link IShoppingCustomer.IToken.access access token}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "get" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" }, "post": { + "summary": "Create a new customer record", + "description": "Create a new customer record.\n\nThis shopping mall system defines everyone participating in this market as\na \"customer\". And the customer records are not archived based on individual\n{@link IShoppingCitizen people}, but based on the unit of connection.\nTherefore, even if it is the same person, a new {@link IShoppingCustomer}\nrecord is created every time a connection is made.\n\nTherefore, all Client Applications that access this service must first call\nthis function, report the customer's inflow path to the server, and create\nan {@link IShoppingCustomer.IToken.access access token}. If you skip this\nfunction call, all the other API functions would be prohibited. There is no\nexception, even if you want to {@link activate} your citizenship or\n{@link login} with your {@link IShoppingMember member account}. Before\nauthenticating yourself or logging in, be sure to call this function first.\nThis also applies when an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller} logs in.\n\nAlso, the authentication token has an\n{@link IShoppingCustomer.IToken.expired_at expiration time}\nand cannot be used permanently. For reference, the authentication token is\nvalid for 3 hours, and if you want to maintain customer authentication even\nafter 3 hours, you must call the {@link refresh} function.", "tags": [ "Authenticate" ], @@ -2382,12 +3222,19 @@ } } }, - "summary": "Create a new customer record", - "description": "Create a new customer record.\n\nThis shopping mall system defines everyone participating in this market as\na \"customer\". And the customer records are not archived based on individual\n{@link IShoppingCitizen people}, but based on the unit of connection.\nTherefore, even if it is the same person, a new {@link IShoppingCustomer }\nrecord is created every time a connection is made.\n\nTherefore, all Client Applications that access this service must first call\nthis function, report the customer's inflow path to the server, and create\nan {@link IShoppingCustomer.IToken.access access token}. If you skip this\nfunction call, all the other API functions would be prohibited. There is no\nexception, even if you want to {@link activate } your citizenship or\n{@link login } with your {@link IShoppingMember member account}. Before\nauthenticating yourself or logging in, be sure to call this function first.\nThis also applies when an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller} logs in.\n\nAlso, the authentication token has an\n{@link IShoppingCustomer.IToken.expired_at expiration time}\nand cannot be used permanently. For reference, the authentication token is\nvalid for 3 hours, and if you want to maintain customer authentication even\nafter 3 hours, you must call the {@link refresh } function." + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "create" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" } }, "/shoppings/customers/authenticate/join": { "post": { + "summary": "Join membership", + "description": "Join membership.\n\n{@link IShoppingCustomer Customer} signs up for\n{@link IShoppingMember membership} of current shopping mall system.\n\nIf you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate}\nfunction calling everytime you log in from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate} and {@link external}\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to membership registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create} function, before calling\nthis `join` function, you must first create a customer record and token by\ncalling the {@link create} function.", "tags": [ "Authenticate" ], @@ -2415,12 +3262,24 @@ } } }, - "summary": "Join membership", - "description": "Join membership.\n\n{@link IShoppingCustomer Customer} signs up for\n{@link IShoppingMember membership} of current shopping mall system.\n\nIf you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate }\nfunction calling everytime you log in from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate } and {@link external }\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to membership registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create } function, before calling\nthis `join` function, you must first create a customer record and token by\ncalling the {@link create } function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "join" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" } }, "/shoppings/customers/authenticate/login": { "put": { + "summary": "Membership login", + "description": "Membership login.\n\n{@link IShoppingCustomer Customer} logs in with his/her\n{@link IShoppingMember membership} account with the email and password.\n\nIf the {@link IShoppingMember member} has previously performed\n{@link activate citizenship activation}, the {@link IShoppingCustomer.citizen}\nvalue would be filled in accordingly. And if the member has also signed up\nas an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller}, the relevant information is also entered\naccordingly.\n\nFor reference, as described in the {@link create} function, before calling\nthis `login` function, you must first create a customer record and token by\ncalling the {@link create} function.", "tags": [ "Authenticate" ], @@ -2448,12 +3307,24 @@ } } }, - "summary": "Membership login", - "description": "Membership login.\n\n{@link IShoppingCustomer Customer} logs in with his/her\n{@link IShoppingMember membership} account with the email and password.\n\nIf the {@link IShoppingMember member} has previously performed\n{@link activate citizenship activation}, the {@link IShoppingCustomer.citizen }\nvalue would be filled in accordingly. And if the member has also signed up\nas an {@link IShoppingAdministrator administrator} or\n{@link IShoppingSeller seller}, the relevant information is also entered\naccordingly.\n\nFor reference, as described in the {@link create } function, before calling\nthis `login` function, you must first create a customer record and token by\ncalling the {@link create } function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "login" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" } }, "/shoppings/customers/authenticate/activate": { "post": { + "summary": "Activate citizenship", + "description": "Activate citizenship.\n\n{@link IShoppingCustomer Customer} activates his/her\n{@link IShoppingCitizen citizenship} with mobile number and real name.\n\nIf the custommer already {@link join joined} to the\n{@link IShoppingMember membership}, then you can skip the citizenship\n{@link activation} function calling everytime you log in from now on.\nOf course, such story would be same to the {@link external} function, too.\n\nFor reference, as described in the {@link create} function, before calling\nthis `activate` function, you must first create a customer record and token\nby calling the {@link create} function.", "tags": [ "Authenticate" ], @@ -2481,12 +3352,24 @@ } } }, - "summary": "Activate citizenship", - "description": "Activate citizenship.\n\n{@link IShoppingCustomer Customer} activates his/her\n{@link IShoppingCitizen citizenship} with mobile number and real name.\n\nIf the custommer already {@link join joined} to the\n{@link IShoppingMember membership}, then you can skip the citizenship\n{@link activation } function calling everytime you log in from now on.\nOf course, such story would be same to the {@link external } function, too.\n\nFor reference, as described in the {@link create } function, before calling\nthis `activate` function, you must first create a customer record and token\nby calling the {@link create } function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "activate" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" } }, "/shoppings/customers/authenticate/external": { "post": { + "summary": "Enroll external user info", + "description": "Enroll external user info.\n\n{@link IShoppingCustomer Customer} enrolls his/her\n{@link IShoppingExternalUser external user} information from other service.\n\nIt has similar effect with the {@link join membership joining} function,\nso that if you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate}\nfunction calling everytime you call this `external` function with same\ninfo from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate} and {@link join}\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to external server registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create} function, before calling\nthis `external` function, you must first create a customer record and token\nby calling the {@link create} function.", "tags": [ "Authenticate" ], @@ -2514,12 +3397,24 @@ } } }, - "summary": "Enroll external user info", - "description": "Enroll external user info.\n\n{@link IShoppingCustomer Customer} enrolls his/her\n{@link IShoppingExternalUser external user} information from other service.\n\nIt has similar effect with the {@link join membership joining} function,\nso that if you've performed the {@link IShoppingCitizen citizenship}\n{@link activate activation} too, then you can skip the {@link activate }\nfunction calling everytime you call this `external` function with same\ninfo from now on. Also, if the person had\n{@link IShoppingOrder purchased} with {@link activate } and {@link join }\nfunction calling, you can also access to the order history too. In other\nwords, activity details prior to external server registration can also be\naccessed with continuity.\n\nFor reference, as described in the {@link create } function, before calling\nthis `external` function, you must first create a customer record and token\nby calling the {@link create } function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "external" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticateController" } }, "/shoppings/customers/authenticate/password/change": { "put": { + "summary": "Change password", + "description": "Change password.\n\nChange password of {@link IShoppingMember member} with the current password.\n\nThe reason why the current password is required is for security.", "tags": [ "Authenticate" ], @@ -2537,15 +3432,31 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Change password", - "description": "Change password.\n\nChange password of {@link IShoppingMember member} with the current password.\n\nThe reason why the current password is required is for security." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "authenticate", + "password", + "change" + ], + "x-samchon-controller": "ShoppingCustomerAuthenticatePasswordController" } }, "/shoppings/customers/coupons": { "patch": { + "summary": "List up every coupons", + "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up.", "tags": [ "Discount" ], @@ -2573,12 +3484,24 @@ } } }, - "summary": "List up every coupons", - "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "coupons", + "index" + ], + "x-samchon-controller": "ShoppingCustomerCouponController" } }, "/shoppings/customers/coupons/{id}": { "get": { + "summary": "Get a coupon info", + "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible.", "tags": [ "Discount" ], @@ -2589,8 +3512,8 @@ "schema": { "type": "string" }, - "description": "Target coupon's ", - "required": true + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" } ], "responses": { @@ -2605,12 +3528,24 @@ } } }, - "summary": "Get a coupon info", - "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "coupons", + "at" + ], + "x-samchon-controller": "ShoppingCustomerCouponController" } }, "/shoppings/customers/coupons/tickets": { "patch": { + "summary": "List up every coupon tickets", + "description": "List up every coupon tickets.\n\nList up every {@link IShoppingCouponTicket coupon tickets} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nFor reference, coupon ticket means that a {@link IShoppingCoupon coupon}\nhas been taken by a customer. If the target coupon has expiration day or\ndate, the coupon ticket also has\n{@link IShoppingCouponTicket.expired_at expiration time}, and such expired\ntickets would not be listed up. Likewise, tickets used to\n{@link IShoppingCouponTicketPayment pay} for the {@link IShoppingOrder order}\nwould not be listed up, either.\n\nAdditionally, you can limit the result by configuring\n{@link IShoppingCouponTicket.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCouponTicket.IRequest.sort sort condition}.", "tags": [ "Discount" ], @@ -2638,10 +3573,23 @@ } } }, - "summary": "List up every coupon tickets", - "description": "List up every coupon tickets.\n\nList up every {@link IShoppingCouponTicket coupon tickets} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nFor reference, coupon ticket means that a {@link IShoppingCoupon coupon}\nhas been taken by a customer. If the target coupon has expiration day or\ndate, the coupon ticket also has\n{@link IShoppingCouponTicket.expired_at expiration time}, and such expired\ntickets would not be listed up. Likewise, tickets used to\n{@link IShoppingCouponTicketPayment pay} for the {@link IShoppingOrder order}\nwould not be listed up, either.\n\nAdditionally, you can limit the result by configuring\n{@link IShoppingCouponTicket.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCouponTicket.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "coupons", + "tickets", + "index" + ], + "x-samchon-controller": "ShoppingCustomerCouponTicketController" }, "post": { + "summary": "Create a new coupon ticket", + "description": "Create a new coupon ticket.\n\nCreate a new {@link IShoppingCouponTicket coupon ticket} of a specific\n{@link IShoppingCoupon coupon} for the {@link IShoppingCustomer customer}.\n\nBy the way, if the target coupon has been\n{@link IShoppingCoupon.expired_at expired} or\n{@link IShoppingCoupon.IInventory.volume out of stock} or\n{@link IShoppingCoupon.IInventory.volume_per_citizen exhausted for him/her},\n410 gone exception would be thrown.\n\nAlso, even though succeeded to create a new coupon ticket from the target\ncoupon, if the coupon has expiration day or date, the newly created ticket\nalso has {@link IShoppingCouponTicket.expired_at expiration time}, and it\nwould be disabled after the expiration time.", "tags": [ "Discount" ], @@ -2669,12 +3617,25 @@ } } }, - "summary": "Create a new coupon ticket", - "description": "Create a new coupon ticket.\n\nCreate a new {@link IShoppingCouponTicket coupon ticket} of a specific\n{@link IShoppingCoupon coupon} for the {@link IShoppingCustomer customer}.\n\nBy the way, if the target coupon has been\n{@link IShoppingCoupon.expired_at expired} or\n{@link IShoppingCoupon.IInventory.volume out of stock} or\n{@link IShoppingCoupon.IInventory.volume_per_citizen exhausted for him/her},\n410 gone exception would be thrown.\n\nAlso, even though succeeded to create a new coupon ticket from the target\ncoupon, if the coupon has expiration day or date, the newly created ticket\nalso has {@link IShoppingCouponTicket.expired_at expiration time}, and it\nwould be disabled after the expiration time." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "coupons", + "tickets", + "create" + ], + "x-samchon-controller": "ShoppingCustomerCouponTicketController" } }, "/shoppings/customers/coupons/tickets/{id}": { "get": { + "summary": "Get a coupon ticket", + "description": "Get a coupon ticket.\n\nGet a {@link IShoppingCouponTicket coupon ticket} information with its ID.\n\nBy the way, if the target coupon ticket has been\n{@link IShoppingCouponTicket.expired_at expired} or used to\n{@link IShoppingCouponTicketPayment pay} for the {@link IShoppingOrder order},\n410 gone exception would be thrown.", "tags": [ "Discount" ], @@ -2686,8 +3647,8 @@ "type": "string", "format": "uuid" }, - "description": "Target coupon ticket's ", - "required": true + "required": true, + "description": " Target coupon ticket's {@link IShoppingCouponTicket.id }" } ], "responses": { @@ -2702,12 +3663,25 @@ } } }, - "summary": "Get a coupon ticket", - "description": "Get a coupon ticket.\n\nGet a {@link IShoppingCouponTicket coupon ticket} information with its ID.\n\nBy the way, if the target coupon ticket has been\n{@link IShoppingCouponTicket.expired_at expired} or used to\n{@link IShoppingCouponTicketPayment pay} for the {@link IShoppingOrder order},\n410 gone exception would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "coupons", + "tickets", + "at" + ], + "x-samchon-controller": "ShoppingCustomerCouponTicketController" } }, "/shoppings/customers/deposits/charges": { "patch": { + "summary": "List up every deposit charges", + "description": "List up every deposit charges.\n\nList up every {@link IShoppingDepositCharge deposit charges} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositCharge.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositCharge.IRequest.sort sort condition}.", "tags": [ "Discount" ], @@ -2735,10 +3709,23 @@ } } }, - "summary": "List up every deposit charges", - "description": "List up every deposit charges.\n\nList up every {@link IShoppingDepositCharge deposit charges} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositCharge.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositCharge.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "index" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargeController" }, "post": { + "summary": "Create a new deposit charge application", + "description": "Create a new deposit charge application.\n\nCreate a new {@link IShoppingDepositCharge deposit charge application}.\n\nBy the way, this function does not mean completion the deposit charge, but\nmeans just {@link IShoppingCustomer customer} is appling the deposit charge.\nThe deposit charge be completed only when customer\n{@link IShoppingDepositChargePublish.publish pay} the deposit charge.", "tags": [ "Discount" ], @@ -2766,12 +3753,25 @@ } } }, - "summary": "Create a new deposit charge application", - "description": "Create a new deposit charge application.\n\nCreate a new {@link IShoppingDepositCharge deposit charge application}.\n\nBy the way, this function does not mean completion the deposit charge, but\nmeans just {@link IShoppingCustomer customer} is appling the deposit charge.\nThe deposit charge be completed only when customer\n{@link IShoppingDepositChargePublish.publish pay} the deposit charge." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "create" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargeController" } }, "/shoppings/customers/deposits/charges/{id}": { "get": { + "summary": "Get a deposit charge info", + "description": "Get a deposit charge info.\n\nGet a {@link IShoppingDepositCharge deposit charge} information.", "tags": [ "Discount" ], @@ -2782,8 +3782,8 @@ "schema": { "type": "string" }, - "description": "Target deposit charge's ", - "required": true + "required": true, + "description": " Target deposit charge's {@link IShoppingDepositCharge.id }" } ], "responses": { @@ -2798,10 +3798,23 @@ } } }, - "summary": "Get a deposit charge info", - "description": "Get a deposit charge info.\n\nGet a {@link IShoppingDepositCharge deposit charge} information." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "at" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargeController" }, "put": { + "summary": "Update a deposit charge application", + "description": "Update a deposit charge application.\n\nUpdate value of a {@link IShoppingDepositCharge deposit charge application}\nthat has been applied by the {@link IShoppingCustomer}.\n\nIf the charge has been {@link IShoppingDepositChargePublish published},\nthen it is not possible to update the deposit charge. Only 410 gone exception\nwould be thrown.", "tags": [ "Discount" ], @@ -2812,8 +3825,8 @@ "schema": { "type": "string" }, - "description": "Target deposit charge's ", - "required": true + "required": true, + "description": " Target deposit charge's {@link IShoppingDepositCharge.id }" } ], "requestBody": { @@ -2829,13 +3842,29 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Update a deposit charge application", - "description": "Update a deposit charge application.\n\nUpdate value of a {@link IShoppingDepositCharge deposit charge application}\nthat has been applied by the {@link IShoppingCustomer }.\n\nIf the charge has been {@link IShoppingDepositChargePublish published},\nthen it is not possible to update the deposit charge. Only 410 gone exception\nwould be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "update" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargeController" }, "delete": { + "summary": "Erase a deposit charge application", + "description": "Erase a deposit charge application.\n\nErase a {@link IShoppingDepositCharge deposit charge application} that has been\napplied by the {@link IShoppingCustomer}.\n\nIf the charge has been {@link IShoppingDepositChargePublish published}, then\nit is not possible to erase the deposit charge. In that case, you've to cancel\nthe payment by calling the {@link publish.cancel} function.", "tags": [ "Discount" ], @@ -2846,21 +3875,37 @@ "schema": { "type": "string" }, - "description": "Target deposit charge's ", - "required": true + "required": true, + "description": " Target deposit charge's {@link IShoppingDepositCharge.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase a deposit charge application", - "description": "Erase a deposit charge application.\n\nErase a {@link IShoppingDepositCharge deposit charge application} that has been\napplied by the {@link IShoppingCustomer }.\n\nIf the charge has been {@link IShoppingDepositChargePublish published}, then\nit is not possible to erase the deposit charge. In that case, you've to cancel\nthe payment by calling the {@link publish.cancel } function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "erase" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargeController" } }, "/shoppings/customers/deposits/charges/{chargeId}/publish/able": { "get": { + "summary": "Check publishable", + "description": "Check publishable.\n\nTest whether the {@link IShoppingDepositCharge charge} is publishable or not.\n\nIf the charge has not been {@link IShoppingDepositChargePublish published} and\nnot deleted yet, then it is possible to publish the charge", "tags": [ "Discount" ], @@ -2872,8 +3917,8 @@ "type": "string", "format": "uuid" }, - "description": "Target charge's ", - "required": true + "required": true, + "description": " Target charge's {@link IShoppingDepositCharge.id }" } ], "responses": { @@ -2888,12 +3933,26 @@ } } }, - "summary": "Check publishable", - "description": "Check publishable.\n\nTest whether the {@link IShoppingDepositCharge charge} is publishable or not.\n\nIf the charge has not been {@link IShoppingDepositChargePublish published} and\nnot deleted yet, then it is possible to publish the charge" + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "publish", + "able" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargePublishController" } }, "/shoppings/customers/deposits/charges/{chargeId}/publish": { "post": { + "summary": "Publish a charge", + "description": "Publish a charge.\n\n{@link IShoppingDepositChargePublish Publish} a\n{@link IShoppingDepositCharge charge} that has been applied by the\n{@link IShoppingCustomer} with payment information gotten from the\npayment vendor system.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingDepositChargePublish.paid_at} would be `null` value,\nso that you have to check it after calling this publish function.", "tags": [ "Discount" ], @@ -2905,8 +3964,8 @@ "type": "string", "format": "uuid" }, - "description": "Target charge's ", - "required": true + "required": true, + "description": " Target charge's {@link IShoppingDepositCharge.id }" } ], "requestBody": { @@ -2932,12 +3991,26 @@ } } }, - "summary": "Publish a charge", - "description": "Publish a charge.\n\n{@link IShoppingDepositChargePublish Publish} a\n{@link IShoppingDepositCharge charge} that has been applied by the\n{@link IShoppingCustomer } with payment information gotten from the\npayment vendor system.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingDepositChargePublish.paid_at } would be `null` value,\nso that you have to check it after calling this publish function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "charges", + "publish", + "create" + ], + "x-samchon-controller": "ShoppingCustomerDepositChargePublishController" } }, "/shoppings/customers/deposits/histories": { "patch": { + "summary": "List up every deposit histories", + "description": "List up every deposit histories.\n\nList up every {@link IShoppingDepositHistory deposit histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositHistory.IRequest.sort sort condition}.", "tags": [ "Discount" ], @@ -2965,12 +4038,25 @@ } } }, - "summary": "List up every deposit histories", - "description": "List up every deposit histories.\n\nList up every {@link IShoppingDepositHistory deposit histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingDepositHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingDepositHistory.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "histories", + "index" + ], + "x-samchon-controller": "ShoppingCustomerDepositHistoryController" } }, "/shoppings/customers/deposits/histories/{id}": { "get": { + "summary": "Get a deposit history info", + "description": "Get a deposit history info.\n\nGet a {@link IShoppingDepositHistory deposit history} information.", "tags": [ "Discount" ], @@ -2982,7 +4068,6 @@ "type": "string", "format": "uuid" }, - "description": "", "required": true } ], @@ -2998,12 +4083,25 @@ } } }, - "summary": "Get a deposit history info", - "description": "Get a deposit history info.\n\nGet a {@link IShoppingDepositHistory deposit history} information." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "histories", + "at" + ], + "x-samchon-controller": "ShoppingCustomerDepositHistoryController" } }, "/shoppings/customers/deposits/histories/balance": { "get": { + "summary": "Get balance of the deposit", + "description": "Get balance of the deposit.\n\nGet current balance of the deposit of the {@link IShoppingCustomer customer}.", "tags": [ "Discount" ], @@ -3020,12 +4118,25 @@ } } }, - "summary": "Get balance of the deposit", - "description": "Get balance of the deposit.\n\nGet current balance of the deposit of the {@link IShoppingCustomer customer}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "deposits", + "histories", + "balance" + ], + "x-samchon-controller": "ShoppingCustomerDepositHistoryController" } }, "/shoppings/customers/mileages/histories": { "patch": { + "summary": "List up every mileage histories", + "description": "List up every mileage histories.\n\nList up every {@link IShoppingMileageHistory mileage histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingMileageHistory.IRequest.sort sort condition}.", "tags": [ "Discount" ], @@ -3053,12 +4164,25 @@ } } }, - "summary": "List up every mileage histories", - "description": "List up every mileage histories.\n\nList up every {@link IShoppingMileageHistory mileage histories} of the\n{@link IShoppingCustomer customer} with {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingMileageHistory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingMileageHistory.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "mileages", + "histories", + "index" + ], + "x-samchon-controller": "ShoppingCustomerMileageHistoryController" } }, "/shoppings/customers/mileages/histories/{id}": { "get": { + "summary": "Get a mileage history info", + "description": "Get a mileage history info.\n\nGet a {@link IShoppingMileageHistory mileage history} information.", "tags": [ "Discount" ], @@ -3070,8 +4194,8 @@ "type": "string", "format": "uuid" }, - "description": "Target mileage history's ", - "required": true + "required": true, + "description": " Target mileage history's {@link IShoppingMileageHistory.id }" } ], "responses": { @@ -3086,12 +4210,25 @@ } } }, - "summary": "Get a mileage history info", - "description": "Get a mileage history info.\n\nGet a {@link IShoppingMileageHistory mileage history} information." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "mileages", + "histories", + "at" + ], + "x-samchon-controller": "ShoppingCustomerMileageHistoryController" } }, "/shoppings/customers/mileages/histories/balance": { "get": { + "summary": "Get balance of the mileage", + "description": "Get balance of the mileage.\n\nGet current balance of the mileage of the {@link IShoppingCustomer customer}.", "tags": [ "Discount" ], @@ -3108,34 +4245,29 @@ } } }, - "summary": "Get balance of the mileage", - "description": "Get balance of the mileage.\n\nGet current balance of the mileage of the {@link IShoppingCustomer customer}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "mileages", + "histories", + "balance" + ], + "x-samchon-controller": "ShoppingCustomerMileageHistoryController" } }, - "/shoppings/customers/carts/{cartId}/commodities": { + "/shoppings/customers/carts/commodities": { "patch": { + "summary": "List of every commodities", + "description": "List of every commodities.\n\nList up every {@link IShoppingCartCommodity commodities} in the\nshopping cart with {@link IPage pagination}.\n\nYou can limit the result by configuring\n{@link IShoppingCartCommodity.IRequest.search search condition} in the\nrequest body. Furthermore, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingCartCommodity.IRequest.sort}.\n\nFor reference, when some commodity be {@link IShoppingOrder ordered} and\n{@link IShoppingOrderPublish published}, then it would not be appread in\nthe shopping cart more. Otherwise, the order has not been published yet,\nit would be appread in the shopping cart and still enable to create a new\n{@link IShoppingOrder order application} with the same commodity.\n\nOf course, if the target {@link IShoppingSale sale} has been suspended, or\n{@link IShoppingSaleUnitStockInventory out of stock}, then it would not be\nappread in the shopping cart more, either.", "tags": [ "Order" ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - } - ], + "parameters": [], "requestBody": { "description": "Request info of pagination, searching and sorting", "content": { @@ -3159,32 +4291,27 @@ } } }, - "summary": "List of every commodities", - "description": "List of every commodities.\n\nList up every {@link IShoppingCartCommodity commodities} in the\nshopping cart with {@link IPage pagination}.\n\nIf the *cartId* is not specified but `null` value assigned, then every\ncart would be targetted. Also, you can limit the result by configuring\n{@link IShoppingCartCommodity.IRequest.search search condition} in the\nrequest body. Furthermore, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingCartCommodity.IRequest.sort }.\n\nFor reference, when some commodity be {@link IShoppingOrder ordered} and\n{@link IShoppingOrderPublish published}, then it would not be appread in\nthe shopping cart more. Otherwise, the order has not been published yet,\nit would be appread in the shopping cart and still enable to create a new\n{@link IShoppingOrder order application} with the same commodity.\n\nOf course, if the target {@link IShoppingSale sale} has been suspended, or\n{@link IShoppingSaleUnitStockInventory out of stock}, then it would not be\nappread in the shopping cart more, either." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "index" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" }, "post": { + "summary": "Create a new commodity", + "description": "Create a new commodity.\n\nCreate a new {@link IShoppingCartCommodity commodity} into a specific\nshopping cart.\n\nIf {@link IShoppingCartCommodity.ICreate.accumulate} has `true` value\nand there's some same commodity that composed with same\n{@link IShoppingSaleUnitStock.IInvert stocks and quantities},\nthen new commodity would not be created but the volume would be accumulated.\n\nBy the way, if the target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, then 410 gone error\nwould be thrown. Therefore, it would better to check the target sale and\n{@link IShoppingSaleUnitStock stock}'s status before.", "tags": [ "Order" ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - } - ], + "parameters": [], "requestBody": { "description": "Creation info of the commodity", "content": { @@ -3208,33 +4335,29 @@ } } }, - "summary": "Create a new commodity", - "description": "Create a new commodity.\n\nCreate a new {@link IShoppingCartCommodity commodity} into a specific\nshopping cart.\n\nIf {@link IShoppingCartCommodity.ICreate.accumulate } has `true` value\nand there's some same commodity that composed with same\n{@link IShoppingSaleUnitStock.IInvert stocks and quantities},\nthen new commodity would not be created but the volume would be accumulated.\n\nAlso, if the *cartId* is not specified but `null` value assigned, then\nordinary cart would be utilized or create new one considering the\nexistence of the previous cart.\n\nBy the way, if the target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, then 410 gone error\nwould be thrown. Therefore, it would better to check the target sale and\n{@link IShoppingSaleUnitStock stock}'s status before." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "create" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" } }, - "/shoppings/customers/carts/{cartId}/commodities/{id}": { + "/shoppings/customers/carts/commodities/{id}": { "get": { + "summary": "Get a commodity", + "description": "Get a commodity.\n\nGet a {@link IShoppingCartCommodity commodity} record of the shopping cart.\n\nIf target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, then 410 gone error\nwould be thrown. Therefore, even if you've created a commodity successfully\nwith the {@link create} method, it still can be failed when you access the\ncommodity with this {@link at} method.", "tags": [ "Order" ], "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - }, { "name": "id", "in": "path", @@ -3242,8 +4365,8 @@ "type": "string", "format": "uuid" }, - "description": "Target commodity's ", - "required": true + "required": true, + "description": " Target commodity's {@link IShoppingCartCommodity.id }" } ], "responses": { @@ -3258,40 +4381,36 @@ } } }, - "summary": "Get a commodity", - "description": "Get a commodity.\n\nGet a {@link IShoppingCartCommodity commodity} record of the shopping cart.\n\nIf the *cartId* is different with the belonged cart's ID, then 404 not\nfound exception would be thrown. Otherwise, the *cartId* has `null` value,\nsuch dependency checking would be skipped, but still ownership would be\nvalidated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, then 410 gone error\nwould be thrown. Therefore, even if you've created a commodity successfully\nwith the {@link create } method, it still can be failed when you access the\ncommodity with this {@link at } method." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "at" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" }, "put": { + "summary": "Update a commodity (volume)", + "description": "Update a commodity (volume).\n\nUpdate a {@link IShoppingCartCommodity commodity}'s volume in the\nshopping cart.\n\nIf target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly, then 410\ngone error would be thrown, either.", "tags": [ "Order" ], "parameters": [ { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - }, - { - "name": "id", + "name": "id", "in": "path", "schema": { "type": "string", "format": "uuid" }, - "description": "Target commodity's ", - "required": true + "required": true, + "description": " Target commodity's {@link IShoppingCartCommodity.id }" } ], "requestBody": { @@ -3307,34 +4426,33 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Update a commodity (volume)", - "description": "Update a commodity (volume).\n\nUpdate a {@link IShoppingCartCommodity commodity}'s volume in the\nshopping cart.\n\nIf the *cartId* is different with the belonged cart's ID, then 404 not\nfound exception would be thrown. Otherwise, the *cartId* has `null` value,\nsuch dependency checking would be skipped, but still ownership would be\nvalidated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly, then 410\ngone error would be thrown, either." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "update" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" }, "delete": { + "summary": "Erase a commodity", + "description": "Erase a commodity.\n\nErase a {@link IShoppingCartCommodity commodity} from the shopping cart.\n\nIf the commodity is on an {@link IShoppingOrder order} process, it is not\npossible to erase it. Instead, if the order has been\n{@link IShoppingOrderPublish published}, then it would not be appread in\nthe shopping cart more. If the order be erased, then you also can continue\nerasinng the commodity, neither.", "tags": [ "Order" ], "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - }, { "name": "id", "in": "path", @@ -3342,42 +4460,41 @@ "type": "string", "format": "uuid" }, - "description": "Target commodity's ", - "required": true + "required": true, + "description": " Target commodity's {@link IShoppingCartCommodity.id }" } ], "responses": { "200": { - "description": "Newly created commodity" + "description": "Newly created commodity", + "content": { + "application/json": {} + } } }, - "summary": "Erase a commodity", - "description": "Erase a commodity.\n\nErase a {@link IShoppingCartCommodity commodity} from the shopping cart.\n\nIf the commodity is on an {@link IShoppingOrder order} process, it is not\npossible to erase it. Instead, if the order has been\n{@link IShoppingOrderPublish published}, then it would not be appread in\nthe shopping cart more. If the order be erased, then you also can continue\nerasinng the commodity, neither." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "erase" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" } }, - "/shoppings/customers/carts/{cartId}/commodities/{id}/replica": { + "/shoppings/customers/carts/commodities/{id}/replica": { "get": { + "summary": "Get replica of a commodity", + "description": "Get replica of a commodity.\n\nGet a {@link IShoppingCartCommodity.ICreate} typed info of the target\ncommodity for replication.\n\nIf target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly,\nthen 410 gone error would be thrown, either.", "tags": [ "Order" ], "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - }, { "name": "id", "in": "path", @@ -3385,8 +4502,8 @@ "type": "string", "format": "uuid" }, - "description": "Target commodity's ", - "required": true + "required": true, + "description": " Target commodity's {@link IShoppingCartCommodity.id }" } ], "responses": { @@ -3401,34 +4518,29 @@ } } }, - "summary": "Get replica of a commodity", - "description": "Get replica of a commodity.\n\nGet a {@link IShoppingCartCommodity.ICreate } typed info of the target\ncommodity for replication.\n\nBy the way, if the *cartId* is different with the belonged cart's ID,\nthen 404 not found exception would be thrown. Otherwise, the *cartId*\nhas `null` value, such dependency checking would be skipped, but still\nownership would be validated.\n\nAlso, if target {@link IShoppingSale sale} has been suspended or\n{@link IShoppingSaleUnitStockInventory out of stock} suddenly,\nthen 410 gone error would be thrown, either." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "replica" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" } }, - "/shoppings/customers/carts/{cartId}/commodities/discountable": { + "/shoppings/customers/carts/commodities/discountable": { "patch": { + "summary": "Get discountable info", + "description": "Get discountable info.\n\nCompute discountable features about the\n {@link IShoppingCartCommodity shopping cart} even including\nnon-carted {@link IShoppingSale sales}.\n\nReturned {@link IShoppingCartDiscountable} contains including\ncombinations of adjustable {@link IShoppingCoupon coupons},\nwithdrawable {@link IShoppingDepositHistory deposits} and\n{@link IShoppingMileageHistory mileages}.\n\nIf you want to know the discountable info about some specific sales\nthat have not been carted yet, specify the sales to the\n{@link IShoppingCartDiscountable.pseudos} property with composing\n{@link IShoppingCartCommodity.ICreate creation info of the commodities}.\nThen, they would be included in the discountable info.", "tags": [ "Order" ], - "parameters": [ - { - "name": "cartId", - "in": "path", - "schema": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ] - }, - "description": "Belonged cart's ID", - "required": true - } - ], + "parameters": [], "requestBody": { "description": "Request info for discountable", "content": { @@ -3452,12 +4564,25 @@ } } }, - "summary": "Get discountable info", - "description": "Get discountable info.\n\nCompute discountable features about the\n {@link IShoppingCartCommodity shopping cart} even including\nnon-carted {@link IShoppingSale sales}.\n\nReturned {@link IShoppingCartDiscountable } contains including\ncombinations of adjustable {@link IShoppingCoupon coupons},\nwithdrawable {@link IShoppingDepositHistory deposits} and\n{@link IShoppingMileageHistory mileages}.\n\nAlso, if you want to know the discountable info about some specific\nsales that have not been carted yet, specify the sales\nto the {@link IShoppingCartDiscountable.pseudos } property with composing\n{@link IShoppingCartCommodity.ICreate creation info of the commodities}.\nThen, they would be included in the discountable info." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "carts", + "commodities", + "discountable" + ], + "x-samchon-controller": "ShoppingCustomerCartCommodityController" } }, "/shoppings/customers/orders": { "post": { + "summary": "Create a new order application", + "description": "Create a new order application.\n\nCreate a new {@link IShoppingOrder order application} from a\n{@link IShoppingCartCommodity shopping cart} that has been composed by the\n{@link IShoppingCustomer}. Of course, do not need to put every commodities\nto the order, but possible to select some of them by the customer.\n\nBy the way, this function does not mean completion the order, but means\njust customer is appling the order. The order be completed only when customer\n{@link IShoppingOrderPublish.paid_at pays} the order.", "tags": [ "Order" ], @@ -3485,10 +4610,22 @@ } } }, - "summary": "Create a new order application", - "description": "Create a new order application.\n\nCreate a new {@link IShoppingOrder order application} from a\n{@link IShoppingCartCommodity shopping cart} that has been composed by the\n{@link IShoppingCustomer }. Of course, do not need to put every commodities\nto the order, but possible to select some of them by the customer.\n\nBy the way, this function does not mean completion the order, but means\njust customer is appling the order. The order be completed only when customer\n{@link IShoppingOrderPublish.paid_at pays} the order." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "create" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" }, "patch": { + "summary": "List up every orders", + "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order.", "tags": [ "Order" ], @@ -3516,12 +4653,24 @@ } } }, - "summary": "List up every orders", - "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "index" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" } }, "/shoppings/customers/orders/{id}": { "delete": { + "summary": "Erase an order application", + "description": "Erase an order application.\n\nErase an order application that has been applied by the\n{@link IShoppingCustomer}.\n\nIf the order has been {@link IShoppingOrderPublish published}, then it is\nnot possible to erase the order. In that case, you've to cancel the\npayment by calling the {@link publish.cancel} function.", "tags": [ "Order" ], @@ -3533,19 +4682,34 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase an order application", - "description": "Erase an order application.\n\nErase an order application that has been applied by the\n{@link IShoppingCustomer }.\n\nIf the order has been {@link IShoppingOrderPublish published}, then it is\nnot possible to erase the order. In that case, you've to cancel the\npayment by calling the {@link publish.cancel } function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "erase" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" }, "get": { + "summary": "Get an order info", + "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown.", "tags": [ "Order" ], @@ -3557,8 +4721,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { @@ -3573,12 +4737,24 @@ } } }, - "summary": "Get an order info", - "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "at" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" } }, "/shoppings/customers/orders/{id}/price": { "get": { + "summary": "Get price of the order", + "description": "Get price of the order.\n\nGet detailed price information of the {@link IShoppingOrder order}.\n\nReturned price info contains not only the amount of the order, but also\ncontains the discount amount by {@link IShoppingCoupono coupons},\n{@link IShoppingDepositHistory deposits} and\n{@link IShoppingMileageHistory mileages}.", "tags": [ "Order" ], @@ -3590,8 +4766,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { @@ -3606,12 +4782,24 @@ } } }, - "summary": "Get price of the order", - "description": "Get price of the order.\n\nGet detailed price information of the {@link IShoppingOrder order}.\n\nReturned price info contains not only the amount of the order, but also\ncontains the discount amount by {@link IShoppingCoupono coupons},\n{@link IShoppingDepositHistory deposits} and\n{@link IShoppingMileageHistory mileages}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "price" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" } }, "/shoppings/customers/orders/{id}/discountable": { "patch": { + "summary": "Get discountable info", + "description": "Get discountable info.\n\nCompute discountable features about the {@link IShoppingOrder}.\n\nRetured {@link IShoppingOrderDiscountable} contains including\ncombinations of adjustable {@link IShoppingCoupon coupons},\nwithdrawable {@link IShoppingDepositHistory deposits}\nand {@link IShoppingMileageHistory mileages}.\n\nOf course, returned features are valid only when the order has not\nbeen {@link IShoppingOrderPublish published} yet. If the order has\nalready been published, then no way to discount the price more.", "tags": [ "Order" ], @@ -3623,8 +4811,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "requestBody": { @@ -3650,12 +4838,24 @@ } } }, - "summary": "Get discountable info", - "description": "Get discountable info.\n\nCompute discountable features about the {@link IShoppingOrder }.\n\nRetured {@link IShoppingOrderDiscountable } contains including\ncombinations of adjustable {@link IShoppingCoupon coupons},\nwithdrawable {@link IShoppingDepositHistory deposits}\nand {@link IShoppingMileageHistory mileages}.\n\nOf course, returned features are valid only when the order has not\nbeen {@link IShoppingOrderPublish published} yet. If the order has\nalready been published, then no way to discount the price more." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "discountable" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" } }, "/shoppings/customers/orders/{id}/discount": { "put": { + "summary": "Discount the order", + "description": "Discount the order.\n\nDiscount total price of the {@link IShoppingOrder} by adjusting\n{@link IShoppingCoupon coupons}, {@link IShoppingDepositHistory deposits}\nand {@link IShoppingMileageHistory mileages}. If amount of discount\nfeatures are equal to the total price of the order, it is possible to\n{@link IShoppingOrderPublish publish} it without any cash.\n\nBy the way, the discounting features must be valid. If not, 428\nunprocessable entity error would be thrown. To know which features are\nadjustable or withdrawable, call the {@link discountable} function\nbefore.", "tags": [ "Order" ], @@ -3667,8 +4867,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "requestBody": { @@ -3694,12 +4894,24 @@ } } }, - "summary": "Discount the order", - "description": "Discount the order.\n\nDiscount total price of the {@link IShoppingOrder } by adjusting\n{@link IShoppingCoupon coupons}, {@link IShoppingDepositHistory deposits}\nand {@link IShoppingMileageHistory mileages}. If amount of discount\nfeatures are equal to the total price of the order, it is possible to\n{@link IShoppingOrderPublish publish} it without any cash.\n\nBy the way, the discounting features must be valid. If not, 428\nunprocessable entity error would be thrown. To know which features are\nadjustable or withdrawable, call the {@link discountable } function\nbefore." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "discount" + ], + "x-samchon-controller": "ShoppingCustomerOrderController" } }, "/shoppings/customers/orders/{orderId}/goods/{id}/confirm": { "put": { + "summary": "Confirm an order good", + "description": "Confirm an order good.\n\nConfirm an {@link IShoppingOrderGood order good} that has been\ncompleted {@link IShoppingDelivery delivering} to the\n{@link IShoppingCustomer customer}.\n\nIn other words, belonged {@link IShoppingOrder order} must be\n{@link IShoppingPublish.paid_at published, paid} and delivery of\nthe good must be {@link IShoppingDeliveryJourney arrived} to the\ncustomer. If not, 428 unprocessable entity error would be thrown.", "tags": [ "Order" ], @@ -3711,8 +4923,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged order's ", - "required": true + "required": true, + "description": " Belonged order's {@link IShoppingOrder.id }" }, { "name": "id", @@ -3721,21 +4933,37 @@ "type": "string", "format": "uuid" }, - "description": "Target good's ", - "required": true + "required": true, + "description": " Target good's {@link IShoppingOrderGood.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Confirm an order good", - "description": "Confirm an order good.\n\nConfirm an {@link IShoppingOrderGood order good} that has been\ncompleted {@link IShoppingDelivery delivering} to the\n{@link IShoppingCustomer customer}.\n\nIn other words, belonged {@link IShoppingOrder order} must be\n{@link IShoppingPublish.paid_at published, paid} and delivery of\nthe good must be {@link IShoppingDeliveryJourney arrived} to the\ncustomer. If not, 428 unprocessable entity error would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "goods", + "confirm" + ], + "x-samchon-controller": "ShoppingCustomerOrderGoodController" } }, "/shoppings/customers/orders/{orderId}/publish/able": { "get": { + "summary": "Check publishable", + "description": "Check publishable.\n\nTest whether the {@link IShoppingOrder order} is publishable or not.\n\nIf the order has not been {@link IShoppingOrderPublish published} and\nnot deleted yet, then it is possible to publish the order. Even thouogh\ntarget {@link IShoppingSale sale} is suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, it is still possible\nto publish because the order already has been applied.", "tags": [ "Order" ], @@ -3747,8 +4975,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { @@ -3763,12 +4991,25 @@ } } }, - "summary": "Check publishable", - "description": "Check publishable.\n\nTest whether the {@link IShoppingOrder order} is publishable or not.\n\nIf the order has not been {@link IShoppingOrderPublish published} and\nnot deleted yet, then it is possible to publish the order. Even thouogh\ntarget {@link IShoppingSale sale} is suspended or\n{@link IShoppingSaleUnitStockInventory out of stock}, it is still possible\nto publish because the order already has been applied." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "publish", + "able" + ], + "x-samchon-controller": "ShoppingCustomerOrderPublishController" } }, "/shoppings/customers/orders/{orderId}/publish": { "post": { + "summary": "Publish an order", + "description": "Publish an order.\n\n{@link IShoppingOrderPublish Publish} an {@link IShoppingOrder order} that\nhas been applied by the {@link IShoppingCustomer} with\n{@link IShoppingAddress address} to delivery and payment information gotten\nfrom the payment vendor system.\n\nIf the order has been discounted for entire order price, then no need\nto send payment vendor info. Instead, only address info is required.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingOrderPublish.paid_at} would be `null` value, so\nthat you have to check it after calling this publish function.", "tags": [ "Order" ], @@ -3780,8 +5021,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "requestBody": { @@ -3789,14 +5030,7 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingOrderPublish.ICashCreate" - }, - { - "$ref": "#/components/schemas/IShoppingOrderPublish.IZeroCreate" - } - ] + "$ref": "#/components/schemas/IShoppingOrderPublish.ICreate" } } }, @@ -3814,10 +5048,23 @@ } } }, - "summary": "Publish an order", - "description": "Publish an order.\n\n{@link IShoppingOrderPublish Publish} an {@link IShoppingOrder order} that\nhas been applied by the {@link IShoppingCustomer } with\n{@link IShoppingAddress address} to delivery and payment information gotten\nfrom the payment vendor system.\n\nIf the order has been discounted for entire order price, then no need\nto send payment vendor info. Instead, only address info is required.\n\nAlso, the payment time can be different with the publish time. For example,\nif the payment method is manual bank account transfer, then the payment\nwould be delayed until the customer actually transfer the money. In that\ncase, {@link IShoppingOrderPublish.paid_at } would be `null` value, so\nthat you have to check it after calling this publish function." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "publish", + "create" + ], + "x-samchon-controller": "ShoppingCustomerOrderPublishController" }, "delete": { + "summary": "Cancel the publish (payment)", + "description": "Cancel the publish (payment).\n\nCancel payment of an {@link IShoppingOrder order} that has been\n{@link IShoppingOrderPublish published}.\n\nIf target publish's payment method is manual bank account transfer,\nthen it would be cancelled directly. If not, then payment cancel\nrequest would be sent to the payment vendor system.", "tags": [ "Order" ], @@ -3829,21 +5076,37 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Cancel the publish (payment)", - "description": "Cancel the publish (payment).\n\nCancel payment of an {@link IShoppingOrder order} that has been\n{@link IShoppingOrderPublish published}.\n\nIf target publish's payment method is manual bank account transfer,\nthen it would be cancelled directly. If not, then payment cancel\nrequest would be sent to the payment vendor system." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "orders", + "publish", + "cancel" + ], + "x-samchon-controller": "ShoppingCustomerOrderPublishController" } }, "/shoppings/customers/sales": { "patch": { + "summary": "List up every summarized sales", + "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at} function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -3871,12 +5134,24 @@ } } }, - "summary": "List up every summarized sales", - "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at } function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSaleController" } }, "/shoppings/customers/sales/{id}": { "get": { + "summary": "Get a sale info", + "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales.", "tags": [ "Sale" ], @@ -3888,8 +5163,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { @@ -3904,12 +5179,24 @@ } } }, - "summary": "Get a sale info", - "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSaleController" } }, "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments": { "patch": { + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales.", "tags": [ "Sale" ], @@ -3921,8 +5208,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -3931,8 +5218,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -3958,10 +5245,24 @@ } } }, - "summary": "List up every inquiry comments", - "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "comments", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionCommentController" }, "post": { + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales.", "tags": [ "Sale" ], @@ -3973,8 +5274,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -3983,8 +5284,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry's ", - "required": true + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -4010,12 +5311,26 @@ } } }, - "summary": "Create an inquiry comment", - "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "comments", + "create" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionCommentController" } }, "/shoppings/customers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { "get": { + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales.", "tags": [ "Sale" ], @@ -4027,8 +5342,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -4037,8 +5352,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -4047,8 +5362,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "responses": { @@ -4063,10 +5378,24 @@ } } }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "comments", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionCommentController" }, "put": { + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -4078,8 +5407,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -4088,8 +5417,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -4098,8 +5427,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "requestBody": { @@ -4125,12 +5454,26 @@ } } }, - "summary": "Update an inquiry comment", - "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "comments", + "update" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionCommentController" } }, "/shoppings/customers/sales/{saleId}/questions": { "post": { + "summary": "Write a question article", + "description": "Write a question article.\n\nWhen a {@link IShoppingCustomer customer} wants to ask something about\na specific {@link IShoppingSale sale}, he/she can ask it by writing a\nnew {@link IShoppingSaleQuestion question article}.\n\nIf the customer does not want to reveal his/her identify and question,\nhe/she can write the question as a secret article. In that case, only\nthe customer and the related {@link IShoppingSeller seller} can see\nthe {@link at detailed content}. Also, such secret question's title and\nwriter name would be masked with `*` characters in the\n{@link index pagiation API}.", "tags": [ "Sale" ], @@ -4142,8 +5485,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4169,10 +5512,23 @@ } } }, - "summary": "Write a question article", - "description": "Write a question article.\n\nWhen a {@link IShoppingCustomer customer} wants to ask something about\na specific {@link IShoppingSale sale}, he/she can ask it by writing a\nnew {@link IShoppingSaleQuestion question article}.\n\nIf the customer does not want to reveal his/her identify and question,\nhe/she can write the question as a secret article. In that case, only\nthe customer and the related {@link IShoppingSeller seller} can see\nthe {@link at detailed content}. Also, such secret question's title and\nwriter name would be masked with `*` characters in the\n{@link index pagiation API}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "create" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionController" }, "patch": { + "summary": "List up every summarized questions", + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges} function\nor {@link at} function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret} with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -4184,8 +5540,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4211,12 +5567,25 @@ } } }, - "summary": "List up every summarized questions", - "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionController" } }, "/shoppings/customers/sales/{saleId}/questions/{id}": { "post": { + "summary": "Update a question", + "description": "Update a question.\n\nUpdate a {@link IShoppingSaleQuestion question}'s content.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleQuestion.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -4228,8 +5597,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -4238,8 +5607,8 @@ "type": "string", "format": "uuid" }, - "description": "Target question's ", - "required": true + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" } ], "requestBody": { @@ -4265,10 +5634,23 @@ } } }, - "summary": "Update a question", - "description": "Update a question.\n\nUpdate a {@link IShoppingSaleQuestion question}'s content.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleQuestion.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "update" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionController" }, "get": { + "summary": "Get a question info", + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret}\nvalue is `false`.", "tags": [ "Sale" ], @@ -4280,8 +5662,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -4290,8 +5672,8 @@ "type": "string", "format": "uuid" }, - "description": "Target question's ", - "required": true + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" } ], "responses": { @@ -4306,12 +5688,25 @@ } } }, - "summary": "Get a question info", - "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionController" } }, "/shoppings/customers/sales/{saleId}/questions/abridges": { "patch": { + "summary": "List up every abridged questions", + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at} function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret} with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -4323,8 +5718,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4350,12 +5745,25 @@ } } }, - "summary": "List up every abridged questions", - "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "questions", + "abridges" + ], + "x-samchon-controller": "ShoppingCustomerSaleQuestionController" } }, "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments": { "patch": { + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales.", "tags": [ "Sale" ], @@ -4367,8 +5775,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -4377,8 +5785,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -4404,10 +5812,24 @@ } } }, - "summary": "List up every inquiry comments", - "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "comments", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewCommentController" }, "post": { + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales.", "tags": [ "Sale" ], @@ -4419,8 +5841,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -4429,8 +5851,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry's ", - "required": true + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -4456,12 +5878,26 @@ } } }, - "summary": "Create an inquiry comment", - "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "comments", + "create" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewCommentController" } }, "/shoppings/customers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { "get": { + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales.", "tags": [ "Sale" ], @@ -4473,8 +5909,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -4483,8 +5919,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -4493,8 +5929,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "responses": { @@ -4509,10 +5945,24 @@ } } }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "comments", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewCommentController" }, "put": { + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -4524,8 +5974,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -4534,8 +5984,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -4544,8 +5994,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "requestBody": { @@ -4571,12 +6021,26 @@ } } }, - "summary": "Update an inquiry comment", - "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "comments", + "update" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewCommentController" } }, "/shoppings/customers/sales/{saleId}/reviews": { "post": { + "summary": "Write a review article", + "description": "Write a review article.\n\nWhen a {@link IShoppingCustomer customer} has purchased a specific\n{@link IShoppingSale sale} and get {@link IShoppingDelivery delivered} it,\nhe/she can write a {@link IShoppingSaleReview review} article about the sale.\n\nIf try to write a review article without purchasing or the delivery has not\nbeen completed, 428 unprocessable entity error would be thrown. Also, the\ncustomer can write multiple review articles per an order, but the next\narticle can be written after 2 weeks from the previous article. If not,\n428 unprocessable entity error would be thrown, either.", "tags": [ "Sale" ], @@ -4588,8 +6052,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4615,10 +6079,23 @@ } } }, - "summary": "Write a review article", - "description": "Write a review article.\n\nWhen a {@link IShoppingCustomer customer} has purchased a specific\n{@link IShoppingSale sale} and get {@link IShoppingDelivery delivered} it,\nhe/she can write a {@link IShoppingSaleReview review} article about the sale.\n\nIf try to write a review article without purchasing or the delivery has not\nbeen completed, 428 unprocessable entity error would be thrown. Also, the\ncustomer can write multiple review articles per an order, but the next\narticle can be written after 2 weeks from the previous article. If not,\n428 unprocessable entity error would be thrown, either." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "create" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewController" }, "patch": { + "summary": "List up every summarized reviews", + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges} function\nor {@link at} function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -4630,8 +6107,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4657,12 +6134,25 @@ } } }, - "summary": "List up every summarized reviews", - "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewController" } }, "/shoppings/customers/sales/{saleId}/reviews/{id}": { "post": { + "summary": "Update a review", + "description": "Update a review.\n\nUpdadte a {@link IShoppingSaleReview review}'s content and score.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleReview.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -4674,8 +6164,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -4684,8 +6174,8 @@ "type": "string", "format": "uuid" }, - "description": "Target review's ", - "required": true + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" } ], "requestBody": { @@ -4711,10 +6201,23 @@ } } }, - "summary": "Update a review", - "description": "Update a review.\n\nUpdadte a {@link IShoppingSaleReview review}'s content and score.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleReview.ISnapshot snapshot}. And this is made public\nto everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "update" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewController" }, "get": { + "summary": "Get a review info", + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales.", "tags": [ "Sale" ], @@ -4726,8 +6229,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -4736,8 +6239,8 @@ "type": "string", "format": "uuid" }, - "description": "Target review's ", - "required": true + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" } ], "responses": { @@ -4752,12 +6255,25 @@ } } }, - "summary": "Get a review info", - "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewController" } }, "/shoppings/customers/sales/{saleId}/reviews/abridges": { "patch": { + "summary": "List up every abridged reviews", + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at} function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -4769,8 +6285,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4796,12 +6312,25 @@ } } }, - "summary": "List up every abridged reviews", - "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "reviews", + "abridges" + ], + "x-samchon-controller": "ShoppingCustomerSaleReviewController" } }, "/shoppings/customers/sales/{saleId}/snapshots": { "patch": { + "summary": "List up every snapshots", + "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at} or {@link flipo} function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended.", "tags": [ "Sale" ], @@ -4813,8 +6342,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -4840,12 +6369,25 @@ } } }, - "summary": "List up every snapshots", - "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at } or {@link flipo } function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "snapshots", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSaleSnapshotController" } }, "/shoppings/customers/sales/{saleId}/snapshots/{id}": { "get": { + "summary": "Get a snapshot info", + "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip} function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended.", "tags": [ "Sale" ], @@ -4857,8 +6399,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -4867,8 +6409,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -4883,12 +6425,25 @@ } } }, - "summary": "Get a snapshot info", - "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip } function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "snapshots", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSaleSnapshotController" } }, "/shoppings/customers/sales/{saleId}/snapshots/{id}/flip": { "get": { + "summary": "Get a flipped snapshot info", + "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended.", "tags": [ "Sale" ], @@ -4900,8 +6455,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -4910,8 +6465,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -4926,12 +6481,25 @@ } } }, - "summary": "Get a flipped snapshot info", - "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "sales", + "snapshots", + "flip" + ], + "x-samchon-controller": "ShoppingCustomerSaleSnapshotController" } }, "/shoppings/customers/systematic/channels/{channelCode}/categories": { "patch": { + "summary": "List up every categories with children records", + "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -4942,8 +6510,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" } ], "responses": { @@ -4961,12 +6529,26 @@ } } }, - "summary": "List up every categories with children records", - "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "categories", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelCategoryController" } }, "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}": { "get": { + "summary": "Get a category info", + "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too.", "tags": [ "Systematic" ], @@ -4977,8 +6559,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -4987,8 +6569,8 @@ "type": "string", "format": "uuid" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "responses": { @@ -5003,12 +6585,26 @@ } } }, - "summary": "Get a category info", - "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "categories", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelCategoryController" } }, "/shoppings/customers/systematic/channels/{channelCode}/categories/{id}/invert": { "get": { + "summary": "Get a category info of inverted", + "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories.", "tags": [ "Systematic" ], @@ -5019,8 +6615,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -5029,8 +6625,8 @@ "type": "string", "format": "uuid" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "responses": { @@ -5045,12 +6641,26 @@ } } }, - "summary": "Get a category info of inverted", - "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "categories", + "invert" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelCategoryController" } }, "/shoppings/customers/systematic/channels": { "patch": { + "summary": "List up every channels", + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -5078,12 +6688,25 @@ } } }, - "summary": "List up every channels", - "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelController" } }, "/shoppings/customers/systematic/channels/hierarchical": { "patch": { + "summary": "List up every channels with nested categories", + "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -5111,12 +6734,25 @@ } } }, - "summary": "List up every channels with nested categories", - "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "hierarchical" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelController" } }, "/shoppings/customers/systematic/channels/{id}": { "get": { + "summary": "Get a channel info", + "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations.", "tags": [ "Systematic" ], @@ -5128,8 +6764,8 @@ "type": "string", "format": "uuid" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.id }" } ], "responses": { @@ -5144,12 +6780,25 @@ } } }, - "summary": "Get a channel info", - "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelController" } }, "/shoppings/customers/systematic/channels/{code}/get": { "get": { + "summary": "Get a channel info by its code", + "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations.", "tags": [ "Systematic" ], @@ -5160,8 +6809,8 @@ "schema": { "type": "string" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.code }" } ], "responses": { @@ -5176,12 +6825,25 @@ } } }, - "summary": "Get a channel info by its code", - "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "channels", + "get" + ], + "x-samchon-controller": "ShoppingCustomerSystematicChannelController" } }, "/shoppings/customers/systematic/sections": { "patch": { + "summary": "List up every sections", + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}.", "tags": [ "Section" ], @@ -5209,12 +6871,25 @@ } } }, - "summary": "List up every sections", - "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "sections", + "index" + ], + "x-samchon-controller": "ShoppingCustomerSystematicSectionController" } }, "/shoppings/customers/systematic/sections/{id}": { "get": { + "summary": "Get a section info", + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information.", "tags": [ "Section" ], @@ -5226,8 +6901,8 @@ "type": "string", "format": "uuid" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.id }" } ], "responses": { @@ -5242,12 +6917,25 @@ } } }, - "summary": "Get a section info", - "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "sections", + "at" + ], + "x-samchon-controller": "ShoppingCustomerSystematicSectionController" } }, "/shoppings/customers/systematic/sections/{code}/get": { "get": { + "summary": "Get a section info by its code", + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code.", "tags": [ "Section" ], @@ -5258,8 +6946,8 @@ "schema": { "type": "string" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.code }" } ], "responses": { @@ -5274,12 +6962,25 @@ } } }, - "summary": "Get a section info by its code", - "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "customers", + "systematic", + "sections", + "get" + ], + "x-samchon-controller": "ShoppingCustomerSystematicSectionController" } }, "/shoppings/sellers/authenticate": { "get": { + "summary": "Get seller information", + "description": "Get seller information.\n\nGet {@link IShoppingSeller.IInvert seller} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an seller,\nit throws 403 forbidden exception.", "tags": [ "Authenticate" ], @@ -5296,10 +6997,22 @@ } } }, - "summary": "Get seller information", - "description": "Get seller information.\n\nGet {@link IShoppingSeller.IInvert seller} information of\ncurrent {@link IShoppingCustomer customer}.\n\nIf current {@link IShoppingMember member} is not an seller,\nit throws 403 forbidden exception." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "authenticate", + "get" + ], + "x-samchon-controller": "ShoppingSellerAuthenticateController" }, "post": { + "summary": "Join as an seller", + "description": "Join as an seller.\n\nJoin as an seller with {@link IShoppingSeller.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown.", "tags": [ "Authenticate" ], @@ -5327,12 +7040,24 @@ } } }, - "summary": "Join as an seller", - "description": "Join as an seller.\n\nJoin as an seller with {@link IShoppingSeller.IJoin joining info}.\n\nThis method is allowed only when the {@link IShoppingCustomer customer} already\nhas joined the {@link IShoppingMember membership}. IF not, he (she) must\naccomplish it before. If not, 403 forbidden exception would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "authenticate", + "join" + ], + "x-samchon-controller": "ShoppingSellerAuthenticateController" } }, "/shoppings/sellers/authenticate/login": { "put": { + "summary": "Login as an seller", + "description": "Login as an seller.\n\nLogin as an seller with {@link IShoppingSeller.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login} function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer} type that starting from the customer information, so\nthat you have to access to the seller info through\n`customer.member.seller`. In contrast with that, this method returns\n{@link IShoppingSeller.IInvert} type that starting from the seller\ninfo, so that can access to the customer info through `seller.customer`.\n\nOf course, to use this function, you had to {@link join} as an seller\nbefore. If not, 403 forbidden exception would be thrown,", "tags": [ "Authenticate" ], @@ -5360,12 +7085,24 @@ } } }, - "summary": "Login as an seller", - "description": "Login as an seller.\n\nLogin as an seller with {@link IShoppingSeller.ILogin login info}.\n\nThis method has exactly same effect with\n{@link ShoppingApi.functional.customers.authenticate.login } function, but\nreturned type is a llttle different. The similar function returns\n{@link IShoppingCustomer } type that starting from the customer information, so\nthat you have to access to the seller info through\n`customer.member.seller`. In contrast with that, this method returns\n{@link IShoppingSeller.IInvert } type that starting from the seller\ninfo, so that can access to the customer info through `seller.customer`.\n\nOf course, to use this function, you had to {@link join } as an seller\nbefore. If not, 403 forbidden exception would be thrown," + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "authenticate", + "login" + ], + "x-samchon-controller": "ShoppingSellerAuthenticateController" } }, "/shoppings/sellers/deliveries": { "patch": { + "summary": "Get list of deliveries", + "description": "Get list of deliveries.\n\nGet list of {@link IShoppingDelivery.IInvert deliveries} of current\n{@link IShoppingSeller seller} with {@link IPage pagination}.\n\nFor reference, returned deliveries are containing the target\n{@link IShoppingOrder.IInvertFromDelivery order} informations. Of course,\nonly related {@link IShoppingOrderGood goods} are contained in the orders.\n\nAdditionally, you can limit the result by configuring\n{@link IShoppingDelivery.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingDelivery.IRequest.sort sort condition}.", "tags": [ "Order" ], @@ -5393,10 +7130,22 @@ } } }, - "summary": "Get list of deliveries", - "description": "Get list of deliveries.\n\nGet list of {@link IShoppingDelivery.IInvert deliveries} of current\n{@link IShoppingSeller seller} with {@link IPage pagination}.\n\nFor reference, returned deliveries are containing the target\n{@link IShoppingOrder.IInvertFromDelivery order} informations. Of course,\nonly related {@link IShoppingOrderGood goods} are contained in the orders.\n\nAdditionally, you can limit the result by configuring\n{@link IShoppingDelivery.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingDelivery.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "index" + ], + "x-samchon-controller": "ShoppingSellerDeliveryController" }, "post": { + "summary": "Create a delivery", + "description": "Create a delivery.\n\nCreate a {@link IShoppingDelivery delivery} record targetting\n{@link IShoppingOrder orders}, their {@link IShoppingOrderGood goods} and\n{@link IShoppingSaleUnitStock stocks} ({@link IShoppingDeliveryPiece}) with\n{@link IShoppingDeliveryJourney journeys} and\n{@link IShoppingDeliveryShipper shippers} info.\n\nNote that, composition of the {@link IShoppingDeliveryPiece} must not over\nthe required. To identify which pieces are required, recommend to call\nthe {@link incompletes} function with target orders'\n{@link IShoppingOrderPublish.id}s before calling this one.", "tags": [ "Order" ], @@ -5424,12 +7173,24 @@ } } }, - "summary": "Create a delivery", - "description": "Create a delivery.\n\nCreate a {@link IShoppingDelivery delivery} record targetting\n{@link IShoppingOrder orders}, their {@link IShoppingOrderGood goods} and\n{@link IShoppingSaleUnitStock stocks} ({@link IShoppingDeliveryPiece }) with\n{@link IShoppingDeliveryJourney journeys} and\n{@link IShoppingDeliveryShipper shippers} info.\n\nNote that, composition of the {@link IShoppingDeliveryPiece } must not over\nthe required. To identify which pieces are required, recommend to call\nthe {@link incompletes } function with target orders'\n{@link IShoppingOrderPublish.id }s before calling this one." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "create" + ], + "x-samchon-controller": "ShoppingSellerDeliveryController" } }, "/shoppings/sellers/deliveries/{id}": { "get": { + "summary": "Get a delivery", + "description": "Get a delivery.\n\nGet a {@link IShoppingDelivery.IInvert delivery} information with its ID.\n\nFor reference, returned delivery is containing the target\n{@link IShoppingOrder.IInvertFromDelivery order} informations. Of course,\nonly related {@link IShoppingOrderGood goods} are contained in the orders.", "tags": [ "Order" ], @@ -5441,8 +7202,8 @@ "type": "string", "format": "uuid" }, - "description": "Target delivery's ", - "required": true + "required": true, + "description": " Target delivery's {@link IShoppingDelivery.id }" } ], "responses": { @@ -5457,12 +7218,24 @@ } } }, - "summary": "Get a delivery", - "description": "Get a delivery.\n\nGet a {@link IShoppingDelivery.IInvert delivery} information with its ID.\n\nFor reference, returned delivery is containing the target\n{@link IShoppingOrder.IInvertFromDelivery order} informations. Of course,\nonly related {@link IShoppingOrderGood goods} are contained in the orders." - } + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "at" + ], + "x-samchon-controller": "ShoppingSellerDeliveryController" + } }, "/shoppings/sellers/deliveries/incompletes": { "patch": { + "summary": "Get list of incomplete pieces", + "description": "Get list of incomplete pieces.\n\nGet list of {@link IShoppingDeliveryPiece incomplete pieces} of target\norders' {@link IShoppingOrderPublish.id}s.\n\nIf you specify target orders' publish IDs, then this function returns\nincompleted pieces of the orders with computation as an Array of\n{@link IShoppingDeliveryPiece.ICreate} type.\n\nYou can utillize the result to make a huge {@link IShoppingDelivery delivery}\nfor integrated delivering, and also possible to make multiple deliveries for\nsplitted delivering.", "tags": [ "Order" ], @@ -5493,12 +7266,24 @@ } } }, - "summary": "Get list of incomplete pieces", - "description": "Get list of incomplete pieces.\n\nGet list of {@link IShoppingDeliveryPiece incomplete pieces} of target\norders' {@link IShoppingOrderPublish.id }s.\n\nIf you specify target orders' publish IDs, then this function returns\nincompleted pieces of the orders with computation as an Array of\n{@link IShoppingDeliveryPiece.ICreate } type.\n\nYou can utillize the result to make a huge {@link IShoppingDelivery delivery}\nfor integrated delivering, and also possible to make multiple deliveries for\nsplitted delivering." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "incompletes" + ], + "x-samchon-controller": "ShoppingSellerDeliveryController" } }, "/shoppings/sellers/deliveries/{deliveryId}/journeys": { "post": { + "summary": "Create a new journey", + "description": "Create a new journey.\n\nCreate a new {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nThis action may change the related {@link IShoppingOrderGood.state}.\nAlso, if the target journey's type is \"delivering\", whether the property\n{@link IShoppingDeliveryJourney.completed_at} is null or not affects to\nthe related goods' states. If the property is not null, the state becomes\n\"arrived\". Otherwise, the state becomes \"delivering\".", "tags": [ "Order" ], @@ -5510,8 +7295,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged delivery's ", - "required": true + "required": true, + "description": " Belonged delivery's {@link IShoppingDelivery.id }" } ], "requestBody": { @@ -5537,12 +7322,25 @@ } } }, - "summary": "Create a new journey", - "description": "Create a new journey.\n\nCreate a new {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nThis action may change the related {@link IShoppingOrderGood.state }.\nAlso, if the target journey's type is \"delivering\", whether the property\n{@link IShoppingDeliveryJourney.completed_at } is null or not affects to\nthe related goods' states. If the property is not null, the state becomes\n\"arrived\". Otherwise, the state becomes \"delivering\"." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "journeys", + "create" + ], + "x-samchon-controller": "ShoppingSellerDeliveryJourneyController" } }, "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}/complete": { "put": { + "summary": "Complete a journey", + "description": "Complete a journey.\n\nComplete a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}. In other words, fills the\n{@link IShoppingDeliveryJourney.completed_at} property with current time.\n\nIf the target journey's type is \"delivering\", this action may change\nthe related {@link IShoppingOrderGood.state goods' states} to be \"arrived\".", "tags": [ "Order" ], @@ -5554,8 +7352,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged delivery's ", - "required": true + "required": true, + "description": " Belonged delivery's {@link IShoppingDelivery.id }" }, { "name": "id", @@ -5564,8 +7362,8 @@ "type": "string", "format": "uuid" }, - "description": "Target journey's ", - "required": true + "required": true, + "description": " Target journey's {@link IShoppingDeliveryJourney.id }" } ], "requestBody": { @@ -5581,15 +7379,31 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Complete a journey", - "description": "Complete a journey.\n\nComplete a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}. In other words, fills the\n{@link IShoppingDeliveryJourney.completed_at } property with current time.\n\nIf the target journey's type is \"delivering\", this action may change\nthe related {@link IShoppingOrderGood.state goods' states} to be \"arrived\"." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "journeys", + "complete" + ], + "x-samchon-controller": "ShoppingSellerDeliveryJourneyController" } }, "/shoppings/sellers/deliveries/{deliveryId}/journeys/{id}": { "delete": { + "summary": "Erase a journey", + "description": "Erase a journey.\n\nErase a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nIf erasing journey is the last one of the belonged delivery, this action\nmay change the related {@link IShoppingOrderGood.state}. By erasing the last\njourney, the state rolls back to the previous.", "tags": [ "Order" ], @@ -5601,8 +7415,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged delivery's ", - "required": true + "required": true, + "description": " Belonged delivery's {@link IShoppingDelivery.id }" }, { "name": "id", @@ -5611,21 +7425,37 @@ "type": "string", "format": "uuid" }, - "description": "Target journey's ", - "required": true + "required": true, + "description": " Target journey's {@link IShoppingDeliveryJourney.id }" } ], "responses": { "200": { - "description": "Newly created journey" + "description": "Newly created journey", + "content": { + "application/json": {} + } } }, - "summary": "Erase a journey", - "description": "Erase a journey.\n\nErase a {@link IShoppingDeliveryJourney journey} of the\n{@link IShoppingDelivery delivery}.\n\nIf erasing journey is the last one of the belonged delivery, this action\nmay change the related {@link IShoppingOrderGood.state }. By erasing the last\njourney, the state rolls back to the previous." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "journeys", + "erase" + ], + "x-samchon-controller": "ShoppingSellerDeliveryJourneyController" } }, "/shoppings/sellers/deliveries/{deliveryId}/shippers": { "post": { + "summary": "Create a new shipper", + "description": "Create a new shipper.\n\nCreate a new {@link IShoppingDeliveryShipper shipper} of the\n{@link IShoppingDelivery delivery}.\n\nThis action does not affect to the related {@link IShoppingOrder orders} or\n{@link IShoppingOrderGood goods} like {@link IShoppingDeliveryJourney}\nor {@link IShoppingDeliveryPiece} case, but just informs to the\n{@link IShoppingCustomer customer}.", "tags": [ "Order" ], @@ -5637,8 +7467,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged delivery's ", - "required": true + "required": true, + "description": " Belonged delivery's {@link IShoppingDelivery.id }" } ], "requestBody": { @@ -5664,12 +7494,25 @@ } } }, - "summary": "Create a new shipper", - "description": "Create a new shipper.\n\nCreate a new {@link IShoppingDeliveryShipper shipper} of the\n{@link IShoppingDelivery delivery}.\n\nThis action does not affect to the related {@link IShoppingOrder orders} or\n{@link IShoppingOrderGood goods} like {@link IShoppingDeliveryJourney }\nor {@link IShoppingDeliveryPiece } case, but just informs to the\n{@link IShoppingCustomer customer}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "deliveries", + "shippers", + "create" + ], + "x-samchon-controller": "ShoppingSellerDeliveryShipperController" } }, "/shoppings/sellers/coupons": { "post": { + "summary": "Create a new coupon", + "description": "Create a new coupon.\n\nCreate a new {@link IShoppingCoupon coupon} with given information.\n\nBy the way, if you are a {@link IShoppingSeller seller}, you have to\nadd include direction's {@link IShoppingCouponSellerCriteria} or\n{@link IShoppingCouponSaleCriteria} condition. This is because only\n{@link IShoppingAdministrator administrators} can create a coupon\nwhich can be used throughout the market. Seller must limit the usage\nrange by his/her {@link IShoppingSale sale(s)}.\n\nOf course, when adminstrator is planning to make a general coupon\nthat can be used throughout the market, the administrator must\nget agree from the sellers who are going to be affected.", "tags": [ "Discount" ], @@ -5697,10 +7540,22 @@ } } }, - "summary": "Create a new coupon", - "description": "Create a new coupon.\n\nCreate a new {@link IShoppingCoupon coupon} with given information.\n\nBy the way, if you are a {@link IShoppingSeller seller}, you have to\nadd include direction's {@link IShoppingCouponSellerCriteria } or\n{@link IShoppingCouponSaleCriteria } condition. This is because only\n{@link IShoppingAdministrator administrators} can create a coupon\nwhich can be used throughout the market. Seller must limit the usage\nrange by his/her {@link IShoppingSale sale(s)}.\n\nOf course, when adminstrator is planning to make a general coupon\nthat can be used throughout the market, the administrator must\nget agree from the sellers who are going to be affected." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "coupons", + "create" + ], + "x-samchon-controller": "ShoppingSellerCouponController" }, "patch": { + "summary": "List up every coupons", + "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up.", "tags": [ "Discount" ], @@ -5728,12 +7583,24 @@ } } }, - "summary": "List up every coupons", - "description": "List up every coupons.\n\nList up every {@link IShoppingCoupon coupons} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingCoupon.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingCoupon.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nonly {@link IShoppingCouponTicket ticketable} coupons would be listed up.\nOtherwise, non-ticketable coupons would also be listed up." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "coupons", + "index" + ], + "x-samchon-controller": "ShoppingSellerCouponController" } }, "/shoppings/sellers/coupons/{id}": { "delete": { + "summary": "Erase a coupon", + "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time.", "tags": [ "Discount" ], @@ -5744,19 +7611,34 @@ "schema": { "type": "string" }, - "description": "Target coupon's ", - "required": true + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase a coupon", - "description": "Erase a coupon.\n\nErase a {@link IShoppingCoupon coupon} with given ID.\n\nFor reference, if there're some {@link IShoppingCouponTicket tickets}\nwhich are already issued from the target coupon, they would not be affected.\nThose tickets are still valid until their expration time." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "coupons", + "erase" + ], + "x-samchon-controller": "ShoppingSellerCouponController" }, "get": { + "summary": "Get a coupon info", + "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible.", "tags": [ "Discount" ], @@ -5767,8 +7649,8 @@ "schema": { "type": "string" }, - "description": "Target coupon's ", - "required": true + "required": true, + "description": " Target coupon's {@link IShoppingCoupon.id }" } ], "responses": { @@ -5783,12 +7665,24 @@ } } }, - "summary": "Get a coupon info", - "description": "Get a coupon info.\n\nGet a {@link IShoppingCoupon coupon} information.\n\nIf you are a {@link IShoppingCustomer customer}, then only\n{@link IShoppingCouponTicket ticketable} coupons are accessible. Non\nticketable coupons cause 410 gone error. Otherwise you are a\n{@link IShoppingSeller seller} or {@link IShoppingAdministrator administrator},\nnon-ticketable coupons are also accessible." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "coupons", + "at" + ], + "x-samchon-controller": "ShoppingSellerCouponController" } }, "/shoppings/sellers/orders": { "patch": { + "summary": "List up every orders", + "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order.", "tags": [ "Order" ], @@ -5816,12 +7710,24 @@ } } }, - "summary": "List up every orders", - "description": "List up every orders.\n\nList up every {@link IShoppingOrder orders} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingOrder.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingOrder.IRequest.sort sort condition}.\n\nFor reference, if you are a {@link IShoppingCustomer customer}, then\nyou can list up your own orders, and it is not a matter whether the\norder has been {@link IShoppingOrderPublish.paid_at paid} or not.\n\nOtherwise you are a {@link IShoppingSeller seller} or\n{@link IShoppingAdministrator administrator}, then you can list up\nonly paid orders. Also, in the seller case, only related\n{@link IShoppingOrder.goods goods} would be listed up in the order." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "orders", + "index" + ], + "x-samchon-controller": "ShoppingSellerOrderController" } }, "/shoppings/sellers/orders/{id}": { "get": { + "summary": "Get an order info", + "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown.", "tags": [ "Order" ], @@ -5833,8 +7739,8 @@ "type": "string", "format": "uuid" }, - "description": "Target order's ", - "required": true + "required": true, + "description": " Target order's {@link IShoppingOrder.id }" } ], "responses": { @@ -5849,12 +7755,24 @@ } } }, - "summary": "Get an order info", - "description": "Get an order info.\n\nGet a detailed {@link IShoppingOrder order} information.\n\nIf you are not a {@link IShoppingCustomer customer}, then you can't\naccess to the order which has not been\n{@link IShoppingOrderPublish.paid_at paid} yet. In that case,\n404 not found error would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "orders", + "at" + ], + "x-samchon-controller": "ShoppingSellerOrderController" } }, "/shoppings/sellers/sales": { "post": { + "summary": "Create a sale", + "description": "Create a sale.\n\n{@link IShoppingSeller Seller} creates a new {@link IShoppingSale} for\noperation.\n\nFor reference, sale has complicate hierarchical structure that composing\nwith {@link IShoppingSaleUnit units}, {@link IShoppingSaleUnitOption options}\nand {@link IShoppingSaleUnitStock stocks}. Therefore, I recommend you to\nread the {@link IShoppingSale} and related DTOs' documents before creating\na new sale.\n\nERD (Entity Relationship Diagram) and its description document also would\nbe helpful, too.", "tags": [ "Sale" ], @@ -5882,10 +7800,22 @@ } } }, - "summary": "Create a sale", - "description": "Create a sale.\n\n{@link IShoppingSeller Seller} creates a new {@link IShoppingSale } for\noperation.\n\nFor reference, sale has complicate hierarchical structure that composing\nwith {@link IShoppingSaleUnit units}, {@link IShoppingSaleUnitOption options}\nand {@link IShoppingSaleUnitStock stocks}. Therefore, I recommend you to\nread the {@link IShoppingSale } and related DTOs' documents before creating\na new sale.\n\nERD (Entity Relationship Diagram) and its description document also would\nbe helpful, too." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "create" + ], + "x-samchon-controller": "ShoppingSellerSaleController" }, "patch": { + "summary": "List up every summarized sales", + "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at} function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -5913,12 +7843,24 @@ } } }, - "summary": "List up every summarized sales", - "description": "List up every summarized sales.\n\nList up every {@link IShoppingSale.ISummary summarized sales}.\n\nAs you can see, returned sales are summarized, not detailed. If you want\nto get the detailed information of a sale, use {@link at } function for\neach sale.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}s. Otherwise you're a\n{@link IShoppingCustomer customer}, you can see only the operating\nsales in the market. You can't see the unopened, closed, or suspended\nsales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSale.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSale.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{id}": { "put": { + "summary": "Update a sale", + "description": "Update a sale.\n\nUpdate a {@link IShoppingSale sale} with new information.\n\nBy the way, the sale actually does not being modified, but just make a new\n{@link IShoppingSaleSnapshot snapshot} record of the sale. Its 1st purpose\nis to keeping the integrity of the sale, due to modification of the sale\nmust not affect to the {@link IShoppingOrder orders} that already had been\napplied to the sale.\n\nThe 2nd purpose is for the A/B tests. {@link IShoppingSeller Seller} needs\nto demonstrate operating performance by chaning price, content, and\ncomposition of the product. This snapshot concept would be helpful for it.", "tags": [ "Sale" ], @@ -5930,8 +7872,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -5957,10 +7899,22 @@ } } }, - "summary": "Update a sale", - "description": "Update a sale.\n\nUpdate a {@link IShoppingSale sale} with new information.\n\nBy the way, the sale actually does not being modified, but just make a new\n{@link IShoppingSaleSnapshot snapshot} record of the sale. Its 1st purpose\nis to keeping the integrity of the sale, due to modification of the sale\nmust not affect to the {@link IShoppingOrder orders} that already had been\napplied to the sale.\n\nThe 2nd purpose is for the A/B tests. {@link IShoppingSeller Seller} needs\nto demonstrate operating performance by chaning price, content, and\ncomposition of the product. This snapshot concept would be helpful for it." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "update" + ], + "x-samchon-controller": "ShoppingSellerSaleController" }, "get": { + "summary": "Get a sale info", + "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales.", "tags": [ "Sale" ], @@ -5972,8 +7926,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { @@ -5988,12 +7942,24 @@ } } }, - "summary": "Get a sale info", - "description": "Get a sale info.\n\nGet a {@link IShoppingSale sale} with detailed information.\n\nIf you're a {@link IShoppingSeller seller}, you can only access to the\nyour own {@link IShoppingSale sale}. Otherwise you're a\n{@link IShoppingCustomer customer}, you can access to only the operating\nsales in the market. You can't access to the unopened, closed, or suspended\nsales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "at" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{id}/open": { "put": { + "summary": "Change opening and closing time of a sale", + "description": "Change opening and closing time of a sale.\n\nUpdate a {@link IShoppingSale sale}'s opening and closing time.\n\nBy the way, if the sale still be opened or closed, it is not possible to\nchange the opening time. In contrary, if the sale already had been opened\nbut still not closed, it is possible to change the closing time.\n\nOf course, if closing time is less than opening time or not,\n428 unprocessable entity error would be thrown.", "tags": [ "Sale" ], @@ -6005,8 +7971,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -6022,15 +7988,30 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Change opening and closing time of a sale", - "description": "Change opening and closing time of a sale.\n\nUpdate a {@link IShoppingSale sale}'s opening and closing time.\n\nBy the way, if the sale still be opened or closed, it is not possible to\nchange the opening time. In contrary, if the sale already had been opened\nbut still not closed, it is possible to change the closing time.\n\nOf course, if closing time is less than opening time or not,\n428 unprocessable entity error would be thrown." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "open" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{id}/replica": { "post": { + "summary": "Get replica of a sale", + "description": "Get replica of a sale.\n\nGet a {@link IShoppingSale.ICreate} typed info of the target sale for\nreplication.\n\nIt would be useful for creating a new replication\n{@link IShoppingSale sale} with similar innformatiopn.", "tags": [ "Sale" ], @@ -6042,8 +8023,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { @@ -6058,12 +8039,24 @@ } } }, - "summary": "Get replica of a sale", - "description": "Get replica of a sale.\n\nGet a {@link IShoppingSale.ICreate } typed info of the target sale for\nreplication.\n\nIt would be useful for creating a new replication\n{@link IShoppingSale sale} with similar innformatiopn." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "replica" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{id}/pause": { "delete": { + "summary": "Pause a sale", + "description": "Pause a sale.\n\nPause a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored}. By the way, {@link IShoppingCustomer customer}\nstill can sale from the {@link index} and {@link at} API endpints, but\n\"paused\" label would be attached.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the paused sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer.", "tags": [ "Sale" ], @@ -6075,21 +8068,36 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Pause a sale", - "description": "Pause a sale.\n\nPause a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored}. By the way, {@link IShoppingCustomer customer}\nstill can sale from the {@link index } and {@link at } API endpints, but\n\"paused\" label would be attached.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the paused sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "pause" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{id}/suspend": { "delete": { + "summary": "Suspend a sale", + "description": "Suspend a sale.\n\nSuspend a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored} and {@link IShoppingCustomer customer} cannot\nsee the sale from the {@link index} and {@link at} API.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the suspended sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer.", "tags": [ "Sale" ], @@ -6101,21 +8109,35 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Suspend a sale", - "description": "Suspend a sale.\n\nSuspend a {@link IShoppingSale sale} from {@link open opened} state.\nTherefore, the sale can not be operated again until it be\n{@link restore restored} and {@link IShoppingCustomer customer} cannot\nsee the sale from the {@link index } and {@link at } API.\n\nAlso, customer no more can put into the shopping cart, either.\nEven the sale already had been put into the shopping cart, the\n{@link IShoppingCartCommodity commodity} will not be listed on the\nshopping cart. Also, it is not possible to appling an\n{@link IShoppingOrder order} with the suspended sale's commodity, either.\n\nBy the way, if the sale already had been applied to an order, the order\ncan be {@link IShoppingOrderPublish published} and\n{@link IShoppingSeller seller} must {@link IShoppingDelivery deliver} the\ngood to the customer." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "suspend" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{id}/restore": { "put": { + "description": "Restore a sale\n\nRestore a {@link IShoppingSale sale} from {@link pause paused} or\n{@link suspend suspended} state\n\nTherefore the sale can be operated again if its\n{@link IShoppingSale.closed_at closing time} has not been reached.\nAlso, if a {@link IShoppingCustomer customer} had put the sale into the\nshopping cart when being paused or suspended, the\n{@link IShoppingCartCommodity commodity} will be listed again on the\nshopping cart.", "tags": [ "Sale" ], @@ -6127,20 +8149,36 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "description": "Restore a sale\n\nRestore a {@link IShoppingSale sale} from {@link pause paused} or\n{@link suspend suspended} state\n\nTherefore the sale can be operated again if its\n{@link IShoppingSale.closed_at closing time} has not been reached.\nAlso, if a {@link IShoppingCustomer customer} had put the sale into the\nshopping cart when being paused or suspended, the\n{@link IShoppingCartCommodity commodity} will be listed again on the\nshopping cart." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "restore" + ], + "x-samchon-controller": "ShoppingSellerSaleController" } }, "/shoppings/sellers/sales/{saleId}/questions/{questionId}/answer": { "post": { + "summary": "Write an answer article", + "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer}.\n\nNote that, this is the formal answer that can be written only one per\na question article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe question article as many as he/she wants, it would be useful for\nadditional communication.", "tags": [ "Sale" ], @@ -6152,8 +8190,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "questionId", @@ -6162,8 +8200,8 @@ "type": "string", "format": "uuid" }, - "description": "Target question's ", - "required": true + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" } ], "requestBody": { @@ -6189,10 +8227,24 @@ } } }, - "summary": "Write an answer article", - "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer }.\n\nNote that, this is the formal answer that can be written only one per\na question article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe question article as many as he/she wants, it would be useful for\nadditional communication." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "answer", + "create" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionAnswerController" }, "put": { + "summary": "Update an answer article", + "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer}.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -6204,8 +8256,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "questionId", @@ -6214,8 +8266,8 @@ "type": "string", "format": "uuid" }, - "description": "Target question's ", - "required": true + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" } ], "requestBody": { @@ -6241,12 +8293,26 @@ } } }, - "summary": "Update an answer article", - "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry question article} written by a\n{@link IShoppingCustomer }.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a question articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "answer", + "update" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionAnswerController" } }, "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments": { "patch": { + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales.", "tags": [ "Sale" ], @@ -6258,8 +8324,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6268,8 +8334,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -6295,10 +8361,24 @@ } } }, - "summary": "List up every inquiry comments", - "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "comments", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionCommentController" }, "post": { + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales.", "tags": [ "Sale" ], @@ -6310,8 +8390,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6320,8 +8400,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry's ", - "required": true + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -6347,12 +8427,26 @@ } } }, - "summary": "Create an inquiry comment", - "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "comments", + "create" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionCommentController" } }, "/shoppings/sellers/sales/{saleId}/questions/{inquiryId}/comments/{id}": { "get": { + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales.", "tags": [ "Sale" ], @@ -6364,8 +8458,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6374,8 +8468,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -6384,8 +8478,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "responses": { @@ -6400,11 +8494,25 @@ } } }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." - }, - "put": { - "tags": [ + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "comments", + "at" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionCommentController" + }, + "put": { + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", + "tags": [ "Sale" ], "parameters": [ @@ -6415,8 +8523,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6425,8 +8533,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -6435,8 +8543,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "requestBody": { @@ -6462,12 +8570,26 @@ } } }, - "summary": "Update an inquiry comment", - "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "comments", + "update" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionCommentController" } }, "/shoppings/sellers/sales/{saleId}/questions": { "patch": { + "summary": "List up every summarized questions", + "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges} function\nor {@link at} function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret} with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -6479,8 +8601,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -6506,12 +8628,25 @@ } } }, - "summary": "List up every summarized questions", - "description": "List up every summarized questions.\n\nList up every {@link IShoppingSaleQuestion.ISummary summarized questions} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned questions are summarized, not detailed. If you want\nto get the detailed information of a question, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.ISummary.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionController" } }, "/shoppings/sellers/sales/{saleId}/questions/abridges": { "patch": { + "summary": "List up every abridged questions", + "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at} function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret} with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -6523,8 +8658,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -6550,12 +8685,25 @@ } } }, - "summary": "List up every abridged questions", - "description": "List up every abridged questions.\n\nList up every {@link IShoppingSaleQuestion.IAbridge abridged questions} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned questions are abridged, not detailed. If you want\nto get the detailed information of a question, use {@link at } function\nfor each article.\n\nAlso, returned question has {@link IShoppingSaleQuestion.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\nAdditionally, returned question has another special property\n{@link IShoppingSaleQuestion.IAridge.secret } with masking to other\nprincple properties, and it means only related actors can {@link at read}\nthe question.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s questions. Otherwise,\nyou can access to every questions of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleQuestion.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleQuestion.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "abridges" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionController" } }, "/shoppings/sellers/sales/{saleId}/questions/{id}": { "get": { + "summary": "Get a question info", + "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret}\nvalue is `false`.", "tags": [ "Sale" ], @@ -6567,8 +8715,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -6577,8 +8725,8 @@ "type": "string", "format": "uuid" }, - "description": "Target question's ", - "required": true + "required": true, + "description": " Target question's {@link IShoppingSaleQuestion.id }" } ], "responses": { @@ -6593,12 +8741,25 @@ } } }, - "summary": "Get a question info", - "description": "Get a question info.\n\nGet a detailed {@link IShoppingSaleQuestion question} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s question. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nquestions of the sales except the {@link IShoppingSaleQuestion.secret }\nvalue is `false`." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "questions", + "at" + ], + "x-samchon-controller": "ShoppingSellerSaleQuestionController" } }, "/shoppings/sellers/sales/{saleId}/reviews/{reviewId}/answer": { "post": { + "summary": "Write an answer article", + "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer}.\n\nNote that, this is the formal answer that can be written only one per\na review article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe review article as many as he/she wants, it would be useful for\nadditional communication.", "tags": [ "Sale" ], @@ -6610,8 +8771,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "reviewId", @@ -6620,8 +8781,8 @@ "type": "string", "format": "uuid" }, - "description": "Target review's ", - "required": true + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" } ], "requestBody": { @@ -6647,10 +8808,24 @@ } } }, - "summary": "Write an answer article", - "description": "Write an answer article.\n\nWrite a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer }.\n\nNote that, this is the formal answer that can be written only one per\na review article (but {@link update updatable}). Therefore, it needs to\nguide the {@link IShoppingSeller seller} to write it carefully.\n\nAlso, as seller can write {@link IShoppingSaleInquiryComment comments} to\nthe review article as many as he/she wants, it would be useful for\nadditional communication." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "answer", + "create" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewAnswerController" }, "put": { + "summary": "Update an answer article", + "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer}.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a review articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -6662,8 +8837,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "reviewId", @@ -6672,8 +8847,8 @@ "type": "string", "format": "uuid" }, - "description": "Target review's ", - "required": true + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" } ], "requestBody": { @@ -6699,12 +8874,26 @@ } } }, - "summary": "Update an answer article", - "description": "Update an answer article.\n\nUpdate a formal {@link IShoppingSaleInquiryAnswer answer article} to a\nspecific {@link IShoppingSaleInquiry review article} written by a\n{@link IShoppingCustomer }.\n\nBy the way, as is the general policy of this shopping mall regarding\narticles, modifying a review articles does not actually change the\nexisting content. Modified content is accumulated and recorded in the\nexisting article record as a new\n{@link IShoppingSaleInquiryAnswer.ISnapshot snapshot}. And this is made\npublic to everyone, including the {@link IShoppingCustomer customer} and the\n{@link IShoppingSeller seller}, and anyone who can view the article can\nalso view the entire editing histories.\n\nThis is to prevent customers or sellers from modifying their articles and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "answer", + "update" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewAnswerController" } }, "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments": { "patch": { + "summary": "List up every inquiry comments", + "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales.", "tags": [ "Sale" ], @@ -6716,8 +8905,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6726,8 +8915,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -6753,10 +8942,24 @@ } } }, - "summary": "List up every inquiry comments", - "description": "List up every inquiry comments.\n\nList up every {@link IShoppingSaleInquiryComment inquiry comments} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}\nwith {@link IPage pagination}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleInquiryComment.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleInquiryComment.IRequest.sort sort condition}.\n\nBy the way, if you're a {@link IShoppingSeller seller}, you can only access\nto the your own {@link IShoppingSale sale}'s inquiries. Otherwise, you\ncan access to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "comments", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewCommentController" }, "post": { + "summary": "Create an inquiry comment", + "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales.", "tags": [ "Sale" ], @@ -6768,8 +8971,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6778,8 +8981,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry's ", - "required": true + "required": true, + "description": " Target inquiry's {@link IShoppingSaleInquiry.id }" } ], "requestBody": { @@ -6805,12 +9008,26 @@ } } }, - "summary": "Create an inquiry comment", - "description": "Create an inquiry comment.\n\nCreate an {@link IShoppingSaleInquiryComment inquiry comment} of a\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\ncreate an inquiry comment to your own {@link IShoppingSale sale}'s inquiry.\nOtherwise, you can create an inquiry comment to every inquiries of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "comments", + "create" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewCommentController" } }, "/shoppings/sellers/sales/{saleId}/reviews/{inquiryId}/comments/{id}": { "get": { + "summary": "Get an inquiry comment info", + "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales.", "tags": [ "Sale" ], @@ -6822,8 +9039,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6832,8 +9049,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -6842,8 +9059,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "responses": { @@ -6858,10 +9075,24 @@ } } }, - "summary": "Get an inquiry comment info", - "description": "Get an inquiry comment info.\n\nGet a detailed {@link IShoppingSaleInquiryComment inquiry comment}\ninformation of a {@link IShoppingSaleQuestion question} or\n{@link IShoppingSaleReview review}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s inquiry comment.\nOtherwise, you can access to every inquiry comments of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "comments", + "at" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewCommentController" }, "put": { + "summary": "Update an inquiry comment", + "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence.", "tags": [ "Sale" ], @@ -6873,8 +9104,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "inquiryId", @@ -6883,8 +9114,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged inquiry's ", - "required": true + "required": true, + "description": " Belonged inquiry's {@link IShoppingSaleInquiry.id }" }, { "name": "id", @@ -6893,8 +9124,8 @@ "type": "string", "format": "uuid" }, - "description": "Target inquiry comment's ", - "required": true + "required": true, + "description": " Target inquiry comment's {@link IShoppingSaleInquiryComment.id }" } ], "requestBody": { @@ -6920,12 +9151,26 @@ } } }, - "summary": "Update an inquiry comment", - "description": "Update an inquiry comment.\n\nUpdate an {@link IShoppingSaleInquiryComment inquiry comment} to a specific\n{@link IShoppingSaleQuestion question} or {@link IShoppingSaleReview review}.\n\nBy the way, as is the general policy of this shopping mall regarding\ncomments, modifying a comment does not actually change the existing content.\nModified content is accumulated and recorded in the existing comment record\nas a new {@link IShoppingSaleInquiryComment.ISnapshot snapshot}. And this\nis made public to everyone, who can read this inquiry comment.\n\nThis is to prevent customers or sellers from modifying their comments and\nmanipulating the circumstances due to the nature of e-commerce, where\ndisputes easily arise. That is, to preserve evidence." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "comments", + "update" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewCommentController" } }, "/shoppings/sellers/sales/{saleId}/reviews": { "patch": { + "summary": "List up every summarized reviews", + "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges} function\nor {@link at} function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -6937,8 +9182,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -6964,12 +9209,25 @@ } } }, - "summary": "List up every summarized reviews", - "description": "List up every summarized reviews.\n\nList up every {@link IShoppingSaleReview.ISummary summarized reviews} of a\n{@link IShoppingSale sale}.\n\nAs you can see, returned reviews are summarized, not detailed. If you want\nto get the detailed information of a review, use {@link adridges } function\nor {@link at } function for each article.\n\nAlso, returned review has {@link IShoppingSaleReview.ISummary.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewController" } }, "/shoppings/sellers/sales/{saleId}/reviews/abridges": { "patch": { + "summary": "List up every abridged reviews", + "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at} function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer}\nproperty which means the formal answer from the {@link IShoppingSeller}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}.", "tags": [ "Sale" ], @@ -6981,8 +9239,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -7008,12 +9266,25 @@ } } }, - "summary": "List up every abridged reviews", - "description": "List up every abridged reviews.\n\nList up every {@link IShoppingSaleReview.IAbridge abridged reviews} of\na {@link IShoppingSale sale}.\n\nAs you can see, returned reviews are abridged, not detailed. If you want\nto get the detailed information of a review, use {@link at } function\nfor each article.\n\nAlso, returned review has {@link IShoppingSaleReview.IAridge.answer }\nproperty which means the formal answer from the {@link IShoppingSeller }.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s reviews. Otherwise,\nyou can access to every reviews of the sales.\n\nBy the way, if you want, you can limit the result by configuring\n{@link IShoppingSaleReview.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingSaleReview.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "abridges" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewController" } }, "/shoppings/sellers/sales/{saleId}/reviews/{id}": { "get": { + "summary": "Get a review info", + "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales.", "tags": [ "Sale" ], @@ -7025,8 +9296,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -7035,8 +9306,8 @@ "type": "string", "format": "uuid" }, - "description": "Target review's ", - "required": true + "required": true, + "description": " Target review's {@link IShoppingSaleReview.id }" } ], "responses": { @@ -7051,12 +9322,25 @@ } } }, - "summary": "Get a review info", - "description": "Get a review info.\n\nGet a detailed {@link IShoppingSaleReview review} information of a\n{@link IShoppingSale sale}.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s review. Otherwise\nyou are a {@link IShoppingCustomer customer}, you can access to every\nreviews of the sales." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "reviews", + "at" + ], + "x-samchon-controller": "ShoppingSellerSaleReviewController" } }, "/shoppings/sellers/sales/{saleId}/snapshots/{id}/replica": { "post": { + "summary": "Get replica of a snapshot", + "description": "Get replica of a snapshot.\n\nGet a {@link IShoppingSale.ICreate} typed info of the target\n{@link IShoppingSaleSnapshot snapshot} record for replication.\n\nIt would be useful for creating a new replication {@link IShoppingSale sale}\nfrom the old snapshot.", "tags": [ "Sale" ], @@ -7068,8 +9352,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -7078,8 +9362,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -7094,12 +9378,25 @@ } } }, - "summary": "Get replica of a snapshot", - "description": "Get replica of a snapshot.\n\nGet a {@link IShoppingSale.ICreate } typed info of the target\n{@link IShoppingSaleSnapshot snapshot} record for replication.\n\nIt would be useful for creating a new replication {@link IShoppingSale sale}\nfrom the old snapshot." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "snapshots", + "replica" + ], + "x-samchon-controller": "ShoppingSellerSaleSnapshotController" } }, "/shoppings/sellers/sales/{saleId}/snapshots": { "patch": { + "summary": "List up every snapshots", + "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at} or {@link flipo} function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended.", "tags": [ "Sale" ], @@ -7111,8 +9408,8 @@ "type": "string", "format": "uuid" }, - "description": "Target sale's ", - "required": true + "required": true, + "description": " Target sale's {@link IShoppingSale.id }" } ], "requestBody": { @@ -7138,12 +9435,25 @@ } } }, - "summary": "List up every snapshots", - "description": "List up every snapshots.\n\nWhenever {@link IShoppingSeller seller} updates a\n{@link IShoppingSale sale}, the sale record is not updated but a new\n{@link IShoppingSaleSnapshot snapshot} record is created to keep the\nintegrity of the sale history. This API function is for listing up\nsuch snapshot records.\n\nAlso, as you can see from the return type, returned snapshots are\nsummarized, not detailed. If you want to get the detailed information\nof a snapshot, use {@link at } or {@link flipo } function for each snapshot.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "snapshots", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleSnapshotController" } }, "/shoppings/sellers/sales/{saleId}/snapshots/{id}": { "get": { + "summary": "Get a snapshot info", + "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip} function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended.", "tags": [ "Sale" ], @@ -7155,8 +9465,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -7165,8 +9475,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -7181,12 +9491,25 @@ } } }, - "summary": "Get a snapshot info", - "description": "Get a snapshot info.\n\nGet a {@link IShoppingSaleSnapshot snapshot} with detailed information.\n\nAs you can see from the return type, returned snapshot does not contain\nthe {@link IShoppingSale sale} info. If you want to get the sale info,\nuse the {@link flip } function instead.\n\nFor reference, if you're a {@link IShoppingSeller seller}, you can only\naccess to the your own {@link IShoppingSale sale}'s snapshots. Otherwise,\nyou can access to every snapshots of the sales even though the sale has\nbeen closed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "snapshots", + "at" + ], + "x-samchon-controller": "ShoppingSellerSaleSnapshotController" } }, "/shoppings/sellers/sales/{saleId}/snapshots/{id}/flip": { "get": { + "summary": "Get a flipped snapshot info", + "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended.", "tags": [ "Sale" ], @@ -7198,8 +9521,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "id", @@ -7208,8 +9531,8 @@ "type": "string", "format": "uuid" }, - "description": "Target snapshot's ", - "required": true + "required": true, + "description": " Target snapshot's {@link IShoppingSaleSnapshot.id }" } ], "responses": { @@ -7224,12 +9547,25 @@ } } }, - "summary": "Get a flipped snapshot info", - "description": "Get a flipped snapshot info.\n\nGet a {@link IShoppingSale sale} info of a flipped snapshot.\n\nAs you can see from the return type, this function returns the\n{@link IShoppingSale sale} info. By the way, the sale info is not the\nlatest one, but a flipped info in the snapshot side.\n\nAlso, if you're a {@link IShoppingSeller seller}, you can only access to\nthe your own {@link IShoppingSale sale}'s snapshots. Otherwise, you can\naccess to every snapshots of the sales even though the sale has been\nclosed or suspended." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "snapshots", + "flip" + ], + "x-samchon-controller": "ShoppingSellerSaleSnapshotController" } }, "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements": { "patch": { + "summary": "List up every supplements", + "description": "List up every supplements.\n\nList up every {@link IShoppingSaleUnitStockSupplement supplement histories}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleUnitStockSupplement.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingSaleUnitStockSupplement.IRequest.sort}\nproperty.", "tags": [ "Sale" ], @@ -7241,8 +9577,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "unitId", @@ -7251,8 +9587,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged unit's ", - "required": true + "required": true, + "description": " Belonged unit's {@link IShoppingSaleUnit.id }" }, { "name": "stockId", @@ -7261,8 +9597,8 @@ "type": "string", "format": "uuid" }, - "description": "Target stock's ", - "required": true + "required": true, + "description": " Target stock's {@link IShoppingSaleUnitStock.id }" } ], "requestBody": { @@ -7288,10 +9624,25 @@ } } }, - "summary": "List up every supplements", - "description": "List up every supplements.\n\nList up every {@link IShoppingSaleUnitStockSupplement supplement histories}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSaleUnitStockSupplement.IRequest.search search condition} in\nthe request body. Also, it is possible to customize sequence order of\nrecords by configuring {@link IShoppingSaleUnitStockSupplement.IRequest.sort }\nproperty." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "units", + "stocks", + "supplements", + "index" + ], + "x-samchon-controller": "ShoppingSellerSaleUnitStockSupplementController" }, "post": { + "summary": "Create a supplement", + "description": "Create a supplement.\n\nCreate a {@link IShoppingSaleUnitStockSupplement supplement history} of a\nspecific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be increased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}.", "tags": [ "Sale" ], @@ -7303,8 +9654,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "unitId", @@ -7313,8 +9664,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged unit's ", - "required": true + "required": true, + "description": " Belonged unit's {@link IShoppingSaleUnit.id }" }, { "name": "stockId", @@ -7323,8 +9674,8 @@ "type": "string", "format": "uuid" }, - "description": "Target stock's ", - "required": true + "required": true, + "description": " Target stock's {@link IShoppingSaleUnitStock.id }" } ], "requestBody": { @@ -7350,12 +9701,27 @@ } } }, - "summary": "Create a supplement", - "description": "Create a supplement.\n\nCreate a {@link IShoppingSaleUnitStockSupplement supplement history} of a\nspecific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be increased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "units", + "stocks", + "supplements", + "create" + ], + "x-samchon-controller": "ShoppingSellerSaleUnitStockSupplementController" } }, "/shoppings/sellers/sales/{saleId}/units/{unitId}/stocks/{stockId}/supplements/{id}": { "put": { + "summary": "Update a supplement", + "description": "Update a supplement.\n\nUpdate quantity value of a {@link IShoppingSaleUnitStockSupplement supplement}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be changed by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}.", "tags": [ "Sale" ], @@ -7367,8 +9733,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "unitId", @@ -7377,8 +9743,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged unit's ", - "required": true + "required": true, + "description": " Belonged unit's {@link IShoppingSaleUnit.id }" }, { "name": "stockId", @@ -7387,8 +9753,8 @@ "type": "string", "format": "uuid" }, - "description": "Target stock's ", - "required": true + "required": true, + "description": " Target stock's {@link IShoppingSaleUnitStock.id }" }, { "name": "id", @@ -7397,8 +9763,8 @@ "type": "string", "format": "uuid" }, - "description": "Target supplement's ", - "required": true + "required": true, + "description": " Target supplement's {@link IShoppingSaleUnitStockSupplement.id }" } ], "requestBody": { @@ -7414,13 +9780,31 @@ }, "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Update a supplement", - "description": "Update a supplement.\n\nUpdate quantity value of a {@link IShoppingSaleUnitStockSupplement supplement}\nof a specific {@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be changed by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "units", + "stocks", + "supplements", + "update" + ], + "x-samchon-controller": "ShoppingSellerSaleUnitStockSupplementController" }, "delete": { + "summary": "Erase a supplement", + "description": "Erase a supplement.\n\nErase a {@link IShoppingSaleUnitStockSupplement supplement} of a specific\n{@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be decreased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}.", "tags": [ "Sale" ], @@ -7432,8 +9816,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged sale's ", - "required": true + "required": true, + "description": " Belonged sale's {@link IShoppingSale.id }" }, { "name": "unitId", @@ -7442,8 +9826,8 @@ "type": "string", "format": "uuid" }, - "description": "Belonged unit's ", - "required": true + "required": true, + "description": " Belonged unit's {@link IShoppingSaleUnit.id }" }, { "name": "stockId", @@ -7452,8 +9836,8 @@ "type": "string", "format": "uuid" }, - "description": "Target stock's ", - "required": true + "required": true, + "description": " Target stock's {@link IShoppingSaleUnitStock.id }" }, { "name": "id", @@ -7462,21 +9846,39 @@ "type": "string", "format": "uuid" }, - "description": "Target supplement's ", - "required": true + "required": true, + "description": " Target supplement's {@link IShoppingSaleUnitStockSupplement.id }" } ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": {} + } } }, - "summary": "Erase a supplement", - "description": "Erase a supplement.\n\nErase a {@link IShoppingSaleUnitStockSupplement supplement} of a specific\n{@link IShoppingSaleUnitStock stock}.\n\nTherefore, {@link IShoppingSaleUnitStockInventory.income inventory} of the\ntarget stock will be decreased by the\n{@link IShoppingSaleUnitStockSupplement.value supplement's value}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "sales", + "units", + "stocks", + "supplements", + "erase" + ], + "x-samchon-controller": "ShoppingSellerSaleUnitStockSupplementController" } }, "/shoppings/sellers/systematic/channels/{channelCode}/categories": { "patch": { + "summary": "List up every categories with children records", + "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -7487,8 +9889,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" } ], "responses": { @@ -7506,12 +9908,26 @@ } } }, - "summary": "List up every categories with children records", - "description": "List up every categories with children records.\n\nList up every {@link IShoppingChannelCategory.IHierarchical categories}\nof a {@link IShoppingChannel channel} with pagination. Returned categories\ncontain children categories, too.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannelCategory.IRequest.search search condition} in the\nrequest body. Also, it is possible to customize sequence order of records\nby configuring {@link IShoppingChannelCategory.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "categories", + "index" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelCategoryController" } }, "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}": { "get": { + "summary": "Get a category info", + "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too.", "tags": [ "Systematic" ], @@ -7522,8 +9938,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -7532,8 +9948,8 @@ "type": "string", "format": "uuid" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "responses": { @@ -7548,12 +9964,26 @@ } } }, - "summary": "Get a category info", - "description": "Get a category info.\n\nGet a detailed {@link IShoppingChannelCategory category} information.\n\nReturned category contains hierarchical children categories, and also\ncontains the recursive parent categories, too." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "categories", + "at" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelCategoryController" } }, "/shoppings/sellers/systematic/channels/{channelCode}/categories/{id}/invert": { "get": { + "summary": "Get a category info of inverted", + "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories.", "tags": [ "Systematic" ], @@ -7564,8 +9994,8 @@ "schema": { "type": "string" }, - "description": "Belonged channel's ", - "required": true + "required": true, + "description": " Belonged channel's {@link IShoppingChannel.code }" }, { "name": "id", @@ -7574,8 +10004,8 @@ "type": "string", "format": "uuid" }, - "description": "Target category's ", - "required": true + "required": true, + "description": " Target category's {@link IShoppingChannelCategory.id }" } ], "responses": { @@ -7590,12 +10020,26 @@ } } }, - "summary": "Get a category info of inverted", - "description": "Get a category info of inverted.\n\nGet a inverted {@link IShoppingChannelCategory.IInvert category} information.\n\nReturned category contains the recursive parent categories, but not contains\nthe hierarchical children categories." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "categories", + "invert" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelCategoryController" } }, "/shoppings/sellers/systematic/channels": { "patch": { + "summary": "List up every channels", + "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -7623,12 +10067,25 @@ } } }, - "summary": "List up every channels", - "description": "List up every channels.\n\nList up every {@link IShoppingChannel channels} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "index" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelController" } }, "/shoppings/sellers/systematic/channels/hierarchical": { "patch": { + "summary": "List up every channels with nested categories", + "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}.", "tags": [ "Systematic" ], @@ -7656,12 +10113,25 @@ } } }, - "summary": "List up every channels with nested categories", - "description": "List up every channels with nested categories.\n\nList up every {@link IShoppingChannel.IHierarchical channels} with\n{@link IPage pagination}. Returned channels contain nested hierarchical\n{@link IShoppingChannelCategory.IHierarchical categories}.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingChannel.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingChannel.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "hierarchical" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelController" } }, "/shoppings/sellers/systematic/channels/{id}": { "get": { + "summary": "Get a channel info", + "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations.", "tags": [ "Systematic" ], @@ -7673,8 +10143,8 @@ "type": "string", "format": "uuid" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.id }" } ], "responses": { @@ -7689,12 +10159,25 @@ } } }, - "summary": "Get a channel info", - "description": "Get a channel info.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "at" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelController" } }, "/shoppings/sellers/systematic/channels/{code}/get": { "get": { + "summary": "Get a channel info by its code", + "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations.", "tags": [ "Systematic" ], @@ -7705,8 +10188,8 @@ "schema": { "type": "string" }, - "description": "Target channel's ", - "required": true + "required": true, + "description": " Target channel's {@link IShoppingChannel.code }" } ], "responses": { @@ -7721,12 +10204,25 @@ } } }, - "summary": "Get a channel info by its code", - "description": "Get a channel info by its code.\n\nGet a detailed {@link IShoppingChannel.IHierarchical channel} information\nby its code.\n\nReturned channel instance also contains the nested\n{@link IShoppingChannelCategory.IHierarchical hierarchical category}\ninformations." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "channels", + "get" + ], + "x-samchon-controller": "ShoppingSellerSystematicChannelController" } }, "/shoppings/sellers/systematic/sections": { "patch": { + "summary": "List up every sections", + "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}.", "tags": [ "Section" ], @@ -7754,12 +10250,25 @@ } } }, - "summary": "List up every sections", - "description": "List up every sections.\n\nList up every {@link IShoppingSection sections} with pagination.\n\nIf you want, you can limit the result by configuring\n{@link IShoppingSection.IRequest.search search condition} in the request\nbody. Also, it is possible to customize sequence order of records by\nconfiguring {@link IShoppingSection.IRequest.sort sort condition}." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "sections", + "index" + ], + "x-samchon-controller": "ShoppingSellerSystematicSectionController" } }, "/shoppings/sellers/systematic/sections/{id}": { "get": { + "summary": "Get a section info", + "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information.", "tags": [ "Section" ], @@ -7771,8 +10280,8 @@ "type": "string", "format": "uuid" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.id }" } ], "responses": { @@ -7787,12 +10296,25 @@ } } }, - "summary": "Get a section info", - "description": "Get a section info.\n\nGet a detailed {@link IShoppingSection section} information." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "sections", + "at" + ], + "x-samchon-controller": "ShoppingSellerSystematicSectionController" } }, "/shoppings/sellers/systematic/sections/{code}/get": { "get": { + "summary": "Get a section info by its code", + "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code.", "tags": [ "Section" ], @@ -7803,8 +10325,8 @@ "schema": { "type": "string" }, - "description": "Target section's ", - "required": true + "required": true, + "description": " Target section's {@link IShoppingSection.code }" } ], "responses": { @@ -7819,8 +10341,19 @@ } } }, - "summary": "Get a section info by its code", - "description": "Get a section info by its code.\n\nGet a detailed {@link IShoppingSection section} information by its code." + "security": [ + { + "bearer": [] + } + ], + "x-samchon-accessor": [ + "shoppings", + "sellers", + "systematic", + "sections", + "get" + ], + "x-samchon-controller": "ShoppingSellerSystematicSectionController" } } }, @@ -7864,19 +10397,25 @@ "type": "object", "properties": { "rss": { - "type": "number" + "type": "number", + "description": "Resident Set Size, is the amount of space occupied in the main memory device (that is a subset of the total allocated memory) for the\nprocess, including all C++ and JavaScript objects and code." }, "heapTotal": { - "type": "number" + "type": "number", + "title": "Refers to V8's memory usage", + "description": "Refers to V8's memory usage." }, "heapUsed": { - "type": "number" + "type": "number", + "title": "Refers to V8's memory usage", + "description": "Refers to V8's memory usage." }, "external": { "type": "number" }, "arrayBuffers": { - "type": "number" + "type": "number", + "description": "Refers to memory allocated for `ArrayBuffer`s and `SharedArrayBuffer`s, including all Node.js Buffers. This is also included\nin the external value. When Node.js is used as an embedded library, this value may be `0` because allocations for `ArrayBuffer`s\nmay not be tracked in that case." } }, "required": [ @@ -8168,6 +10707,7 @@ "Recordstringstring": { "type": "object", "properties": {}, + "required": [], "description": "Construct a type with a set of properties K of type T", "additionalProperties": { "type": "string" @@ -8217,7 +10757,7 @@ "id", "created_at" ], - "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.administrator },\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." + "description": "Invert information starting from administrator info.\n\nInstead of accessing to the administrator information from the\n{@link IShoppingCustomer.member} -> {@link IShoppingMember.administrator},\n`IShoppingAdministrator.IInvert` starts from the administrator information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." }, "IShoppingMember.IInvert": { "type": "object", @@ -8254,7 +10794,7 @@ "emails", "created_at" ], - "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + "description": "Invert information of member.\n\nThis invert member information has been designed to be used for another\ninvert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert}\n- {@link IShoppingAdministrator.IInvert}" }, "IShoppingMemberEmail": { "type": "object", @@ -8315,7 +10855,7 @@ "type": "string", "format": "uri", "title": "Connection address", - "description": "Connection address.\n\nSame with {@link window.location.href } of client." + "description": "Connection address.\n\nSame with {@link window.location.href} of client." }, "referrer": { "oneOf": [ @@ -8325,10 +10865,14 @@ { "type": "string", "format": "uri" + }, + { + "type": "string", + "maxLength": 0 } ], "title": "Referrer address", - "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + "description": "Referrer address.\n\nSame with {@link window.document.referrer} of client." }, "ip": { "oneOf": [ @@ -8360,7 +10904,7 @@ "ip", "created_at" ], - "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert }\n- {@link IShoppingAdministrator.IInvert }" + "description": "Inverted customer informatino.\n\nThis inverted customer information has been designed to be used for\nanother invert informations of sellers and administrators like below.\n\n- {@link IShoppingSeller.IInvert}\n- {@link IShoppingAdministrator.IInvert}" }, "IShoppingChannel": { "type": "object", @@ -8423,16 +10967,16 @@ "title": "Creation time of record", "description": "Creation time of record.\n\nAnother word, first time when the external user connected." }, - "application": { - "type": "string", - "title": "Identifier code of the external service", - "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." - }, "uid": { "type": "string", "title": "Identifier key of external user from the external system", "description": "Identifier key of external user from the external system." }, + "application": { + "type": "string", + "title": "Identifier code of the external service", + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code} in common." + }, "nickname": { "type": "string", "title": "Nickname of external user in the external system", @@ -8446,12 +10990,12 @@ "id", "citizen", "created_at", - "application", "uid", + "application", "nickname", "data" ], - "description": "External user information.\n\n`IShoppingExternalUser` is an entity dsigned for when this system needs\nto connect with external services and welcome their users as\n{@link IShoppingCustomer customers} of this service.\n\nFor reference, customers who connect from an external service must have\nthis record, and the external service user is identified through the two\nattributes {@link application } and {@link uid }. If a customer connected\nfrom an external service completes\n{@link IShoppingCitizen real-name authentication} from this service, each\ntime the external service user reconnects to this service and issues a\nnew customer authentication token, real-name authentication begins with\ncompleted.\n\nAnd {@link password } is the password issued to the user by the external\nservice system (the so-called permanent user authentication token), and\nis never the actual user password. However, for customers who entered the\nsame application and uid as the current external system user, this is to\ndetermine whether to view this as a correct external system user or a\nviolation.\n\nIn addition, additional information received from external services can\nbe recorded in the data field in JSON format." + "description": "External user information.\n\n`IShoppingExternalUser` is an entity dsigned for when this system needs\nto connect with external services and welcome their users as\n{@link IShoppingCustomer customers} of this service.\n\nFor reference, customers who connect from an external service must have\nthis record, and the external service user is identified through the two\nattributes {@link application} and {@link uid}. If a customer connected\nfrom an external service completes\n{@link IShoppingCitizen real-name authentication} from this service, each\ntime the external service user reconnects to this service and issues a\nnew customer authentication token, real-name authentication begins with\ncompleted.\n\nAnd {@link password} is the password issued to the user by the external\nservice system (the so-called permanent user authentication token), and\nis never the actual user password. However, for customers who entered the\nsame application and uid as the current external system user, this is to\ndetermine whether to view this as a correct external system user or a\nviolation.\n\nIn addition, additional information received from external services can\nbe recorded in the data field in JSON format." }, "IShoppingCitizen": { "type": "object", @@ -8471,11 +11015,13 @@ "mobile": { "type": "string", "pattern": "^[0-9]*$", + "x-wrtn-payment-order-mobile": true, "title": "Mobile number", "description": "Mobile number." }, "name": { "type": "string", + "x-wrtn-payment-order-citizen": true, "title": "Real name, or equivalent nickname", "description": "Real name, or equivalent nickname." } @@ -8486,11 +11032,12 @@ "mobile", "name" ], - "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile } input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." + "description": "Citizen verification information.\n\n`IShoppingCitizen` is an entity that records the user's\n{@link name real name} and {@link mobile} input information.\n\nFor reference, in South Korea, real name authentication is required for\ne-commerce participants, so the name attribute is important. However, the\nsituation is different overseas, so in reality, mobile attributes are the\nmost important, and identification of individual person is also done based\non this mobile.\n\nOf course, real name and mobile phone authentication information are\nencrypted and stored." }, "IShoppingAdministrator.IJoin": { "type": "object", "properties": {}, + "required": [], "description": "Joining request info." }, "IShoppingMember.ILogin": { @@ -8514,53 +11061,89 @@ ], "description": "Login request info." }, - "IShoppingCoupon.ICreate": { + "IShoppingCoupon": { "type": "object", "properties": { - "discount": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "designer": { "oneOf": [ { - "$ref": "#/components/schemas/IShoppingCouponDiscount.IAmount" + "$ref": "#/components/schemas/IShoppingAdministrator" }, { - "$ref": "#/components/schemas/IShoppingCouponDiscount.IPercent" + "$ref": "#/components/schemas/IShoppingSeller" } ], - "title": "Discount information", - "description": "Discount information." + "title": "Designer who've made the coupon", + "description": "Designer who've made the coupon." }, - "restriction": { - "$ref": "#/components/schemas/IShoppingCouponRestriction", - "title": "Restriction information", - "description": "Restriction information." + "inventory": { + "$ref": "#/components/schemas/IShoppingCouponInventory", + "title": "Inventory information", + "description": "Inventory information." }, "criterias": { "type": "array", "items": { "oneOf": [ { - "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.ICreate" + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria" }, { - "$ref": "#/components/schemas/IShoppingCouponSectionCriteria.ICreate" + "$ref": "#/components/schemas/IShoppingCouponSectionCriteria" }, { - "$ref": "#/components/schemas/IShoppingCouponSellerCriteria.ICreate" + "$ref": "#/components/schemas/IShoppingCouponSellerCriteria" }, { - "$ref": "#/components/schemas/IShoppingCouponSaleCriteria.ICreate" + "$ref": "#/components/schemas/IShoppingCouponSaleCriteria" }, { - "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.ICreate" + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria" } - ] - } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "channel": "#/components/schemas/IShoppingCouponChannelCriteria", + "section": "#/components/schemas/IShoppingCouponSectionCriteria", + "seller": "#/components/schemas/IShoppingCouponSellerCriteria", + "sale": "#/components/schemas/IShoppingCouponSaleCriteria", + "funnel": "#/components/schemas/IShoppingCouponFunnelCriteria" + } + } + }, + "title": "List of criteria informations", + "description": "List of criteria informations." }, - "disposable_codes": { - "type": "array", - "items": { - "type": "string" - } + "discount": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponDiscount.IAmount" + }, + { + "$ref": "#/components/schemas/IShoppingCouponDiscount.IPercent" + } + ], + "discriminator": { + "propertyName": "unit", + "mapping": { + "amount": "#/components/schemas/IShoppingCouponDiscount.IAmount", + "percent": "#/components/schemas/IShoppingCouponDiscount.IPercent" + } + }, + "title": "Discount information", + "description": "Discount information." + }, + "restriction": { + "$ref": "#/components/schemas/IShoppingCouponRestriction", + "title": "Restriction information", + "description": "Restriction information." }, "name": { "type": "string", @@ -8592,219 +11175,250 @@ ], "title": "Closing time of the coupon", "description": "Closing time of the coupon.\n\nTickets cannot be issued after this time.\n\nHowever, previously issued tickets can still be used until their\nexpiration date." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tie of the record", + "description": "Creation tie of the record." } }, "required": [ + "id", + "designer", + "inventory", + "criterias", "discount", "restriction", - "criterias", - "disposable_codes", "name", "opened_at", - "closed_at" + "closed_at", + "created_at" ], - "description": "Creation information of the coupon." + "description": "Discount coupon.\n\n`IShoppingCoupon` is an entity that symbolizes discount coupons at\na shopping mall.\n\nNote that, `IShoppingCoupon` only contains specification information\nabout discount coupons. Please keep in mind that this is a different\nconcept from {@link IShoppingCouponTicket}, which refers to the issuance\nof a discount coupon, or {@link IShoppingCouponTicketPayment}, which\nrefers to its payment.\n\nAdditionally, discount coupons are applied on an order-by-order basis,\nbut each has its own unique restrictions. For example, a coupon with\n{@link IShoppingCouponSellerCriteria} may or may not be used only for\n{@link IShoppingSale} of listings registered by the {@link IShoppingSeller}.\nAlso, there are restrictions such as\n{@link IShoppingCouponDiscount.threshold minimum amount restrictions} for\nusing discount coupons and\n{@link IShoppingCouponDiscount.limit maximum discount amount limits}.\n\nIn addition, you can set whether to issue discount coupons publicly or\ngive them only to people who know the specific issuing code. In addition,\nthere are restrictions such as issued discount coupons having an\n{@link IShoppingCouponRestriction.expired_at expiration date} or being\nissued only to customers who came in through a\n{@link IShoppingCouponFunnelCriteria specific funnel}.\n\nFor more information, please refer to the properties below and the\nsubsidiary entities described later." }, - "IShoppingCouponDiscount.IAmount": { + "IShoppingAdministrator": { "type": "object", "properties": { - "unit": { - "const": "amount", - "title": "Discount unit as amount", - "description": "Discount unit as amount.\n\nIt means the order price would be discounted by the amount value." + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." }, - "value": { - "type": "number", - "title": "Discount value as amount", - "description": "Discount value as amount." + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Administrator account.\n\n`IShoppingAdministrator` is an entity that embodies a person who manages\nthe shopping mall system, with {@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can participate\neven without membership joining, administrator must join membership to operate\nmanagements. Also, administrator must perform the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "IShoppingSeller": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." }, - "threshold": { + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation tmie of record", + "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + } + }, + "required": [ + "id", + "created_at" + ], + "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + }, + "IShoppingCouponInventory": { + "type": "object", + "properties": { + "volume": { "oneOf": [ { "type": "null" }, { - "type": "number", - "minimum": 0 + "type": "integer" } ], - "title": "Minimum purchase amount for discount", - "description": "Minimum purchase amount for discount.\n\nWhen setting this value, discount coupons cannot be applied to\norder totals that are less than this value." + "title": "Remaining volume for everyone", + "description": "Remaining volume for everyone.\n\nIf there is a limit to the quantity issued, it becomes impossible to\nissue tickets exceeding this value.\n\nIn other words, the concept of N coupons being issued on a first-come,\nfirst-served basis is created." }, - "limit": { + "volume_per_citizen": { "oneOf": [ { "type": "null" }, { - "type": "number", - "exclusiveMinimum": true, - "minimum": 0 + "type": "integer" } ], - "title": "Maximum amount available for discount", - "description": "Maximum amount available for discount.\n\nWhen this value is set, no further discount will be given no\nmatter how much you order. This property would be meaningful\nonly when the {@link multiplicative } is `true`." - }, - "multiplicative": { - "type": "boolean", - "title": "Multiplicative or not", - "description": "Multiplicative or not.\n\nIf this property is `true`, the discount value would be multiplied\nto the {@link IShoppingCartCommodity.volume } or\n{@link IShoppingOrderGood.volume } value. Also, in that case,\nthe {@link limit } property would be meaningful." + "title": "Remaining volume per citizen", + "description": "Remaining volume per citizen.\n\nAs a limit to the total amount of issuance per person, it is common to\nassign 1 to limit duplicate issuance to the same citizen, or to use the\n`nul`` value to set no limit.\n\nOf course, by assigning a value of N, the total amount issued to the\nsame citizen can be limited." } }, "required": [ - "unit", - "value", - "threshold", - "limit", - "multiplicative" + "volume", + "volume_per_citizen" ], - "description": "Discount information with amount unit." + "description": "Inventory information of the coupon.\n\nIf a {@link IShoppingCoupon coupon} has been designed with limited\ninventory, this `IShoppingCouponInventory` structure represents the\nremaining inventory information." }, - "IShoppingCouponDiscount.IPercent": { + "IShoppingCouponChannelCriteria": { "type": "object", "properties": { - "unit": { - "const": "percent", - "title": "Discount unit as percent", - "description": "Discount unit as percent.\n\nIt means the order price would be discounted by the percent value." - }, - "value": { - "type": "number", - "minimum": 0, - "maximum": 100, - "title": "Discount value as percent", - "description": "Discount value as percent." + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo" + }, + "minItems": 1, + "title": "List of target channels and categories", + "description": "List of target channels and categories." }, - "threshold": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "number", - "minimum": 0 - } - ], - "title": "Minimum purchase amount for discount", - "description": "Minimum purchase amount for discount.\n\nWhen setting this value, discount coupons cannot be applied to\norder totals that are less than this value." + "type": { + "const": "channel", + "title": "Descrimanator type", + "description": "Descrimanator type." }, - "limit": { + "direction": { "oneOf": [ { - "type": "null" + "const": "include" }, { - "type": "number", - "exclusiveMinimum": true, - "minimum": 0 + "const": "exclude" } ], - "title": "Maximum amount available for discount", - "description": "Maximum amount available for discount.\n\nWhen this value is set, no further discount will be given no\nmatter how much you order." + "title": "Direction of the criteria", + "description": "Direction of the criteria." } }, "required": [ - "unit", - "value", - "threshold", - "limit" + "channels", + "type", + "direction" ], - "description": "Discount information with percent unit." + "description": "Conditions for channels of discount coupons.\n\n`ishoppingcouponchannelcriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase} and is used when setting conditions on\na specific {@link IShoppingChannel channel} or\n{@link IShoppingChannelCategory category} of that channel.\n\nIf the {@link direction} value is \"include\", the coupon can only be used\nfor the target channels (or categories). Conversely, if it is \"exclude\",\nit is a coupon that cannot be used." }, - "IShoppingCouponRestriction": { + "IShoppingCouponChannelCriteria.IChannelTo": { "type": "object", "properties": { - "access": { - "oneOf": [ - { - "const": "public" - }, - { - "const": "private" - } - ], - "title": "Access level of coupon", - "description": "Access level of coupon.\n\n- public: possible to find from public API\n- private: unable to find from public API\n - arbitrarily assigned by the seller or administrator\n - issued from one-time link" - }, - "exclusive": { - "type": "boolean", - "title": "Exclusivity or not", - "description": "Exclusivity or not.\n\nAn exclusive discount coupon refers to a discount coupon that has an\nexclusive relationship with other discount coupons and can only be\nused alone. That is, when an exclusive discount coupon is used, no\nother discount coupon can be used for the same\n{@link IShoppingOrder order} or {@link IShoppingOrderGood good}.\n\nPlease note that this exclusive attribute is a very different concept\nfrom multiplicative, which means whether the same coupon can be\nmultiplied and applied to multiple coupons of the same order, so\nplease do not confuse them." + "channel": { + "$ref": "#/components/schemas/IShoppingChannel", + "title": "Target channel", + "description": "Target channel." }, - "volume": { + "categories": { "oneOf": [ { "type": "null" }, { - "type": "integer" + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "minItems": 1 } ], - "title": "Limited quantity issued", - "description": "Limited quantity issued.\n\nIf there is a limit to the quantity issued, it becomes impossible to issue tickets exceeding this value.\n\nIn other words, the concept of N coupons being issued on a first-come, first-served basis is created." - }, - "volume_per_citizen": { + "title": "List of target categories", + "description": "List of target categories." + } + }, + "required": [ + "channel", + "categories" + ] + }, + "IShoppingChannelCategory.IInvert": { + "type": "object", + "properties": { + "parent": { "oneOf": [ { "type": "null" }, { - "type": "integer" + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" } ], - "title": "Limited quantity issued per person", - "description": "Limited quantity issued per person.\n\nAs a limit to the total amount of issuance per person, it is common to assign 1 to limit duplicate issuance to the same citizen, or to use the NULL value to set no limit.\n\nOf course, by assigning a value of N, the total amount issued to the same citizen can be limited." + "title": "Parent category info with recursive structure", + "description": "Parent category info with recursive structure.\n\nIf no parent exists, then be `null`." }, - "expired_in": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "integer" - } - ], - "title": "Expiration day(s) value", - "description": "Expiration day(s) value.\n\nThe concept of expiring N days after a discount coupon ticket is issued.\n\nTherefore, customers must use the ticket within N days, if possible, from the time it is issued." + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." }, - "expired_at": { + "code": { + "type": "string", + "title": "Identifier code of the category", + "description": "Identifier code of the category.\n\nThe code must be unique in the channel." + }, + "parent_id": { "oneOf": [ { "type": "null" }, { "type": "string", - "format": "date-time" + "format": "uuid" } ], - "title": "Expiration date", - "description": "Expiration date.\n\nA concept that expires after YYYY-MM-DD after a discount coupon ticket is issued.\n\nDouble restrictions are possible with expired_in, of which the one with the shorter expiration date is used." + "title": "Parent category's ID", + "description": "Parent category's ID." + }, + "name": { + "type": "string", + "title": "Representative name of the category", + "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." } }, "required": [ - "access", - "exclusive", - "volume", - "volume_per_citizen", - "expired_in", - "expired_at" + "parent", + "id", + "code", + "parent_id", + "name", + "created_at" ], - "description": "Restriction information of the coupon." + "description": "Invert category information with parent category." }, - "IShoppingCouponChannelCriteria.ICreate": { + "IShoppingCouponSectionCriteria": { "type": "object", "properties": { - "channels": { + "sections": { "type": "array", "items": { - "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo.ICreate" + "$ref": "#/components/schemas/IShoppingSection" }, "minItems": 1, - "title": "List of target channels and categories", - "description": "List of target channels and categories." + "title": "Target sections to include or exclude", + "description": "Target sections to include or exclude." }, "type": { - "const": "channel" + "const": "section", + "title": "Descrimanator type", + "description": "Descrimanator type." }, "direction": { "oneOf": [ @@ -8814,61 +11428,68 @@ { "const": "exclude" } - ] + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." } }, "required": [ - "channels", + "sections", "type", "direction" ], - "description": "Creation information of the channel criteria." + "description": "Conditions for sections of discount coupons.\n\n`IShoppingCouponSectionCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase} and is used when setting conditions\nfor a specific {@link IShoppingSection section}.\n\nIf the {@link direction} value is \"include\", the coupon can only be used\nfor the target {@link sections}. Conversely, if it is \"exclude\", the\ncoupon cannot be used." }, - "IShoppingCouponChannelCriteria.IChannelTo.ICreate": { + "IShoppingSection": { "type": "object", "properties": { - "channel_code": { + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "code": { "type": "string", - "title": "Target channel's {@link IShoppingChannel.code }", - "description": "Target channel's {@link IShoppingChannel.code }." + "title": "Identifier code", + "description": "Identifier code." }, - "category_ids": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - ], - "title": "Target categories' {@link IShoppingChannelCategory.id }s", - "description": "Target categories' {@link IShoppingChannelCategory.id }s." + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." } }, "required": [ - "channel_code", - "category_ids" + "id", + "code", + "name", + "created_at" ], - "description": "Target channel and categories." + "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." }, - "IShoppingCouponSectionCriteria.ICreate": { + "IShoppingCouponSellerCriteria": { "type": "object", "properties": { - "section_codes": { + "sellers": { "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/IShoppingSeller" }, "minItems": 1, - "title": "List of target section's {@link IShoppingSection.code }s", - "description": "List of target section's {@link IShoppingSection.code }s." + "title": "Target sellers to include or exclude", + "description": "Target sellers to include or exclude." }, "type": { - "const": "section" + "const": "seller", + "title": "Descrimanator type", + "description": "Descrimanator type." }, "direction": { "oneOf": [ @@ -8878,31 +11499,34 @@ { "const": "exclude" } - ] + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." } }, "required": [ - "section_codes", + "sellers", "type", "direction" ], - "description": "Creation information of the section criteria." + "description": "Conditions for sellers of discount coupons.\n\n`IShoppingCouponSellerCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase} and is used when setting conditions\nfor a specific {@link IShoppingSeller seller}.\n\nIf the {@link direction} value is \"include\", the coupon can only be used\nfor the target {@link sellers}. Conversely, if it is \"exclude\", the\ncoupon cannot be used." }, - "IShoppingCouponSellerCriteria.ICreate": { + "IShoppingCouponSaleCriteria": { "type": "object", "properties": { - "seller_ids": { + "sales": { "type": "array", "items": { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/IShoppingSale.ISummary" }, "minItems": 1, - "title": "List of target seller's {@link IShoppingSeller.id }s", - "description": "List of target seller's {@link IShoppingSeller.id }s." + "title": "Target sales to include or exclude", + "description": "Target sales to include or exclude." }, "type": { - "const": "seller" + "const": "sale", + "title": "Descrimanator type", + "description": "Descrimanator type." }, "direction": { "oneOf": [ @@ -8912,191 +11536,121 @@ { "const": "exclude" } - ] + ], + "title": "Direction of the criteria", + "description": "Direction of the criteria." } }, "required": [ - "seller_ids", + "sales", "type", "direction" ], - "description": "Creation information of the seller criteria." + "description": "Conditions for sales of discount coupons.\n\n`IShoppingCouponSaleCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase} and is used when setting conditions\nfor a specific {@link IShoppingSale sale}.\n\nIf the {@link direction} value is \"include\", the coupon can only be used\nfor the target {@link sales}. Conversely, if it is \"exclude\", the\ncoupon cannot be used." }, - "IShoppingCouponSaleCriteria.ICreate": { + "IShoppingSale.ISummary": { "type": "object", "properties": { - "sale_ids": { + "section": { + "$ref": "#/components/schemas/IShoppingSection", + "title": "Belonged section", + "description": "Belonged section." + }, + "seller": { + "$ref": "#/components/schemas/IShoppingSeller.IInvert", + "title": "Seller who has registered the sale", + "description": "Seller who has registered the sale." + }, + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange", + "title": "Price range of the unit", + "description": "Price range of the unit." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Sale", + "description": "Primary Key of Sale." + }, + "snapshot_id": { + "type": "string", + "format": "uuid", + "title": "Primary Key of Snapshot", + "description": "Primary Key of Snapshot." + }, + "latest": { + "type": "boolean", + "title": "Whether the snapshot is the latest one or not", + "description": "Whether the snapshot is the latest one or not." + }, + "content": { + "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", + "title": "Description and image content describing the sale", + "description": "Description and image content describing the sale." + }, + "channels": { "type": "array", "items": { - "type": "string", - "format": "uuid" + "$ref": "#/components/schemas/IShoppingSaleChannel" }, "minItems": 1, - "title": "List of target sale's {@link IShoppingSale.id }s", - "description": "List of target sale's {@link IShoppingSale.id }s." + "title": "List of channels and categories", + "description": "List of channels and categories.\n\nWhich channels and categories the sale is registered to." }, - "type": { - "const": "sale" + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "title": "List of search tags", + "description": "List of search tags." }, - "direction": { - "oneOf": [ - { - "const": "include" - }, - { - "const": "exclude" - } - ] - } - }, - "required": [ - "sale_ids", - "type", - "direction" - ], - "description": "Creation information of the sale criteria." - }, - "IShoppingCouponFunnelCriteria.ICreate": { - "type": "object", - "properties": { - "funnels": { + "units": { "type": "array", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" - }, - { - "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" - } - ] + "$ref": "#/components/schemas/IShoppingSaleUnit.ISummary" }, "minItems": 1, - "title": "List of target funnels", - "description": "List of target funnels." + "title": "List of units", + "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." }, - "type": { - "const": "funnel" + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at},\nwhich means the timepoint of the sale is opened." }, - "direction": { - "oneOf": [ - { - "const": "include" - }, - { - "const": "exclude" - } - ] - } - }, - "required": [ - "funnels", - "type", - "direction" - ], - "description": "Creation information of the funnel criteria." - }, - "IShoppingCouponFunnelCriteria.IValueFunnel": { - "type": "object", - "properties": { - "kind": { + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Last updated time of the record", + "description": "Last updated time of the record.\n\nIn another words, creation time of the last snapshot." + }, + "paused_at": { "oneOf": [ { - "const": "url" + "type": "null" }, { - "const": "referrer" + "type": "string", + "format": "date-time" } ], - "title": "Kind of funnel restriction", - "description": "Kind of funnel restriction." - }, - "value": { - "type": "string", - "title": "Target value", - "description": "Target value." - } - }, - "required": [ - "kind", - "value" - ], - "description": "Kind of funnel restriction by a value." - }, - "IShoppingCouponFunnelCriteria.IVariableFunnel": { - "type": "object", - "properties": { - "kind": { - "const": "variable", - "title": "Kind of funnel restriction", - "description": "Kind of funnel restriction." - }, - "key": { - "type": "string", - "title": "Target variable's key", - "description": "Target variable's key." - }, - "value": { - "type": "string", - "title": "Target variable's value", - "description": "Target variable's value." - } - }, - "required": [ - "kind", - "key", - "value" - ], - "description": "Kind of funnel restriction by a variable." - }, - "IShoppingCoupon": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." + "title": "Paused time of the sale", + "description": "Paused time of the sale.\n\nThe sale is paused by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} can still see the sale on the\nboth list and detail pages, but the sale has a warning label\n\"The sale is paused by the seller\"." }, - "designer": { + "suspended_at": { "oneOf": [ { - "$ref": "#/components/schemas/IShoppingSeller" + "type": "null" }, { - "$ref": "#/components/schemas/IShoppingAdministrator" + "type": "string", + "format": "date-time" } ], - "title": "Designer who've made the coupon", - "description": "Designer who've made the coupon." - }, - "inventory": { - "$ref": "#/components/schemas/IShoppingCouponInventory", - "title": "Inventory information", - "description": "Inventory information." - }, - "criterias": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingCouponCriteria" - }, - "title": "List of criteria informations", - "description": "List of criteria informations." - }, - "discount": { - "$ref": "#/components/schemas/IShoppingCouponDiscount", - "title": "Discount information", - "description": "Discount information." - }, - "restriction": { - "$ref": "#/components/schemas/IShoppingCouponRestriction", - "title": "Restriction information", - "description": "Restriction information." - }, - "name": { - "type": "string", - "title": "Representative name of the coupon", - "description": "Representative name of the coupon." + "title": "Suspended time of the sale", + "description": "Suspended time of the sale.\n\nThe sale is suspended by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} cannot see the sale on the\nboth list and detail pages. It is almost same with soft delettion,\nbut there's a little bit difference that the owner\n{@link IShoppingSeller seller} can still see the sale and resume it.\n\nOf course, the {@link IShoppingCustomer customers} who have\nalready purchased the sale can still see the sale on the\n{@link IShoppingOrder order} page." }, "opened_at": { "oneOf": [ @@ -9108,8 +11662,8 @@ "format": "date-time" } ], - "title": "Opening time of the coupon", - "description": "Opening time of the coupon." + "title": "Opening time of the sale", + "description": "Opening time of the sale." }, "closed_at": { "oneOf": [ @@ -9121,33 +11675,53 @@ "format": "date-time" } ], - "title": "Closing time of the coupon", - "description": "Closing time of the coupon.\n\nTickets cannot be issued after this time.\n\nHowever, previously issued tickets can still be used until their\nexpiration date." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation tie of the record", - "description": "Creation tie of the record." + "title": "Closing time of the sale", + "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." } }, "required": [ + "section", + "seller", + "price_range", "id", - "designer", - "inventory", - "criterias", - "discount", - "restriction", - "name", - "opened_at", - "closed_at", - "created_at" + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units", + "created_at", + "updated_at", + "paused_at", + "suspended_at", + "opened_at", + "closed_at" ], - "description": "Discount coupon.\n\n`IShoppingCoupon` is an entity that symbolizes discount coupons at\na shopping mall.\n\nNote that, `IShoppingCoupon` only contains specification information\nabout discount coupons. Please keep in mind that this is a different\nconcept from {@link IShoppingCouponTicket }, which refers to the issuance\nof a discount coupon, or {@link IShoppingCouponTicketPayment }, which\nrefers to its payment.\n\nAdditionally, discount coupons are applied on an order-by-order basis,\nbut each has its own unique restrictions. For example, a coupon with\n{@link IShoppingCouponSellerCriteria } may or may not be used only for\n{@link IShoppingSale } of listings registered by the {@link IShoppingSeller }.\nAlso, there are restrictions such as\n{@link IShoppingCouponDiscount.threshold minimum amount restrictions} for\nusing discount coupons and\n{@link IShoppingCouponDiscount.limit maximum discount amount limits}.\n\nIn addition, you can set whether to issue discount coupons publicly or\ngive them only to people who know the specific issuing code. In addition,\nthere are restrictions such as issued discount coupons having an\n{@link IShoppingCouponRestriction.expired_at expiration date} or being\nissued only to customers who came in through a\n{@link IShoppingCouponFunnelCriteria specific funnel}.\n\nFor more information, please refer to the properties below and the\nsubsidiary entities described later." + "description": "Summarized information of sale.\n\nThis summarized information being used for pagination." }, - "IShoppingSeller": { + "IShoppingSeller.IInvert": { "type": "object", "properties": { + "type": { + "const": "seller", + "title": "Discriminant for the type of customer", + "description": "Discriminant for the type of customer." + }, + "member": { + "$ref": "#/components/schemas/IShoppingMember.IInvert", + "title": "Membership joining information", + "description": "Membership joining information." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer.IInvert", + "title": "Customer, the connection information", + "description": "Customer, the connection information." + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen", + "title": "Real-name and mobile number authentication information", + "description": "Real-name and mobile number authentication information." + }, "id": { "type": "string", "format": "uuid", @@ -9162,101 +11736,227 @@ } }, "required": [ + "type", + "member", + "customer", + "citizen", "id", "created_at" ], - "description": "Seller information.\n\n`IShoppingSeller` is an entity that embodies a person who registers\n{@link IShoppingSale sales} to operate selling activities, with\n{@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can\nparticipate even without membership joining, seller must join membership\nto operate sales. Also, seller must do the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member} -> {@link IShoppingMember.seller},\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." }, - "IShoppingAdministrator": { + "IShoppingSalePriceRange": { + "type": "object", + "properties": { + "lowest": { + "$ref": "#/components/schemas/IShoppingPrice" + }, + "highest": { + "$ref": "#/components/schemas/IShoppingPrice" + } + }, + "required": [ + "lowest", + "highest" + ] + }, + "IShoppingPrice": { + "type": "object", + "properties": { + "nominal": { + "type": "number", + "minimum": 0, + "title": "Nominal price", + "description": "Nominal price.\n\nThis is not {@link real real price} to pay, but just a nominal price to show.\nIf this value is greater than the {@link real real price}, it would be shown\nlike {@link IShoppingSeller seller} is giving a discount." + }, + "real": { + "type": "number", + "minimum": 0, + "title": "Real price to pay", + "description": "Real price to pay." + } + }, + "required": [ + "nominal", + "real" + ], + "description": "Shopping price interface." + }, + "IShoppingSaleContent.IInvert": { "type": "object", "properties": { "id": { "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." + "format": "uuid" }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of record", - "description": "Creation time of record.\n\nAnother words, the time when the administrator has signed up." + "title": { + "type": "string" + }, + "thumbnails": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IAttachmentFile" + } } }, "required": [ "id", - "created_at" - ], - "description": "Administrator account.\n\n`IShoppingAdministrator` is an entity that embodies a person who manages\nthe shopping mall system, with {@link IShoppingMember membership} joining.\n\nFor reference, unlike {@link IShoppingCustomer customers} which can participate\neven without membership joining, administrator must join membership to operate\nmanagements. Also, administrator must perform the\n{@link IShoppingCitizen real-name and mobile authentication}, too." + "title", + "thumbnails" + ] }, - "IShoppingCouponInventory": { + "IAttachmentFile": { "type": "object", "properties": { - "volume": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "integer" - } - ], - "title": "Remaining volume for everyone", - "description": "Remaining volume for everyone.\n\nIf there is a limit to the quantity issued, it becomes impossible to\nissue tickets exceeding this value.\n\nIn other words, the concept of N coupons being issued on a first-come,\nfirst-served basis is created." + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." }, - "volume_per_citizen": { + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of attachment file", + "description": "Creation time of attachment file." + }, + "name": { + "type": "string", + "maxLength": 255, + "title": "File name, except extension", + "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + }, + "extension": { "oneOf": [ { "type": "null" }, { - "type": "integer" + "type": "string", + "minLength": 1, + "maxLength": 8 } ], - "title": "Remaining volume per citizen", - "description": "Remaining volume per citizen.\n\nAs a limit to the total amount of issuance per person, it is common to\nassign 1 to limit duplicate issuance to the same citizen, or to use the\n`nul`` value to set no limit.\n\nOf course, by assigning a value of N, the total amount issued to the\nsame citizen can be limited." + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "contentMediaType": "image/*", + "title": "URL path of the real file", + "description": "URL path of the real file." } }, "required": [ - "volume", - "volume_per_citizen" + "id", + "created_at", + "name", + "extension", + "url" ], - "description": "Inventory information of the coupon.\n\nIf a {@link IShoppingCoupon coupon} has been designed with limited\ninventory, this `IShoppingCouponInventory` structure represents the\nremaining inventory information." + "description": "Attachment File.\n\nEvery attachment files that are managed in current system.\n\nFor reference, it is possible to omit one of file {@link name}\nor {@link extension} like `.gitignore` or `README` case, but not\npossible to omit both of them." }, - "IShoppingCouponCriteria": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingCouponChannelCriteria" + "IShoppingSaleChannel": { + "type": "object", + "properties": { + "categories": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + }, + "title": "List of categories of the channel listing the sale", + "description": "List of categories of the channel listing the sale.\n\nIf empty, it means all categories of the channel is listing the sale." }, - { - "$ref": "#/components/schemas/IShoppingCouponSectionCriteria" + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." }, - { - "$ref": "#/components/schemas/IShoppingCouponSellerCriteria" + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of record", + "description": "Creation time of record." }, - { - "$ref": "#/components/schemas/IShoppingCouponSaleCriteria" + "code": { + "type": "string", + "title": "Identifier code", + "description": "Identifier code." }, - { - "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria" + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." } + }, + "required": [ + "categories", + "id", + "created_at", + "code", + "name" ], - "description": "Union type of the criteria.\n\n`IShoppingCouponCriteria` is an union typed structure that embodies the\nconditions for applying a {@link IShoppingCoupon discount coupon}. All\nof individual entities are imposing constraints on the reference unit of\na discount coupon were created by inheritig\n{@link IShoppingCouponCriteriaBase } type.\n\nAlso, individual entities can be specified by using the if condition on\nthe {@link type } property. For example, if the {@link type } value is\n`section`, {@link IShoppingCouponSectionCriteria } type would be specified,\nso that you can access to the target\n{@link IShoppingCouponSectionCriteria.section } directly. For reference,\nthis concept is called a descriminated union in TypeScript.\n\n```typescript\nconst union: IShoppingCouponCriteria;\nif (union.type === \"section\")\n union.section; // IShoppingCouponSectionCriteria.section\n```\n\nIn addition, constraints on reference units can be specified through the\n{@link direction } property to proceed as an inclusion condition or,\nconversely, as an exclusion condition. If the direction value is \"include\",\nthe coupon is applicable only to the reference object. Conversely, if the\ndirection value is \"exclude\", it is a coupon that cannot be applied to the\nreference object." + "description": "Target channel (and categories) of sale to sell.\n\n`IShoppingSaleChannel` is an entity that expresses through which\n{@link IShoppingChannel channel} a listing {@link IShoppingSale} is sold.\n\nAlso, if {@link IShoppingChannelCategory categories} are specified, it also\nmeans that the sale be sold. Otherwise, none of the categories of the channel\nbeing specified, it means that every categories of the channel is listing the\ntarget sale." }, - "IShoppingCouponChannelCriteria": { + "IShoppingSaleUnit.ISummary": { "type": "object", "properties": { - "channels": { + "price_range": { + "$ref": "#/components/schemas/IShoppingSalePriceRange" + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "name": { + "type": "string", + "title": "Representative name of the unit", + "description": "Representative name of the unit." + }, + "primary": { + "type": "boolean", + "title": "Whether the unit is primary or not", + "description": "Whether the unit is primary or not.\n\nJust a labeling value." + }, + "required": { + "type": "boolean", + "title": "Whether the unit is required or not", + "description": "Whether the unit is required or not.\n\nWhen the unit is required, the customer must select the unit. If do not\nselect, customer can't buy it.\n\nFor example, if there's a sale \"Macbook Set\" and one of the unit is the\n\"Main Body\", is it possible to buy the \"Macbook Set\" without the\n\"Main Body\" unit? This property is for that case." + } + }, + "required": [ + "price_range", + "id", + "name", + "primary", + "required" + ] + }, + "IShoppingCouponFunnelCriteria": { + "type": "object", + "properties": { + "funnels": { "type": "array", "items": { - "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo" + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IValueFunnel" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.IVariableFunnel" + } + ] }, "minItems": 1, - "title": "List of target channels and categories", - "description": "List of target channels and categories." + "title": "List of target funnels", + "description": "List of target funnels." }, "type": { - "const": "channel", + "const": "funnel", "title": "Descrimanator type", "description": "Descrimanator type." }, @@ -9274,334 +11974,228 @@ } }, "required": [ - "channels", + "funnels", "type", "direction" ], - "description": "Conditions for channels of discount coupons.\n\n`ishoppingcouponchannelcriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase } and is used when setting conditions on\na specific {@link IShoppingChannel channel} or\n{@link IShoppingChannelCategory category} of that channel.\n\nIf the {@link direction } value is \"include\", the coupon can only be used\nfor the target channels (or categories). Conversely, if it is \"exclude\",\nit is a coupon that cannot be used." + "description": "Limit the funnel of discount coupons.\n\n`ishoppingcouponfunnelcriteria` is a subtype entity of\n{@link IShoppingCouponCriteria}, and is used when you want to issue or\nexclude discount coupons only to {@link IShoppingCustomer customers} who\ncame from a specific path.\n\nAnd funnel restrictions are possible in 3 ways: The first is\n{@link IShoppingCustomer.referrer}, and by parsing\n{@link IShoppingCustomer.href}, which records the customer's access\naddress, restrictions can be made in units of specific URLs or variables." }, - "IShoppingCouponChannelCriteria.IChannelTo": { + "IShoppingCouponFunnelCriteria.IValueFunnel": { "type": "object", "properties": { - "channel": { - "$ref": "#/components/schemas/IShoppingChannel", - "title": "Target channel", - "description": "Target channel." - }, - "categories": { + "kind": { "oneOf": [ { - "type": "null" + "const": "url" }, { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" - }, - "minItems": 1 + "const": "referrer" } ], - "title": "List of target categories", - "description": "List of target categories." + "title": "Kind of funnel restriction", + "description": "Kind of funnel restriction." + }, + "value": { + "type": "string", + "title": "Target value", + "description": "Target value." } }, "required": [ - "channel", - "categories" - ] + "kind", + "value" + ], + "description": "Kind of funnel restriction by a value." }, - "IShoppingChannelCategory.IInvert": { + "IShoppingCouponFunnelCriteria.IVariableFunnel": { "type": "object", "properties": { - "parent": { + "kind": { + "const": "variable", + "title": "Kind of funnel restriction", + "description": "Kind of funnel restriction." + }, + "key": { + "type": "string", + "title": "Target variable's key", + "description": "Target variable's key." + }, + "value": { + "type": "string", + "title": "Target variable's value", + "description": "Target variable's value." + } + }, + "required": [ + "kind", + "key", + "value" + ], + "description": "Kind of funnel restriction by a variable." + }, + "IShoppingCouponDiscount.IAmount": { + "type": "object", + "properties": { + "unit": { + "const": "amount", + "title": "Discount unit as amount", + "description": "Discount unit as amount.\n\nIt means the order price would be discounted by the amount value." + }, + "value": { + "type": "number", + "title": "Discount value as amount", + "description": "Discount value as amount." + }, + "threshold": { "oneOf": [ { "type": "null" }, { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + "type": "number", + "minimum": 0 } ], - "title": "Parent category info with recursive structure", - "description": "Parent category info with recursive structure.\n\nIf no parent exists, then be `null`." - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." + "title": "Minimum purchase amount for discount", + "description": "Minimum purchase amount for discount.\n\nWhen setting this value, discount coupons cannot be applied to\norder totals that are less than this value." }, - "parent_id": { + "limit": { "oneOf": [ { "type": "null" }, { - "type": "string", - "format": "uuid" + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 } ], - "title": "Parent category's ID", - "description": "Parent category's ID." - }, - "name": { - "type": "string", - "title": "Representative name of the category", - "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + "title": "Maximum amount available for discount", + "description": "Maximum amount available for discount.\n\nWhen this value is set, no further discount will be given no\nmatter how much you order. This property would be meaningful\nonly when the {@link multiplicative} is `true`." }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of record", - "description": "Creation time of record." + "multiplicative": { + "type": "boolean", + "title": "Multiplicative or not", + "description": "Multiplicative or not.\n\nIf this property is `true`, the discount value would be multiplied\nto the {@link IShoppingCartCommodity.volume} or\n{@link IShoppingOrderGood.volume} value. Also, in that case,\nthe {@link limit} property would be meaningful." } }, "required": [ - "parent", - "id", - "parent_id", - "name", - "created_at" + "unit", + "value", + "threshold", + "limit", + "multiplicative" ], - "description": "Invert category information with parent category." + "description": "Discount information with amount unit." }, - "IShoppingCouponSectionCriteria": { + "IShoppingCouponDiscount.IPercent": { "type": "object", "properties": { - "sections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSection" - }, - "minItems": 1, - "title": "Target sections to include or exclude", - "description": "Target sections to include or exclude." + "unit": { + "const": "percent", + "title": "Discount unit as percent", + "description": "Discount unit as percent.\n\nIt means the order price would be discounted by the percent value." }, - "type": { - "const": "section", - "title": "Descrimanator type", - "description": "Descrimanator type." + "value": { + "type": "number", + "minimum": 0, + "maximum": 100, + "title": "Discount value as percent", + "description": "Discount value as percent." }, - "direction": { + "threshold": { "oneOf": [ { - "const": "include" + "type": "null" }, { - "const": "exclude" + "type": "number", + "minimum": 0 } ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." - } - }, - "required": [ - "sections", - "type", - "direction" - ], - "description": "Conditions for sections of discount coupons.\n\n`IShoppingCouponSectionCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase } and is used when setting conditions\nfor a specific {@link IShoppingSection section}.\n\nIf the {@link direction } value is \"include\", the coupon can only be used\nfor the target {@link sections }. Conversely, if it is \"exclude\", the\ncoupon cannot be used." - }, - "IShoppingSection": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "code": { - "type": "string", - "title": "Identifier code", - "description": "Identifier code." - }, - "name": { - "type": "string", - "title": "Representative name of the section", - "description": "Representative name of the section." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of record", - "description": "Creation time of record." - } - }, - "required": [ - "id", - "code", - "name", - "created_at" - ], - "description": "Section information.\n\n`IShoppingSection` is a concept that refers to the spatial information of\nthe market.\n\nIf we compare the section mentioned here to the offline market, it means a\nspatially separated area within the store, such as the \"fruit corner\" or\n\"butcher corner\". Therefore, in the {@link IShoppingSale sale} entity, it is\nnot possible to classify multiple sections simultaneously, but only one section\ncan be classified.\n\nBy the way, if your shopping mall system requires only one section, then just\nuse only one. This concept is designed to be expandable in the future." - }, - "IShoppingCouponSellerCriteria": { - "type": "object", - "properties": { - "sellers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSeller" - }, - "minItems": 1, - "title": "Target sellers to include or exclude", - "description": "Target sellers to include or exclude." - }, - "type": { - "const": "seller", - "title": "Descrimanator type", - "description": "Descrimanator type." + "title": "Minimum purchase amount for discount", + "description": "Minimum purchase amount for discount.\n\nWhen setting this value, discount coupons cannot be applied to\norder totals that are less than this value." }, - "direction": { + "limit": { "oneOf": [ { - "const": "include" + "type": "null" }, { - "const": "exclude" + "type": "number", + "exclusiveMinimum": true, + "minimum": 0 } ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." + "title": "Maximum amount available for discount", + "description": "Maximum amount available for discount.\n\nWhen this value is set, no further discount will be given no\nmatter how much you order." } }, "required": [ - "sellers", - "type", - "direction" + "unit", + "value", + "threshold", + "limit" ], - "description": "Conditions for sellers of discount coupons.\n\n`IShoppingCouponSellerCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase } and is used when setting conditions\nfor a specific {@link IShoppingSeller seller}.\n\nIf the {@link direction } value is \"include\", the coupon can only be used\nfor the target {@link sellers }. Conversely, if it is \"exclude\", the\ncoupon cannot be used." + "description": "Discount information with percent unit." }, - "IShoppingCouponSaleCriteria": { + "IShoppingCouponRestriction": { "type": "object", "properties": { - "sales": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSale.ISummary" - }, - "minItems": 1, - "title": "Target sales to include or exclude", - "description": "Target sales to include or exclude." - }, - "type": { - "const": "sale", - "title": "Descrimanator type", - "description": "Descrimanator type." - }, - "direction": { + "access": { "oneOf": [ { - "const": "include" + "const": "public" }, { - "const": "exclude" + "const": "private" } ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." - } - }, - "required": [ - "sales", - "type", - "direction" - ], - "description": "Conditions for sales of discount coupons.\n\n`IShoppingCouponSaleCriteria` is a subtype entity of\n{@link IShoppingCouponCriteriaBase } and is used when setting conditions\nfor a specific {@link IShoppingSale sale}.\n\nIf the {@link direction } value is \"include\", the coupon can only be used\nfor the target {@link sales }. Conversely, if it is \"exclude\", the\ncoupon cannot be used." - }, - "IShoppingSale.ISummary": { - "type": "object", - "properties": { - "section": { - "$ref": "#/components/schemas/IShoppingSection", - "title": "Belonged section", - "description": "Belonged section." - }, - "seller": { - "$ref": "#/components/schemas/IShoppingSeller.IInvert", - "title": "Seller who has registered the sale", - "description": "Seller who has registered the sale." - }, - "price_range": { - "$ref": "#/components/schemas/IShoppingSalePriceRange", - "title": "Price range of the unit", - "description": "Price range of the unit." - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key of Sale", - "description": "Primary Key of Sale." - }, - "snapshot_id": { - "type": "string", - "format": "uuid", - "title": "Primary Key of Snapshot", - "description": "Primary Key of Snapshot." + "title": "Access level of coupon", + "description": "Access level of coupon.\n\n- public: possible to find from public API\n- private: unable to find from public API\n - arbitrarily assigned by the seller or administrator\n - issued from one-time link" }, - "latest": { + "exclusive": { "type": "boolean", - "title": "Whether the snapshot is the latest one or not", - "description": "Whether the snapshot is the latest one or not." - }, - "content": { - "$ref": "#/components/schemas/IShoppingSaleContent.IInvert", - "title": "Description and image content describing the sale", - "description": "Description and image content describing the sale." - }, - "channels": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSaleChannel" - }, - "minItems": 1, - "title": "List of channels and categories", - "description": "List of channels and categories.\n\nWhich channels and categories the sale is registered to." - }, - "tags": { - "type": "array", - "items": { - "type": "string" - }, - "title": "List of search tags", - "description": "List of search tags." - }, - "units": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSaleUnit.ISummary" - }, - "minItems": 1, - "title": "List of units", - "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." + "title": "Exclusivity or not", + "description": "Exclusivity or not.\n\nAn exclusive discount coupon refers to a discount coupon that has an\nexclusive relationship with other discount coupons and can only be\nused alone. That is, when an exclusive discount coupon is used, no\nother discount coupon can be used for the same\n{@link IShoppingOrder order} or {@link IShoppingOrderGood good}.\n\nPlease note that this exclusive attribute is a very different concept\nfrom multiplicative, which means whether the same coupon can be\nmultiplied and applied to multiple coupons of the same order, so\nplease do not confuse them." }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of the record", - "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at },\nwhich means the timepoint of the sale is opened." + "volume": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limited quantity issued", + "description": "Limited quantity issued.\n\nIf there is a limit to the quantity issued, it becomes impossible to issue tickets exceeding this value.\n\nIn other words, the concept of N coupons being issued on a first-come, first-served basis is created." }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Last updated time of the record", - "description": "Last updated time of the record.\n\nIn another words, creation time of the last snapshot." + "volume_per_citizen": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limited quantity issued per person", + "description": "Limited quantity issued per person.\n\nAs a limit to the total amount of issuance per person, it is common to assign 1 to limit duplicate issuance to the same citizen, or to use the NULL value to set no limit.\n\nOf course, by assigning a value of N, the total amount issued to the same citizen can be limited." }, - "paused_at": { + "expired_in": { "oneOf": [ { "type": "null" }, { - "type": "string", - "format": "date-time" + "type": "integer" } ], - "title": "Paused time of the sale", - "description": "Paused time of the sale.\n\nThe sale is paused by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} can still see the sale on the\nboth list and detail pages, but the sale has a warning label\n\"The sale is paused by the seller\"." + "title": "Expiration day(s) value", + "description": "Expiration day(s) value.\n\nThe concept of expiring N days after a discount coupon ticket is issued.\n\nTherefore, customers must use the ticket within N days, if possible, from the time it is issued." }, - "suspended_at": { + "expired_at": { "oneOf": [ { "type": "null" @@ -9611,8 +12205,89 @@ "format": "date-time" } ], - "title": "Suspended time of the sale", - "description": "Suspended time of the sale.\n\nThe sale is suspended by the seller, for some reason.\n\n{@link IShoppingCustomer Customers} cannot see the sale on the\nboth list and detail pages. It is almost same with soft delettion,\nbut there's a little bit difference that the owner\n{@link IShoppingSeller seller} can still see the sale and resume it.\n\nOf course, the {@link IShoppingCustomer customers} who have\nalready purchased the sale can still see the sale on the\n{@link IShoppingOrder order} page." + "title": "Expiration date", + "description": "Expiration date.\n\nA concept that expires after YYYY-MM-DD after a discount coupon ticket is issued.\n\nDouble restrictions are possible with expired_in, of which the one with the shorter expiration date is used." + } + }, + "required": [ + "access", + "exclusive", + "volume", + "volume_per_citizen", + "expired_in", + "expired_at" + ], + "description": "Restriction information of the coupon." + }, + "IShoppingCoupon.ICreate": { + "type": "object", + "properties": { + "discount": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponDiscount.IAmount" + }, + { + "$ref": "#/components/schemas/IShoppingCouponDiscount.IPercent" + } + ], + "discriminator": { + "propertyName": "unit", + "mapping": { + "amount": "#/components/schemas/IShoppingCouponDiscount.IAmount", + "percent": "#/components/schemas/IShoppingCouponDiscount.IPercent" + } + }, + "title": "Discount information", + "description": "Discount information." + }, + "restriction": { + "$ref": "#/components/schemas/IShoppingCouponRestriction", + "title": "Restriction information", + "description": "Restriction information." + }, + "criterias": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSectionCriteria.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSellerCriteria.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingCouponSaleCriteria.ICreate" + }, + { + "$ref": "#/components/schemas/IShoppingCouponFunnelCriteria.ICreate" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "channel": "#/components/schemas/IShoppingCouponChannelCriteria.ICreate", + "section": "#/components/schemas/IShoppingCouponSectionCriteria.ICreate", + "seller": "#/components/schemas/IShoppingCouponSellerCriteria.ICreate", + "sale": "#/components/schemas/IShoppingCouponSaleCriteria.ICreate", + "funnel": "#/components/schemas/IShoppingCouponFunnelCriteria.ICreate" + } + } + } + }, + "disposable_codes": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string", + "title": "Representative name of the coupon", + "description": "Representative name of the coupon." }, "opened_at": { "oneOf": [ @@ -9624,8 +12299,8 @@ "format": "date-time" } ], - "title": "Opening time of the sale", - "description": "Opening time of the sale." + "title": "Opening time of the coupon", + "description": "Opening time of the coupon." }, "closed_at": { "oneOf": [ @@ -9637,267 +12312,187 @@ "format": "date-time" } ], - "title": "Closing time of the sale", - "description": "Closing time of the sale.\n\nIf this value is `null`, the sale be continued forever." + "title": "Closing time of the coupon", + "description": "Closing time of the coupon.\n\nTickets cannot be issued after this time.\n\nHowever, previously issued tickets can still be used until their\nexpiration date." } }, "required": [ - "section", - "seller", - "price_range", - "id", - "snapshot_id", - "latest", - "content", - "channels", - "tags", - "units", - "created_at", - "updated_at", - "paused_at", - "suspended_at", + "discount", + "restriction", + "criterias", + "disposable_codes", + "name", "opened_at", "closed_at" ], - "description": "Summarized information of sale.\n\nThis summarized information being used for pagination." + "description": "Creation information of the coupon." }, - "IShoppingSeller.IInvert": { + "IShoppingCouponChannelCriteria.ICreate": { "type": "object", "properties": { - "type": { - "const": "seller", - "title": "Discriminant for the type of customer", - "description": "Discriminant for the type of customer." - }, - "member": { - "$ref": "#/components/schemas/IShoppingMember.IInvert", - "title": "Membership joining information", - "description": "Membership joining information." - }, - "customer": { - "$ref": "#/components/schemas/IShoppingCustomer.IInvert", - "title": "Customer, the connection information", - "description": "Customer, the connection information." - }, - "citizen": { - "$ref": "#/components/schemas/IShoppingCitizen", - "title": "Real-name and mobile number authentication information", - "description": "Real-name and mobile number authentication information." + "channels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCouponChannelCriteria.IChannelTo.ICreate" + }, + "minItems": 1, + "title": "List of target channels and categories", + "description": "List of target channels and categories." }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." + "type": { + "const": "channel" }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation tmie of record", - "description": "Creation tmie of record.\n\nAnother words, the time when the seller has signed up." + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] } }, "required": [ + "channels", "type", - "member", - "customer", - "citizen", - "id", - "created_at" + "direction" ], - "description": "Invert information starting from seller info.\n\nInstead of accessing to the seller information from the\n{@link IShoppingCustomer.member } -> {@link IShoppingMember.seller },\n`IShoppingSeller.IInvert` starts from the seller information\nand access to the customer, member and {@link IShoppingCitizen citizen}\ninformations inversely." - }, - "IShoppingSalePriceRange": { - "type": "object", - "properties": { - "lowest": { - "$ref": "#/components/schemas/IShoppingPrice" - }, - "highest": { - "$ref": "#/components/schemas/IShoppingPrice" - } - }, - "required": [ - "lowest", - "highest" - ] + "description": "Creation information of the channel criteria." }, - "IShoppingPrice": { + "IShoppingCouponChannelCriteria.IChannelTo.ICreate": { "type": "object", "properties": { - "nominal": { - "type": "number", - "minimum": 0, - "title": "Nominal price", - "description": "Nominal price.\n\nThis is not {@link real real price} to pay, but just a nominal price to show.\nIf this value is greater than the {@link real real price}, it would be shown\nlike {@link IShoppingSeller seller} is giving a discount." + "channel_code": { + "type": "string", + "title": "Target channel's {@link IShoppingChannel.code}", + "description": "Target channel's {@link IShoppingChannel.code}." }, - "real": { - "type": "number", - "minimum": 0, - "title": "Real price to pay", - "description": "Real price to pay." + "category_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + ], + "title": "Target categories' {@link IShoppingChannelCategory.id}s", + "description": "Target categories' {@link IShoppingChannelCategory.id}s." } }, "required": [ - "nominal", - "real" + "channel_code", + "category_ids" ], - "description": "Shopping price interface." + "description": "Target channel and categories." }, - "IShoppingSaleContent.IInvert": { + "IShoppingCouponSectionCriteria.ICreate": { "type": "object", "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "title": { - "type": "string" - }, - "thumbnails": { + "section_codes": { "type": "array", "items": { - "$ref": "#/components/schemas/IAttachmentFile" - } - } - }, - "required": [ - "id", - "title", - "thumbnails" - ] - }, - "IAttachmentFile": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of attachment file", - "description": "Creation time of attachment file." + "type": "string" + }, + "minItems": 1, + "title": "List of target section's {@link IShoppingSection.code}s", + "description": "List of target section's {@link IShoppingSection.code}s." }, - "name": { - "type": "string", - "maxLength": 255, - "title": "File name, except extension", - "description": "File name, except extension.\n\nIf there's file `.gitignore`, then its name is an empty string." + "type": { + "const": "section" }, - "extension": { + "direction": { "oneOf": [ { - "type": "null" + "const": "include" }, { - "type": "string", - "minLength": 1, - "maxLength": 8 + "const": "exclude" } - ], - "title": "Extension", - "description": "Extension.\n\nPossible to omit like `README` case." - }, - "url": { - "type": "string", - "format": "uri", - "title": "URL path of the real file", - "description": "URL path of the real file." + ] } }, "required": [ - "id", - "created_at", - "name", - "extension", - "url" + "section_codes", + "type", + "direction" ], - "description": "Attachment File.\n\nEvery attachment files that are managed in current system.\n\nFor reference, it is possible to omit one of file {@link name }\nor {@link extension } like `.gitignore` or `README` case, but not\npossible to omit both of them." + "description": "Creation information of the section criteria." }, - "IShoppingSaleChannel": { + "IShoppingCouponSellerCriteria.ICreate": { "type": "object", "properties": { - "categories": { + "seller_ids": { "type": "array", "items": { - "$ref": "#/components/schemas/IShoppingChannelCategory.IInvert" + "type": "string", + "format": "uuid" }, - "title": "List of categories of the channel listing the sale", - "description": "List of categories of the channel listing the sale.\n\nIf empty, it means all categories of the channel is listing the sale." - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of record", - "description": "Creation time of record." + "minItems": 1, + "title": "List of target seller's {@link IShoppingSeller.id}s", + "description": "List of target seller's {@link IShoppingSeller.id}s." }, - "code": { - "type": "string", - "title": "Identifier code", - "description": "Identifier code." + "type": { + "const": "seller" }, - "name": { - "type": "string", - "title": "Name of the channel", - "description": "Name of the channel." + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] } }, "required": [ - "categories", - "id", - "created_at", - "code", - "name" + "seller_ids", + "type", + "direction" ], - "description": "Target channel (and categories) of sale to sell.\n\n`IShoppingSaleChannel` is an entity that expresses through which\n{@link IShoppingChannel channel} a listing {@link IShoppingSale } is sold.\n\nAlso, if {@link IShoppingChannelCategory categories} are specified, it also\nmeans that the sale be sold. Otherwise, none of the categories of the channel\nbeing specified, it means that every categories of the channel is listing the\ntarget sale." + "description": "Creation information of the seller criteria." }, - "IShoppingSaleUnit.ISummary": { + "IShoppingCouponSaleCriteria.ICreate": { "type": "object", "properties": { - "price_range": { - "$ref": "#/components/schemas/IShoppingSalePriceRange" - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "name": { - "type": "string", - "title": "Representative name of the unit", - "description": "Representative name of the unit." + "sale_ids": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "minItems": 1, + "title": "List of target sale's {@link IShoppingSale.id}s", + "description": "List of target sale's {@link IShoppingSale.id}s." }, - "primary": { - "type": "boolean", - "title": "Whether the unit is primary or not", - "description": "Whether the unit is primary or not.\n\nJust a labeling value." + "type": { + "const": "sale" }, - "required": { - "type": "boolean", - "title": "Whether the unit is required or not", - "description": "Whether the unit is required or not.\n\nWhen the unit is required, the customer must select the unit. If do not\nselect, customer can't buy it.\n\nFor example, if there's a sale \"Macbook Set\" and one of the unit is the\n\"Main Body\", is it possible to buy the \"Macbook Set\" without the\n\"Main Body\" unit? This property is for that case." + "direction": { + "oneOf": [ + { + "const": "include" + }, + { + "const": "exclude" + } + ] } }, "required": [ - "price_range", - "id", - "name", - "primary", - "required" - ] + "sale_ids", + "type", + "direction" + ], + "description": "Creation information of the sale criteria." }, - "IShoppingCouponFunnelCriteria": { + "IShoppingCouponFunnelCriteria.ICreate": { "type": "object", "properties": { "funnels": { @@ -9917,9 +12512,7 @@ "description": "List of target funnels." }, "type": { - "const": "funnel", - "title": "Descrimanator type", - "description": "Descrimanator type." + "const": "funnel" }, "direction": { "oneOf": [ @@ -9929,9 +12522,7 @@ { "const": "exclude" } - ], - "title": "Direction of the criteria", - "description": "Direction of the criteria." + ] } }, "required": [ @@ -9939,87 +12530,7 @@ "type", "direction" ], - "description": "Limit the funnel of discount coupons.\n\n`ishoppingcouponfunnelcriteria` is a subtype entity of\n{@link IShoppingCouponCriteria }, and is used when you want to issue or\nexclude discount coupons only to {@link IShoppingCustomer customers} who\ncame from a specific path.\n\nAnd funnel restrictions are possible in 3 ways: The first is\n{@link IShoppingCustomer.referrer }, and by parsing\n{@link IShoppingCustomer.href }, which records the customer's access\naddress, restrictions can be made in units of specific URLs or variables." - }, - "IShoppingCouponDiscount": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingCouponDiscount.IAmount" - }, - { - "$ref": "#/components/schemas/IShoppingCouponDiscount.IPercent" - } - ], - "description": "Discount information of the coupon.\n\n`IShoppingCouponDiscount` is a type representing the discount information\nof a {@link IShoppingCoupon }. Also, it is an union type that divided\nby the {@link unit } of the discount value, `amount` or `percent`." - }, - "IShoppingCoupon.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingCoupon.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-coupon.name" - }, - { - "const": "-coupon.unit" - }, - { - "const": "-coupon.value" - }, - { - "const": "-coupon.created_at" - }, - { - "const": "-coupon.opened_at" - }, - { - "const": "-coupon.closed_at" - }, - { - "const": "+coupon.name" - }, - { - "const": "+coupon.unit" - }, - { - "const": "+coupon.value" - }, - { - "const": "+coupon.created_at" - }, - { - "const": "+coupon.opened_at" - }, - { - "const": "+coupon.closed_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - } - }, - "IShoppingCoupon.IRequest.ISearch": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - } + "description": "Creation information of the funnel criteria." }, "IPageIShoppingCoupon": { "type": "object", @@ -10065,7 +12576,7 @@ "pages": { "type": "integer", "title": "Total pages", - "description": "Total pages.\n\nEqual to {@link records } / {@link limit } with ceiling." + "description": "Total pages.\n\nEqual to {@link records} / {@link limit} with ceiling." } }, "required": [ @@ -10076,69 +12587,111 @@ ], "description": "Page information." }, - "IShoppingDeposit.IRequest": { + "IShoppingCoupon.IRequest": { "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingCoupon.IRequest.ISearch" + } + ] }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-deposit.source" - }, - { - "const": "-deposit.code" - }, - { - "const": "-deposit.direction" - }, - { - "const": "+deposit.source" - }, - { - "const": "+deposit.code" - }, - { - "const": "+deposit.direction" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-coupon.name" + }, + { + "const": "-coupon.unit" + }, + { + "const": "-coupon.value" + }, + { + "const": "-coupon.created_at" + }, + { + "const": "-coupon.opened_at" + }, + { + "const": "-coupon.closed_at" + }, + { + "const": "+coupon.name" + }, + { + "const": "+coupon.unit" + }, + { + "const": "+coupon.value" + }, + { + "const": "+coupon.created_at" + }, + { + "const": "+coupon.opened_at" + }, + { + "const": "+coupon.closed_at" + } + ] } - ] - } + } + ] }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } - } + }, + "required": [] }, - "IShoppingDeposit.IRequest.ISearch": { + "IShoppingCoupon.IRequest.ISearch": { "type": "object", "properties": { - "source": { - "type": "string" - }, - "code": { - "type": "string" - }, - "direction": { + "name": { "oneOf": [ { - "const": -1 + "type": "null" }, { - "const": 1 + "type": "string" } ] } - } + }, + "required": [] }, "IPageIShoppingDeposit": { "type": "object", @@ -10174,37 +12727,6 @@ "type": "string", "format": "date-time" }, - "code": { - "type": "string" - }, - "source": { - "type": "string" - }, - "direction": { - "$ref": "#/components/schemas/IShoppingDeposit.Direction" - } - }, - "required": [ - "id", - "created_at", - "code", - "source", - "direction" - ] - }, - "IShoppingDeposit.Direction": { - "oneOf": [ - { - "const": 1 - }, - { - "const": -1 - } - ] - }, - "IShoppingDeposit.ICreate": { - "type": "object", - "properties": { "code": { "type": "string" }, @@ -10223,65 +12745,113 @@ } }, "required": [ + "id", + "created_at", "code", "source", "direction" ] }, - "IShoppingMileage.IRequest": { + "IShoppingDeposit.IRequest": { "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + } + ] }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-mileage.source" - }, - { - "const": "-mileage.code" - }, - { - "const": "-mileage.direction" - }, - { - "const": "+mileage.source" - }, - { - "const": "+mileage.code" - }, - { - "const": "+mileage.direction" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-deposit.source" + }, + { + "const": "-deposit.code" + }, + { + "const": "-deposit.direction" + }, + { + "const": "+deposit.source" + }, + { + "const": "+deposit.code" + }, + { + "const": "+deposit.direction" + } + ] } - ] - } + } + ] }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } - } + }, + "required": [] }, - "IShoppingMileage.IRequest.ISearch": { + "IShoppingDeposit.IRequest.ISearch": { "type": "object", "properties": { "source": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "code": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "direction": { "oneOf": [ + { + "type": "null" + }, { "const": -1 }, @@ -10290,27 +12860,54 @@ } ] } - } + }, + "required": [] }, - "IPageIShoppingMileage": { + "IShoppingDeposit.ICreate": { "type": "object", "properties": { - "pagination": { - "$ref": "#/components/schemas/IPage.IPagination", - "title": "Page information", - "description": "Page information." + "code": { + "type": "string" }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingMileage" - }, - "title": "List of records", - "description": "List of records." - } - }, - "required": [ - "pagination", + "source": { + "type": "string" + }, + "direction": { + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [ + "code", + "source", + "direction" + ] + }, + "IPageIShoppingMileage": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingMileage" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", "data" ], "description": "A page.\n\nCollection of records with pagination indformation." @@ -10343,7 +12940,14 @@ "type": "string" }, "direction": { - "$ref": "#/components/schemas/IShoppingMileage.Direction" + "oneOf": [ + { + "const": -1 + }, + { + "const": 1 + } + ] } }, "required": [ @@ -10355,15 +12959,116 @@ "direction" ] }, - "IShoppingMileage.Direction": { - "oneOf": [ - { - "const": 1 + "IShoppingMileage.IRequest": { + "type": "object", + "properties": { + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + } + ] }, - { - "const": -1 + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-mileage.source" + }, + { + "const": "-mileage.code" + }, + { + "const": "-mileage.direction" + }, + { + "const": "+mileage.source" + }, + { + "const": "+mileage.code" + }, + { + "const": "+mileage.direction" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." } - ] + }, + "required": [] + }, + "IShoppingMileage.IRequest.ISearch": { + "type": "object", + "properties": { + "source": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "code": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "direction": { + "oneOf": [ + { + "type": "null" + }, + { + "const": -1 + }, + { + "const": 1 + } + ] + } + }, + "required": [] }, "IShoppingMileage.ICreate": { "type": "object", @@ -10402,85 +13107,6 @@ "value" ] }, - "IShoppingMileageDonation.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingMileageDonation.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-donation.created_at" - }, - { - "const": "-donation.value" - }, - { - "const": "-donation.reason" - }, - { - "const": "+donation.created_at" - }, - { - "const": "+donation.value" - }, - { - "const": "+donation.reason" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - } - }, - "IShoppingMileageDonation.IRequest.ISearch": { - "type": "object", - "properties": { - "citizen": { - "$ref": "#/components/schemas/IShoppingCitizen.IRequest.ISearch" - }, - "minimum": { - "type": "number", - "minimum": 0 - }, - "maximum": { - "type": "number", - "minimum": 0 - }, - "from": { - "type": "string", - "format": "date-time" - }, - "to": { - "type": "string", - "format": "date-time" - } - } - }, - "IShoppingCitizen.IRequest.ISearch": { - "type": "object", - "properties": { - "mobile": { - "type": "string", - "pattern": "^[0-9]*$" - }, - "name": { - "type": "string" - } - } - }, "IPageIShoppingMileageDonation": { "type": "object", "properties": { @@ -10537,230 +13163,184 @@ "created_at" ] }, - "IShoppingMileageDonation.ICreate": { + "IShoppingMileageDonation.IRequest": { "type": "object", "properties": { - "citizen_id": { - "type": "string", - "format": "uuid" + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMileageDonation.IRequest.ISearch" + } + ] }, - "value": { - "type": "number" + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-donation.created_at" + }, + { + "const": "-donation.value" + }, + { + "const": "-donation.reason" + }, + { + "const": "+donation.created_at" + }, + { + "const": "+donation.value" + }, + { + "const": "+donation.reason" + } + ] + } + } + ] }, - "reason": { - "type": "string" + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." } }, - "required": [ - "citizen_id", - "value", - "reason" - ] - }, - "IShoppingOrder.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingOrder.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-order.price" - }, - { - "const": "-order.quantity" - }, - { - "const": "-order.created_at" - }, - { - "const": "-order.publish.paid_at" - }, - { - "const": "+order.price" - }, - { - "const": "+order.quantity" - }, - { - "const": "+order.created_at" - }, - { - "const": "+order.publish.paid_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "description": "Request of orders with pagination and searching/sorting conditions." + "required": [] }, - "IShoppingOrder.IRequest.ISearch": { + "IShoppingMileageDonation.IRequest.ISearch": { "type": "object", "properties": { - "min_price": { - "type": "number" - }, - "max_price": { - "type": "number" - }, - "paid": { + "citizen": { "oneOf": [ { "type": "null" }, { - "type": "boolean" + "$ref": "#/components/schemas/IShoppingCitizen.IRequest.ISearch" } ] }, - "sale": { - "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" - } - } - }, - "IShoppingSale.IRequest.ISearch": { - "type": "object", - "properties": { - "show_paused": { - "type": "boolean" - }, - "show_suspended": { + "minimum": { "oneOf": [ { - "const": "only" + "type": "null" }, { - "type": "boolean" + "type": "number", + "minimum": 0 } ] }, - "title": { - "type": "string" - }, - "content": { - "type": "string" - }, - "title_or_content": { - "type": "string" - }, - "price": { - "$ref": "#/components/schemas/IShoppingPrice.ISearch" - }, - "review": { - "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch" - }, - "section_codes": { - "type": "array", - "items": { - "type": "string" - } - }, - "channel_codes": { - "type": "array", - "items": { - "type": "string" - } - }, - "channel_category_ids": { - "type": "array", - "items": { - "type": "string" - } - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "seller": { - "$ref": "#/components/schemas/IShoppingSeller.IRequest.ISearch" - } - } - }, - "IShoppingPrice.ISearch": { - "type": "object", - "properties": { - "minimum": { - "type": "number" - }, "maximum": { - "type": "number" - } - } - }, - "IShoppingSaleReview.IInvertSearch": { - "type": "object", - "properties": { - "score": { - "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.IScoreRange" + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ] }, - "count": { - "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.ICountRange" - } - } - }, - "IShoppingSaleReview.IInvertSearch.IScoreRange": { - "type": "object", - "properties": { - "minimum": { - "type": "number", - "minimum": 0, - "maximum": 100 + "from": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, - "maximum": { - "type": "number", - "minimum": 0, - "maximum": 100 + "to": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] } - } + }, + "required": [] }, - "IShoppingSaleReview.IInvertSearch.ICountRange": { + "IShoppingCitizen.IRequest.ISearch": { "type": "object", "properties": { - "minimum": { - "type": "integer" + "mobile": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "pattern": "^[0-9]*$" + } + ] }, - "maximum": { - "type": "integer" + "name": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] } - } + }, + "required": [] }, - "IShoppingSeller.IRequest.ISearch": { + "IShoppingMileageDonation.ICreate": { "type": "object", "properties": { - "id": { + "citizen_id": { "type": "string", "format": "uuid" }, - "mobile": { - "type": "string", - "pattern": "^[0-9]*$" - }, - "name": { - "type": "string" - }, - "email": { - "type": "string", - "format": "email" + "value": { + "type": "number" }, - "nickname": { + "reason": { "type": "string" } - } + }, + "required": [ + "citizen_id", + "value", + "reason" + ] }, "IPageIShoppingOrder": { "type": "object", @@ -10791,9 +13371,16 @@ "id": { "type": "string", "format": "uuid", + "x-wrtn-payment-order-id": true, "title": "Primary Key", "description": "Primary Key." }, + "name": { + "type": "string", + "x-wrtn-payment-order-name": true, + "title": "Representative name of the order", + "description": "Representative name of the order." + }, "customer": { "$ref": "#/components/schemas/IShoppingCustomer", "title": "Customer who've applied for the order", @@ -10811,7 +13398,7 @@ "price": { "$ref": "#/components/schemas/IShoppingOrderPrice", "title": "Price information including discounts", - "description": "Price information including discounts.\n\nFor reference, this price value has multiplied by the {@link volume } value.\nTherefore, even if {@link volume } value is equal to the target\n{@link IShoppingCartCommodity.volume }, this price value can be different\nwith the {@link IShoppingCartCommodity.price } value." + "description": "Price information including discounts.\n\nFor reference, this price value has multiplied by the {@link volume} value.\nTherefore, even if {@link volume} value is equal to the target\n{@link IShoppingCartCommodity.volume}, this price value can be different\nwith the {@link IShoppingCartCommodity.price} value." }, "publish": { "oneOf": [ @@ -10834,13 +13421,14 @@ }, "required": [ "id", + "name", "customer", "goods", "price", "publish", "created_at" ], - "description": "Order application information.\n\n`IShoppingOrder` is an entity that embodies {@link IShoppingCustomer customer}'s\norder application information. However, please note that at this time, you are\nstill at the \"order application\" stage and not the \"order confirmation\" stage.\n\nAnd as soon as a customer applies for an order, all\n{@link IShoppingCartCommodity commodities} in the target shopping cart are\npromoted to {@link IShoppingOrderGood goods}, and those good records are created\nunder this `IShoppingOrder`.\n\nOf course, not all commodities in the target shopping cart become\n{@link IShoppingOrderGood }, but only those selected by the customer become the\n{@link IShoppingOrderGood }." + "description": "Order application information.\n\n`IShoppingOrder` is an entity that embodies {@link IShoppingCustomer customer}'s\norder application information. However, please note that at this time, you are\nstill at the \"order application\" stage and not the \"order confirmation\" stage.\n\nAnd as soon as a customer applies for an order, all\n{@link IShoppingCartCommodity commodities} in the target shopping cart are\npromoted to {@link IShoppingOrderGood goods}, and those good records are created\nunder this `IShoppingOrder`.\n\nOf course, not all commodities in the target shopping cart become\n{@link IShoppingOrderGood}, but only those selected by the customer become the\n{@link IShoppingOrderGood}." }, "IShoppingCustomer": { "type": "object", @@ -10901,7 +13489,7 @@ "type": "string", "format": "uri", "title": "Connection address", - "description": "Connection address.\n\nSame with {@link window.location.href } of client." + "description": "Connection address.\n\nSame with {@link window.location.href} of client." }, "referrer": { "oneOf": [ @@ -10911,10 +13499,14 @@ { "type": "string", "format": "uri" + }, + { + "type": "string", + "maxLength": 0 } ], "title": "Referrer address", - "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + "description": "Referrer address.\n\nSame with {@link window.document.referrer} of client." }, "ip": { "oneOf": [ @@ -10949,7 +13541,7 @@ "ip", "created_at" ], - "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen }, {@link IShoppingMember }, and\n{@link IShoppingExternalUser }. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." + "description": "Customer information, but not a person but a connection basis.\n\n`IShoppingCustomer` is an entity that literally embodies the information of\nthose who participated in the market as customers. By the way, the\n`IShoppingCustomer` does not mean a person, but a connection basis. Therefore,\neven if the same person connects to the shopping mall multiple, multiple\nrecords are created in `IShoppingCustomer`.\n\nThe first purpose of this is to track the customer's inflow path in detail,\nand it is for cases where the same person enters as a non-member,\n{@link IShoppingCartCommodity puts items in the shopping cart} in advance,\nand only authenticates their {@link IShoppingCitizen real name} or\nregisters/logs in at the moment of {@link IShoppingOrderPublish payment}.\nIt is the second. Lastly, it is to accurately track the activities that\na person performs at the shopping mall in various ways like below.\n\n- Same person comes from an {@link IShoppingExternalUser external service}\n- Same person creates multiple accounts\n- Same person makes a {@link IShoppingOrderPublish purchase} as a non-member with only {@link IShoppingCitizen real name authentication}\n- Same person acts both {@link IShoppingSeller seller} and {@link IShoppingAdministrator admin} at the same time\n\nTherefore, `IShoppingCustomer` can have multiple records with the same\n{@link IShoppingCitizen}, {@link IShoppingMember}, and\n{@link IShoppingExternalUser}. Additionally, if a customer signs up for\nmembership after verifying their real name or signs up for our service after\nbeing a user of an external service, all related records are changed at once.\nTherefore, identification and tracking of customers can be done very\nsystematically." }, "IShoppingMember": { "type": "object", @@ -11025,7 +13617,7 @@ "emails", "created_at" ], - "description": "Member Account.\n\n`IShoppingMember` is an entity that symbolizes the case when a\n{@link IShoppingCustomer } signs up as a member of this shopping mall\nsystem.\n\nIf a `IShoppingMember` has seller or administrator property. it means that\nthe {@link IShoppingCustomer } has acting as a {@link IShoppingSeller seller}\nor {@link IShoppingAdministrator administrator} at the same time." + "description": "Member Account.\n\n`IShoppingMember` is an entity that symbolizes the case when a\n{@link IShoppingCustomer} signs up as a member of this shopping mall\nsystem.\n\nIf a `IShoppingMember` has seller or administrator property. it means that\nthe {@link IShoppingCustomer} has acting as a {@link IShoppingSeller seller}\nor {@link IShoppingAdministrator administrator} at the same time." }, "IShoppingOrderGood": { "type": "object", @@ -11044,7 +13636,7 @@ "volume": { "type": "integer", "title": "Volume of the good", - "description": "Volume of the good.\n\nThe value multiplied to {@link IShoppingCartCommodityStock.quantity }.\nIt's purpose is exactly same with {@link IShoppingCartCommodity.volume },\nbut rewritten because the {@link IShoppingCartCommodity } records are reusable\nuntil payment." + "description": "Volume of the good.\n\nThe value multiplied to {@link IShoppingCartCommodityStock.quantity}.\nIt's purpose is exactly same with {@link IShoppingCartCommodity.volume},\nbut rewritten because the {@link IShoppingCartCommodity} records are reusable\nuntil payment." }, "price": { "$ref": "#/components/schemas/IShoppingOrderPrice.ISummary", @@ -11103,7 +13695,7 @@ "state", "confirmed_at" ], - "description": "Information about the individual goods that make up your order.\n\n`IShoppingOrderGood` is an entity that represents each good ordered by a\n{@link IShoppingCustomer customer}, and the record is created in the process\nof upgrading the product {@link IShoppingCartCommodity commodity} in the\nshopping cart to a good due to the customer's {@link IShoppingOrder order}\nrequest.\n\nAnd `IShoppingOrderGood`, like {@link IShoppingCartCommodity }, is a concept\nthat corresponds to the listing {@link IShoppingSaleSnapshot sale snapshot}.\n\nFor reference, `IShoppingOrderGood` also contains {@link volume } information\nseparately from the belonging {@link IShoppingCartCommodity.volume }. This is\nbecause there are some cases where you put 3 books in your shopping cart and\nthen change them to 4 during the actual order application process. This is to\nincrease the reusability of the shopping cart by changing the volume attribute\nof the current entity rather than directly changing the commodity information.\n\nIn addition, `IShoppingOrderGood` becomes the most basic unit for the post-order\nprocess, that is, after service (A/S). For example, after receiving a\ncustomer's product, confirming the order is recorded in the {@link confirmed_at }\nattribute. Additionally, `IShoppingOrderGood` is the unit in which customers\nissues or request exchanges or refunds for ordered products." + "description": "Information about the individual goods that make up your order.\n\n`IShoppingOrderGood` is an entity that represents each good ordered by a\n{@link IShoppingCustomer customer}, and the record is created in the process\nof upgrading the product {@link IShoppingCartCommodity commodity} in the\nshopping cart to a good due to the customer's {@link IShoppingOrder order}\nrequest.\n\nAnd `IShoppingOrderGood`, like {@link IShoppingCartCommodity}, is a concept\nthat corresponds to the listing {@link IShoppingSaleSnapshot sale snapshot}.\n\nFor reference, `IShoppingOrderGood` also contains {@link volume} information\nseparately from the belonging {@link IShoppingCartCommodity.volume}. This is\nbecause there are some cases where you put 3 books in your shopping cart and\nthen change them to 4 during the actual order application process. This is to\nincrease the reusability of the shopping cart by changing the volume attribute\nof the current entity rather than directly changing the commodity information.\n\nIn addition, `IShoppingOrderGood` becomes the most basic unit for the post-order\nprocess, that is, after service (A/S). For example, after receiving a\ncustomer's product, confirming the order is recorded in the {@link confirmed_at}\nattribute. Additionally, `IShoppingOrderGood` is the unit in which customers\nissues or request exchanges or refunds for ordered products." }, "IShoppingCartCommodity": { "type": "object", @@ -11133,12 +13725,12 @@ "type": "integer", "minimum": 1, "title": "Volume of the commodity to purchase", - "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity} values." }, "price": { "$ref": "#/components/schemas/IShoppingPrice", "title": "Price of the commodity", - "description": "Price of the commodity.\n\nFor reference, this price value has not been multiplied by the\n{@link volume } value. It just sumed up the prices of the children\n{@link IShoppingSaleUnitStock.IInvert.price } values." + "description": "Price of the commodity.\n\nFor reference, this price value has not been multiplied by the\n{@link volume} value. It just sumed up the prices of the children\n{@link IShoppingSaleUnitStock.IInvert.price} values." }, "created_at": { "type": "string", @@ -11156,7 +13748,7 @@ "price", "created_at" ], - "description": "Item in a shopping cart.\n\n`IShoppingCartCommodity` is an entity that represents a\n{@link IShoppingSaleSnapshot snapshot} of the items that\n{@link IShoppingCustomer customer} has placed into his shopping cart with a\n{@link IShoppingOrder purchase} in mind. And if the customer continues this\ninto an actual order in the future, `IShoppingCartCommodity` be changed to\n{@link IShoppingOrderGood }.\n\nAnd while adding a sale snapshot to the shopping cart, the customer inevitably\nselects specific {@link IShoppingSaleUnit units} and\n{@link IShoppingSaleUnitStock final stocks} within the listing snapshot.\nInformation about these units and stocks is recorded in the subsidiary entity\n{@link IShoppingCartCommodityStock }. Also, there is an attribute {@link volume }\nthat indicates how many sets of snapshots of the target commodity will be\npurchased. This \"volume\" is a value that will be multiplied by\n{@link IShoppingSaleUnitStock.IInvert.quantity }, the quantity for each\ncomponent." + "description": "Item in a shopping cart.\n\n`IShoppingCartCommodity` is an entity that represents a\n{@link IShoppingSaleSnapshot snapshot} of the items that\n{@link IShoppingCustomer customer} has placed into his shopping cart with a\n{@link IShoppingOrder purchase} in mind. And if the customer continues this\ninto an actual order in the future, `IShoppingCartCommodity` be changed to\n{@link IShoppingOrderGood}.\n\nAnd while adding a sale snapshot to the shopping cart, the customer inevitably\nselects specific {@link IShoppingSaleUnit units} and\n{@link IShoppingSaleUnitStock final stocks} within the listing snapshot.\nInformation about these units and stocks is recorded in the subsidiary entity\n{@link IShoppingCartCommodityStock}. Also, there is an attribute {@link volume}\nthat indicates how many sets of snapshots of the target commodity will be\npurchased. This \"volume\" is a value that will be multiplied by\n{@link IShoppingSaleUnitStock.IInvert.quantity}, the quantity for each\ncomponent." }, "IShoppingSaleSnapshot.IInvert": { "type": "object", @@ -11223,7 +13815,7 @@ "type": "string", "format": "date-time", "title": "Creation time of the record", - "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at },\nwhich means the timepoint of the sale is opened." + "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at},\nwhich means the timepoint of the sale is opened." }, "updated_at": { "type": "string", @@ -11301,7 +13893,7 @@ "opened_at", "closed_at" ], - "description": "Invert information of the sale snapshot, in the perspective of commodity.\n\n`IShoppingSaleSnapshot.IInvert` is a structure used to represent a\nsnapshot in the perspective of a {@link IShoppingCommodity }, corresponding\nto an {@link IShoppingCartCommodityStock } entity.\n\nTherefore, `IShoppingSaleSnapshot.IInvert` does not contain every\n{@link IShoppingSaleUnit units} and {@link IShoppingSaleUnitStock stocks}\nof the snapshot records, but only some of the records which are put\ninto the {@link IShoppingCartCommodity shopping cart}." + "description": "Invert information of the sale snapshot, in the perspective of commodity.\n\n`IShoppingSaleSnapshot.IInvert` is a structure used to represent a\nsnapshot in the perspective of a {@link IShoppingCommodity}, corresponding\nto an {@link IShoppingCartCommodityStock} entity.\n\nTherefore, `IShoppingSaleSnapshot.IInvert` does not contain every\n{@link IShoppingSaleUnit units} and {@link IShoppingSaleUnitStock stocks}\nof the snapshot records, but only some of the records which are put\ninto the {@link IShoppingCartCommodity shopping cart}." }, "IShoppingSaleUnit.IInvert": { "type": "object", @@ -11424,7 +14016,14 @@ "description": "Primary Key." }, "option": { - "$ref": "#/components/schemas/IShoppingSaleUnitOption.IInvert", + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.IInvert" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ], "title": "Target option", "description": "Target option." }, @@ -11467,17 +14066,6 @@ ], "description": "Invert information from the cart." }, - "IShoppingSaleUnitOption.IInvert": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.IInvert" - }, - { - "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" - } - ], - "description": "Inversely referenced information of the option." - }, "IShoppingSaleUnitSelectableOption.IInvert": { "type": "object", "properties": { @@ -11574,6 +14162,7 @@ "cash": { "type": "number", "minimum": 0, + "x-wrtn-payment-price": true, "title": "Amount of the cash payment", "description": "Amount of the cash payment." }, @@ -11632,6 +14221,7 @@ "cash": { "type": "number", "minimum": 0, + "x-wrtn-payment-price": true, "title": "Amount of the cash payment", "description": "Amount of the cash payment." }, @@ -11703,7 +14293,7 @@ "ticket", "created_at" ], - "description": "Discount coupon ticket payment details.\n\n`IShoppingCouponTicketPayment` is an entity that embodies the payment\ninformation for the {@link IShoppingOrder order} of\n{@link IShoppingCouponTicket }, and is used when a consumer uses the\ndiscount coupon ticket he or she was issued to order and has the payment\namount deducted.\n\nAnd since {@link IShoppingOrder } itself is not an entity used in\nsituations where an order is completed, but rather an entity designed to\nexpress an order request, the creation of this\n`IShoppingCouponTicketPayment` record does not actually mean that the\nattached ticket disappears. Until the {@link IShoppingCustomer customer}\n{@link IShoppingOrderPublish.paid_at completes the payment} and confirms\nthe order, the ticket can be understood as a kind of deposit.\n\nAdditionally, this record can be deleted by the customer reversing the\npayment of the ticket, but it can also be deleted when the attribution\norder itself is cancelled." + "description": "Discount coupon ticket payment details.\n\n`IShoppingCouponTicketPayment` is an entity that embodies the payment\ninformation for the {@link IShoppingOrder order} of\n{@link IShoppingCouponTicket}, and is used when a consumer uses the\ndiscount coupon ticket he or she was issued to order and has the payment\namount deducted.\n\nAnd since {@link IShoppingOrder} itself is not an entity used in\nsituations where an order is completed, but rather an entity designed to\nexpress an order request, the creation of this\n`IShoppingCouponTicketPayment` record does not actually mean that the\nattached ticket disappears. Until the {@link IShoppingCustomer customer}\n{@link IShoppingOrderPublish.paid_at completes the payment} and confirms\nthe order, the ticket can be understood as a kind of deposit.\n\nAdditionally, this record can be deleted by the customer reversing the\npayment of the ticket, but it can also be deleted when the attribution\norder itself is cancelled." }, "IShoppingCouponTicket": { "type": "object", @@ -11765,26 +14355,48 @@ "description": "List of deliveries.\n\nAn {@link IShoppingOrder order} can be delivered in multiple times.\nOf course, the opposite case is also possible, that a\n{@link IShoppingDelivery delivery} can be composed of multiple orders." }, "state": { - "$ref": "#/components/schemas/IShoppingDelivery.State", - "title": "State of the order, about the deliveries", - "description": "State of the order, about the deliveries." - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of the record", - "description": "Creation time of the record." - }, - "paid_at": { "oneOf": [ { - "type": "null" + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], + "title": "State of the order, about the deliveries", + "description": "State of the order, about the deliveries." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the record", + "description": "Creation time of the record." + }, + "paid_at": { + "oneOf": [ + { + "type": "null" }, { "type": "string", @@ -11822,7 +14434,7 @@ "cancelled_at", "address" ], - "description": "Order completion and payment information.\n\n`IShoppingOrderPublish` is an entity that embodies the series of processes\nin which a {@link IShoppingCustomer customer} pays for his or her\n{@link IShoppingOrder order}, thereby completing the order. And only after\nthe order is {@link paid_at completed}, can the {@link IShoppingSeller seller}\nrecognize that the customer has purchased his product.\n\nBy the way, please note that just because the `IShoppingOrderPublish` record\nexists, it does not mean that the payment has been completed. Of course, with\n\"credit cards\" and \"Google Pay\", payment application and payment occur at the\nsame time. However, there are some cases where payment is made after the\npayment application, such as \"bank transfer\" or \"virtual account payment\".\nTherefore, to see the completion of payment, be sure to check the\n{@link paid_at } property.\n\nIn addition, even after payment has been made, there may be cases where it is\nsuddenly cancelled, so please be aware of this as well." + "description": "Order completion and payment information.\n\n`IShoppingOrderPublish` is an entity that embodies the series of processes\nin which a {@link IShoppingCustomer customer} pays for his or her\n{@link IShoppingOrder order}, thereby completing the order. And only after\nthe order is {@link paid_at completed}, can the {@link IShoppingSeller seller}\nrecognize that the customer has purchased his product.\n\nBy the way, please note that just because the `IShoppingOrderPublish` record\nexists, it does not mean that the payment has been completed. Of course, with\n\"credit cards\" and \"Google Pay\", payment application and payment occur at the\nsame time. However, there are some cases where payment is made after the\npayment application, such as \"bank transfer\" or \"virtual account payment\".\nTherefore, to see the completion of payment, be sure to check the\n{@link paid_at} property.\n\nIn addition, even after payment has been made, there may be cases where it is\nsuddenly cancelled, so please be aware of this as well." }, "IShoppingDelivery": { "type": "object", @@ -11864,7 +14476,29 @@ "description": "List of shippers of the delivery." }, "state": { - "$ref": "#/components/schemas/IShoppingDelivery.State", + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], "title": "State of the delivery", "description": "State of the delivery." }, @@ -11884,7 +14518,7 @@ "state", "created_at" ], - "description": "Delivery information.\n\nWhen delivering {@link IShoppingOrderGood goods} to\n{@link IShoppingCustomer customer}, {@link IShoppingSeller seller} can deliver\nmultiple {@link IShoppingSaleUnitStock stocks}, goods at once. Also, it is\npossible to deliver a stock or good in multiple times due to physical restriction\nlike volume or weight problem.\n\nAs you can see from above, the relationship between delivery with\n{@link IShoppingOrder order} (or {@link IShoppingOrderGood good}) is not 1: 1 or\nN: 1, but M: N. Entity `IShoppingDelivery` has been designed to represent such\nrelationship, by referencing target stocks or goods through subsidiary entity\n{@link IShoppingDeliveryPiece }.\n\nAlso, delivery does not end with only one step. It has multiple processes like\nmanufacturing, planning, shipping and delivering. Those steps are represented by\nanother subsidiary entity {@link IShoppingDeliveryJourney }." + "description": "Delivery information.\n\nWhen delivering {@link IShoppingOrderGood goods} to\n{@link IShoppingCustomer customer}, {@link IShoppingSeller seller} can deliver\nmultiple {@link IShoppingSaleUnitStock stocks}, goods at once. Also, it is\npossible to deliver a stock or good in multiple times due to physical restriction\nlike volume or weight problem.\n\nAs you can see from above, the relationship between delivery with\n{@link IShoppingOrder order} (or {@link IShoppingOrderGood good}) is not 1: 1 or\nN: 1, but M: N. Entity `IShoppingDelivery` has been designed to represent such\nrelationship, by referencing target stocks or goods through subsidiary entity\n{@link IShoppingDeliveryPiece}.\n\nAlso, delivery does not end with only one step. It has multiple processes like\nmanufacturing, planning, shipping and delivering. Those steps are represented by\nanother subsidiary entity {@link IShoppingDeliveryJourney}." }, "IShoppingDeliveryJourney": { "type": "object", @@ -11915,7 +14549,20 @@ "description": "Deletion time of the record." }, "type": { - "$ref": "#/components/schemas/IShoppingDeliveryJourney.Type", + "oneOf": [ + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + } + ], "title": "Type of journey", "description": "Type of journey.\n\n- preparing\n- manufacturing\n- shipping\n- delivering" }, @@ -11980,23 +14627,7 @@ "started_at", "completed_at" ], - "description": "Journey of delivery.\n\n`IShoppingDeliveryJourney` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing each journey of the delivery. For reference, the word journey\nmeans each step of the delivery process, such as preparing, shipping, and\ndelivering {@link IShoppingOrderGood goods} to the\n{@link IShoppingCustomer customer}." - }, - "IShoppingDeliveryJourney.Type": { - "oneOf": [ - { - "const": "preparing" - }, - { - "const": "manufacturing" - }, - { - "const": "shipping" - }, - { - "const": "delivering" - } - ] + "description": "Journey of delivery.\n\n`IShoppingDeliveryJourney` is a subsidiary entity of {@link IShoppingDelivery},\ndescribing each journey of the delivery. For reference, the word journey\nmeans each step of the delivery process, such as preparing, shipping, and\ndelivering {@link IShoppingOrderGood goods} to the\n{@link IShoppingCustomer customer}." }, "IShoppingDeliveryPiece": { "type": "object", @@ -12010,20 +14641,20 @@ "publish_id": { "type": "string", "format": "uuid", - "title": "Target order's {@link IShoppingOrderPublish.id }", - "description": "Target order's {@link IShoppingOrderPublish.id }." + "title": "Target order's {@link IShoppingOrderPublish.id}", + "description": "Target order's {@link IShoppingOrderPublish.id}." }, "good_id": { "type": "string", "format": "uuid", - "title": "Target good's {@link IShoppingOrderGood.id }", - "description": "Target good's {@link IShoppingOrderGood.id }." + "title": "Target good's {@link IShoppingOrderGood.id}", + "description": "Target good's {@link IShoppingOrderGood.id}." }, "stock_id": { "type": "string", "format": "uuid", - "title": "Target stock's {@link IShoppingSaleUnitStock.id }", - "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + "title": "Target stock's {@link IShoppingSaleUnitStock.id}", + "description": "Target stock's {@link IShoppingSaleUnitStock.id}." }, "quantity": { "type": "number", @@ -12039,7 +14670,7 @@ "stock_id", "quantity" ], - "description": "Which stocks are delivered.\n\n`IShoppingDeliveryPiece` is a subsidiary entity of {@link IShoppingDelivery },\ndescribing how much quantity is delivered for each\n{@link IShoppingSaleUnitStock stock} in {@link IShoppingOrder }.\n\nFor reference, as an order can be delivered in multiple times due to volume\nor weight problem, it is possible to have multiple `IShoppingDeliveryPiece`\nrecords for a single stock." + "description": "Which stocks are delivered.\n\n`IShoppingDeliveryPiece` is a subsidiary entity of {@link IShoppingDelivery},\ndescribing how much quantity is delivered for each\n{@link IShoppingSaleUnitStock stock} in {@link IShoppingOrder}.\n\nFor reference, as an order can be delivered in multiple times due to volume\nor weight problem, it is possible to have multiple `IShoppingDeliveryPiece`\nrecords for a single stock." }, "IShoppingDeliveryShipper": { "type": "object", @@ -12077,32 +14708,6 @@ "mobile" ] }, - "IShoppingDelivery.State": { - "oneOf": [ - { - "const": "none" - }, - { - "const": "underway" - }, - { - "const": "preparing" - }, - { - "const": "manufacturing" - }, - { - "const": "shipping" - }, - { - "const": "delivering" - }, - { - "const": "arrived" - } - ], - "description": "State of delivery\n\n- `none`: No delivery or journey record\n- `underway`: Some pieces are over preparing, but others are not\n- `preparing`: At least preparing\n- `manufacturing`: At least manufacturing\n- `shipping`: At least shipping\n- `delivering`: At least delivering\n- `arrived`: Every pieces are arrived" - }, "IShoppingAddress": { "type": "object", "properties": { @@ -12187,155 +14792,617 @@ ], "description": "The address information." }, - "IShoppingSale.IRequest": { + "IShoppingOrder.IRequest": { "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch", - "title": "Search conditions", - "description": "Search conditions." + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrder.IRequest.ISearch" + } + ] }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-seller.created_at" - }, - { - "const": "-seller.goods.payments.real" - }, - { - "const": "-seller.goods.publish_count" - }, - { - "const": "-seller.reviews.average" - }, - { - "const": "-seller.reviews.count" - }, - { - "const": "-goods.publish_count" - }, - { - "const": "-goods.payments.real" - }, - { - "const": "-reviews.average" - }, - { - "const": "-reviews.count" - }, - { - "const": "-sale.created_at" - }, - { - "const": "-sale.updated_at" - }, - { - "const": "-sale.opened_at" - }, - { - "const": "-sale.closed_at" - }, - { - "const": "-sale.content.title" - }, - { - "const": "-sale.price_range.lowest.real" - }, - { - "const": "-sale.price_range.highest.real" - }, - { - "const": "+seller.created_at" - }, - { - "const": "+seller.goods.payments.real" - }, - { - "const": "+seller.goods.publish_count" - }, - { - "const": "+seller.reviews.average" - }, - { - "const": "+seller.reviews.count" - }, - { - "const": "+goods.publish_count" - }, - { - "const": "+goods.payments.real" - }, - { - "const": "+reviews.average" - }, - { - "const": "+reviews.count" - }, - { - "const": "+sale.created_at" - }, - { - "const": "+sale.updated_at" - }, - { - "const": "+sale.opened_at" - }, - { - "const": "+sale.closed_at" - }, - { - "const": "+sale.content.title" - }, - { - "const": "+sale.price_range.lowest.real" - }, - { - "const": "+sale.price_range.highest.real" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-order.price" + }, + { + "const": "-order.quantity" + }, + { + "const": "-order.created_at" + }, + { + "const": "-order.publish.paid_at" + }, + { + "const": "+order.price" + }, + { + "const": "+order.quantity" + }, + { + "const": "+order.created_at" + }, + { + "const": "+order.publish.paid_at" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [], + "description": "Request of orders with pagination and searching/sorting conditions." + }, + "IShoppingOrder.IRequest.ISearch": { + "type": "object", + "properties": { + "min_price": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "max_price": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "paid": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "sale": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + ] + } + }, + "required": [] + }, + "IShoppingSale.IRequest.ISearch": { + "type": "object", + "properties": { + "show_paused": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "show_suspended": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "only" + }, + { + "type": "boolean" + } + ] + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "content": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "title_or_content": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "price": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingPrice.ISearch" + } + ] + }, + "review": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch" + } + ] + }, + "section_codes": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "channel_codes": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "channel_category_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "tags": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "seller": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSeller.IRequest.ISearch" + } + ] + } + }, + "required": [] + }, + "IShoppingPrice.ISearch": { + "type": "object", + "properties": { + "minimum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "maximum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + } + }, + "required": [] + }, + "IShoppingSaleReview.IInvertSearch": { + "type": "object", + "properties": { + "score": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.IScoreRange" + } + ] + }, + "count": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleReview.IInvertSearch.ICountRange" + } + ] + } + }, + "required": [] + }, + "IShoppingSaleReview.IInvertSearch.IScoreRange": { + "type": "object", + "properties": { + "minimum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0, + "maximum": 100 + } + ] + }, + "maximum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0, + "maximum": 100 + } + ] + } + }, + "required": [] + }, + "IShoppingSaleReview.IInvertSearch.ICountRange": { + "type": "object", + "properties": { + "minimum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ] + }, + "maximum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ] + } + }, + "required": [] + }, + "IShoppingSeller.IRequest.ISearch": { + "type": "object", + "properties": { + "id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] + }, + "mobile": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "pattern": "^[0-9]*$" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "email": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "email" + } + ] + }, + "nickname": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + } + }, + "required": [] + }, + "IPageIShoppingSale.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSale.ISummary" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSale.IRequest": { + "type": "object", + "properties": { + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" + } + ], + "title": "Search conditions", + "description": "Search conditions." + }, + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-seller.created_at" + }, + { + "const": "-seller.goods.payments.real" + }, + { + "const": "-seller.goods.publish_count" + }, + { + "const": "-seller.reviews.average" + }, + { + "const": "-seller.reviews.count" + }, + { + "const": "-goods.publish_count" + }, + { + "const": "-goods.payments.real" + }, + { + "const": "-reviews.average" + }, + { + "const": "-reviews.count" + }, + { + "const": "-sale.created_at" + }, + { + "const": "-sale.updated_at" + }, + { + "const": "-sale.opened_at" + }, + { + "const": "-sale.closed_at" + }, + { + "const": "-sale.content.title" + }, + { + "const": "-sale.price_range.lowest.real" + }, + { + "const": "-sale.price_range.highest.real" + }, + { + "const": "+seller.created_at" + }, + { + "const": "+seller.goods.payments.real" + }, + { + "const": "+seller.goods.publish_count" + }, + { + "const": "+seller.reviews.average" + }, + { + "const": "+seller.reviews.count" + }, + { + "const": "+goods.publish_count" + }, + { + "const": "+goods.payments.real" + }, + { + "const": "+reviews.average" + }, + { + "const": "+reviews.count" + }, + { + "const": "+sale.created_at" + }, + { + "const": "+sale.updated_at" + }, + { + "const": "+sale.opened_at" + }, + { + "const": "+sale.closed_at" + }, + { + "const": "+sale.content.title" + }, + { + "const": "+sale.price_range.lowest.real" + }, + { + "const": "+sale.price_range.highest.real" + } + ] } - ] - }, + } + ], "title": "Sorting conditions", "description": "Sorting conditions." }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } }, + "required": [], "description": "Request of summarized sales with pagination and searching/sorting options." }, - "IPageIShoppingSale.ISummary": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/IPage.IPagination", - "title": "Page information", - "description": "Page information." - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSale.ISummary" - }, - "title": "List of records", - "description": "List of records." - } - }, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." - }, "IShoppingSale": { "type": "object", "properties": { @@ -12401,7 +15468,7 @@ "type": "string", "format": "date-time", "title": "Creation time of the record", - "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at },\nwhich means the timepoint of the sale is opened." + "description": "Creation time of the record.\n\nNote that, this property is different with {@link opened_at},\nwhich means the timepoint of the sale is opened." }, "updated_at": { "type": "string", @@ -12479,7 +15546,7 @@ "opened_at", "closed_at" ], - "description": "Seller sales products.\n\n`IShoppingSale` is an entity that embodies \"product sales\" (sales)\ninformation registered by the {@link ISoppingSeller seller}. And the main\ninformation of the sale is recorded in the sub {@link IShoppingSaleSnapshot },\nnot in the main `IShoppingSale`. When a seller changes a previously registered\nitem, the existing `IShoppingSale` record is not changed, but a new\n{@link IShoppingSaleSnapshot snapshot} record be created.\n\nThis is to preserve the {@link IShoppingCustomer customer}'s\n{@link IShoppingOrder purchase history} flawlessly after the customer\npurchases a specific item, even if the seller changes the components or\nprice of the item. It is also intended to support sellers in so-called A/B\ntesting, which involves changing components or prices and measuring the\nperformance in each case." + "description": "Seller sales products.\n\n`IShoppingSale` is an entity that embodies \"product sales\" (sales)\ninformation registered by the {@link ISoppingSeller seller}. And the main\ninformation of the sale is recorded in the sub {@link IShoppingSaleSnapshot},\nnot in the main `IShoppingSale`. When a seller changes a previously registered\nitem, the existing `IShoppingSale` record is not changed, but a new\n{@link IShoppingSaleSnapshot snapshot} record be created.\n\nThis is to preserve the {@link IShoppingCustomer customer}'s\n{@link IShoppingOrder purchase history} flawlessly after the customer\npurchases a specific item, even if the seller changes the components or\nprice of the item. It is also intended to support sellers in so-called A/B\ntesting, which involves changing components or prices and measuring the\nperformance in each case." }, "IShoppingSaleContent": { "type": "object", @@ -12496,7 +15563,17 @@ "description": "Title of the content." }, "format": { - "$ref": "#/components/schemas/IShoppingSaleContent.Type", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of the body content", "description": "Format of the body content.\n\nSame meaning with file extension like `html`, `md`, and `txt`." }, @@ -12530,20 +15607,7 @@ "files", "thumbnails" ], - "description": "Content information of sale snapshot.\n\n`IShoppingSaleContent` is an entity embodies the description contents\nof {@link IShoppingSale }." - }, - "IShoppingSaleContent.Type": { - "oneOf": [ - { - "const": "html" - }, - { - "const": "md" - }, - { - "const": "txt" - } - ] + "description": "Content information of sale snapshot.\n\n`IShoppingSaleContent` is an entity embodies the description contents\nof {@link IShoppingSale}." }, "IShoppingSaleUnit": { "type": "object", @@ -12551,7 +15615,14 @@ "options": { "type": "array", "items": { - "$ref": "#/components/schemas/IShoppingSaleUnitOption" + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption" + }, + { + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" + } + ] }, "title": "List of options", "description": "List of options." @@ -12595,18 +15666,7 @@ "primary", "required" ], - "description": "Product composition information handled in the sale.\n\n`IShoppingSaleUnit` is an entity that embodies the \"individual product\"\ninformation handled in the {@link IShoppingSale sale}.\n\nFor reference, the reason why `IShoppingSaleUnit` is separated from\n{@link IShoppingSaleSnapshot } by an algebraic relationship of 1: N is because\nthere are some cases where multiple products are sold in one listing. This is\nthe case with so-called \"bundled products\".\n\n- Bundle from regular product (Mackbook Set)\n - Main Body\n - Keyboard\n - Mouse\n - Apple Care (Free A/S Voucher)\n\nAnd again, `IShoppingSaleUnit` does not in itself refer to the\n{@link IShoppingSaleUnitStock final stock} that the\n{@link IShoppingCustomer customer} will {@link IShoppingOrder purchase}.\nThe final stock can be found only after selecting all given\n{@link IShoppingSaleUnitOption options} and their\n{@link IShoppingSaleUnitOptionCandidate candidate values}.\n\nFor example, even if you buy a Macbook, the final stocks are determined only\nafter selecting all the options (CPU / RAM / SSD), etc." - }, - "IShoppingSaleUnitOption": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption" - }, - { - "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption" - } - ], - "description": "Individual option information on units for sale.\n\n`IShoppingSaleUnitOption` is a subsidiary entity of\n{@link IShoppingSaleUnit } that represents individual products in the\n{@link IShoppingSale sale}, and is an entity designed to represent individual\noption information for the unit.\n\nAlso, `IShoppingSaleUnitOption` is an union type of two entities,\n{@link IShoppingSaleUnitSelectableOption } and\n{@link IShoppingSaleUnitDescriptiveOption }. To specify the detailed type of\nthem, just use the `if` statement to the {@link type } property like below:\n\n```typescript\nif (option.type === \"select\")\n option.candidates; // IShoppingSaleUnitSelectableOption\n```\n\n- Examples of Options\n - selectable options\n - Computer: CPU, RAM, SSD, etc.\n - Clothes: size, color, style, etc.\n - descriptive options\n - Engrave\n - Simple question\n\nIf the type of option is a variable value in \"select\", the final stock that the\n{@link IShoppingCustomer customer} will purchase changes depending on the\nselection of the {@link IShoppingSaleUnitOptionCandidate candidate value}.\n\nConversely, if it is a type other than \"select\", or if the type is \"select\" but\nvariable is false, this is an option that has no meaning beyond simple information\ntransfer. Therefore, no matter what value the customer enters and chooses when\npurchasing it, the option in this case does not affect the\n{@link IShoppingSaleUnitStock final stock}." + "description": "Product composition information handled in the sale.\n\n`IShoppingSaleUnit` is an entity that embodies the \"individual product\"\ninformation handled in the {@link IShoppingSale sale}.\n\nFor reference, the reason why `IShoppingSaleUnit` is separated from\n{@link IShoppingSaleSnapshot} by an algebraic relationship of 1: N is because\nthere are some cases where multiple products are sold in one listing. This is\nthe case with so-called \"bundled products\".\n\n- Bundle from regular product (Mackbook Set)\n - Main Body\n - Keyboard\n - Mouse\n - Apple Care (Free A/S Voucher)\n\nAnd again, `IShoppingSaleUnit` does not in itself refer to the\n{@link IShoppingSaleUnitStock final stock} that the\n{@link IShoppingCustomer customer} will {@link IShoppingOrder purchase}.\nThe final stock can be found only after selecting all given\n{@link IShoppingSaleUnitOption options} and their\n{@link IShoppingSaleUnitOptionCandidate candidate values}.\n\nFor example, even if you buy a Macbook, the final stocks are determined only\nafter selecting all the options (CPU / RAM / SSD), etc." }, "IShoppingSaleUnitSelectableOption": { "type": "object", @@ -12649,7 +15709,7 @@ "name", "variable" ], - "description": "Individual option information on units for sale.\n\n`IShoppingSaleUnitSelectableOption` is a subsidiary entity of\n{@link IShoppingSaleUnit } that represents individual products in the\n{@link IShoppingSale sale}, and is an entity designed to represent individual\nselectable option information for the unit.\n\n- Examples of Options\n - selectable options\n - Computer: CPU, RAM, SSD, etc.\n - Clothes: size, color, style, etc.\n - descriptive options\n - Engrave\n - Simple question\n\nIf the {@link variable } property value is `true`, the final stock that the\n{@link IShoppingCustomer customer} will purchase changes depending on the\nselection of the {@link IShoppingSaleUnitOptionCandidate candidate value}.\n\nConversely, if it is a type other than \"select\", or if the {@link variable }\nproperty value is \"false\", , this is an option that has no meaning beyond\nsimple information transfer. Therefore, no matter what value the customer\nchooses when purchasing it, the option in this case does not affect the\n{@link IShoppingSaleUnitStock final stock}." + "description": "Individual option information on units for sale.\n\n`IShoppingSaleUnitSelectableOption` is a subsidiary entity of\n{@link IShoppingSaleUnit} that represents individual products in the\n{@link IShoppingSale sale}, and is an entity designed to represent individual\nselectable option information for the unit.\n\n- Examples of Options\n - selectable options\n - Computer: CPU, RAM, SSD, etc.\n - Clothes: size, color, style, etc.\n - descriptive options\n - Engrave\n - Simple question\n\nIf the {@link variable} property value is `true`, the final stock that the\n{@link IShoppingCustomer customer} will purchase changes depending on the\nselection of the {@link IShoppingSaleUnitOptionCandidate candidate value}.\n\nConversely, if it is a type other than \"select\", or if the {@link variable}\nproperty value is \"false\", , this is an option that has no meaning beyond\nsimple information transfer. Therefore, no matter what value the customer\nchooses when purchasing it, the option in this case does not affect the\n{@link IShoppingSaleUnitStock final stock}." }, "IShoppingSaleUnitStock": { "type": "object", @@ -12691,7 +15751,7 @@ "inventory", "choices" ], - "description": "Final component information on units for sale.\n\n`IShoppingSaleUnitStock` is a subsidiary entity of {@link IShoppingSaleUnit }\nthat represents a product catalog for sale, and is a kind of final stock that is\nconstructed by selecting all {@link IShoppingSaleUnitSelectableOption options}\n(variable \"select\" type) and their\n{@link IShoppingSaleUnitOptionCandidate candidate} values in the belonging unit.\nIt is the \"good\" itself that customers actually purchase.\n\n- Product Name) MacBook\n - Options\n - CPU: { i3, i5, i7, i9 }\n - RAM: { 8GB, 16GB, 32GB, 64GB, 96GB }\n - SSD: { 256GB, 512GB, 1TB }\n - Number of final stocks: 4 * 5 * 3 = 60\n\nFor reference, the total number of `IShoppingSaleUnitStock` records in an\nattribution unit can be obtained using Cartesian Product. In other words, the\nvalue obtained by multiplying all the candidate values that each\n(variable \"select\" type) option can have by the number of cases is the total\nnumber of final stocks in the unit.\n\nOf course, without a single variable \"select\" type option, the final stocks\ncount in the unit is only 1." + "description": "Final component information on units for sale.\n\n`IShoppingSaleUnitStock` is a subsidiary entity of {@link IShoppingSaleUnit}\nthat represents a product catalog for sale, and is a kind of final stock that is\nconstructed by selecting all {@link IShoppingSaleUnitSelectableOption options}\n(variable \"select\" type) and their\n{@link IShoppingSaleUnitOptionCandidate candidate} values in the belonging unit.\nIt is the \"good\" itself that customers actually purchase.\n\n- Product Name) MacBook\n - Options\n - CPU: { i3, i5, i7, i9 }\n - RAM: { 8GB, 16GB, 32GB, 64GB, 96GB }\n - SSD: { 256GB, 512GB, 1TB }\n - Number of final stocks: 4 * 5 * 3 = 60\n\nFor reference, the total number of `IShoppingSaleUnitStock` records in an\nattribution unit can be obtained using Cartesian Product. In other words, the\nvalue obtained by multiplying all the candidate values that each\n(variable \"select\" type) option can have by the number of cases is the total\nnumber of final stocks in the unit.\n\nOf course, without a single variable \"select\" type option, the final stocks\ncount in the unit is only 1." }, "IShoppingSaleUnitStockChoice": { "type": "object", @@ -12705,12 +15765,12 @@ "option_id": { "type": "string", "format": "uuid", - "description": "Target option's {@link IShoppingSaleUnitOption.id }" + "description": "Target option's {@link IShoppingSaleUnitOption.id}" }, "candidate_id": { "type": "string", "format": "uuid", - "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }" + "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id}" } }, "required": [ @@ -12720,52 +15780,6 @@ ], "description": "Selection information of final stock.\n\n`IShoppingSaleUnitStockChoice` is an entity that represents which\n{@link IShoppingSaleUnitSelectableOption option} of each variable \"select\"\ntype was selected for each {@link IShoppingSaleUnitStock stock} and which\n{@link IShoppingSaleUnitOptionCandidate candidate value} was selected within\nit.\n\nOf course, if the bound {@link IShoppingSaleUnit unit} does not have any\noptions, this entity can also be ignored." }, - "IShoppingSaleInquiryComment.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-created_at" - }, - { - "const": "+created_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "description": "Request of the comments with pagination and searching/sorting options." - }, - "IShoppingSaleInquiryComment.IRequest.ISearch": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "nickname": { - "type": "string" - }, - "body": { - "type": "string" - } - } - }, "IPageIShoppingSaleInquiryComment": { "type": "object", "properties": { @@ -12793,7 +15807,25 @@ "type": "object", "properties": { "writer": { - "$ref": "#/components/schemas/IShoppingActorEntity", + "oneOf": [ + { + "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" + }, + { + "$ref": "#/components/schemas/IShoppingCustomer" + }, + { + "$ref": "#/components/schemas/IShoppingSeller.IInvert" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "administrator": "#/components/schemas/IShoppingAdministrator.IInvert", + "customer": "#/components/schemas/IShoppingCustomer", + "seller": "#/components/schemas/IShoppingSeller.IInvert" + } + }, "title": "Writer of the comment", "description": "Writer of the comment.\n\nBoth customer and seller can write comment on the sale inquiry.\n\nBy the way, no restriction on the customer, but seller must be the\nperson who've registered the sale." }, @@ -12839,20 +15871,7 @@ "snapshots", "created_at" ], - "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment },\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." - }, - "IShoppingActorEntity": { - "oneOf": [ - { - "$ref": "#/components/schemas/IShoppingAdministrator.IInvert" - }, - { - "$ref": "#/components/schemas/IShoppingSeller.IInvert" - }, - { - "$ref": "#/components/schemas/IShoppingCustomer" - } - ] + "description": "A comment written on an inquiry article.\n\n`IShoppingSaleInquiryComment` is a subtype entity of {@link IBbsArticleComment},\nand is used when you want to communicate with multiple people about an\n{@link IShoppingSaleInquiry inquiry} written by a\n{@link IShoppingCustomer customer}.\n\nFor reference, only related parties can write comments for\n{@link IShoppingSeller sellers}, but there is no limit to\n{@link IShoppingCustomer customers}. In other words, anyone customer can\nfreely write a comment, even if they are not the person who wrote the inquiry." }, "IBbsArticleComment.ISnapshot": { "type": "object", @@ -12870,7 +15889,17 @@ "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." }, "format": { - "$ref": "#/components/schemas/IBbsArticleComment.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -12895,20 +15924,7 @@ "body", "files" ], - "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment }, designed to keep evidence\nand prevent fraud." - }, - "IBbsArticleComment.Format": { - "oneOf": [ - { - "const": "html" - }, - { - "const": "md" - }, - { - "const": "txt" - } - ] + "description": "Snapshot of comment.\n\n`IBbsArticleComment.ISnapshot` is a snapshot entity that contains\nthe contents of the comment.\n\nAs mentioned in {@link IBbsArticleComment}, designed to keep evidence\nand prevent fraud." }, "IAttachmentFile.ICreate": { "type": "object", @@ -12925,26 +15941,124 @@ "type": "null" }, { - "type": "string", - "minLength": 1, - "maxLength": 8 + "type": "string", + "minLength": 1, + "maxLength": 8 + } + ], + "title": "Extension", + "description": "Extension.\n\nPossible to omit like `README` case." + }, + "url": { + "type": "string", + "format": "uri", + "contentMediaType": "image/*", + "title": "URL path of the real file", + "description": "URL path of the real file." + } + }, + "required": [ + "name", + "extension", + "url" + ] + }, + "IShoppingSaleInquiryComment.IRequest": { + "type": "object", + "properties": { + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryComment.IRequest.ISearch" + } + ] + }, + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [], + "description": "Request of the comments with pagination and searching/sorting options." + }, + "IShoppingSaleInquiryComment.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "nickname": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" } - ], - "title": "Extension", - "description": "Extension.\n\nPossible to omit like `README` case." + ] }, - "url": { - "type": "string", - "format": "uri", - "title": "URL path of the real file", - "description": "URL path of the real file." + "body": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] } }, - "required": [ - "name", - "extension", - "url" - ] + "required": [] }, "IShoppingSaleInquiryComment.ICreate": { "type": "object", @@ -13001,7 +16115,17 @@ "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or comment." }, "format": { - "$ref": "#/components/schemas/IBbsArticleComment.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -13028,104 +16152,6 @@ ], "description": "Snapshot content of the comment." }, - "IShoppingSaleQuestion.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingSaleInquiry.IRequest.ISearch", - "title": "Search conditions", - "description": "Search conditions." - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-created_at" - }, - { - "const": "+created_at" - }, - { - "const": "-nickname" - }, - { - "const": "-answered_at" - }, - { - "const": "-title" - }, - { - "const": "-updated_at" - }, - { - "const": "+nickname" - }, - { - "const": "+answered_at" - }, - { - "const": "+title" - }, - { - "const": "+updated_at" - } - ] - }, - "title": "Sorting conditions", - "description": "Sorting conditions." - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "description": "Request of summarized informations with pagination searching/sorting options." - }, - "IShoppingSaleInquiry.IRequest.ISearch": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "nickname": { - "type": "string" - }, - "answered": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "boolean" - } - ] - }, - "title": { - "type": "string" - }, - "body": { - "type": "string" - }, - "title_or_body": { - "type": "string" - }, - "from": { - "type": "string", - "format": "date-time" - }, - "to": { - "type": "string", - "format": "date-time" - } - } - }, "IPageIShoppingSaleQuestion.ISummary": { "type": "object", "properties": { @@ -13232,26 +16258,203 @@ "title": "Title of the last snapshot", "description": "Title of the last snapshot." }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of the article", - "description": "Creation time of the article." + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "seller", + "id", + "title", + "created_at", + "updated_at" + ] + }, + "IShoppingSaleQuestion.IRequest": { + "type": "object", + "properties": { + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiry.IRequest.ISearch" + } + ], + "title": "Search conditions", + "description": "Search conditions." + }, + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-nickname" + }, + { + "const": "-answered_at" + }, + { + "const": "-created_at" + }, + { + "const": "-updated_at" + }, + { + "const": "-title" + }, + { + "const": "+nickname" + }, + { + "const": "+answered_at" + }, + { + "const": "+created_at" + }, + { + "const": "+updated_at" + }, + { + "const": "+title" + } + ] + } + } + ], + "title": "Sorting conditions", + "description": "Sorting conditions." + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [], + "description": "Request of summarized informations with pagination searching/sorting options." + }, + "IShoppingSaleInquiry.IRequest.ISearch": { + "type": "object", + "properties": { + "name": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "nickname": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "answered": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ] + }, + "title": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "body": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "title_or_body": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "from": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Modification time of the article", - "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + "to": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] } }, - "required": [ - "seller", - "id", - "title", - "created_at", - "updated_at" - ] + "required": [] }, "IPageIShoppingSaleQuestion.IAbridge": { "type": "object", @@ -13330,7 +16533,17 @@ "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." }, "format": { - "$ref": "#/components/schemas/IBbsArticle.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -13393,7 +16606,17 @@ "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." }, "format": { - "$ref": "#/components/schemas/IBbsArticle.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -13422,19 +16645,6 @@ "files" ] }, - "IBbsArticle.Format": { - "oneOf": [ - { - "const": "html" - }, - { - "const": "md" - }, - { - "const": "txt" - } - ] - }, "IShoppingSaleQuestion": { "type": "object", "properties": { @@ -13446,7 +16656,7 @@ "type": { "const": "question", "title": "Type of the derived inquiry", - "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion}\n- `review`: {@link IShoppingSaleReview}" }, "customer": { "$ref": "#/components/schemas/IShoppingCustomer", @@ -13502,7 +16712,7 @@ "snapshots", "created_at" ], - "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret } attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." + "description": "Question about sale snapshot.\n\n`IShoppingSaleQuestion` is a subtype entity of {@link IShoppingSaleInquiry},\nand is used when a {@link IShoppingCustomer customer} wants to ask something\nabout a {@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at\nthe time) registered by the {@link IShoppingSeller seller}.\n\nAnd, like most shopping malls, `IShoppingSaleQuestion` also provides\na {@link secret} attribute, allowing you to create a \"secret message\" that can\nonly be viewed by the seller and the customer who wrote the question." }, "IShoppingSaleInquiryAnswer": { "type": "object", @@ -13557,7 +16767,17 @@ "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." }, "format": { - "$ref": "#/components/schemas/IBbsArticle.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -13588,82 +16808,214 @@ "body", "files" ], - "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle }, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + "description": "Snapshot of article.\n\n`IBbsArticle.ISnapshot` is a snapshot entity that contains the contents of\nthe article, as mentioned in {@link IBbsArticle}, the contents of the article\nare separated from the article record to keep evidence and prevent fraud." + }, + "IPageIShoppingSaleReview.ISummary": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleReview.ISummary" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingSaleReview.ISummary": { + "type": "object", + "properties": { + "score": { + "type": "number", + "title": "Score of the review", + "description": "Score of the review." + }, + "customer": { + "$ref": "#/components/schemas/IShoppingCustomer", + "title": "Customer who wrote the inquiry", + "description": "Customer who wrote the inquiry." + }, + "answer": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary" + } + ], + "title": "Formal answer for the inquiry by the seller", + "description": "Formal answer for the inquiry by the seller." + }, + "read_by_seller": { + "type": "boolean", + "title": "Whether the seller has viewed the inquiry or not", + "description": "Whether the seller has viewed the inquiry or not." + }, + "id": { + "type": "string", + "format": "uuid", + "title": "Primary Key", + "description": "Primary Key." + }, + "title": { + "type": "string", + "title": "Title of the last snapshot", + "description": "Title of the last snapshot." + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Creation time of the article", + "description": "Creation time of the article." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Modification time of the article", + "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + } + }, + "required": [ + "score", + "customer", + "answer", + "read_by_seller", + "id", + "title", + "created_at", + "updated_at" + ], + "description": "Summarized information of the review." }, "IShoppingSaleReview.IRequest": { "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingSaleReview.IRequest.ISearch", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSaleReview.IRequest.ISearch" + } + ], "title": "Search conditions", "description": "Search conditions." }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-created_at" - }, - { - "const": "+created_at" - }, - { - "const": "-nickname" - }, - { - "const": "-answered_at" - }, - { - "const": "-title" - }, - { - "const": "-updated_at" - }, - { - "const": "+nickname" - }, - { - "const": "+answered_at" - }, - { - "const": "+title" - }, - { - "const": "+updated_at" - }, - { - "const": "-score" - }, - { - "const": "+score" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-nickname" + }, + { + "const": "-answered_at" + }, + { + "const": "-created_at" + }, + { + "const": "-updated_at" + }, + { + "const": "-title" + }, + { + "const": "-score" + }, + { + "const": "+nickname" + }, + { + "const": "+answered_at" + }, + { + "const": "+created_at" + }, + { + "const": "+updated_at" + }, + { + "const": "+title" + }, + { + "const": "+score" + } + ] } - ] - }, + } + ], "title": "Sorting conditions", "description": "Sorting conditions." }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } }, + "required": [], "description": "Request of summarized informations with pagination searching/sorting options." }, "IShoppingSaleReview.IRequest.ISearch": { "type": "object", "properties": { "name": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "nickname": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "answered": { "oneOf": [ @@ -13676,122 +17028,83 @@ ] }, "title": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "body": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "title_or_body": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "from": { - "type": "string", - "format": "date-time" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, "to": { - "type": "string", - "format": "date-time" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, "minimum": { - "type": "number", - "minimum": 0, - "maximum": 100 + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0, + "maximum": 100 + } + ] }, "maximum": { - "type": "number", - "minimum": 0, - "maximum": 100 - } - } - }, - "IPageIShoppingSaleReview.ISummary": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/IPage.IPagination", - "title": "Page information", - "description": "Page information." - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSaleReview.ISummary" - }, - "title": "List of records", - "description": "List of records." - } - }, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." - }, - "IShoppingSaleReview.ISummary": { - "type": "object", - "properties": { - "score": { - "type": "number", - "title": "Score of the review", - "description": "Score of the review." - }, - "customer": { - "$ref": "#/components/schemas/IShoppingCustomer", - "title": "Customer who wrote the inquiry", - "description": "Customer who wrote the inquiry." - }, - "answer": { "oneOf": [ { "type": "null" }, { - "$ref": "#/components/schemas/IShoppingSaleInquiryAnswer.ISummary" + "type": "number", + "minimum": 0, + "maximum": 100 } - ], - "title": "Formal answer for the inquiry by the seller", - "description": "Formal answer for the inquiry by the seller." - }, - "read_by_seller": { - "type": "boolean", - "title": "Whether the seller has viewed the inquiry or not", - "description": "Whether the seller has viewed the inquiry or not." - }, - "id": { - "type": "string", - "format": "uuid", - "title": "Primary Key", - "description": "Primary Key." - }, - "title": { - "type": "string", - "title": "Title of the last snapshot", - "description": "Title of the last snapshot." - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Creation time of the article", - "description": "Creation time of the article." - }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Modification time of the article", - "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." + ] } }, - "required": [ - "score", - "customer", - "answer", - "read_by_seller", - "id", - "title", - "created_at", - "updated_at" - ], - "description": "Summarized information of the review." + "required": [] }, "IPageIShoppingSaleReview.IAbridge": { "type": "object", @@ -13872,7 +17185,17 @@ "description": "Modification time of the article.\n\nIn other words, the time when the last snapshot was created." }, "format": { - "$ref": "#/components/schemas/IBbsArticle.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -13911,7 +17234,7 @@ "type": { "const": "review", "title": "Type of the derived inquiry", - "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion }\n- `review`: {@link IShoppingSaleReview }" + "description": "Type of the derived inquiry.\n\n- `question`: {@link IShoppingSaleQuestion}\n- `review`: {@link IShoppingSaleReview}" }, "customer": { "$ref": "#/components/schemas/IShoppingCustomer", @@ -13966,7 +17289,7 @@ "snapshots", "created_at" ], - "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry },\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" + "description": "Reviews for sale snapshots.\n\n`IShoppingSaleReview` is a subtype entity of {@link IShoppingSaleInquiry},\nand is used when a {@link IShoppingCustomer customer} purchases a\n{@link IShoppingSale sale} ({@link IShoppingSaleSnapshot snapshot} at the time)\nregistered by the {@link IShoppingSeller seller} as a product and leaves a\nreview and rating for it.\n\nFor reference, `IShoppingSaleReview` and\n{@link IShoppingOrderGod shopping_order_goods} have a logarithmic relationship\nof N: 1, but this does not mean that customers can continue to write reviews\nfor the same product indefinitely. Wouldn't there be restrictions, such as\nif you write a review once, you can write an additional review a month later?" }, "IShoppingSaleReview.ISnapshot": { "type": "object", @@ -13990,7 +17313,17 @@ "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." }, "format": { - "$ref": "#/components/schemas/IBbsArticle.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -14024,22 +17357,6 @@ ], "description": "Snapshot content of the review article." }, - "IPage.IRequest": { - "type": "object", - "properties": { - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "description": "Page request data" - }, "IPageIShoppingSaleSnapshot.ISummary": { "type": "object", "properties": { @@ -14132,6 +17449,37 @@ ], "description": "Summarized information of the sale snapshot." }, + "IPage.IRequest": { + "type": "object", + "properties": { + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [], + "description": "Page request data" + }, "IShoppingSaleSnapshot": { "type": "object", "properties": { @@ -14172,56 +17520,28 @@ "type": "string" }, "title": "List of search tags", - "description": "List of search tags." - }, - "units": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingSaleUnit" - }, - "minItems": 1, - "title": "List of units", - "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." - } - }, - "required": [ - "id", - "snapshot_id", - "latest", - "content", - "channels", - "tags", - "units" - ], - "description": "Snapshot record of sale.\n\n`IShoppingSaleSnapshot` is an entity that embodies a snapshot of a sale,\nand the ERD (Entity Relationship Diagram) describes the role of the\n`shopping_sale_snapshots` table as follows:\n\n> {@link IShoppingSale shopping_sales} is an entity that embodies\n> \"product sales\" (sales) information registered by the\n> {@link IShoppingSeller seller}. And the main information of the sale is\n> recorded in the sub `shopping_sale_snapshots`, not in the main\n> {@link IShoppingSale shopping_sales}. When a seller changes a previously\n> registered item, the existing {@link IShoppingSale shopping_sales} record\n> is not changed, but a new snapshot record is created.\n>\n> This is to preserve the {@link IShoppingCustomer customer}'s\n> {@link IShoppingOrder purchase history} flawlessly after the customer\n> purchases a specific item, even if the seller changes the components or price\n> of the item. It is also intended to support sellers in so-called A/B testing,\n> which involves changing components or prices and measuring the performance\n> in each case.\n\nBy the way, DTO (Data Transfer Object) level used by the front-end developer,\nit does not distinguish {@link IShoppingSale } and `IShoppingSaleSnapshot`\nstrictly, and generally handles {@link IShoppingSale } and snapshot together.\n\nBut even though the DTO level does not strictly distinguish them, the word and\nconcept of \"snapshot\" is still important, so it is recommended to understand\nthe concept of \"snapshot\" properly." - }, - "IShoppingChannelCategory.ICreate": { - "type": "object", - "properties": { - "parent_id": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "string", - "format": "uuid" - } - ], - "title": "Parent category's ID", - "description": "Parent category's ID." - }, - "name": { - "type": "string", - "title": "Representative name of the category", - "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + "description": "List of search tags." + }, + "units": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingSaleUnit" + }, + "minItems": 1, + "title": "List of units", + "description": "List of units.\n\nRecords about individual product composition informations that are sold\nin the sale. Each {@link IShoppingSaleUnit unit} record has configurable\n{@link IShoppingSaleUnitOption options},\n{@link IShoppingSaleUnitOptionCandidate candidate} values for each\noption, and {@link IShoppingSaleUnitStock final stocks} determined by\nselecting every candidate values of each option." } }, "required": [ - "parent_id", - "name" + "id", + "snapshot_id", + "latest", + "content", + "channels", + "tags", + "units" ], - "description": "Creation information of the category." + "description": "Snapshot record of sale.\n\n`IShoppingSaleSnapshot` is an entity that embodies a snapshot of a sale,\nand the ERD (Entity Relationship Diagram) describes the role of the\n`shopping_sale_snapshots` table as follows:\n\n> {@link IShoppingSale shopping_sales} is an entity that embodies\n> \"product sales\" (sales) information registered by the\n> {@link IShoppingSeller seller}. And the main information of the sale is\n> recorded in the sub `shopping_sale_snapshots`, not in the main\n> {@link IShoppingSale shopping_sales}. When a seller changes a previously\n> registered item, the existing {@link IShoppingSale shopping_sales} record\n> is not changed, but a new snapshot record is created.\n>\n> This is to preserve the {@link IShoppingCustomer customer}'s\n> {@link IShoppingOrder purchase history} flawlessly after the customer\n> purchases a specific item, even if the seller changes the components or price\n> of the item. It is also intended to support sellers in so-called A/B testing,\n> which involves changing components or prices and measuring the performance\n> in each case.\n\nBy the way, DTO (Data Transfer Object) level used by the front-end developer,\nit does not distinguish {@link IShoppingSale} and `IShoppingSaleSnapshot`\nstrictly, and generally handles {@link IShoppingSale} and snapshot together.\n\nBut even though the DTO level does not strictly distinguish them, the word and\nconcept of \"snapshot\" is still important, so it is recommended to understand\nthe concept of \"snapshot\" properly." }, "IShoppingChannelCategory": { "type": "object", @@ -14252,6 +17572,11 @@ "title": "Primary Key", "description": "Primary Key." }, + "code": { + "type": "string", + "title": "Identifier code of the category", + "description": "Identifier code of the category.\n\nThe code must be unique in the channel." + }, "parent_id": { "oneOf": [ { @@ -14281,11 +17606,12 @@ "parent", "children", "id", + "code", "parent_id", "name", "created_at" ], - "description": "Category of channel.\n\n`IShoppingChannelCategory` is a concept that refers to classification\ncategories within a specific {@link IShoppingChannel channel}, and is exactly\nthe same as the concept commonly referred to as \"category\" in shopping malls.\n\nAnd `IShoppingChannelCategory` is different with {@link IShoppingSection }.\n{@link IShoppingSection } refers to a \"corner\" that is independent spatial\ninformation in the offline market, which cannot simultaneously classified in\na {@link IShoppingSale sale}. Besides, `IShoppingChannelCategory` can be\nclassified into multiple categories in a sale simultaneously.\n\nProduct\t| Section (corner) | Categories\n---------|------------------|-----------------------------------\nBeef\t | Butcher corner | Frozen food, Meat, Favorite food\nGrape | Fruit corner | Fresh food, Favorite food\n\nIn addition, as `IShoppingChannelCategory` has 1:N self recursive relationship,\nit is possible to express below hierarchical structures. Thus, each channel\ncan set their own category classification as they want.\n\n- Food > Meat > Frozen\n- Electronics > Notebook > 15 inches\n- Miscellaneous > Wallet\n\nFurthermore, `IShoppingChannelCategory` is designed to merge between themselves,\nso there is no burden to edit the category at any time." + "description": "Category of channel.\n\n`IShoppingChannelCategory` is a concept that refers to classification\ncategories within a specific {@link IShoppingChannel channel}, and is exactly\nthe same as the concept commonly referred to as \"category\" in shopping malls.\n\nAnd `IShoppingChannelCategory` is different with {@link IShoppingSection}.\n{@link IShoppingSection} refers to a \"corner\" that is independent spatial\ninformation in the offline market, which cannot simultaneously classified in\na {@link IShoppingSale sale}. Besides, `IShoppingChannelCategory` can be\nclassified into multiple categories in a sale simultaneously.\n\nProduct\t| Section (corner) | Categories\n---------|------------------|-----------------------------------\nBeef\t | Butcher corner | Frozen food, Meat, Favorite food\nGrape | Fruit corner | Fresh food, Favorite food\n\nIn addition, as `IShoppingChannelCategory` has 1:N self recursive relationship,\nit is possible to express below hierarchical structures. Thus, each channel\ncan set their own category classification as they want.\n\n- Food > Meat > Frozen\n- Electronics > Notebook > 15 inches\n- Miscellaneous > Wallet\n\nFurthermore, `IShoppingChannelCategory` is designed to merge between themselves,\nso there is no burden to edit the category at any time." }, "IShoppingChannelCategory.IHierarchical": { "type": "object", @@ -14304,6 +17630,11 @@ "title": "Primary Key", "description": "Primary Key." }, + "code": { + "type": "string", + "title": "Identifier code of the category", + "description": "Identifier code of the category.\n\nThe code must be unique in the channel." + }, "parent_id": { "oneOf": [ { @@ -14332,12 +17663,47 @@ "required": [ "children", "id", + "code", "parent_id", "name", "created_at" ], "description": "Hierarchical category information with children categories." }, + "IShoppingChannelCategory.ICreate": { + "type": "object", + "properties": { + "parent_id": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ], + "title": "Parent category's ID", + "description": "Parent category's ID." + }, + "code": { + "type": "string", + "title": "Identifier code of the category", + "description": "Identifier code of the category.\n\nThe code must be unique in the channel." + }, + "name": { + "type": "string", + "title": "Representative name of the category", + "description": "Representative name of the category.\n\nThe name must be unique within the parent category. If no parent exists,\nthen the name must be unique within the channel between no parent\ncategories." + } + }, + "required": [ + "parent_id", + "code", + "name" + ], + "description": "Creation information of the category." + }, "IRecordMerge": { "type": "object", "properties": { @@ -14345,7 +17711,7 @@ "type": "string", "format": "uuid", "title": "Target record to keep after merging", - "description": "Target record to keep after merging.\n\nAfter merge process, {@link absorbed } records would be merged into\nthis {@link keep } record." + "description": "Target record to keep after merging.\n\nAfter merge process, {@link absorbed} records would be merged into\nthis {@link keep} record." }, "absorbed": { "type": "array", @@ -14353,15 +17719,15 @@ "type": "string", "format": "uuid" }, - "title": "To be absorbed to {@link keep } after merging", - "description": "To be absorbed to {@link keep } after merging." + "title": "To be absorbed to {@link keep} after merging", + "description": "To be absorbed to {@link keep} after merging." } }, "required": [ "keep", "absorbed" ], - "description": "Record Merge DTO.\n\n`IRecordMerge` is a structure for merging records.\n\nThe `merge` means that merging multiple {@link IRecordMerge.absorbed }\nrecords into {@link IRecordMerge.keep } instead of deleting\n{@link IRecordMerge.absorbed } records.\n\nIf there're some dependent tables of the target `table` having\nunique constraint on foriegn key column, such dependent tables\nalso perform the merge process, too.\n\nOf course, if there're another dependent tables under those\ndependents, they also perform the merge process recursively as well.\nSuch recursive merge process still works for self-recursive\n(tree-structured) tables." + "description": "Record Merge DTO.\n\n`IRecordMerge` is a structure for merging records.\n\nThe `merge` means that merging multiple {@link IRecordMerge.absorbed}\nrecords into {@link IRecordMerge.keep} instead of deleting\n{@link IRecordMerge.absorbed} records.\n\nIf there're some dependent tables of the target `table` having\nunique constraint on foriegn key column, such dependent tables\nalso perform the merge process, too.\n\nOf course, if there're another dependent tables under those\ndependents, they also perform the merge process recursively as well.\nSuch recursive merge process still works for self-recursive\n(tree-structured) tables." }, "IShoppingChannel.ICreate": { "type": "object", @@ -14397,83 +17763,127 @@ ], "description": "Updating information of the channel." }, + "IPageIShoppingChannel": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingChannel" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, "IShoppingChannel.IRequest": { "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingChannel.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingChannel.IRequest.ISearch" + } + ] }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-channel.code" - }, - { - "const": "-channel.name" - }, - { - "const": "-channel.created_at" - }, - { - "const": "+channel.code" - }, - { - "const": "+channel.name" - }, - { - "const": "+channel.created_at" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-channel.code" + }, + { + "const": "-channel.name" + }, + { + "const": "-channel.created_at" + }, + { + "const": "+channel.code" + }, + { + "const": "+channel.name" + }, + { + "const": "+channel.created_at" + } + ] } - ] - } + } + ] }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } }, + "required": [], "description": "Request of the channels with pagination and searching/sorting options." }, "IShoppingChannel.IRequest.ISearch": { "type": "object", "properties": { "code": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] }, "name": { - "type": "string" - } - } - }, - "IPageIShoppingChannel": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/IPage.IPagination", - "title": "Page information", - "description": "Page information." - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingChannel" - }, - "title": "List of records", - "description": "List of records." + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] } }, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." + "required": [] }, "IPageIShoppingChannel.IHierarchical": { "type": "object", @@ -14526,109 +17936,54 @@ "title": "Identifier code", "description": "Identifier code." }, - "name": { - "type": "string", - "title": "Name of the channel", - "description": "Name of the channel." - } - }, - "required": [ - "categories", - "id", - "created_at", - "code", - "name" - ], - "description": "Hierarchical channel information with children categories." - }, - "IShoppingSection.ICreate": { - "type": "object", - "properties": { - "code": { - "type": "string", - "title": "Identifier code", - "description": "Identifier code." - }, - "name": { - "type": "string", - "title": "Representative name of the section", - "description": "Representative name of the section." - } - }, - "required": [ - "code", - "name" - ], - "description": "Creation information of the section." - }, - "IShoppingSection.IUpdate": { - "type": "object", - "properties": { - "name": { - "type": "string", - "title": "Representative name of the section", - "description": "Representative name of the section." - } - }, - "required": [ - "name" - ], - "description": "Updating information of the section." - }, - "IShoppingSection.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingSection.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-section.code" - }, - { - "const": "-section.name" - }, - { - "const": "-section.created_at" - }, - { - "const": "+section.code" - }, - { - "const": "+section.name" - }, - { - "const": "+section.created_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." + "name": { + "type": "string", + "title": "Name of the channel", + "description": "Name of the channel." } }, - "description": "Request of the sections with pagination and searching/sorting options." + "required": [ + "categories", + "id", + "created_at", + "code", + "name" + ], + "description": "Hierarchical channel information with children categories." }, - "IShoppingSection.IRequest.ISearch": { + "IShoppingSection.ICreate": { "type": "object", "properties": { "code": { - "type": "string" + "type": "string", + "title": "Identifier code", + "description": "Identifier code." }, "name": { - "type": "string" + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." } - } + }, + "required": [ + "code", + "name" + ], + "description": "Creation information of the section." + }, + "IShoppingSection.IUpdate": { + "type": "object", + "properties": { + "name": { + "type": "string", + "title": "Representative name of the section", + "description": "Representative name of the section." + } + }, + "required": [ + "name" + ], + "description": "Updating information of the section." }, "IPageIShoppingSection": { "type": "object", @@ -14653,16 +18008,104 @@ ], "description": "A page.\n\nCollection of records with pagination indformation." }, - "IShoppingCustomer.IRefresh": { + "IShoppingSection.IRequest": { "type": "object", "properties": { - "value": { - "type": "string" + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingSection.IRequest.ISearch" + } + ] + }, + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-section.code" + }, + { + "const": "-section.name" + }, + { + "const": "-section.created_at" + }, + { + "const": "+section.code" + }, + { + "const": "+section.name" + }, + { + "const": "+section.created_at" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." } }, - "required": [ - "value" - ] + "required": [], + "description": "Request of the sections with pagination and searching/sorting options." + }, + "IShoppingSection.IRequest.ISearch": { + "type": "object", + "properties": { + "code": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + }, + "name": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ] + } + }, + "required": [] }, "IShoppingCustomer.IAuthorized": { "type": "object", @@ -14737,7 +18180,7 @@ "type": "string", "format": "uri", "title": "Connection address", - "description": "Connection address.\n\nSame with {@link window.location.href } of client." + "description": "Connection address.\n\nSame with {@link window.location.href} of client." }, "referrer": { "oneOf": [ @@ -14747,10 +18190,14 @@ { "type": "string", "format": "uri" + }, + { + "type": "string", + "maxLength": 0 } ], "title": "Referrer address", - "description": "Referrer address.\n\nSame with {@link window.document.referrer } of client." + "description": "Referrer address.\n\nSame with {@link window.document.referrer} of client." }, "ip": { "oneOf": [ @@ -14813,11 +18260,24 @@ "refreshable_until" ] }, + "IShoppingCustomer.IRefresh": { + "type": "object", + "properties": { + "value": { + "type": "string" + } + }, + "required": [ + "value" + ] + }, "IShoppingCustomer.ICreate": { "type": "object", "properties": { "channel_code": { - "type": "string" + "type": "string", + "title": "Belonged channel's {@link IShoppingChannel.code}", + "description": "Belonged channel's {@link IShoppingChannel.code}." }, "external_user": { "oneOf": [ @@ -14827,11 +18287,15 @@ { "$ref": "#/components/schemas/IShoppingExternalUser.ICreate" } - ] + ], + "title": "External user information", + "description": "External user information.\n\nWhen the customer has come frome an external service." }, "href": { "type": "string", - "format": "uri" + "format": "uri", + "title": "Connection address", + "description": "Connection address.\n\nSame with {@link window.location.href} of client." }, "referrer": { "oneOf": [ @@ -14841,11 +18305,20 @@ { "type": "string", "format": "uri" + }, + { + "type": "string", + "maxLength": 0 } - ] + ], + "title": "Referrer address", + "description": "Referrer address.\n\nSame with {@link window.document.referrer} of client." }, "ip": { "oneOf": [ + { + "type": "null" + }, { "type": "string", "format": "ipv4" @@ -14854,7 +18327,9 @@ "type": "string", "format": "ipv6" } - ] + ], + "title": "Connection IP Address", + "description": "Connection IP Address." } }, "required": [ @@ -14882,7 +18357,7 @@ "application": { "type": "string", "title": "Identifier code of the external service", - "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code } in common." + "description": "Identifier code of the external service.\n\nIt can be same with {@link IShoppingChannel.code} in common." }, "uid": { "type": "string", @@ -14919,11 +18394,13 @@ "mobile": { "type": "string", "pattern": "^[0-9]*$", + "x-wrtn-payment-order-mobile": true, "title": "Mobile number", "description": "Mobile number." }, "name": { "type": "string", + "x-wrtn-payment-order-citizen": true, "title": "Real name, or equivalent nickname", "description": "Real name, or equivalent nickname." } @@ -14994,40 +18471,6 @@ ], "description": "Request info of password change." }, - "IShoppingCouponTicket.IRequest": { - "type": "object", - "properties": { - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-ticket.created_at" - }, - { - "const": "-ticket.expired_at" - }, - { - "const": "+ticket.created_at" - }, - { - "const": "+ticket.expired_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - } - }, "IPageIShoppingCouponTicket": { "type": "object", "properties": { @@ -15051,129 +18494,72 @@ ], "description": "A page.\n\nCollection of records with pagination indformation." }, - "IShoppingCouponTicket.ICreate": { - "type": "object", - "properties": { - "coupon_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "coupon_id" - ] - }, - "IShoppingDepositCharge.IRequest": { - "type": "object", - "properties": { - "search": { - "$ref": "#/components/schemas/IShoppingDepositCharge.IRequest.ISearch" - }, - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-created_at" - }, - { - "const": "+created_at" - }, - { - "const": "-value" - }, - { - "const": "-publish.created_at" - }, - { - "const": "-publish.paid_at" - }, - { - "const": "+value" - }, - { - "const": "+publish.created_at" - }, - { - "const": "+publish.paid_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - } - }, - "IShoppingDepositCharge.IRequest.ISearch": { - "type": "object", - "properties": { - "from": { - "type": "string", - "format": "date-time" - }, - "to": { - "type": "string", - "format": "date-time" - }, - "minimum": { - "type": "number" - }, - "maximum": { - "type": "number" - }, - "state": { + "IShoppingCouponTicket.IRequest": { + "type": "object", + "properties": { + "sort": { "oneOf": [ { - "const": "pending" + "type": "null" }, { - "const": "published" - }, + "type": "array", + "items": { + "oneOf": [ + { + "const": "-ticket.created_at" + }, + { + "const": "-ticket.expired_at" + }, + { + "const": "+ticket.created_at" + }, + { + "const": "+ticket.expired_at" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ { - "const": "payed" + "type": "null" }, { - "const": "cancelled" + "type": "integer" } - ] + ], + "title": "Page number", + "description": "Page number." }, - "publish": { - "type": "object", - "properties": { - "from": { - "type": "string", - "format": "date-time" - }, - "to": { - "type": "string", - "format": "date-time" + "limit": { + "oneOf": [ + { + "type": "null" }, - "payment": { - "type": "object", - "properties": { - "from": { - "type": "string", - "format": "date-time" - }, - "to": { - "type": "string", - "format": "date-time" - } - } + { + "type": "integer" } - } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [] + }, + "IShoppingCouponTicket.ICreate": { + "type": "object", + "properties": { + "coupon_id": { + "type": "string", + "format": "uuid" } }, "required": [ - "state" + "coupon_id" ] }, "IPageIShoppingDepositCharge": { @@ -15276,116 +18662,466 @@ "cancelled_at" ] }, + "IShoppingDepositCharge.IRequest": { + "type": "object", + "properties": { + "search": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDepositCharge.IRequest.ISearch" + } + ] + }, + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + }, + { + "const": "-value" + }, + { + "const": "-publish.created_at" + }, + { + "const": "-publish.paid_at" + }, + { + "const": "+value" + }, + { + "const": "+publish.created_at" + }, + { + "const": "+publish.paid_at" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [] + }, + "IShoppingDepositCharge.IRequest.ISearch": { + "type": "object", + "properties": { + "from": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "minimum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "maximum": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "number" + } + ] + }, + "state": { + "oneOf": [ + { + "type": "null" + }, + { + "const": "published" + }, + { + "const": "pending" + }, + { + "const": "payed" + }, + { + "const": "cancelled" + } + ] + }, + "publish": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "object", + "properties": { + "from": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "payment": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "object", + "properties": { + "from": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + }, + "to": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] + } + }, + "required": [] + } + ] + } + }, + "required": [] + } + ] + } + }, + "required": [ + "state" + ] + }, "IShoppingDepositCharge.ICreate": { "type": "object", "properties": { "value": { "type": "number" - } - }, - "required": [ - "value" - ] - }, - "IShoppingDepositChargePublish.ICreate": { - "type": "object", - "properties": { - "vendor": { - "type": "string" + } + }, + "required": [ + "value" + ] + }, + "IShoppingDepositChargePublish.ICreate": { + "type": "object", + "properties": { + "vendor": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "vendor", + "uid" + ] + }, + "IPageIShoppingDepositHistory": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/IPage.IPagination", + "title": "Page information", + "description": "Page information." + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingDepositHistory" + }, + "title": "List of records", + "description": "List of records." + } + }, + "required": [ + "pagination", + "data" + ], + "description": "A page.\n\nCollection of records with pagination indformation." + }, + "IShoppingDepositHistory": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "citizen": { + "$ref": "#/components/schemas/IShoppingCitizen" + }, + "deposit": { + "$ref": "#/components/schemas/IShoppingDeposit" + }, + "source_id": { + "type": "string", + "format": "uuid" + }, + "value": { + "type": "number" }, - "uid": { - "type": "string" + "balance": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time" } }, "required": [ - "vendor", - "uid" + "id", + "citizen", + "deposit", + "source_id", + "value", + "balance", + "created_at" ] }, "IShoppingDepositHistory.IRequest": { "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingDepositHistory.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDepositHistory.IRequest.ISearch" + } + ] }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-deposit.source" - }, - { - "const": "-deposit.code" - }, - { - "const": "-deposit.direction" - }, - { - "const": "+deposit.source" - }, - { - "const": "+deposit.code" - }, - { - "const": "+deposit.direction" - }, - { - "const": "-history.value" - }, - { - "const": "-history.created_at" - }, - { - "const": "+history.value" - }, - { - "const": "+history.created_at" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-deposit.source" + }, + { + "const": "-deposit.code" + }, + { + "const": "-deposit.direction" + }, + { + "const": "+deposit.source" + }, + { + "const": "+deposit.code" + }, + { + "const": "+deposit.direction" + }, + { + "const": "-history.value" + }, + { + "const": "-history.created_at" + }, + { + "const": "+history.value" + }, + { + "const": "+history.created_at" + } + ] } - ] - } + } + ] }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } - } + }, + "required": [] }, "IShoppingDepositHistory.IRequest.ISearch": { "type": "object", "properties": { "deposit": { - "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingDeposit.IRequest.ISearch" + } + ] }, "citizen_id": { - "type": "string", - "format": "uuid" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] }, "from": { - "type": "string", - "format": "date-time" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, "to": { - "type": "string", - "format": "date-time" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, "minimum": { - "type": "number", - "minimum": 0 + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ] }, "maximum": { - "type": "number", - "minimum": 0 + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ] } - } + }, + "required": [] }, - "IPageIShoppingDepositHistory": { + "IPageIShoppingMileageHistory": { "type": "object", "properties": { "pagination": { @@ -15396,7 +19132,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/IShoppingDepositHistory" + "$ref": "#/components/schemas/IShoppingMileageHistory" }, "title": "List of records", "description": "List of records." @@ -15408,7 +19144,7 @@ ], "description": "A page.\n\nCollection of records with pagination indformation." }, - "IShoppingDepositHistory": { + "IShoppingMileageHistory": { "type": "object", "properties": { "id": { @@ -15418,8 +19154,8 @@ "citizen": { "$ref": "#/components/schemas/IShoppingCitizen" }, - "deposit": { - "$ref": "#/components/schemas/IShoppingDeposit" + "mileage": { + "$ref": "#/components/schemas/IShoppingMileage" }, "source_id": { "type": "string", @@ -15439,7 +19175,7 @@ "required": [ "id", "citizen", - "deposit", + "mileage", "source_id", "value", "balance", @@ -15450,86 +19186,158 @@ "type": "object", "properties": { "search": { - "$ref": "#/components/schemas/IShoppingMileageHistory.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMileageHistory.IRequest.ISearch" + } + ] }, "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-mileage.source" - }, - { - "const": "-mileage.code" - }, - { - "const": "-mileage.direction" - }, - { - "const": "+mileage.source" - }, - { - "const": "+mileage.code" - }, - { - "const": "+mileage.direction" - }, - { - "const": "-history.value" - }, - { - "const": "-history.created_at" - }, - { - "const": "+history.value" - }, - { - "const": "+history.created_at" + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-mileage.source" + }, + { + "const": "-mileage.code" + }, + { + "const": "-mileage.direction" + }, + { + "const": "+mileage.source" + }, + { + "const": "+mileage.code" + }, + { + "const": "+mileage.direction" + }, + { + "const": "-history.value" + }, + { + "const": "-history.created_at" + }, + { + "const": "+history.value" + }, + { + "const": "+history.created_at" + } + ] } - ] - } + } + ] }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } - } + }, + "required": [] }, "IShoppingMileageHistory.IRequest.ISearch": { "type": "object", "properties": { "mileage": { - "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingMileage.IRequest.ISearch" + } + ] }, "citizen_id": { - "type": "string", - "format": "uuid" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "uuid" + } + ] }, "from": { - "type": "string", - "format": "date-time" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, "to": { - "type": "string", - "format": "date-time" + "oneOf": [ + { + "type": "null" + }, + { + "type": "string", + "format": "date-time" + } + ] }, "minimum": { - "type": "number", - "minimum": 0 + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ] }, "maximum": { - "type": "number", - "minimum": 0 + "oneOf": [ + { + "type": "null" + }, + { + "type": "number", + "minimum": 0 + } + ] } - } + }, + "required": [] }, - "IPageIShoppingMileageHistory": { + "IPageIShoppingCartCommodity": { "type": "object", "properties": { "pagination": { @@ -15540,7 +19348,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/IShoppingMileageHistory" + "$ref": "#/components/schemas/IShoppingCartCommodity" }, "title": "List of records", "description": "List of records." @@ -15552,44 +19360,6 @@ ], "description": "A page.\n\nCollection of records with pagination indformation." }, - "IShoppingMileageHistory": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "citizen": { - "$ref": "#/components/schemas/IShoppingCitizen" - }, - "mileage": { - "$ref": "#/components/schemas/IShoppingMileage" - }, - "source_id": { - "type": "string", - "format": "uuid" - }, - "value": { - "type": "number" - }, - "balance": { - "type": "number" - }, - "created_at": { - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "citizen", - "mileage", - "source_id", - "value", - "balance", - "created_at" - ] - }, "IShoppingCartCommodity.IRequest": { "type": "object", "properties": { @@ -15724,16 +19494,31 @@ } }, "page": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Page number", "description": "Page number." }, "limit": { - "type": "integer", + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], "title": "Limitation of records per a page", "description": "Limitation of records per a page." } - } + }, + "required": [] }, "IShoppingCartCommodity.IRequest.ISearch": { "type": "object", @@ -15753,30 +19538,8 @@ "sale": { "$ref": "#/components/schemas/IShoppingSale.IRequest.ISearch" } - } - }, - "IPageIShoppingCartCommodity": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/IPage.IPagination", - "title": "Page information", - "description": "Page information." - }, - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingCartCommodity" - }, - "title": "List of records", - "description": "List of records." - } }, - "required": [ - "pagination", - "data" - ], - "description": "A page.\n\nCollection of records with pagination indformation." + "required": [] }, "IShoppingCartCommodity.ICreate": { "type": "object", @@ -15784,8 +19547,8 @@ "sale_id": { "type": "string", "format": "uuid", - "title": "Target sale's {@link IShoppingSale.id }", - "description": "Target sale's {@link IShoppingSale.id }." + "title": "Target sale's {@link IShoppingSale.id}", + "description": "Target sale's {@link IShoppingSale.id}." }, "stocks": { "type": "array", @@ -15800,10 +19563,17 @@ "type": "integer", "minimum": 1, "title": "Volume of the commodity to purchase", - "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity} values." }, "accumulate": { - "type": "boolean", + "oneOf": [ + { + "type": "null" + }, + { + "type": "boolean" + } + ], "title": "Whether to accumulate the volume or not", "description": "Whether to accumulate the volume or not.\n\nIf this attribute is not `false` and there's same commodity that\ncomposed with same stocks and options, then the volume will be\naccumulated to the existed one.\n\nOtherwise, duplicated commodity would be newly created." } @@ -15821,14 +19591,14 @@ "unit_id": { "type": "string", "format": "uuid", - "title": "Target unit's {@link IShoppingSaleUnit.id }", - "description": "Target unit's {@link IShoppingSaleUnit.id }." + "title": "Target unit's {@link IShoppingSaleUnit.id}", + "description": "Target unit's {@link IShoppingSaleUnit.id}." }, "stock_id": { "type": "string", "format": "uuid", - "title": "Target stock's {@link IShoppingSaleUnitStock.id }", - "description": "Target stock's {@link IShoppingSaleUnitStock.id }.\n\nIt must be matched with the {@link choices } property." + "title": "Target stock's {@link IShoppingSaleUnitStock.id}", + "description": "Target stock's {@link IShoppingSaleUnitStock.id}.\n\nIt must be matched with the {@link choices} property." }, "choices": { "type": "array", @@ -15842,7 +19612,7 @@ "type": "integer", "minimum": 1, "title": "Quantity of the stock to purchase", - "description": "Quantity of the stock to purchase.\n\nThis value is multiplied by the {@link IShoppingCartCommodity.volume }." + "description": "Quantity of the stock to purchase.\n\nThis value is multiplied by the {@link IShoppingCartCommodity.volume}." } }, "required": [ @@ -15851,7 +19621,7 @@ "choices", "quantity" ], - "description": "Creation information of the commodity stock of shopping cart.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleSnapshotUnit.IInvert } and\n{@link IShoppingSaleSnapshotUnitStock.IInvert }." + "description": "Creation information of the commodity stock of shopping cart.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleSnapshotUnit.IInvert} and\n{@link IShoppingSaleSnapshotUnitStock.IInvert}." }, "IShoppingCartCommodityStockChoice.ICreate": { "type": "object", @@ -15859,8 +19629,8 @@ "option_id": { "type": "string", "format": "uuid", - "title": "Target option's {@link IShoppingSaleUnitOption.id }", - "description": "Target option's {@link IShoppingSaleUnitOption.id }." + "title": "Target option's {@link IShoppingSaleUnitOption.id}", + "description": "Target option's {@link IShoppingSaleUnitOption.id}." }, "candidate_id": { "oneOf": [ @@ -15872,8 +19642,8 @@ "format": "uuid" } ], - "title": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }", - "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id }.\n\nWhen target option's type is `select`, then this attribute is not\n`null` but has a value." + "title": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id}", + "description": "Target candidate's {@link IShoppingSaleUnitOptionCandidate.id}.\n\nWhen target option's type is `select`, then this attribute is not\n`null` but has a value." }, "value": { "oneOf": [ @@ -15899,7 +19669,7 @@ "candidate_id", "value" ], - "description": "Creation information of the choice for each option.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleUnitStockChoice.IInvert }." + "description": "Creation information of the choice for each option.\n\nWhen record being created, its corresponding structure would be\n{@link IShoppingSaleUnitStockChoice.IInvert}." }, "IShoppingCartCommodity.IUpdate": { "type": "object", @@ -15908,7 +19678,7 @@ "type": "integer", "minimum": 1, "title": "Volume of the commodity to purchase", - "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity } values." + "description": "Volume of the commodity to purchase.\n\nA value indicating how many sets would be multiplied to the children\n{@link IShoppingSaleUnitStock.IInvert.quantity} values." } }, "required": [ @@ -15916,35 +19686,6 @@ ], "description": "Update information of a shopping cart commodity." }, - "IShoppingCartDiscountable.IRequest": { - "type": "object", - "properties": { - "commodity_ids": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - ] - }, - "pseudos": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" - } - } - }, - "required": [ - "commodity_ids", - "pseudos" - ] - }, "IShoppingCartDiscountable": { "type": "object", "properties": { @@ -16024,6 +19765,35 @@ "amount" ] }, + "IShoppingCartDiscountable.IRequest": { + "type": "object", + "properties": { + "commodity_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + ] + }, + "pseudos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IShoppingCartCommodity.ICreate" + } + } + }, + "required": [ + "commodity_ids", + "pseudos" + ] + }, "IShoppingOrder.ICreate": { "type": "object", "properties": { @@ -16034,6 +19804,18 @@ }, "title": "List of goods in the order", "description": "List of goods in the order." + }, + "name": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "string" + } + ], + "title": "Representative name of the order", + "description": "Representative name of the order.\n\nIf omit, the name will be generated automatically." } }, "required": [ @@ -16047,13 +19829,13 @@ "commodity_id": { "type": "string", "format": "uuid", - "title": "Target commodity's {@link IShoppingCartCommodity.id }", - "description": "Target commodity's {@link IShoppingCartCommodity.id }." + "title": "Target commodity's {@link IShoppingCartCommodity.id}", + "description": "Target commodity's {@link IShoppingCartCommodity.id}." }, "volume": { "type": "integer", "title": "Volume of the good", - "description": "Volume of the good.\n\nThe value multiplied to {@link IShoppingCartCommodityStock.quantity }.\nIt's purpose is exactly same with {@link IShoppingCartCommodity.volume },\nbut rewritten because the {@link IShoppingCartCommodity } records are reusable\nuntil payment." + "description": "Volume of the good.\n\nThe value multiplied to {@link IShoppingCartCommodityStock.quantity}.\nIt's purpose is exactly same with {@link IShoppingCartCommodity.volume},\nbut rewritten because the {@link IShoppingCartCommodity} records are reusable\nuntil payment." } }, "required": [ @@ -16062,28 +19844,6 @@ ], "description": "Creation information of the good." }, - "IShoppingOrderDiscountable.IRequest": { - "type": "object", - "properties": { - "good_ids": { - "oneOf": [ - { - "type": "null" - }, - { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - } - ] - } - }, - "required": [ - "good_ids" - ] - }, "IShoppingOrderDiscountable": { "type": "object", "properties": { @@ -16159,6 +19919,28 @@ "amount" ] }, + "IShoppingOrderDiscountable.IRequest": { + "type": "object", + "properties": { + "good_ids": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + } + ] + } + }, + "required": [ + "good_ids" + ] + }, "IShoppingOrderPrice.ICreate": { "type": "object", "properties": { @@ -16182,28 +19964,32 @@ "coupon_ids" ] }, - "IShoppingOrderPublish.ICashCreate": { + "IShoppingOrderPublish.ICreate": { "type": "object", "properties": { - "type": { - "const": "cash" - }, "address": { - "$ref": "#/components/schemas/IShoppingAddress.ICreate" + "$ref": "#/components/schemas/IShoppingAddress.ICreate", + "title": "Address to receive", + "description": "Address to receive." }, "vendor": { - "type": "string" - }, - "uid": { - "type": "string" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/IShoppingOrderPublish.IPaymentIdentifier" + } + ], + "title": "Payment identifier from the payment vendor service", + "description": "Payment identifier from the payment vendor service.\n\nIf the order has been discounted for entire order price, then no need\nto send payment vendor info. Instead, you just configure the `null`\nvalue to this property." } }, "required": [ - "type", "address", - "vendor", - "uid" - ] + "vendor" + ], + "description": "Creation info of the publish." }, "IShoppingAddress.ICreate": { "type": "object", @@ -16274,20 +20060,27 @@ "special_note" ] }, - "IShoppingOrderPublish.IZeroCreate": { + "IShoppingOrderPublish.IPaymentIdentifier": { "type": "object", "properties": { - "type": { - "const": "zero" + "code": { + "type": "string", + "x-wrtn-payment-vendor": true, + "title": "The vendor code who will receive the payment", + "description": "The vendor code who will receive the payment." }, - "address": { - "$ref": "#/components/schemas/IShoppingAddress.ICreate" + "uid": { + "type": "string", + "x-wrtn-payment-uid": true, + "title": "The payment uid", + "description": "The payment uid." } }, "required": [ - "type", - "address" - ] + "code", + "uid" + ], + "description": "Payment identifier from the payment vendor service." }, "IShoppingSaleQuestion.ICreate": { "type": "object", @@ -16391,8 +20184,8 @@ "good_id": { "type": "string", "format": "uuid", - "title": "Target good's {@link IShoppingOrderGood.id }", - "description": "Target good's {@link IShoppingOrderGood.id }." + "title": "Target good's {@link IShoppingOrderGood.id}", + "description": "Target good's {@link IShoppingOrderGood.id}." }, "score": { "type": "number", @@ -16500,35 +20293,8 @@ }, "IShoppingSeller.IJoin": { "type": "object", - "properties": {} - }, - "IShoppingDelivery.IRequest": { - "type": "object", - "properties": { - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-delivery.created_at" - }, - { - "const": "+delivery.created_at" - } - ] - } - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - } + "properties": {}, + "required": [] }, "IPageIShoppingDelivery.IInvert": { "type": "object", @@ -16602,7 +20368,29 @@ "description": "List of shippers of the delivery." }, "state": { - "$ref": "#/components/schemas/IShoppingDelivery.State", + "oneOf": [ + { + "const": "none" + }, + { + "const": "underway" + }, + { + "const": "preparing" + }, + { + "const": "manufacturing" + }, + { + "const": "shipping" + }, + { + "const": "delivering" + }, + { + "const": "arrived" + } + ], "title": "State of the delivery", "description": "State of the delivery." }, @@ -16738,6 +20526,56 @@ ], "description": "Invert information from the delivery." }, + "IShoppingDelivery.IRequest": { + "type": "object", + "properties": { + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-delivery.created_at" + }, + { + "const": "+delivery.created_at" + } + ] + } + } + ] + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [] + }, "IShoppingDelivery.ICreate": { "type": "object", "properties": { @@ -16780,20 +20618,20 @@ "publish_id": { "type": "string", "format": "uuid", - "title": "Target order's {@link IShoppingOrderPublish.id }", - "description": "Target order's {@link IShoppingOrderPublish.id }." + "title": "Target order's {@link IShoppingOrderPublish.id}", + "description": "Target order's {@link IShoppingOrderPublish.id}." }, "good_id": { "type": "string", "format": "uuid", - "title": "Target good's {@link IShoppingOrderGood.id }", - "description": "Target good's {@link IShoppingOrderGood.id }." + "title": "Target good's {@link IShoppingOrderGood.id}", + "description": "Target good's {@link IShoppingOrderGood.id}." }, "stock_id": { "type": "string", "format": "uuid", - "title": "Target stock's {@link IShoppingSaleUnitStock.id }", - "description": "Target stock's {@link IShoppingSaleUnitStock.id }." + "title": "Target stock's {@link IShoppingSaleUnitStock.id}", + "description": "Target stock's {@link IShoppingSaleUnitStock.id}." }, "quantity": { "type": "number", @@ -16959,8 +20797,8 @@ "properties": { "section_code": { "type": "string", - "title": "Belonged section's {@link IShoppingSection.code }", - "description": "Belonged section's {@link IShoppingSection.code }." + "title": "Belonged section's {@link IShoppingSection.code}", + "description": "Belonged section's {@link IShoppingSection.code}." }, "status": { "oneOf": [ @@ -17085,22 +20923,21 @@ "properties": { "code": { "type": "string", - "title": "Target channel's {@link IShoppingChannel.code }", - "description": "Target channel's {@link IShoppingChannel.code }." + "title": "Target channel's {@link IShoppingChannel.code}", + "description": "Target channel's {@link IShoppingChannel.code}." }, - "category_ids": { + "category_codes": { "type": "array", "items": { - "type": "string", - "format": "uuid" + "type": "string" }, - "title": "List of target categories' {@link IShoppingChannelCategory.id }s", - "description": "List of target categories' {@link IShoppingChannelCategory.id }s.\n\nIf empty, it means all categories of the channel is listing the sale." + "title": "List of target categories' {@link IShoppingChannelCategory.code}s", + "description": "List of target categories' {@link IShoppingChannelCategory.code}s.\n\nIf empty, it means all categories of the channel is listing the sale." } }, "required": [ "code", - "category_ids" + "category_codes" ], "description": "Creation information of the target channel (and categories) of sale to sell." }, @@ -17112,10 +20949,10 @@ "items": { "oneOf": [ { - "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption.ICreate" + "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.ICreate" }, { - "$ref": "#/components/schemas/IShoppingSaleUnitSelectableOption.ICreate" + "$ref": "#/components/schemas/IShoppingSaleUnitDescriptiveOption.ICreate" } ] }, @@ -17156,36 +20993,6 @@ ], "description": "Creation information of sale unit." }, - "IShoppingSaleUnitDescriptiveOption.ICreate": { - "type": "object", - "properties": { - "type": { - "oneOf": [ - { - "const": "string" - }, - { - "const": "number" - }, - { - "const": "boolean" - } - ], - "title": "Type of descriptive option", - "description": "Type of descriptive option.\n\nWhich typed value should be written when purchasing." - }, - "name": { - "type": "string", - "title": "Readable name of the option", - "description": "Readable name of the option." - } - }, - "required": [ - "type", - "name" - ], - "description": "Creation information of the descriptive option." - }, "IShoppingSaleUnitSelectableOption.ICreate": { "type": "object", "properties": { @@ -17236,6 +21043,36 @@ ], "description": "Creation information of the candidate value." }, + "IShoppingSaleUnitDescriptiveOption.ICreate": { + "type": "object", + "properties": { + "type": { + "oneOf": [ + { + "const": "string" + }, + { + "const": "number" + }, + { + "const": "boolean" + } + ], + "title": "Type of descriptive option", + "description": "Type of descriptive option.\n\nWhich typed value should be written when purchasing." + }, + "name": { + "type": "string", + "title": "Readable name of the option", + "description": "Readable name of the option." + } + }, + "required": [ + "type", + "name" + ], + "description": "Creation information of the descriptive option." + }, "IShoppingSaleUnitStock.ICreate": { "type": "object", "properties": { @@ -17277,11 +21114,11 @@ "properties": { "option_index": { "type": "integer", - "description": "Target option's index number in\n{@link IShoppingSaleUnit.ICreate.options }." + "description": "Target option's index number in\n{@link IShoppingSaleUnit.ICreate.options}." }, "candidate_index": { "type": "integer", - "description": "Target candidate's index number in\n{@link IShoppingSaleUnitSelectableOption.ICreate.candidates }." + "description": "Target candidate's index number in\n{@link IShoppingSaleUnitSelectableOption.ICreate.candidates}." } }, "required": [ @@ -17375,7 +21212,17 @@ "description": "Creation time of snapshot record.\n\nIn other words, creation time or update time or article." }, "format": { - "$ref": "#/components/schemas/IBbsArticle.Format", + "oneOf": [ + { + "const": "html" + }, + { + "const": "md" + }, + { + "const": "txt" + } + ], "title": "Format of body", "description": "Format of body.\n\nSame meaning with extension like `html`, `md`, `txt`." }, @@ -17407,37 +21254,6 @@ "files" ] }, - "IShoppingSaleUnitStockSupplement.IRequest": { - "type": "object", - "properties": { - "sort": { - "type": "array", - "items": { - "oneOf": [ - { - "const": "-created_at" - }, - { - "const": "+created_at" - } - ] - }, - "title": "Sortable columns", - "description": "Sortable columns." - }, - "page": { - "type": "integer", - "title": "Page number", - "description": "Page number." - }, - "limit": { - "type": "integer", - "title": "Limitation of records per a page", - "description": "Limitation of records per a page." - } - }, - "description": "Request information of the stock supplement list." - }, "IPageIShoppingSaleUnitStockSupplement": { "type": "object", "properties": { @@ -17487,7 +21303,60 @@ "value", "created_at" ], - "description": "Supplementation of inventory quantity of stock.\n\nYou know what? If a {@link IShoppingSaleUnitStock stock} has been sold over\nits {@link IShoppingSaleUnitStock.ICreate.quantity initial inventory quantity},\nthe stock can't be sold anymore, because of out of stock. In that case, how the\n{@link IShoppingSeller } should do?\n\nWhen the sotck is sold out, seller can supplement the inventory record by\nregistering this `IShoppingSaleUnitStockSupplement` record. Right, this\n`IShoppingSaleUnitStockSupplement` is an entity that embodies the\nsupplementation of the inventory quantity of the belonged stock." + "description": "Supplementation of inventory quantity of stock.\n\nYou know what? If a {@link IShoppingSaleUnitStock stock} has been sold over\nits {@link IShoppingSaleUnitStock.ICreate.quantity initial inventory quantity},\nthe stock can't be sold anymore, because of out of stock. In that case, how the\n{@link IShoppingSeller} should do?\n\nWhen the sotck is sold out, seller can supplement the inventory record by\nregistering this `IShoppingSaleUnitStockSupplement` record. Right, this\n`IShoppingSaleUnitStockSupplement` is an entity that embodies the\nsupplementation of the inventory quantity of the belonged stock." + }, + "IShoppingSaleUnitStockSupplement.IRequest": { + "type": "object", + "properties": { + "sort": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "array", + "items": { + "oneOf": [ + { + "const": "-created_at" + }, + { + "const": "+created_at" + } + ] + } + } + ], + "title": "Sortable columns", + "description": "Sortable columns." + }, + "page": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Page number", + "description": "Page number." + }, + "limit": { + "oneOf": [ + { + "type": "null" + }, + { + "type": "integer" + } + ], + "title": "Limitation of records per a page", + "description": "Limitation of records per a page." + } + }, + "required": [], + "description": "Request information of the stock supplement list." }, "IShoppingSaleUnitStockSupplement.ICreate": { "type": "object", @@ -17534,5 +21403,6 @@ { "name": "Section" } - ] + ], + "x-samchon-emended": true } \ No newline at end of file diff --git a/packages/migrate/package.json b/packages/migrate/package.json index 94d3e1a5d..89940a595 100644 --- a/packages/migrate/package.json +++ b/packages/migrate/package.json @@ -72,13 +72,13 @@ }, "dependencies": { "@nestia/sdk": "workspace:^", - "@samchon/openapi": "^2.2.1", + "@samchon/openapi": "^2.3.0", "commander": "10.0.0", "inquirer": "8.2.5", "prettier": "^3.2.5", "tstl": "^3.0.0", "typescript": "~5.7.2", - "typia": "^7.4.1" + "typia": "^7.5.0" }, "files": [ "lib", diff --git a/packages/migrate/src/MigrateApplication.ts b/packages/migrate/src/MigrateApplication.ts index 9869c9a56..72c14f21c 100644 --- a/packages/migrate/src/MigrateApplication.ts +++ b/packages/migrate/src/MigrateApplication.ts @@ -1,7 +1,7 @@ import { OpenApi, OpenApiV3, OpenApiV3_1, SwaggerV2 } from "@samchon/openapi"; import typia, { IValidation } from "typia"; -import { MigrateAnalyzer } from "./analyzers/MigrateAnalyzer"; +import { MigrateApplicationAnalyzer } from "./analyzers/MigrateApplicationAnalyzer"; import { NEST_TEMPLATE } from "./bundles/NEST_TEMPLATE"; import { SDK_TEMPLATE } from "./bundles/SDK_TEMPLATE"; import { MigrateApiProgrammer } from "./programmers/MigrateApiProgrammer"; @@ -35,7 +35,7 @@ export class MigrateApplication { } public nest(config: MigrateApplication.IConfig): MigrateApplication.IOutput { - const program: IHttpMigrateProgram = MigrateAnalyzer.analyze({ + const program: IHttpMigrateProgram = MigrateApplicationAnalyzer.analyze({ mode: "nest", document: this.document, simulate: config.simulate, @@ -55,7 +55,7 @@ export class MigrateApplication { } public sdk(config: MigrateApplication.IConfig): MigrateApplication.IOutput { - const program: IHttpMigrateProgram = MigrateAnalyzer.analyze({ + const program: IHttpMigrateProgram = MigrateApplicationAnalyzer.analyze({ mode: "sdk", document: this.document, simulate: config.simulate, diff --git a/packages/migrate/src/analyzers/MigrateAnalyzer.ts b/packages/migrate/src/analyzers/MigrateApplicationAnalyzer.ts similarity index 90% rename from packages/migrate/src/analyzers/MigrateAnalyzer.ts rename to packages/migrate/src/analyzers/MigrateApplicationAnalyzer.ts index 00e332af3..53da44500 100644 --- a/packages/migrate/src/analyzers/MigrateAnalyzer.ts +++ b/packages/migrate/src/analyzers/MigrateApplicationAnalyzer.ts @@ -2,7 +2,7 @@ import { HttpMigration, IHttpMigrateApplication } from "@samchon/openapi"; import { IHttpMigrateProgram } from "../structures/IHttpMigrateProgram"; -export namespace MigrateAnalyzer { +export namespace MigrateApplicationAnalyzer { export const analyze = ( props: IHttpMigrateProgram.IProps, ): IHttpMigrateProgram => { diff --git a/packages/migrate/src/analyzers/MigrateControllerAnalyzer.ts b/packages/migrate/src/analyzers/MigrateControllerAnalyzer.ts index 08b93c580..94a7e346b 100644 --- a/packages/migrate/src/analyzers/MigrateControllerAnalyzer.ts +++ b/packages/migrate/src/analyzers/MigrateControllerAnalyzer.ts @@ -5,36 +5,47 @@ import { MapUtil } from "../utils/MapUtil"; import { StringUtil } from "../utils/StringUtil"; export namespace MigrateControllerAnalyzer { - export const analyze = ( - routes: IHttpMigrateRoute[], - ): IHttpMigrateController[] => { - const endpoints: Map = new Map(); - for (const r of routes) { - const location: string = r.emendedPath - .split("/") - .filter((s) => s[0] !== ":") - .join("/"); - MapUtil.take(endpoints)(location)(() => []).push(r); - } - const total: IHttpMigrateController[] = [...endpoints.entries()] - .filter(([_l, routes]) => !!routes.length) - .map(([path, routes]) => { - const name: string = - routes[0].accessor.slice(0, -1).map(StringUtil.capitalize).join("") + + export const analyze = (props: { + routes: IHttpMigrateRoute[]; + }): IHttpMigrateController[] => { + const collection: Map = new Map(); + for (const route of props.routes) { + const name: string = + route.operation()["x-samchon-controller"] ?? + (route.accessor.length <= 1 + ? "App" + : route.accessor.slice(0, -1).map(StringUtil.capitalize).join("")) + "Controller"; - const location: string = routes[0].accessor.slice(0, -2).join("/"); - return { - name, - path, - location: "src/controllers/" + location, - routes, - }; - }); - for (const c of total) - if (c.name === "Controller") - c.name = StringUtil.escapeDuplicate([...total.map((c) => c.name)])( - "AppController", - ); - return total; + MapUtil.take(collection)(name)(() => ({ + name, + path: "@lazy", + location: "@lazy", + routes: [], + })).routes.push(route); + } + + const controllers: IHttpMigrateController[] = [...collection.values()]; + for (const col of controllers) { + const splitPath = (r: IHttpMigrateRoute): string[] => + r.emendedPath.split("/"); + const splitLocation = (r: IHttpMigrateRoute): string[] => + splitPath(r).filter((s) => s[0] !== ":"); + + const minPath: string[] = splitPath(col.routes[0]); + const minLocation: string[] = splitLocation(col.routes[0]); + for (const r of col.routes.slice(1)) { + minPath.splice(getSplitIndex(minPath, splitPath(r))); + minLocation.splice(getSplitIndex(minLocation, splitLocation(r))); + } + col.path = minPath.join("/"); + col.location = "src/controllers/" + minLocation.join("/"); + } + return controllers; }; } + +const getSplitIndex = (x: string[], y: string[]) => { + const n: number = Math.min(x.length, y.length); + for (let i: number = 0; i < n; ++i) if (x[i] !== y[i]) return i; + return n; +}; diff --git a/packages/migrate/src/module.ts b/packages/migrate/src/module.ts index a472b97b5..2b2f3dbb6 100644 --- a/packages/migrate/src/module.ts +++ b/packages/migrate/src/module.ts @@ -1,6 +1,6 @@ export * from "./MigrateApplication"; -export * from "./analyzers/MigrateAnalyzer"; +export * from "./analyzers/MigrateApplicationAnalyzer"; export * from "./archivers/MigrateFileArchiver"; diff --git a/packages/migrate/src/programmers/MigrateNestProgrammer.ts b/packages/migrate/src/programmers/MigrateNestProgrammer.ts index 872d25ee6..2402b80e0 100644 --- a/packages/migrate/src/programmers/MigrateNestProgrammer.ts +++ b/packages/migrate/src/programmers/MigrateNestProgrammer.ts @@ -13,7 +13,9 @@ import { MigrateNestModuleProgrammer } from "./MigrateNestModuleProgrammer"; export namespace MigrateNestProgrammer { export const write = (program: IHttpMigrateProgram): IHttpMigrateFile[] => { const controllers: IHttpMigrateController[] = - MigrateControllerAnalyzer.analyze(program.routes); + MigrateControllerAnalyzer.analyze({ + routes: program.routes, + }); return [ { location: "src", diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 2da8161dc..aa5ec040d 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@nestia/sdk", - "version": "4.4.2-dev.20241217", + "version": "4.5.0-dev.20241218-2", "description": "Nestia SDK and Swagger generator", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -34,7 +34,7 @@ "dependencies": { "@nestia/core": "workspace:^", "@nestia/fetcher": "workspace:^", - "@samchon/openapi": "^2.2.1", + "@samchon/openapi": "^2.3.0", "cli": "^1.0.1", "get-function-location": "^2.0.0", "glob": "^7.2.0", @@ -44,16 +44,16 @@ "tsconfck": "^2.1.2", "tsconfig-paths": "^4.1.1", "tstl": "^3.0.0", - "typia": "^7.4.1" + "typia": "^7.5.0" }, "peerDependencies": { - "@nestia/core": ">=4.4.2-dev.20241217", - "@nestia/fetcher": ">=4.4.2-dev.20241217", + "@nestia/core": ">=4.5.0-dev.20241218-2", + "@nestia/fetcher": ">=4.5.0-dev.20241218-2", "@nestjs/common": ">=7.0.1", "@nestjs/core": ">=7.0.1", "reflect-metadata": ">=0.1.12", "ts-node": ">=10.6.0", - "typia": ">=7.4.1 <8.0.0" + "typia": ">=7.5.0 <8.0.0" }, "devDependencies": { "@trivago/prettier-plugin-sort-imports": "^4.3.0", diff --git a/packages/sdk/src/analyses/AccessorAnalyzer.ts b/packages/sdk/src/analyses/AccessorAnalyzer.ts index 3d2572a5d..ee90e8fa1 100644 --- a/packages/sdk/src/analyses/AccessorAnalyzer.ts +++ b/packages/sdk/src/analyses/AccessorAnalyzer.ts @@ -10,7 +10,7 @@ export namespace AccessorAnalyzer { shrink(routes); variable(routes); shrink(routes); - for (const r of routes) r.name = r.accessors.at(-1) ?? r.name; + for (const r of routes) r.name = r.accessor.at(-1) ?? r.name; }; const prepare = ( @@ -18,8 +18,8 @@ export namespace AccessorAnalyzer { ): Map => { const dict: Map = new Map(); for (const route of routeList) - route.accessors.forEach((_a, i) => { - const key: string = route.accessors.slice(0, i + 1).join("."); + route.accessor.forEach((_a, i) => { + const key: string = route.accessor.slice(0, i + 1).join("."); dict.set(key, (dict.get(key) ?? 0) + 1); }); return dict; @@ -30,13 +30,13 @@ export namespace AccessorAnalyzer { ) => { const dict: Map = prepare(routeList); for (const route of routeList) { - const emended: string[] = route.accessors.slice(); - route.accessors.forEach((accessor, i) => { + const emended: string[] = route.accessor.slice(); + route.accessor.forEach((accessor, i) => { if (Escaper.variable(accessor)) return; while (true) { accessor = "$" + accessor; const partial: string = [ - ...route.accessors.slice(0, i), + ...route.accessor.slice(0, i), accessor, ].join("."); if (dict.has(partial) === false) { @@ -45,7 +45,7 @@ export namespace AccessorAnalyzer { } } }); - route.accessors.splice(0, route.accessors.length, ...emended); + route.accessor.splice(0, route.accessor.length, ...emended); } }; @@ -53,15 +53,15 @@ export namespace AccessorAnalyzer { const dict: Map = prepare(routeList); for (const route of routeList) { if ( - route.accessors.length < 2 || - route.accessors.at(-1) !== route.accessors.at(-2) + route.accessor.length < 2 || + route.accessor.at(-1) !== route.accessor.at(-2) ) continue; - const cut: string[] = route.accessors.slice(0, -1); + const cut: string[] = route.accessor.slice(0, -1); if ((dict.get(cut.join(".")) ?? 0) > 1) continue; - route.accessors = cut; + route.accessor = cut; } }; } diff --git a/packages/sdk/src/analyses/TypedHttpRouteAnalyzer.ts b/packages/sdk/src/analyses/TypedHttpRouteAnalyzer.ts index 6e290b6bc..148d67429 100644 --- a/packages/sdk/src/analyses/TypedHttpRouteAnalyzer.ts +++ b/packages/sdk/src/analyses/TypedHttpRouteAnalyzer.ts @@ -163,7 +163,7 @@ export namespace TypedHttpRouteAnalyzer { ...props.operation, controller: props.controller, path, - accessors: [...PathUtil.accessors(path), props.operation.name], + accessor: [...PathUtil.accessors(path), props.operation.name], exceptions, parameters, success, diff --git a/packages/sdk/src/analyses/TypedWebSocketRouteAnalyzer.ts b/packages/sdk/src/analyses/TypedWebSocketRouteAnalyzer.ts index 8b1432359..b8146ddd2 100644 --- a/packages/sdk/src/analyses/TypedWebSocketRouteAnalyzer.ts +++ b/packages/sdk/src/analyses/TypedWebSocketRouteAnalyzer.ts @@ -13,6 +13,6 @@ export namespace TypedWebSocketRouteAnalyzer { ...props.operation, controller: props.controller, path, - accessors: [...PathUtil.accessors(path), props.operation.name], + accessor: [...PathUtil.accessors(path), props.operation.name], })); } diff --git a/packages/sdk/src/generates/internal/E2eFileProgrammer.ts b/packages/sdk/src/generates/internal/E2eFileProgrammer.ts index 0bdf6b463..db33aed5c 100644 --- a/packages/sdk/src/generates/internal/E2eFileProgrammer.ts +++ b/packages/sdk/src/generates/internal/E2eFileProgrammer.ts @@ -112,7 +112,7 @@ export namespace E2eFileProgrammer { : ts.factory.createIdentifier("connection"); const caller = ts.factory.createCallExpression( ts.factory.createIdentifier( - ["api", "functional", ...route.accessors].join("."), + ["api", "functional", ...route.accessor].join("."), ), undefined, [ @@ -180,4 +180,4 @@ export namespace E2eFileProgrammer { } const getFunctionName = (route: ITypedHttpRoute): string => - ["test", "api", ...route.accessors].join("_"); + ["test", "api", ...route.accessor].join("_"); diff --git a/packages/sdk/src/generates/internal/SdkFileProgrammer.ts b/packages/sdk/src/generates/internal/SdkFileProgrammer.ts index 3996d9801..d60d0d312 100644 --- a/packages/sdk/src/generates/internal/SdkFileProgrammer.ts +++ b/packages/sdk/src/generates/internal/SdkFileProgrammer.ts @@ -29,7 +29,7 @@ export namespace SdkFileProgrammer { (directory: SdkRouteDirectory) => (route: ITypedHttpRoute | ITypedWebSocketRoute): void => { // OPEN DIRECTORIES - for (const key of route.accessors.slice(0, -1)) { + for (const key of route.accessor.slice(0, -1)) { directory = MapUtil.take( directory.children, key, diff --git a/packages/sdk/src/generates/internal/SwaggerOperationComposer.ts b/packages/sdk/src/generates/internal/SwaggerOperationComposer.ts index 208639ffe..f1ccdee5b 100644 --- a/packages/sdk/src/generates/internal/SwaggerOperationComposer.ts +++ b/packages/sdk/src/generates/internal/SwaggerOperationComposer.ts @@ -112,6 +112,8 @@ export namespace SwaggerOperationComposer { }), security: security.length ? security : undefined, ...(props.route.extensions ?? {}), + "x-samchon-accessor": props.route.accessor, + "x-samchon-controller": props.route.controller.class.name, }; }; } diff --git a/packages/sdk/src/structures/ITypedHttpRoute.ts b/packages/sdk/src/structures/ITypedHttpRoute.ts index 90150e1d2..0cb6a85e2 100644 --- a/packages/sdk/src/structures/ITypedHttpRoute.ts +++ b/packages/sdk/src/structures/ITypedHttpRoute.ts @@ -13,7 +13,7 @@ export interface ITypedHttpRoute { name: string; method: string; path: string; - accessors: string[]; + accessor: string[]; parameters: ITypedHttpRouteParameter[]; success: ITypedHttpRouteSuccess; exceptions: Record< diff --git a/packages/sdk/src/structures/ITypedWebSocketRoute.ts b/packages/sdk/src/structures/ITypedWebSocketRoute.ts index bb9278783..d26285264 100644 --- a/packages/sdk/src/structures/ITypedWebSocketRoute.ts +++ b/packages/sdk/src/structures/ITypedWebSocketRoute.ts @@ -10,7 +10,7 @@ export interface ITypedWebSocketRoute { controller: IReflectController; name: string; path: string; - accessors: string[]; + accessor: string[]; function: Function; versions: Array | undefined; parameters: ITypedWebSocketRouteParameter[]; diff --git a/test/features/all/swagger.json b/test/features/all/swagger.json index dca026ef9..ab9873fc0 100644 --- a/test/features/all/swagger.json +++ b/test/features/all/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -43,7 +43,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "all", + "store" + ], + "x-samchon-controller": "AllController" } }, "/health": { @@ -57,7 +62,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -75,7 +85,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } } }, diff --git a/test/features/app-globalPrefix-versionUri-routerModule/swagger.json b/test/features/app-globalPrefix-versionUri-routerModule/swagger.json index 37b171ad6..aa6403282 100644 --- a/test/features/app-globalPrefix-versionUri-routerModule/swagger.json +++ b/test/features/app-globalPrefix-versionUri-routerModule/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,15 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "api", + "v1", + "common", + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/api/v2/common/health": { @@ -40,7 +48,15 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "api", + "v2", + "common", + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/api/v3/common/health": { @@ -54,7 +70,15 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "api", + "v3", + "common", + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/api/v1/performance": { @@ -72,7 +96,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v1", + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/api/v2/performance": { @@ -90,7 +121,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v2", + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/api/v3/performance": { @@ -108,7 +146,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v3", + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/api/v1/bbs/{section}/articles": { @@ -165,7 +210,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v1", + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -204,7 +257,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v1", + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/api/v2/bbs/{section}/articles": { @@ -261,7 +322,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v2", + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -300,7 +369,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v2", + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/api/v3/bbs/{section}/articles": { @@ -357,7 +434,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v3", + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -396,7 +481,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v3", + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/api/v1/bbs/{section}/articles/{id}": { @@ -432,7 +525,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v1", + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" }, "put": { "summary": "Update an article", @@ -481,7 +582,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v1", + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/api/v2/bbs/{section}/articles/{id}": { @@ -517,7 +626,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v2", + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" }, "put": { "summary": "Update an article", @@ -566,7 +683,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v2", + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/api/v3/bbs/{section}/articles/{id}": { @@ -602,7 +727,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v3", + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" }, "put": { "summary": "Update an article", @@ -651,7 +784,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v3", + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/api/v1/{section}/articles/{articleId}/comments": { @@ -717,7 +858,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v1", + "articles", + "comments", + "index" + ], + "x-samchon-controller": "BbsArticleCommentsController" }, "post": { "tags": [], @@ -761,7 +910,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v1", + "articles", + "comments", + "store" + ], + "x-samchon-controller": "BbsArticleCommentsController" } }, "/api/v2/{section}/articles/{articleId}/comments": { @@ -827,7 +984,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v2", + "articles", + "comments", + "index" + ], + "x-samchon-controller": "BbsArticleCommentsController" }, "post": { "tags": [], @@ -871,7 +1036,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v2", + "articles", + "comments", + "store" + ], + "x-samchon-controller": "BbsArticleCommentsController" } }, "/api/v3/{section}/articles/{articleId}/comments": { @@ -937,7 +1110,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v3", + "articles", + "comments", + "index" + ], + "x-samchon-controller": "BbsArticleCommentsController" }, "post": { "tags": [], @@ -981,7 +1162,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v3", + "articles", + "comments", + "store" + ], + "x-samchon-controller": "BbsArticleCommentsController" } }, "/api/v1/{section}/articles/{articleId}/comments/{id}": { @@ -1026,7 +1215,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v1", + "articles", + "comments", + "at" + ], + "x-samchon-controller": "BbsArticleCommentsController" }, "put": { "tags": [], @@ -1079,7 +1276,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v1", + "articles", + "comments", + "update" + ], + "x-samchon-controller": "BbsArticleCommentsController" } }, "/api/v2/{section}/articles/{articleId}/comments/{id}": { @@ -1124,7 +1329,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v2", + "articles", + "comments", + "at" + ], + "x-samchon-controller": "BbsArticleCommentsController" }, "put": { "tags": [], @@ -1177,7 +1390,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v2", + "articles", + "comments", + "update" + ], + "x-samchon-controller": "BbsArticleCommentsController" } }, "/api/v3/{section}/articles/{articleId}/comments/{id}": { @@ -1222,7 +1443,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v3", + "articles", + "comments", + "at" + ], + "x-samchon-controller": "BbsArticleCommentsController" }, "put": { "tags": [], @@ -1275,7 +1504,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "v3", + "articles", + "comments", + "update" + ], + "x-samchon-controller": "BbsArticleCommentsController" } } }, diff --git a/test/features/app-globalPrefix-versionUri/swagger.json b/test/features/app-globalPrefix-versionUri/swagger.json index 51e66f97e..e37124780 100644 --- a/test/features/app-globalPrefix-versionUri/swagger.json +++ b/test/features/app-globalPrefix-versionUri/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,15 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "api", + "internal", + "v1", + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/api/internal/v1/performance": { @@ -44,7 +52,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "internal", + "v1", + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/api/internal/v1/bbs/{section}/articles": { @@ -101,7 +117,16 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "internal", + "v1", + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/api/internal/v2/bbs/{section}/articles": { @@ -158,7 +183,16 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "internal", + "v2", + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/api/internal/bbs/{section}/articles": { @@ -215,7 +249,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "internal", + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -254,7 +296,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "internal", + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/api/internal/v1/bbs/{section}/articles/{id}": { @@ -290,7 +340,16 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "internal", + "v1", + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/api/internal/v2/bbs/{section}/articles/{id}": { @@ -341,7 +400,16 @@ } } } - } + }, + "x-samchon-accessor": [ + "api", + "internal", + "v2", + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } } }, diff --git a/test/features/app-globalPrefix/swagger.json b/test/features/app-globalPrefix/swagger.json index 875a3fad6..7eef0b02a 100644 --- a/test/features/app-globalPrefix/swagger.json +++ b/test/features/app-globalPrefix/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,13 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "x", + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/x/performance": { @@ -44,7 +50,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "x", + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/x/bbs/{section}/articles": { @@ -101,7 +113,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "x", + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -140,7 +159,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "x", + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/x/bbs/{section}/articles/{id}": { @@ -176,7 +202,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "x", + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" }, "put": { "summary": "Update an article", @@ -225,7 +258,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "x", + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/x/bbs/{section}/articles/{articleId}/comments": { @@ -291,7 +331,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "x", + "bbs", + "articles", + "comments", + "index" + ], + "x-samchon-controller": "BbsCommentsController" }, "post": { "tags": [], @@ -335,7 +383,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "x", + "bbs", + "articles", + "comments", + "store" + ], + "x-samchon-controller": "BbsCommentsController" } }, "/x/bbs/{section}/articles/{articleId}/comments/{id}": { @@ -380,7 +436,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "x", + "bbs", + "articles", + "comments", + "at" + ], + "x-samchon-controller": "BbsCommentsController" }, "put": { "tags": [], @@ -433,7 +497,15 @@ } } } - } + }, + "x-samchon-accessor": [ + "x", + "bbs", + "articles", + "comments", + "update" + ], + "x-samchon-controller": "BbsCommentsController" } } }, diff --git a/test/features/app-routerModule/swagger.json b/test/features/app-routerModule/swagger.json index f571c5d84..c6d987135 100644 --- a/test/features/app-routerModule/swagger.json +++ b/test/features/app-routerModule/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,13 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "common", + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -44,7 +50,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/bbs/{section}/articles": { @@ -101,7 +112,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -140,7 +157,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/{section}/articles/{id}": { @@ -176,7 +199,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" }, "put": { "summary": "Update an article", @@ -225,7 +254,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/{section}/articles/{articleId}/comments": { @@ -291,7 +326,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "articles", + "comments", + "index" + ], + "x-samchon-controller": "BbsArticleCommentsController" }, "post": { "tags": [], @@ -335,7 +376,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "articles", + "comments", + "store" + ], + "x-samchon-controller": "BbsArticleCommentsController" } }, "/{section}/articles/{articleId}/comments/{id}": { @@ -380,7 +427,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "articles", + "comments", + "at" + ], + "x-samchon-controller": "BbsArticleCommentsController" }, "put": { "tags": [], @@ -433,7 +486,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "articles", + "comments", + "update" + ], + "x-samchon-controller": "BbsArticleCommentsController" } } }, diff --git a/test/features/app-versionHeader/swagger.json b/test/features/app-versionHeader/swagger.json index ca6fee010..f9633b1b4 100644 --- a/test/features/app-versionHeader/swagger.json +++ b/test/features/app-versionHeader/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -44,7 +49,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/bbs/{section}/articles": { @@ -101,7 +111,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -140,7 +156,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/{section}/articles/{id}": { @@ -176,7 +198,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" }, "put": { "summary": "Update an article", @@ -225,7 +253,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/{section}/articles/{articleId}/comments": { @@ -291,7 +325,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "index" + ], + "x-samchon-controller": "BbsCommentsController" }, "post": { "tags": [], @@ -335,7 +376,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "store" + ], + "x-samchon-controller": "BbsCommentsController" } }, "/bbs/{section}/articles/{articleId}/comments/{id}": { @@ -380,7 +428,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "at" + ], + "x-samchon-controller": "BbsCommentsController" }, "put": { "tags": [], @@ -433,7 +488,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "update" + ], + "x-samchon-controller": "BbsCommentsController" } } }, diff --git a/test/features/app-versionUri/swagger.json b/test/features/app-versionUri/swagger.json index b3aacb189..d1ebde3f3 100644 --- a/test/features/app-versionUri/swagger.json +++ b/test/features/app-versionUri/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,13 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "v1", + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/v1/performance": { @@ -44,7 +50,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "v1", + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/v1/bbs/{section}/articles": { @@ -101,7 +113,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "v1", + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/v2/bbs/{section}/articles": { @@ -158,7 +177,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "v2", + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/{section}/articles": { @@ -215,7 +241,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -254,7 +286,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/v1/bbs/{section}/articles/{id}": { @@ -290,7 +328,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "v1", + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/v2/bbs/{section}/articles/{id}": { @@ -341,7 +386,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "v2", + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } } }, diff --git a/test/features/app/swagger.json b/test/features/app/swagger.json index ca6fee010..f9633b1b4 100644 --- a/test/features/app/swagger.json +++ b/test/features/app/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -44,7 +49,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/bbs/{section}/articles": { @@ -101,7 +111,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -140,7 +156,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/{section}/articles/{id}": { @@ -176,7 +198,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" }, "put": { "summary": "Update an article", @@ -225,7 +253,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/{section}/articles/{articleId}/comments": { @@ -291,7 +325,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "index" + ], + "x-samchon-controller": "BbsCommentsController" }, "post": { "tags": [], @@ -335,7 +376,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "store" + ], + "x-samchon-controller": "BbsCommentsController" } }, "/bbs/{section}/articles/{articleId}/comments/{id}": { @@ -380,7 +428,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "at" + ], + "x-samchon-controller": "BbsCommentsController" }, "put": { "tags": [], @@ -433,7 +488,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "update" + ], + "x-samchon-controller": "BbsCommentsController" } } }, diff --git a/test/features/beautify-4/swagger.json b/test/features/beautify-4/swagger.json index 905ccdb0e..a0f8f1ed8 100644 --- a/test/features/beautify-4/swagger.json +++ b/test/features/beautify-4/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -31,7 +31,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -54,7 +59,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/body": { @@ -85,7 +95,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "body", + "store" + ], + "x-samchon-controller": "TypedBodyController" } }, "/body/{id}": { @@ -119,7 +134,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "body", + "update" + ], + "x-samchon-controller": "TypedBodyController" } } }, diff --git a/test/features/beautify-false/swagger.json b/test/features/beautify-false/swagger.json index d3ad7afbc..db4f2a3f3 100644 --- a/test/features/beautify-false/swagger.json +++ b/test/features/beautify-false/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"summary":"Health check API","description":"Health check API.\n\nJust for health checking API liveness.","tags":["system","health"],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"summary":"Get server performance info","description":"Get server performance info.","tags":["system","performance"],"parameters":[],"responses":{"200":{"description":"Performance info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"summary":"Store an article","description":"Store an article.","tags":[],"parameters":[],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/body/{id}":{"put":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialIBbsArticle.IStore"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"PartialIBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":[],"description":"Make all properties in T optional"}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[{"name":"system"},{"name":"health"},{"name":"performance"}],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"summary":"Health check API","description":"Health check API.\n\nJust for health checking API liveness.","tags":["system","health"],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"summary":"Get server performance info","description":"Get server performance info.","tags":["system","performance"],"parameters":[],"responses":{"200":{"description":"Performance info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"summary":"Store an article","description":"Store an article.","tags":[],"parameters":[],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}},"/body/{id}":{"put":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialIBbsArticle.IStore"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["body","update"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"PartialIBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":[],"description":"Make all properties in T optional"}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[{"name":"system"},{"name":"health"},{"name":"performance"}],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/beautify/swagger.json b/test/features/beautify/swagger.json index e77aeda05..f5994345e 100644 --- a/test/features/beautify/swagger.json +++ b/test/features/beautify/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -31,7 +31,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -54,7 +59,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/body": { @@ -85,7 +95,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "body", + "store" + ], + "x-samchon-controller": "TypedBodyController" } }, "/body/{id}": { @@ -119,7 +134,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "body", + "update" + ], + "x-samchon-controller": "TypedBodyController" } } }, diff --git a/test/features/body-config-assert/swagger.json b/test/features/body-config-assert/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-config-assert/swagger.json +++ b/test/features/body-config-assert/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-config-assertClone/swagger.json b/test/features/body-config-assertClone/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-config-assertClone/swagger.json +++ b/test/features/body-config-assertClone/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-config-assertEquals/swagger.json b/test/features/body-config-assertEquals/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-config-assertEquals/swagger.json +++ b/test/features/body-config-assertEquals/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-config-assertPrune/swagger.json b/test/features/body-config-assertPrune/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-config-assertPrune/swagger.json +++ b/test/features/body-config-assertPrune/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-config-equals/swagger.json b/test/features/body-config-equals/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-config-equals/swagger.json +++ b/test/features/body-config-equals/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-config-is/swagger.json b/test/features/body-config-is/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-config-is/swagger.json +++ b/test/features/body-config-is/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-config-validate/swagger.json b/test/features/body-config-validate/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-config-validate/swagger.json +++ b/test/features/body-config-validate/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-config-validateClone/swagger.json b/test/features/body-config-validateClone/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-config-validateClone/swagger.json +++ b/test/features/body-config-validateClone/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-config-validateEquals/swagger.json b/test/features/body-config-validateEquals/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-config-validateEquals/swagger.json +++ b/test/features/body-config-validateEquals/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-config-validatePrune/swagger.json b/test/features/body-config-validatePrune/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-config-validatePrune/swagger.json +++ b/test/features/body-config-validatePrune/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-generic-default/swagger.json b/test/features/body-generic-default/swagger.json index b0da71c4f..58e13cd7f 100644 --- a/test/features/body-generic-default/swagger.json +++ b/test/features/body-generic-default/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/google/{accountCode}/drives/images/upload/single":{"post":{"summary":"단일 이미지 파일 업로드","description":"단일 이미지 파일 업로드.\n\n단 하나의 이미지 파일을 구글 드라이브에 개별 업로드한다.","tags":["Google"],"parameters":[{"name":"accountCode","in":"path","schema":{"type":"string"},"required":true,"description":" 구글 계정명"}],"requestBody":{"description":"단일 이미지 파일 업로드 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IGoogleDriveImageSingleUpload"}}},"required":true},"responses":{"201":{"description":"업로드 완료된 구글 드라이브 파일 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IGoogleDriveFile"}}}}}}},"/google/{accountCode}/drives/images/upload/activate":{"post":{"tags":[],"parameters":[{"name":"accountCode","in":"path","schema":{"type":"string"},"required":true}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IGoogleTokenActivategoogle-authnever"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{}}}}}},"/body":{"post":{"summary":"Store an article","description":"Store an article.","tags":[],"parameters":[],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStorestring"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticlestring"}}}}}}},"/body/{id}":{"put":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialIBbsArticle.IStorestring"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{}}}}}}},"components":{"schemas":{"IGoogleDriveFile":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"location":{"type":"string"},"name":{"type":"string"},"extension":{"oneOf":[{"type":"null"},{"type":"string"}]},"url":{"type":"string","format":"uri"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","location","name","extension","url","created_at","updated_at"]},"IGoogleDriveImageSingleUpload":{"type":"object","properties":{"token":{"type":"string","x-wrtn-secret-key":"google-auth-key","title":"구글 사용자 인증 키","description":"구글 사용자 인증 키.\n\n구글 드라이브에 이미지 파일을 업로드하기 위하여, 구글 사용자 인증이 선행되어야 한다.\n본 필드값에는, 바로 그 사전 인증하여 발급받은 사용자 인증 키를 할당해주어야 함.\n그리고 그 인증 키는, read 및 write scope 에 대하여 대응 가능하여야 한다."},"url":{"oneOf":[{"type":"string","format":"uri","contentMediaType":"image/png"},{"type":"string","format":"uri","contentMediaType":"image/jpg"}],"title":"이미지 파일 경로","description":"이미지 파일 경로.\n\nWorkflow Editor 상 Inspector 내지 Chat Agent 의 File Uploader 의하여 구성됨."},"location":{"type":"string","title":"파일 경로","description":"이미지 파일이 위치할 경로, 파일명 및 확장자는 제외."},"name":{"type":"string","x-wrtn-placeholder":"파일명을 입력해주세요.","title":"파일명","description":"파일명.\n\n확장자가 제외된, 순수 파일명.\n\n{@link url} 의 실제 파일명과 다르게 업로드 가능."},"extension":{"oneOf":[{"const":"jpg"},{"const":"png"}],"title":"이미지 확장자","description":"이미지 확장자."}},"required":["token","url","location","name","extension"],"description":"구글 드라이브에의 이미지 업로드 DTO.\n\n구글 드라이브에 단일 이미지를 업로드할 때 사용하는 DTO. 만일 복수의 이미지를\n동시에 업로드하고 싶다면, `IGoogleDriveImageMultipleUpload` DTO 및 관련\nAPI 함수를 사용하도록 할 것."},"IGoogleTokenActivategoogle-authnever":{"type":"object","properties":{"token":{"type":"string","x-wrtn-secret-key":"google-auth"}},"required":["token"]},"IBbsArticlestring":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"format":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","format","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStorestring":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"format":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","format","files"]},"PartialIBbsArticle.IStorestring":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"format":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":[],"description":"Make all properties in T optional"}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[{"name":"Google"}],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/google/{accountCode}/drives/images/upload/single":{"post":{"summary":"단일 이미지 파일 업로드","description":"단일 이미지 파일 업로드.\n\n단 하나의 이미지 파일을 구글 드라이브에 개별 업로드한다.","tags":["Google"],"parameters":[{"name":"accountCode","in":"path","schema":{"type":"string"},"required":true,"description":" 구글 계정명"}],"requestBody":{"description":"단일 이미지 파일 업로드 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IGoogleDriveImageSingleUpload"}}},"required":true},"responses":{"201":{"description":"업로드 완료된 구글 드라이브 파일 정보","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IGoogleDriveFile"}}}}},"x-samchon-accessor":["google","drives","images","upload","single"],"x-samchon-controller":"GoogleDriveImageUploadController"}},"/google/{accountCode}/drives/images/upload/activate":{"post":{"tags":[],"parameters":[{"name":"accountCode","in":"path","schema":{"type":"string"},"required":true}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IGoogleTokenActivategoogle-authnever"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["google","drives","images","upload","activate"],"x-samchon-controller":"GoogleDriveImageUploadController"}},"/body":{"post":{"summary":"Store an article","description":"Store an article.","tags":[],"parameters":[],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStorestring"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticlestring"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}},"/body/{id}":{"put":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialIBbsArticle.IStorestring"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["body","update"],"x-samchon-controller":"TypedBodyController"}}},"components":{"schemas":{"IGoogleDriveFile":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"location":{"type":"string"},"name":{"type":"string"},"extension":{"oneOf":[{"type":"null"},{"type":"string"}]},"url":{"type":"string","format":"uri"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","location","name","extension","url","created_at","updated_at"]},"IGoogleDriveImageSingleUpload":{"type":"object","properties":{"token":{"type":"string","x-wrtn-secret-key":"google-auth-key","title":"구글 사용자 인증 키","description":"구글 사용자 인증 키.\n\n구글 드라이브에 이미지 파일을 업로드하기 위하여, 구글 사용자 인증이 선행되어야 한다.\n본 필드값에는, 바로 그 사전 인증하여 발급받은 사용자 인증 키를 할당해주어야 함.\n그리고 그 인증 키는, read 및 write scope 에 대하여 대응 가능하여야 한다."},"url":{"oneOf":[{"type":"string","format":"uri","contentMediaType":"image/png"},{"type":"string","format":"uri","contentMediaType":"image/jpg"}],"title":"이미지 파일 경로","description":"이미지 파일 경로.\n\nWorkflow Editor 상 Inspector 내지 Chat Agent 의 File Uploader 의하여 구성됨."},"location":{"type":"string","title":"파일 경로","description":"이미지 파일이 위치할 경로, 파일명 및 확장자는 제외."},"name":{"type":"string","x-wrtn-placeholder":"파일명을 입력해주세요.","title":"파일명","description":"파일명.\n\n확장자가 제외된, 순수 파일명.\n\n{@link url} 의 실제 파일명과 다르게 업로드 가능."},"extension":{"oneOf":[{"const":"jpg"},{"const":"png"}],"title":"이미지 확장자","description":"이미지 확장자."}},"required":["token","url","location","name","extension"],"description":"구글 드라이브에의 이미지 업로드 DTO.\n\n구글 드라이브에 단일 이미지를 업로드할 때 사용하는 DTO. 만일 복수의 이미지를\n동시에 업로드하고 싶다면, `IGoogleDriveImageMultipleUpload` DTO 및 관련\nAPI 함수를 사용하도록 할 것."},"IGoogleTokenActivategoogle-authnever":{"type":"object","properties":{"token":{"type":"string","x-wrtn-secret-key":"google-auth"}},"required":["token"]},"IBbsArticlestring":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"format":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","format","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStorestring":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"format":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","format","files"]},"PartialIBbsArticle.IStorestring":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"format":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":[],"description":"Make all properties in T optional"}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[{"name":"Google"}],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-manual-assert/swagger.json b/test/features/body-manual-assert/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-manual-assert/swagger.json +++ b/test/features/body-manual-assert/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-manual-is/swagger.json b/test/features/body-manual-is/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-manual-is/swagger.json +++ b/test/features/body-manual-is/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-manual-validate/swagger.json b/test/features/body-manual-validate/swagger.json index 20c03c6c0..337887c0c 100644 --- a/test/features/body-manual-validate/swagger.json +++ b/test/features/body-manual-validate/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/body-optional/swagger.json b/test/features/body-optional/swagger.json index 01a546bcf..6a0f48792 100644 --- a/test/features/body-optional/swagger.json +++ b/test/features/body-optional/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -40,7 +40,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "body", + "optional", + "json" + ], + "x-samchon-controller": "BodyOptionalController" } }, "/body/optional/plain": { @@ -68,7 +74,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "body", + "optional", + "plain" + ], + "x-samchon-controller": "BodyOptionalController" } }, "/health": { @@ -82,7 +94,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } } }, diff --git a/test/features/body/swagger.json b/test/features/body/swagger.json index d3ad7afbc..db4f2a3f3 100644 --- a/test/features/body/swagger.json +++ b/test/features/body/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"summary":"Health check API","description":"Health check API.\n\nJust for health checking API liveness.","tags":["system","health"],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"summary":"Get server performance info","description":"Get server performance info.","tags":["system","performance"],"parameters":[],"responses":{"200":{"description":"Performance info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"summary":"Store an article","description":"Store an article.","tags":[],"parameters":[],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/body/{id}":{"put":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialIBbsArticle.IStore"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"PartialIBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":[],"description":"Make all properties in T optional"}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[{"name":"system"},{"name":"health"},{"name":"performance"}],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"summary":"Health check API","description":"Health check API.\n\nJust for health checking API liveness.","tags":["system","health"],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"summary":"Get server performance info","description":"Get server performance info.","tags":["system","performance"],"parameters":[],"responses":{"200":{"description":"Performance info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"summary":"Store an article","description":"Store an article.","tags":[],"parameters":[],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}},"/body/{id}":{"put":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialIBbsArticle.IStore"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["body","update"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"PartialIBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":[],"description":"Make all properties in T optional"}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[{"name":"system"},{"name":"health"},{"name":"performance"}],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/cli-config-project/swagger.json b/test/features/cli-config-project/swagger.json index e20dbf2fe..b848b098e 100644 --- a/test/features/cli-config-project/swagger.json +++ b/test/features/cli-config-project/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"summary":"Health check API","description":"Health check API.\n\nJust for health checking API liveness.","tags":["system","health"],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"summary":"Get server performance info","description":"Get server performance info.","tags":["system","performance"],"parameters":[],"responses":{"200":{"description":"Performance info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"summary":"Store an article","description":"Store an article.","tags":[],"parameters":[],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[{"name":"system"},{"name":"health"},{"name":"performance"}],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"summary":"Health check API","description":"Health check API.\n\nJust for health checking API liveness.","tags":["system","health"],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"summary":"Get server performance info","description":"Get server performance info.","tags":["system","performance"],"parameters":[],"responses":{"200":{"description":"Performance info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"summary":"Store an article","description":"Store an article.","tags":[],"parameters":[],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[{"name":"system"},{"name":"health"},{"name":"performance"}],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/cli-config/swagger.json b/test/features/cli-config/swagger.json index e20dbf2fe..b848b098e 100644 --- a/test/features/cli-config/swagger.json +++ b/test/features/cli-config/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"summary":"Health check API","description":"Health check API.\n\nJust for health checking API liveness.","tags":["system","health"],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"summary":"Get server performance info","description":"Get server performance info.","tags":["system","performance"],"parameters":[],"responses":{"200":{"description":"Performance info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/body":{"post":{"summary":"Store an article","description":"Store an article.","tags":[],"parameters":[],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[{"name":"system"},{"name":"health"},{"name":"performance"}],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"summary":"Health check API","description":"Health check API.\n\nJust for health checking API liveness.","tags":["system","health"],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"summary":"Get server performance info","description":"Get server performance info.","tags":["system","performance"],"parameters":[],"responses":{"200":{"description":"Performance info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/body":{"post":{"summary":"Store an article","description":"Store an article.","tags":[],"parameters":[],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["body","store"],"x-samchon-controller":"TypedBodyController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[{"name":"system"},{"name":"health"},{"name":"performance"}],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/cli-project/swagger.json b/test/features/cli-project/swagger.json index d3f0e0ba0..572a666c5 100644 --- a/test/features/cli-project/swagger.json +++ b/test/features/cli-project/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/clone-and-exact-optional-property/swagger.json b/test/features/clone-and-exact-optional-property/swagger.json index e547eeb1b..900b03216 100644 --- a/test/features/clone-and-exact-optional-property/swagger.json +++ b/test/features/clone-and-exact-optional-property/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/partial-dto-test/original":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IOriginal"}}}}}}},"/partial-dto-test/partial-interface":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IOriginal.IPartialInterface"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPartialInterface"}}}}}}},"/partial-dto-test/partial-type":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialPickIOriginaldemailcreated_atoriginal_optionalundefinable_attr"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialPickIOriginalbemailcreated_atoriginal_optionalundefinable_attr"}}}}}}}},"components":{"schemas":{"IOriginal":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"},"c":{"type":"string"},"d":{"type":"string"},"email":{"oneOf":[{"type":"null"},{"type":"string","format":"email"}]},"created_at":{"oneOf":[{"type":"null"},{"type":"string","format":"date-time"}]},"original_optional":{"type":"boolean"},"undefinable_attr":{"type":"string"},"something":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ISomething"}]}},"required":["a","b","c","d","email","created_at"]},"ISomething":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"boolean"}},"required":["a","b"]},"IPartialInterface":{"type":"object","properties":{"a":{"type":"string"},"email":{"oneOf":[{"type":"null"},{"type":"string","format":"email"}]},"created_at":{"oneOf":[{"type":"null"},{"type":"string","format":"date-time"}]},"original_optional":{"type":"boolean"},"undefinable_attr":{"type":"string"}},"required":[]},"IOriginal.IPartialInterface":{"type":"object","properties":{"c":{"type":"string"},"email":{"oneOf":[{"type":"null"},{"type":"string","format":"email"}]},"created_at":{"oneOf":[{"type":"null"},{"type":"string","format":"date-time"}]},"original_optional":{"type":"boolean"},"undefinable_attr":{"type":"string"}},"required":[]},"PartialPickIOriginalbemailcreated_atoriginal_optionalundefinable_attr":{"type":"object","properties":{"b":{"type":"string"},"email":{"oneOf":[{"type":"null"},{"type":"string","format":"email"}]},"created_at":{"oneOf":[{"type":"null"},{"type":"string","format":"date-time"}]},"original_optional":{"type":"boolean"},"undefinable_attr":{"type":"string"}},"required":[],"description":"Make all properties in T optional"},"PartialPickIOriginaldemailcreated_atoriginal_optionalundefinable_attr":{"type":"object","properties":{"d":{"type":"string"},"email":{"oneOf":[{"type":"null"},{"type":"string","format":"email"}]},"created_at":{"oneOf":[{"type":"null"},{"type":"string","format":"date-time"}]},"original_optional":{"type":"boolean"},"undefinable_attr":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/partial-dto-test/original":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IOriginal"}}}}},"x-samchon-accessor":["partial_dto_test","original"],"x-samchon-controller":"PartialDTOTestController"}},"/partial-dto-test/partial-interface":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IOriginal.IPartialInterface"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPartialInterface"}}}}},"x-samchon-accessor":["partial_dto_test","partial_interface","partialInterface"],"x-samchon-controller":"PartialDTOTestController"}},"/partial-dto-test/partial-type":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialPickIOriginaldemailcreated_atoriginal_optionalundefinable_attr"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartialPickIOriginalbemailcreated_atoriginal_optionalundefinable_attr"}}}}},"x-samchon-accessor":["partial_dto_test","partial_type","partialType"],"x-samchon-controller":"PartialDTOTestController"}}},"components":{"schemas":{"IOriginal":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"},"c":{"type":"string"},"d":{"type":"string"},"email":{"oneOf":[{"type":"null"},{"type":"string","format":"email"}]},"created_at":{"oneOf":[{"type":"null"},{"type":"string","format":"date-time"}]},"original_optional":{"type":"boolean"},"undefinable_attr":{"type":"string"},"something":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ISomething"}]}},"required":["a","b","c","d","email","created_at"]},"ISomething":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"boolean"}},"required":["a","b"]},"IPartialInterface":{"type":"object","properties":{"a":{"type":"string"},"email":{"oneOf":[{"type":"null"},{"type":"string","format":"email"}]},"created_at":{"oneOf":[{"type":"null"},{"type":"string","format":"date-time"}]},"original_optional":{"type":"boolean"},"undefinable_attr":{"type":"string"}},"required":[]},"IOriginal.IPartialInterface":{"type":"object","properties":{"c":{"type":"string"},"email":{"oneOf":[{"type":"null"},{"type":"string","format":"email"}]},"created_at":{"oneOf":[{"type":"null"},{"type":"string","format":"date-time"}]},"original_optional":{"type":"boolean"},"undefinable_attr":{"type":"string"}},"required":[]},"PartialPickIOriginalbemailcreated_atoriginal_optionalundefinable_attr":{"type":"object","properties":{"b":{"type":"string"},"email":{"oneOf":[{"type":"null"},{"type":"string","format":"email"}]},"created_at":{"oneOf":[{"type":"null"},{"type":"string","format":"date-time"}]},"original_optional":{"type":"boolean"},"undefinable_attr":{"type":"string"}},"required":[],"description":"Make all properties in T optional"},"PartialPickIOriginaldemailcreated_atoriginal_optionalundefinable_attr":{"type":"object","properties":{"d":{"type":"string"},"email":{"oneOf":[{"type":"null"},{"type":"string","format":"email"}]},"created_at":{"oneOf":[{"type":"null"},{"type":"string","format":"date-time"}]},"original_optional":{"type":"boolean"},"undefinable_attr":{"type":"string"}},"required":[],"description":"Make all properties in T optional"}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/clone-and-propagate/swagger.json b/test/features/clone-and-propagate/swagger.json index 71d1b1da8..937c8c334 100644 --- a/test/features/clone-and-propagate/swagger.json +++ b/test/features/clone-and-propagate/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -33,7 +33,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "arrayRecursive", + "index" + ], + "x-samchon-controller": "ArrayRecursiveController" }, "post": { "tags": [], @@ -59,7 +64,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "arrayRecursive", + "store" + ], + "x-samchon-controller": "ArrayRecursiveController" } }, "/arrayRecursive/{id}": { @@ -86,7 +96,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "arrayRecursive", + "at" + ], + "x-samchon-controller": "ArrayRecursiveController" } }, "/arrayRecursiveUnionExplicit": { @@ -123,7 +138,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "arrayRecursiveUnionExplicit", + "index" + ], + "x-samchon-controller": "ArrayRecursiveUnionExplicitController" }, "post": { "tags": [], @@ -181,7 +201,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "arrayRecursiveUnionExplicit", + "store" + ], + "x-samchon-controller": "ArrayRecursiveUnionExplicitController" } }, "/arrayRecursiveUnionExplicit/{id}": { @@ -224,7 +249,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "arrayRecursiveUnionExplicit", + "at" + ], + "x-samchon-controller": "ArrayRecursiveUnionExplicitController" } }, "/arrayRecursiveUnionImplicit": { @@ -264,7 +294,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "arrayRecursiveUnionImplicit", + "index" + ], + "x-samchon-controller": "ArrayRecursiveUnionImplicitController" }, "post": { "tags": [], @@ -328,7 +363,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "arrayRecursiveUnionImplicit", + "store" + ], + "x-samchon-controller": "ArrayRecursiveUnionImplicitController" } }, "/arrayRecursiveUnionImplicit/{id}": { @@ -374,7 +414,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "arrayRecursiveUnionImplicit", + "at" + ], + "x-samchon-controller": "ArrayRecursiveUnionImplicitController" } }, "/arraySimple": { @@ -395,7 +440,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "arraySimple", + "index" + ], + "x-samchon-controller": "ArraySimpleController" }, "post": { "tags": [], @@ -421,7 +471,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "arraySimple", + "store" + ], + "x-samchon-controller": "ArraySimpleController" } }, "/arraySimple/{id}": { @@ -449,7 +504,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "arraySimple", + "at" + ], + "x-samchon-controller": "ArraySimpleController" } }, "/bbs/articles/{section}": { @@ -509,7 +569,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -548,7 +614,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/articles/{section}/{id}": { @@ -599,7 +671,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/health": { @@ -613,7 +691,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/multipart": { @@ -637,7 +720,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "multipart", + "post" + ], + "x-samchon-controller": "MultipartController" } }, "/objectLiteral": { @@ -658,7 +746,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "objectLiteral", + "index" + ], + "x-samchon-controller": "ObjectLiteralController" } }, "/objectLiteral/literal": { @@ -714,7 +807,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "objectLiteral", + "literal", + "literals" + ], + "x-samchon-controller": "ObjectLiteralController" } }, "/objectSimple": { @@ -735,7 +834,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "objectSimple", + "index" + ], + "x-samchon-controller": "ObjectSimpleController" }, "post": { "tags": [], @@ -761,7 +865,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "objectSimple", + "store" + ], + "x-samchon-controller": "ObjectSimpleController" } }, "/objectSimple/{id}": { @@ -788,7 +897,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "objectSimple", + "at" + ], + "x-samchon-controller": "ObjectSimpleController" } }, "/objectUnionExplicit": { @@ -843,7 +957,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "objectUnionExplicit", + "get" + ], + "x-samchon-controller": "ObjectUnionExplicitController" } }, "/objectUnionImplicitControllere": { @@ -886,7 +1005,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "objectUnionImplicitControllere", + "get" + ], + "x-samchon-controller": "ObjectUnionImplicitController" } }, "/performance/cpu": { @@ -904,7 +1028,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "cpu" + ], + "x-samchon-controller": "PerformanceController" } }, "/performance/memory": { @@ -922,7 +1051,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "memory" + ], + "x-samchon-controller": "PerformanceController" } }, "/performance/resource": { @@ -940,7 +1074,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "resource" + ], + "x-samchon-controller": "PerformanceController" } }, "/sellers/authenticate/join": { @@ -973,7 +1112,13 @@ }, "x-nestia-encrypted": true } - } + }, + "x-samchon-accessor": [ + "sellers", + "authenticate", + "join" + ], + "x-samchon-controller": "SellerAuthenticateController" } }, "/sellers/authenticate/login": { @@ -1006,7 +1151,13 @@ }, "x-nestia-encrypted": true } - } + }, + "x-samchon-accessor": [ + "sellers", + "authenticate", + "login" + ], + "x-samchon-controller": "SellerAuthenticateController" } }, "/sellers/authenticate/password/change": { @@ -1034,7 +1185,14 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "sellers", + "authenticate", + "password", + "change" + ], + "x-samchon-controller": "SellerAuthenticateController" } }, "/sellers/authenticate/exit": { @@ -1050,7 +1208,13 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "sellers", + "authenticate", + "exit" + ], + "x-samchon-controller": "SellerAuthenticateController" } }, "/template": { @@ -1071,7 +1235,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "template", + "index" + ], + "x-samchon-controller": "TemplateController" }, "post": { "tags": [], @@ -1097,7 +1266,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "template", + "store" + ], + "x-samchon-controller": "TemplateController" } }, "/template/{id}": { @@ -1124,7 +1298,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "template", + "at" + ], + "x-samchon-controller": "TemplateController" } }, "/tupleHierarchicalController": { @@ -1241,7 +1420,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "tupleHierarchicalController", + "index" + ], + "x-samchon-controller": "TupleHierarchicalController" }, "post": { "tags": [], @@ -1459,7 +1643,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "tupleHierarchicalController", + "store" + ], + "x-samchon-controller": "TupleHierarchicalController" } }, "/tupleHierarchicalController/{id}": { @@ -1582,7 +1771,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "tupleHierarchicalController", + "at" + ], + "x-samchon-controller": "TupleHierarchicalController" } }, "/users/{user_id}/oauth": { @@ -1646,7 +1840,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "users", + "oauth", + "getOauthProfile" + ], + "x-samchon-controller": "UsersController" } }, "/users/{user_id}/user": { @@ -1702,7 +1902,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "users", + "user", + "getUserProfile" + ], + "x-samchon-controller": "UsersController" }, "post": { "description": "- check optional, nullable property", @@ -1738,7 +1944,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "users", + "user", + "updateUserProfile" + ], + "x-samchon-controller": "UsersController" } } }, diff --git a/test/features/clone-implicit/swagger.json b/test/features/clone-implicit/swagger.json index 002cc4579..3d6a4b161 100644 --- a/test/features/clone-implicit/swagger.json +++ b/test/features/clone-implicit/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -71,7 +71,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "body", + "store" + ], + "x-samchon-controller": "TypedBodyControlleer" } }, "/body/{id}": { @@ -117,7 +122,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "body", + "update" + ], + "x-samchon-controller": "TypedBodyControlleer" } } }, diff --git a/test/features/clone-native/swagger.json b/test/features/clone-native/swagger.json index d4780380c..033d2fd2f 100644 --- a/test/features/clone-native/swagger.json +++ b/test/features/clone-native/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -30,7 +30,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "date", + "get" + ], + "x-samchon-controller": "DateController" } }, "/multipart": { @@ -54,7 +59,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "multipart", + "post" + ], + "x-samchon-controller": "MultipartController" } } }, diff --git a/test/features/clone-tags/swagger.json b/test/features/clone-tags/swagger.json index 6131fa395..ac33c8e70 100644 --- a/test/features/clone-tags/swagger.json +++ b/test/features/clone-tags/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -69,7 +69,13 @@ "write" ] } - ] + ], + "x-samchon-accessor": [ + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/articles/{section}/{id}": { @@ -134,7 +140,13 @@ { "bearer": [] } - ] + ], + "x-samchon-accessor": [ + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/v0/transaction/user/{pubkey}": { @@ -158,7 +170,14 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "v0", + "transaction", + "user", + "findTransactionsByUser" + ], + "x-samchon-controller": "TransactionController" } } }, diff --git a/test/features/clone-type-create-duplicate/swagger.json b/test/features/clone-type-create-duplicate/swagger.json index 956ec2f87..dc984a3d3 100644 --- a/test/features/clone-type-create-duplicate/swagger.json +++ b/test/features/clone-type-create-duplicate/swagger.json @@ -1 +1 @@ -{"openapi":"3.0.0","servers":[{"url":"http://localhost:4000","description":"Local Server"}],"info":{"title":"nestia test template","description":"클론모드에서 발생하는 타입 중복 생성 문제 테스트","version":"4.0.4","license":{"name":"MIT"}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}},"schemas":{"IAuth.IAccount":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/IUser.IProfile"},"account_id":{"type":"string"}},"required":["user","account_id"]},"IUser.IProfile":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"}},"required":["id","name","created_at"]},"Exception.Unauthorized":{"type":"object","properties":{"code":{"type":"string","enum":["UNAUTHORIZED"]},"message":{"type":"string"}},"required":["code","message"]},"IUser.IProfile.o1":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"}},"required":["id","name","created_at"]},"Exception.Unauthorized.o1":{"type":"object","properties":{"code":{"type":"string","enum":["UNAUTHORIZED"]},"message":{"type":"string"}},"required":["code","message"]}}},"paths":{"/auth/account":{"get":{"summary":"get account profile","description":"계정 프로필 정보 불러오기","tags":["auth"],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IAuth.IAccount"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Exception.Unauthorized"}}}}}}},"/user/profile":{"get":{"summary":"get user's profile","description":"get authorized user's profile","tags":["user"],"parameters":[],"responses":{"200":{"description":"user profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IUser.IProfile.o1"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Exception.Unauthorized.o1"}}}}},"security":[{"bearer":[]}]}}},"tags":[{"name":"auth"},{"name":"user"}]} \ No newline at end of file +{"openapi":"3.0.0","servers":[{"url":"http://localhost:4000","description":"Local Server"}],"info":{"title":"nestia test template","description":"클론모드에서 발생하는 타입 중복 생성 문제 테스트","version":"1.0.0","license":{"name":"MIT"}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}},"schemas":{"IAuth.IAccount":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/IUser.IProfile"},"account_id":{"type":"string"}},"required":["user","account_id"]},"IUser.IProfile":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"}},"required":["id","name","created_at"]},"Exception.Unauthorized":{"type":"object","properties":{"code":{"type":"string","enum":["UNAUTHORIZED"]},"message":{"type":"string"}},"required":["code","message"]},"IUser.IProfile.o1":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"created_at":{"type":"string","format":"date-time"}},"required":["id","name","created_at"]},"Exception.Unauthorized.o1":{"type":"object","properties":{"code":{"type":"string","enum":["UNAUTHORIZED"]},"message":{"type":"string"}},"required":["code","message"]}}},"paths":{"/auth/account":{"get":{"summary":"get account profile","description":"계정 프로필 정보 불러오기","tags":["auth"],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IAuth.IAccount"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Exception.Unauthorized"}}}}},"x-samchon-accessor":["auth","account"],"x-samchon-controller":"AuthController"}},"/user/profile":{"get":{"summary":"get user's profile","description":"get authorized user's profile","tags":["user"],"parameters":[],"responses":{"200":{"description":"user profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IUser.IProfile.o1"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Exception.Unauthorized.o1"}}}}},"security":[{"bearer":[]}],"x-samchon-accessor":["user","profile"],"x-samchon-controller":"UserController"}}},"tags":[{"name":"auth"},{"name":"user"}]} \ No newline at end of file diff --git a/test/features/config-pattern/swagger.json b/test/features/config-pattern/swagger.json index d3f0e0ba0..572a666c5 100644 --- a/test/features/config-pattern/swagger.json +++ b/test/features/config-pattern/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/configurations/bbs.swagger.json b/test/features/configurations/bbs.swagger.json index 49d124dc4..122f76619 100644 --- a/test/features/configurations/bbs.swagger.json +++ b/test/features/configurations/bbs.swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -69,7 +69,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -108,7 +114,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/{section}/articles/{id}": { @@ -144,7 +156,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" }, "put": { "summary": "Update an article", @@ -193,7 +211,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/{section}/articles/{articleId}/comments": { @@ -259,7 +283,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "index" + ], + "x-samchon-controller": "BbsCommentsController" }, "post": { "tags": [], @@ -303,7 +334,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "store" + ], + "x-samchon-controller": "BbsCommentsController" } }, "/bbs/{section}/articles/{articleId}/comments/{id}": { @@ -348,7 +386,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "at" + ], + "x-samchon-controller": "BbsCommentsController" }, "put": { "tags": [], @@ -401,7 +446,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "update" + ], + "x-samchon-controller": "BbsCommentsController" } } }, diff --git a/test/features/configurations/common.swagger.json b/test/features/configurations/common.swagger.json index b6587cf16..7e2547195 100644 --- a/test/features/configurations/common.swagger.json +++ b/test/features/configurations/common.swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -44,7 +49,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } } }, diff --git a/test/features/date/swagger.json b/test/features/date/swagger.json index 95879c085..662aacbc6 100644 --- a/test/features/date/swagger.json +++ b/test/features/date/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/date":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IDateDefined"}}}}}}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}}},"components":{"schemas":{"IDateDefined":{"type":"object","properties":{"string":{"type":"string","format":"date-time"},"date":{"type":"string","format":"date-time"},"date_with_tag":{"type":"string","format":"date-time"},"date_but_union":{"oneOf":[{"type":"string","format":"date-time"},{"type":"object","properties":{"type":{"const":"Buffer"},"data":{"type":"array","items":{"type":"number"}}},"required":["type","data"]}]}},"required":["string","date","date_with_tag","date_but_union"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/date":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IDateDefined"}}}}},"x-samchon-accessor":["date","get"],"x-samchon-controller":"DateController"}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}}},"components":{"schemas":{"IDateDefined":{"type":"object","properties":{"string":{"type":"string","format":"date-time"},"date":{"type":"string","format":"date-time"},"date_with_tag":{"type":"string","format":"date-time"},"date_but_union":{"oneOf":[{"type":"string","format":"date-time"},{"type":"object","properties":{"type":{"const":"Buffer"},"data":{"type":"array","items":{"type":"number"}}},"required":["type","data"]}]}},"required":["string","date","date_with_tag","date_but_union"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/duplicated/swagger.json b/test/features/duplicated/swagger.json index a6842e858..30d0a9252 100644 --- a/test/features/duplicated/swagger.json +++ b/test/features/duplicated/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/duplicated/at":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/multiple/at":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}}},"components":{"schemas":{"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/duplicated/at":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["duplicated","at"],"x-samchon-controller":"DuplicatedController"}},"/multiple/at":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["multiple","at"],"x-samchon-controller":"DuplicatedController"}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}}},"components":{"schemas":{"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/e2e/swagger.json b/test/features/e2e/swagger.json index bad4e65a3..38d6987ba 100644 --- a/test/features/e2e/swagger.json +++ b/test/features/e2e/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/articles/{section}":{"post":{"summary":"Store a new article","description":"Store a new article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"}],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/bbs/articles/{section}/{id}":{"put":{"summary":"Update an article","description":"Update an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true,"description":" Target article ID"}],"requestBody":{"description":"Content to update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"200":{"description":"Updated content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}}},"components":{"schemas":{"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","section","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/articles/{section}":{"post":{"summary":"Store a new article","description":"Store a new article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"}],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","articles","store"],"x-samchon-controller":"BbsArticlesController"}},"/bbs/articles/{section}/{id}":{"put":{"summary":"Update an article","description":"Update an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true,"description":" Target article ID"}],"requestBody":{"description":"Content to update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"200":{"description":"Updated content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","articles","update"],"x-samchon-controller":"BbsArticlesController"}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}}},"components":{"schemas":{"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","section","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/encrypted/swagger.json b/test/features/encrypted/swagger.json index a92eddba5..19548de13 100644 --- a/test/features/encrypted/swagger.json +++ b/test/features/encrypted/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -45,7 +50,12 @@ }, "x-nestia-encrypted": true } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/sellers/authenticate/join": { @@ -78,7 +88,13 @@ }, "x-nestia-encrypted": true } - } + }, + "x-samchon-accessor": [ + "sellers", + "authenticate", + "join" + ], + "x-samchon-controller": "SellerAuthenticateController" } }, "/sellers/authenticate/login": { @@ -111,7 +127,13 @@ }, "x-nestia-encrypted": true } - } + }, + "x-samchon-accessor": [ + "sellers", + "authenticate", + "login" + ], + "x-samchon-controller": "SellerAuthenticateController" } }, "/sellers/authenticate/password/change": { @@ -139,7 +161,14 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "sellers", + "authenticate", + "password", + "change" + ], + "x-samchon-controller": "SellerAuthenticateController" } }, "/sellers/authenticate/exit": { @@ -155,7 +184,13 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "sellers", + "authenticate", + "exit" + ], + "x-samchon-controller": "SellerAuthenticateController" } } }, diff --git a/test/features/exception-filter/swagger.json b/test/features/exception-filter/swagger.json index ae03f36b0..f6cd3e925 100644 --- a/test/features/exception-filter/swagger.json +++ b/test/features/exception-filter/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/exception/typedBody":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/exception/typedManual":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/exception/{id}/typedParam":{"get":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/exception/typedQuery":{"get":{"tags":[],"parameters":[{"name":"name","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"required":true},{"name":"extension","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"required":true},{"name":"url","in":"query","schema":{"type":"string","format":"uri"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IAttachmentFile"}}}}}}},"/exception/internal":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}}},"components":{"schemas":{"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/exception/typedBody":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["exception","typedBody"],"x-samchon-controller":"ExceptionController"}},"/exception/typedManual":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["exception","typedManual"],"x-samchon-controller":"ExceptionController"}},"/exception/{id}/typedParam":{"get":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["exception","typedParam"],"x-samchon-controller":"ExceptionController"}},"/exception/typedQuery":{"get":{"tags":[],"parameters":[{"name":"name","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"required":true},{"name":"extension","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"required":true},{"name":"url","in":"query","schema":{"type":"string","format":"uri"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IAttachmentFile"}}}}},"x-samchon-accessor":["exception","typedQuery"],"x-samchon-controller":"ExceptionController"}},"/exception/internal":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["exception","internal"],"x-samchon-controller":"ExceptionController"}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}}},"components":{"schemas":{"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/exception-with-propagate/swagger.json b/test/features/exception-with-propagate/swagger.json index 20df91914..cf6e212a7 100644 --- a/test/features/exception-with-propagate/swagger.json +++ b/test/features/exception-with-propagate/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/success":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"number"}}}},"401":{"content":{"application/json":{"schema":{"const":"INVALID_PERMISSION"}}}}}}},"/success/{error_type}":{"get":{"tags":[],"parameters":[{"name":"error_type","in":"path","schema":{"oneOf":[{"const":"EXPIRED_PERMISSION"},{"const":"REQUIRED_PERMISSION"}]},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"number"}}}},"401":{"content":{"application/json":{"schema":{"oneOf":[{"const":"EXPIRED_PERMISSION"},{"const":"REQUIRED_PERMISSION"}]}}}}}}},"/fail/{error_type}":{"get":{"tags":[],"parameters":[{"name":"error_type","in":"path","schema":{"oneOf":[{"const":"EXPIRED_PERMISSION"},{"const":"INVALID_PERMISSION"}]},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"number"}}}},"401":{"content":{"application/json":{"schema":{"oneOf":[{"const":"EXPIRED_PERMISSION"},{"const":"INVALID_PERMISSION"}]}}}}}}},"/fail/composite/{error_type}":{"get":{"tags":[],"parameters":[{"name":"error_type","in":"path","schema":{"oneOf":[{"const":"EXPIRED_PERMISSION"},{"const":"INVALID_PERMISSION"},{"const":"REQUIRED_PERMISSION"}]},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"number"}}}},"401":{"content":{"application/json":{"schema":{"oneOf":[{"const":"EXPIRED_PERMISSION"},{"const":"INVALID_PERMISSION"},{"const":"REQUIRED_PERMISSION"}]}}}}}}}},"components":{"schemas":{},"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/success":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"number"}}}},"401":{"content":{"application/json":{"schema":{"const":"INVALID_PERMISSION"}}}}},"x-samchon-accessor":["success","get"],"x-samchon-controller":"SuccessController"}},"/success/{error_type}":{"get":{"tags":[],"parameters":[{"name":"error_type","in":"path","schema":{"oneOf":[{"const":"EXPIRED_PERMISSION"},{"const":"REQUIRED_PERMISSION"}]},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"number"}}}},"401":{"content":{"application/json":{"schema":{"oneOf":[{"const":"EXPIRED_PERMISSION"},{"const":"REQUIRED_PERMISSION"}]}}}}},"x-samchon-accessor":["success","union"],"x-samchon-controller":"SuccessController"}},"/fail/{error_type}":{"get":{"tags":[],"parameters":[{"name":"error_type","in":"path","schema":{"oneOf":[{"const":"EXPIRED_PERMISSION"},{"const":"INVALID_PERMISSION"}]},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"number"}}}},"401":{"content":{"application/json":{"schema":{"oneOf":[{"const":"EXPIRED_PERMISSION"},{"const":"INVALID_PERMISSION"}]}}}}},"x-samchon-accessor":["fail","get"],"x-samchon-controller":"FailController"}},"/fail/composite/{error_type}":{"get":{"tags":[],"parameters":[{"name":"error_type","in":"path","schema":{"oneOf":[{"const":"EXPIRED_PERMISSION"},{"const":"INVALID_PERMISSION"},{"const":"REQUIRED_PERMISSION"}]},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"number"}}}},"401":{"content":{"application/json":{"schema":{"oneOf":[{"const":"EXPIRED_PERMISSION"},{"const":"INVALID_PERMISSION"},{"const":"REQUIRED_PERMISSION"}]}}}}},"x-samchon-accessor":["fail","composite"],"x-samchon-controller":"FailController"}}},"components":{"schemas":{},"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/exception/swagger.json b/test/features/exception/swagger.json index 184b12997..abb84d506 100644 --- a/test/features/exception/swagger.json +++ b/test/features/exception/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -96,7 +96,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "exception", + "typed" + ], + "x-samchon-controller": "ExceptionController" } }, "/exception/{section}/union": { @@ -153,7 +158,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "exception", + "union" + ], + "x-samchon-controller": "ExceptionController" } }, "/exception/{section}/tags": { @@ -222,7 +232,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "exception", + "tags" + ], + "x-samchon-controller": "ExceptionController" } }, "/exception/{section}/composite": { @@ -299,7 +314,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "exception", + "composite" + ], + "x-samchon-controller": "ExceptionController" } } }, diff --git a/test/features/fastify/swagger.json b/test/features/fastify/swagger.json index 8662fbe4c..ae6b17ed9 100644 --- a/test/features/fastify/swagger.json +++ b/test/features/fastify/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/articles/{section}":{"get":{"tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true},{"name":"page","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"integer"}]},"required":false},{"name":"limit","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"integer"}]},"required":false}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPageIBbsArticle.ISummary"}}}}}},"post":{"summary":"Store a new article","description":"Store a new article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"}],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/bbs/articles/{section}/{id}":{"put":{"summary":"Update an article","description":"Update an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true,"description":" Target article ID"}],"requestBody":{"description":"Content to update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"200":{"description":"Updated content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/body/optional/json":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBodyOptional"}}},"required":false},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBodyOptional"}}}}}}},"/body/optional/plain":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"text/plain":{"schema":{"type":"string"}}},"required":false},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}}}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/plain":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"text/plain":{"schema":{"type":"string"}}},"required":true},"responses":{"201":{"description":"","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/sellers/authenticate/join":{"post":{"summary":"Join as a seller","description":"Join as a seller.","tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nInformation of yours","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IJoin"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.Post](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nInformation of newly joined seller","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IAuthorized"}}},"x-nestia-encrypted":true}}}},"/sellers/authenticate/login":{"post":{"summary":"Log-in as a seller","description":"Log-in as a seller.","tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nEmail and password","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.ILogin"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.Post](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nInformation of the seller","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IAuthorized"}}},"x-nestia-encrypted":true}}}},"/sellers/authenticate/password/change":{"patch":{"summary":"Change password","description":"Change password.","tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nOld and new passwords","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IChangePassword"}}},"required":true,"x-nestia-encrypted":true},"responses":{"200":{"description":"Empty object","content":{"application/json":{}}}}}},"/sellers/authenticate/exit":{"delete":{"summary":"Erase the seller by itself","description":"Erase the seller by itself.","tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/param/{value}/boolean":{"get":{"tags":[],"parameters":[{"name":"value","in":"path","schema":{"type":"boolean"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"boolean"}}}}}}},"/param/{value}/number":{"get":{"tags":[],"parameters":[{"name":"value","in":"path","schema":{"type":"number"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"number"}}}}}}},"/param/{value}/string":{"get":{"tags":[],"parameters":[{"name":"value","in":"path","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}}}},"/param/{value}/nullable":{"get":{"tags":[],"parameters":[{"name":"value","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string"}]},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"type":"null"},{"type":"string"}]}}}}}}},"/param/{value}/literal":{"get":{"tags":[],"parameters":[{"name":"value","in":"path","schema":{"oneOf":[{"const":"A"},{"const":"B"},{"const":"C"}]},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"const":"A"},{"const":"B"},{"const":"C"}]}}}}}}}},"components":{"schemas":{"IPageIBbsArticle.ISummary":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IBbsArticle.ISummary"}},"pagination":{"$ref":"#/components/schemas/IPage.IPagination"}},"required":["data","pagination"]},"IBbsArticle.ISummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"writer":{"type":"string"},"title":{"type":"string","minLength":3,"maxLength":50},"created_at":{"type":"string","format":"date-time"}},"required":["id","section","writer","title","created_at"]},"IPage.IPagination":{"type":"object","properties":{"current":{"type":"integer"},"limit":{"type":"integer"},"records":{"type":"integer"},"pages":{"type":"integer"}},"required":["current","limit","records","pages"],"description":"Page information."},"IPage.IRequest":{"type":"object","properties":{"page":{"oneOf":[{"type":"null"},{"type":"integer"}]},"limit":{"oneOf":[{"type":"null"},{"type":"integer"}]}},"required":[],"description":"Page request data"},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","section","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"IBodyOptional":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"value":{"type":"number"}},"required":["id","value"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"ISeller.IAuthorized":{"type":"object","properties":{"authorization":{"type":"object","properties":{"token":{"type":"string"},"expires_at":{"type":"string"}},"required":["token","expires_at"]},"id":{"type":"number","title":"Primary key","description":"Primary key."},"email":{"type":"string","title":"Email address","description":"Email address."},"name":{"type":"string","title":"Name of the seller","description":"Name of the seller."},"mobile":{"type":"string","title":"Mobile number of the seller","description":"Mobile number of the seller."},"company":{"type":"string","title":"Belonged company name","description":"Belonged company name."},"created_at":{"type":"string","title":"Joined time","description":"Joined time."}},"required":["authorization","id","email","name","mobile","company","created_at"]},"ISeller.IJoin":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"},"name":{"type":"string"},"mobile":{"type":"string"},"company":{"type":"string"}},"required":["email","password","name","mobile","company"]},"ISeller.ILogin":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"}},"required":["email","password"]},"ISeller.IChangePassword":{"type":"object","properties":{"old_password":{"type":"string"},"new_password":{"type":"string"}},"required":["old_password","new_password"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/articles/{section}":{"get":{"tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true},{"name":"page","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"integer"}]},"required":false},{"name":"limit","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"integer"}]},"required":false}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPageIBbsArticle.ISummary"}}}}},"x-samchon-accessor":["bbs","articles","index"],"x-samchon-controller":"BbsArticlesController"},"post":{"summary":"Store a new article","description":"Store a new article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"}],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","articles","store"],"x-samchon-controller":"BbsArticlesController"}},"/bbs/articles/{section}/{id}":{"put":{"summary":"Update an article","description":"Update an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true,"description":" Target article ID"}],"requestBody":{"description":"Content to update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"200":{"description":"Updated content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","articles","update"],"x-samchon-controller":"BbsArticlesController"}},"/body/optional/json":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBodyOptional"}}},"required":false},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBodyOptional"}}}}},"x-samchon-accessor":["body","optional","json"],"x-samchon-controller":"BodyOptionalController"}},"/body/optional/plain":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"text/plain":{"schema":{"type":"string"}}},"required":false},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}},"x-samchon-accessor":["body","optional","plain"],"x-samchon-controller":"BodyOptionalController"}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/plain":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"text/plain":{"schema":{"type":"string"}}},"required":true},"responses":{"201":{"description":"","content":{"text/plain":{"schema":{"type":"string"}}}}},"x-samchon-accessor":["plain","send"],"x-samchon-controller":"PlainController"}},"/sellers/authenticate/join":{"post":{"summary":"Join as a seller","description":"Join as a seller.","tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nInformation of yours","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IJoin"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.Post](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nInformation of newly joined seller","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IAuthorized"}}},"x-nestia-encrypted":true}},"x-samchon-accessor":["sellers","authenticate","join"],"x-samchon-controller":"SellerAuthenticateController"}},"/sellers/authenticate/login":{"post":{"summary":"Log-in as a seller","description":"Log-in as a seller.","tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nEmail and password","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.ILogin"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.Post](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nInformation of the seller","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IAuthorized"}}},"x-nestia-encrypted":true}},"x-samchon-accessor":["sellers","authenticate","login"],"x-samchon-controller":"SellerAuthenticateController"}},"/sellers/authenticate/password/change":{"patch":{"summary":"Change password","description":"Change password.","tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nOld and new passwords","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IChangePassword"}}},"required":true,"x-nestia-encrypted":true},"responses":{"200":{"description":"Empty object","content":{"application/json":{}}}},"x-samchon-accessor":["sellers","authenticate","password","change"],"x-samchon-controller":"SellerAuthenticateController"}},"/sellers/authenticate/exit":{"delete":{"summary":"Erase the seller by itself","description":"Erase the seller by itself.","tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["sellers","authenticate","exit"],"x-samchon-controller":"SellerAuthenticateController"}},"/param/{value}/boolean":{"get":{"tags":[],"parameters":[{"name":"value","in":"path","schema":{"type":"boolean"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"boolean"}}}}},"x-samchon-accessor":["param","boolean"],"x-samchon-controller":"TypedParamController"}},"/param/{value}/number":{"get":{"tags":[],"parameters":[{"name":"value","in":"path","schema":{"type":"number"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"number"}}}}},"x-samchon-accessor":["param","number"],"x-samchon-controller":"TypedParamController"}},"/param/{value}/string":{"get":{"tags":[],"parameters":[{"name":"value","in":"path","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}},"x-samchon-accessor":["param","string"],"x-samchon-controller":"TypedParamController"}},"/param/{value}/nullable":{"get":{"tags":[],"parameters":[{"name":"value","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string"}]},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"type":"null"},{"type":"string"}]}}}}},"x-samchon-accessor":["param","nullable"],"x-samchon-controller":"TypedParamController"}},"/param/{value}/literal":{"get":{"tags":[],"parameters":[{"name":"value","in":"path","schema":{"oneOf":[{"const":"A"},{"const":"B"},{"const":"C"}]},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"const":"A"},{"const":"B"},{"const":"C"}]}}}}},"x-samchon-accessor":["param","literal"],"x-samchon-controller":"TypedParamController"}}},"components":{"schemas":{"IPageIBbsArticle.ISummary":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IBbsArticle.ISummary"}},"pagination":{"$ref":"#/components/schemas/IPage.IPagination"}},"required":["data","pagination"]},"IBbsArticle.ISummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"writer":{"type":"string"},"title":{"type":"string","minLength":3,"maxLength":50},"created_at":{"type":"string","format":"date-time"}},"required":["id","section","writer","title","created_at"]},"IPage.IPagination":{"type":"object","properties":{"current":{"type":"integer"},"limit":{"type":"integer"},"records":{"type":"integer"},"pages":{"type":"integer"}},"required":["current","limit","records","pages"],"description":"Page information."},"IPage.IRequest":{"type":"object","properties":{"page":{"oneOf":[{"type":"null"},{"type":"integer"}]},"limit":{"oneOf":[{"type":"null"},{"type":"integer"}]}},"required":[],"description":"Page request data"},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","section","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"IBodyOptional":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"value":{"type":"number"}},"required":["id","value"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"ISeller.IAuthorized":{"type":"object","properties":{"authorization":{"type":"object","properties":{"token":{"type":"string"},"expires_at":{"type":"string"}},"required":["token","expires_at"]},"id":{"type":"number","title":"Primary key","description":"Primary key."},"email":{"type":"string","title":"Email address","description":"Email address."},"name":{"type":"string","title":"Name of the seller","description":"Name of the seller."},"mobile":{"type":"string","title":"Mobile number of the seller","description":"Mobile number of the seller."},"company":{"type":"string","title":"Belonged company name","description":"Belonged company name."},"created_at":{"type":"string","title":"Joined time","description":"Joined time."}},"required":["authorization","id","email","name","mobile","company","created_at"]},"ISeller.IJoin":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"},"name":{"type":"string"},"mobile":{"type":"string"},"company":{"type":"string"}},"required":["email","password","name","mobile","company"]},"ISeller.ILogin":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"}},"required":["email","password"]},"ISeller.IChangePassword":{"type":"object","properties":{"old_password":{"type":"string"},"new_password":{"type":"string"}},"required":["old_password","new_password"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/headers-decompose/swagger.json b/test/features/headers-decompose/swagger.json index 0176b7007..9666eda06 100644 --- a/test/features/headers-decompose/swagger.json +++ b/test/features/headers-decompose/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -95,7 +95,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "headers", + "emplace" + ], + "x-samchon-controller": "HeadersController" }, "post": { "tags": [], @@ -186,7 +191,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "headers", + "store" + ], + "x-samchon-controller": "HeadersController" } }, "/headers/{section}/{id}": { @@ -236,7 +246,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "headers", + "update" + ], + "x-samchon-controller": "HeadersController" } }, "/health": { @@ -250,7 +265,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -268,7 +288,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } } }, diff --git a/test/features/headers/swagger.json b/test/features/headers/swagger.json index 4ff8af021..950d925e6 100644 --- a/test/features/headers/swagger.json +++ b/test/features/headers/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -47,7 +47,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "headers", + "emplace" + ], + "x-samchon-controller": "HeadersController" }, "post": { "summary": "Store a new article", @@ -94,7 +99,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "headers", + "store" + ], + "x-samchon-controller": "HeadersController" } }, "/headers/{section}/{id}": { @@ -150,7 +160,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "headers", + "update" + ], + "x-samchon-controller": "HeadersController" } }, "/health": { @@ -164,7 +179,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -182,7 +202,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } } }, diff --git a/test/features/ignore/swagger.json b/test/features/ignore/swagger.json index e8e479176..7b4b6ce40 100644 --- a/test/features/ignore/swagger.json +++ b/test/features/ignore/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -44,7 +44,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/health": { @@ -58,7 +64,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -76,7 +87,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } } }, diff --git a/test/features/kebab/swagger.json b/test/features/kebab/swagger.json index 6a43b4f0c..4a18cdd25 100644 --- a/test/features/kebab/swagger.json +++ b/test/features/kebab/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/ke-bab-with-dashes": { @@ -57,7 +62,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "ke_bab_with_dashes", + "store" + ], + "x-samchon-controller": "KebabController" } }, "/performance": { @@ -75,7 +85,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } } }, diff --git a/test/features/method/swagger.json b/test/features/method/swagger.json index 20bd59ed4..a7bd8ab59 100644 --- a/test/features/method/swagger.json +++ b/test/features/method/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/method/head": { @@ -37,7 +42,12 @@ "200": { "description": "" } - } + }, + "x-samchon-accessor": [ + "method", + "head" + ], + "x-samchon-controller": "MethodController" } }, "/performance": { @@ -55,7 +65,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } } }, diff --git a/test/features/multipart-form-data-fastify/swagger.json b/test/features/multipart-form-data-fastify/swagger.json index ade72f6b5..84eeb8a10 100644 --- a/test/features/multipart-form-data-fastify/swagger.json +++ b/test/features/multipart-form-data-fastify/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/multipart": { @@ -54,7 +59,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "multipart", + "post" + ], + "x-samchon-controller": "MultipartController" } }, "/performance": { @@ -72,7 +82,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } } }, diff --git a/test/features/multipart-form-data/swagger.json b/test/features/multipart-form-data/swagger.json index ade72f6b5..84eeb8a10 100644 --- a/test/features/multipart-form-data/swagger.json +++ b/test/features/multipart-form-data/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/multipart": { @@ -54,7 +59,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "multipart", + "post" + ], + "x-samchon-controller": "MultipartController" } }, "/performance": { @@ -72,7 +82,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } } }, diff --git a/test/features/no-transform/swagger.json b/test/features/no-transform/swagger.json index 4522780e7..859d28516 100644 --- a/test/features/no-transform/swagger.json +++ b/test/features/no-transform/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -44,7 +49,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/bbs/{section}/articles": { @@ -81,7 +91,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -120,7 +136,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/{section}/articles/{id}": { @@ -156,7 +178,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" }, "put": { "summary": "Update an article", @@ -205,7 +233,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/{section}/articles/{articleId}/comments": { @@ -271,7 +305,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "index" + ], + "x-samchon-controller": "BbsCommentsController" }, "post": { "tags": [], @@ -315,7 +356,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "store" + ], + "x-samchon-controller": "BbsCommentsController" } }, "/bbs/{section}/articles/{articleId}/comments/{id}": { @@ -360,7 +408,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "at" + ], + "x-samchon-controller": "BbsCommentsController" }, "put": { "tags": [], @@ -413,7 +468,14 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "comments", + "update" + ], + "x-samchon-controller": "BbsCommentsController" } } }, diff --git a/test/features/non-equals/swagger.json b/test/features/non-equals/swagger.json index ff541070a..441e15292 100644 --- a/test/features/non-equals/swagger.json +++ b/test/features/non-equals/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/request":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IRequestDto"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IRequestDto"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IRequestDto":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"}},"required":["a","b"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/request":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IRequestDto"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IRequestDto"}}}}},"x-samchon-accessor":["request"],"x-samchon-controller":"RequestController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IRequestDto":{"type":"object","properties":{"a":{"type":"string"},"b":{"type":"string"}},"required":["a","b"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/openapi_v2/swagger.json b/test/features/openapi_v2/swagger.json index f8fd92737..a31d9604c 100644 --- a/test/features/openapi_v2/swagger.json +++ b/test/features/openapi_v2/swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -401,7 +401,12 @@ "description": "", "schema": {} } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -415,7 +420,12 @@ "$ref": "#/definitions/IPerformance" } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/bbs/{section}/articles": { @@ -447,7 +457,13 @@ "$ref": "#/definitions/IPageIBbsArticle.ISummary" } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -477,7 +493,13 @@ "$ref": "#/definitions/IBbsArticle" } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/{section}/articles/{id}": { @@ -503,7 +525,13 @@ "$ref": "#/definitions/IBbsArticle" } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" }, "put": { "summary": "Update an article", @@ -540,7 +568,13 @@ "$ref": "#/definitions/IBbsArticle" } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/{section}/articles/{articleId}/comments": { @@ -578,7 +612,13 @@ "$ref": "#/definitions/IPageIBbsComment" } } - } + }, + "x-samchon-accessor": [ + "articles", + "comments", + "index" + ], + "x-samchon-controller": "BbsCommentsController" }, "post": { "tags": [], @@ -610,7 +650,13 @@ "$ref": "#/definitions/IBbsComment" } } - } + }, + "x-samchon-accessor": [ + "articles", + "comments", + "store" + ], + "x-samchon-controller": "BbsCommentsController" } }, "/{section}/articles/{articleId}/comments/{id}": { @@ -642,7 +688,13 @@ "$ref": "#/definitions/IBbsComment" } } - } + }, + "x-samchon-accessor": [ + "articles", + "comments", + "at" + ], + "x-samchon-controller": "BbsCommentsController" }, "put": { "tags": [], @@ -680,7 +732,13 @@ "$ref": "#/definitions/IBbsComment" } } - } + }, + "x-samchon-accessor": [ + "articles", + "comments", + "update" + ], + "x-samchon-controller": "BbsCommentsController" } } }, diff --git a/test/features/openapi_v3/swagger.json b/test/features/openapi_v3/swagger.json index f48f672cf..a819cfc68 100644 --- a/test/features/openapi_v3/swagger.json +++ b/test/features/openapi_v3/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -409,7 +409,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -427,7 +432,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/bbs/{section}/articles": { @@ -472,7 +482,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "index" + ], + "x-samchon-controller": "BbsArticlesController" }, "post": { "summary": "Store a new article", @@ -511,7 +527,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/{section}/articles/{id}": { @@ -547,7 +569,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "at" + ], + "x-samchon-controller": "BbsArticlesController" }, "put": { "summary": "Update an article", @@ -596,7 +624,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/{section}/articles/{articleId}/comments": { @@ -650,7 +684,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "articles", + "comments", + "index" + ], + "x-samchon-controller": "BbsCommentsController" }, "post": { "tags": [], @@ -694,7 +734,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "articles", + "comments", + "store" + ], + "x-samchon-controller": "BbsCommentsController" } }, "/{section}/articles/{articleId}/comments/{id}": { @@ -739,7 +785,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "articles", + "comments", + "at" + ], + "x-samchon-controller": "BbsCommentsController" }, "put": { "tags": [], @@ -792,7 +844,13 @@ } } } - } + }, + "x-samchon-accessor": [ + "articles", + "comments", + "update" + ], + "x-samchon-controller": "BbsCommentsController" } } }, diff --git a/test/features/operationId/swagger.json b/test/features/operationId/swagger.json index 8d0dff437..4555a180c 100644 --- a/test/features/operationId/swagger.json +++ b/test/features/operationId/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -27,7 +27,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/operationId/custom": { @@ -42,7 +47,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "operationId", + "custom" + ], + "x-samchon-controller": "OperationIdController" } }, "/performance": { @@ -61,7 +71,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } } }, diff --git a/test/features/param-validate/swagger.json b/test/features/param-validate/swagger.json index 8673bf981..2dad9a7f5 100644 --- a/test/features/param-validate/swagger.json +++ b/test/features/param-validate/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -44,7 +49,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/param/{value}/composite/{value2}": { @@ -85,7 +95,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "composite" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/boolean": { @@ -116,7 +131,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "boolean" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/number": { @@ -145,7 +165,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "number" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/bigint": { @@ -174,7 +199,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "bigint" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/string": { @@ -203,7 +233,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "string" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/nullable": { @@ -244,7 +279,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "nullable" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/literal": { @@ -291,7 +331,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "literal" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/uuid": { @@ -319,7 +364,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "uuid" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/date": { @@ -347,7 +397,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "date" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/uuid_nullable": { @@ -389,7 +444,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "uuid_nullable" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/date_nullable": { @@ -431,7 +491,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "date_nullable" + ], + "x-samchon-controller": "TypedParamController" } } }, diff --git a/test/features/param/swagger.json b/test/features/param/swagger.json index 8673bf981..2dad9a7f5 100644 --- a/test/features/param/swagger.json +++ b/test/features/param/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -26,7 +26,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -44,7 +49,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } }, "/param/{value}/composite/{value2}": { @@ -85,7 +95,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "composite" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/boolean": { @@ -116,7 +131,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "boolean" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/number": { @@ -145,7 +165,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "number" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/bigint": { @@ -174,7 +199,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "bigint" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/string": { @@ -203,7 +233,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "string" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/nullable": { @@ -244,7 +279,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "nullable" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/literal": { @@ -291,7 +331,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "literal" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/uuid": { @@ -319,7 +364,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "uuid" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/date": { @@ -347,7 +397,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "date" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/uuid_nullable": { @@ -389,7 +444,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "uuid_nullable" + ], + "x-samchon-controller": "TypedParamController" } }, "/param/{value}/date_nullable": { @@ -431,7 +491,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "param", + "date_nullable" + ], + "x-samchon-controller": "TypedParamController" } } }, diff --git a/test/features/plain/swagger.json b/test/features/plain/swagger.json index e5b29a1fa..7f200429c 100644 --- a/test/features/plain/swagger.json +++ b/test/features/plain/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/plain/string":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"text/plain":{"schema":{"type":"string"}}},"required":true},"responses":{"201":{"description":"","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/plain/template":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"text/plain":{"schema":{"type":"string","pattern":"^((something_[+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?_interesting_(.*)_is_not_false_it\\?)|(something_[+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?_interesting_(.*)_is_not_true_it\\?))$"}}},"required":true},"responses":{"201":{"description":"","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/plain/constant":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"text/plain":{"schema":{"oneOf":[{"const":"A"},{"const":"B"},{"const":"C"}]}}},"required":true},"responses":{"201":{"description":"","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/plain/string":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"text/plain":{"schema":{"type":"string"}}},"required":true},"responses":{"201":{"description":"","content":{"text/plain":{"schema":{"type":"string"}}}}},"x-samchon-accessor":["plain","string"],"x-samchon-controller":"PlainController"}},"/plain/template":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"text/plain":{"schema":{"type":"string","pattern":"^((something_[+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?_interesting_(.*)_is_not_false_it\\?)|(something_[+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?_interesting_(.*)_is_not_true_it\\?))$"}}},"required":true},"responses":{"201":{"description":"","content":{"text/plain":{"schema":{"type":"string"}}}}},"x-samchon-accessor":["plain","template"],"x-samchon-controller":"PlainController"}},"/plain/constant":{"post":{"tags":[],"parameters":[],"requestBody":{"content":{"text/plain":{"schema":{"oneOf":[{"const":"A"},{"const":"B"},{"const":"C"}]}}},"required":true},"responses":{"201":{"description":"","content":{"text/plain":{"schema":{"type":"string"}}}}},"x-samchon-accessor":["plain","constant"],"x-samchon-controller":"PlainController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/propagate/swagger.json b/test/features/propagate/swagger.json index 4147a6bed..ea09599f8 100644 --- a/test/features/propagate/swagger.json +++ b/test/features/propagate/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/members/login":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IMember.ILogin"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.Post](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IMember"}}},"x-nestia-encrypted":true},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IForbidden"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/INotFound"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IForbidden.IExpired"}}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}}},"components":{"schemas":{"IMember":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"email":{"type":"string","format":"email"},"nickname":{"type":"string"},"created_at":{"type":"string","format":"date-time"}},"required":["id","email","nickname","created_at"]},"IMember.ILogin":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"}},"required":["email","password"]},"IForbidden":{"type":"object","properties":{"status":{"const":403},"message":{"type":"string"}},"required":["status","message"]},"INotFound":{"type":"object","properties":{"status":{"const":404},"message":{"type":"string"}},"required":["status","message"]},"IForbidden.IExpired":{"type":"object","properties":{"status":{"const":422},"message":{"type":"string"}},"required":["status","message"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/members/login":{"post":{"tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IMember.ILogin"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.Post](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/IMember"}}},"x-nestia-encrypted":true},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IForbidden"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/INotFound"}}}},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IForbidden.IExpired"}}}}},"x-samchon-accessor":["members","login"],"x-samchon-controller":"MembersController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}}},"components":{"schemas":{"IMember":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"email":{"type":"string","format":"email"},"nickname":{"type":"string"},"created_at":{"type":"string","format":"date-time"}},"required":["id","email","nickname","created_at"]},"IMember.ILogin":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"}},"required":["email","password"]},"IForbidden":{"type":"object","properties":{"status":{"const":403},"message":{"type":"string"}},"required":["status","message"]},"INotFound":{"type":"object","properties":{"status":{"const":404},"message":{"type":"string"}},"required":["status","message"]},"IForbidden.IExpired":{"type":"object","properties":{"status":{"const":422},"message":{"type":"string"}},"required":["status","message"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/query-decompose-false/swagger.json b/test/features/query-decompose-false/swagger.json index ff3a715eb..7161d94c4 100644 --- a/test/features/query-decompose-false/swagger.json +++ b/test/features/query-decompose-false/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -39,7 +39,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "query", + "typed" + ], + "x-samchon-controller": "QueryController" } }, "/query/nest": { @@ -66,7 +71,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "query", + "nest" + ], + "x-samchon-controller": "QueryController" } }, "/query/individual": { @@ -93,7 +103,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "query", + "individual" + ], + "x-samchon-controller": "QueryController" } }, "/query/composite": { @@ -128,7 +143,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "query", + "composite" + ], + "x-samchon-controller": "QueryController" } } }, diff --git a/test/features/query-decompose-true/swagger.json b/test/features/query-decompose-true/swagger.json index 9eda033fc..3035c619a 100644 --- a/test/features/query-decompose-true/swagger.json +++ b/test/features/query-decompose-true/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/query/typed":{"get":{"tags":[],"parameters":[{"name":"limit","in":"query","schema":{"type":"number"},"required":false},{"name":"enforce","in":"query","schema":{"type":"boolean"},"required":true},{"name":"values","in":"query","schema":{"type":"array","items":{"type":"string"}},"required":true},{"name":"atomic","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"string"}]},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IQuery"}}}}}}},"/query/nest":{"get":{"tags":[],"parameters":[{"name":"limit","in":"query","schema":{"type":"string","pattern":"^([+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)$"},"required":false},{"name":"enforce","in":"query","schema":{"oneOf":[{"const":"false"},{"const":"true"}]},"required":true},{"name":"atomic","in":"query","schema":{"type":"string"},"required":true},{"name":"values","in":"query","schema":{"type":"array","items":{"type":"string"}},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IQuery"}}}}}}},"/query/individual":{"get":{"tags":[],"parameters":[{"name":"id","in":"query","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}}}},"/query/composite":{"get":{"tags":[],"parameters":[{"name":"atomic","in":"query","schema":{"type":"string"},"required":true},{"name":"values","in":"query","schema":{"type":"array","items":{"type":"string"}},"required":true},{"name":"limit","in":"query","schema":{"type":"number"},"required":false},{"name":"enforce","in":"query","schema":{"type":"boolean"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IQuery"}}}}}}}},"components":{"schemas":{"IQuery":{"type":"object","properties":{"limit":{"type":"number"},"enforce":{"type":"boolean"},"values":{"type":"array","items":{"type":"string"}},"atomic":{"oneOf":[{"type":"null"},{"type":"string"}]}},"required":["enforce","values","atomic"]},"INestQuery":{"type":"object","properties":{"limit":{"type":"string","pattern":"^([+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)$"},"enforce":{"oneOf":[{"const":"false"},{"const":"true"}]},"atomic":{"type":"string"},"values":{"type":"array","items":{"type":"string"}}},"required":["enforce","atomic","values"]},"OmitIQueryatomic":{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"}},"limit":{"type":"number"},"enforce":{"type":"boolean"}},"required":["values","enforce"],"description":"Construct a type with the properties of T except for those in type K."}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/query/typed":{"get":{"tags":[],"parameters":[{"name":"limit","in":"query","schema":{"type":"number"},"required":false},{"name":"enforce","in":"query","schema":{"type":"boolean"},"required":true},{"name":"values","in":"query","schema":{"type":"array","items":{"type":"string"}},"required":true},{"name":"atomic","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"string"}]},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IQuery"}}}}},"x-samchon-accessor":["query","typed"],"x-samchon-controller":"QueryController"}},"/query/nest":{"get":{"tags":[],"parameters":[{"name":"limit","in":"query","schema":{"type":"string","pattern":"^([+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)$"},"required":false},{"name":"enforce","in":"query","schema":{"oneOf":[{"const":"false"},{"const":"true"}]},"required":true},{"name":"atomic","in":"query","schema":{"type":"string"},"required":true},{"name":"values","in":"query","schema":{"type":"array","items":{"type":"string"}},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IQuery"}}}}},"x-samchon-accessor":["query","nest"],"x-samchon-controller":"QueryController"}},"/query/individual":{"get":{"tags":[],"parameters":[{"name":"id","in":"query","schema":{"type":"string"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}},"x-samchon-accessor":["query","individual"],"x-samchon-controller":"QueryController"}},"/query/composite":{"get":{"tags":[],"parameters":[{"name":"atomic","in":"query","schema":{"type":"string"},"required":true},{"name":"values","in":"query","schema":{"type":"array","items":{"type":"string"}},"required":true},{"name":"limit","in":"query","schema":{"type":"number"},"required":false},{"name":"enforce","in":"query","schema":{"type":"boolean"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IQuery"}}}}},"x-samchon-accessor":["query","composite"],"x-samchon-controller":"QueryController"}}},"components":{"schemas":{"IQuery":{"type":"object","properties":{"limit":{"type":"number"},"enforce":{"type":"boolean"},"values":{"type":"array","items":{"type":"string"}},"atomic":{"oneOf":[{"type":"null"},{"type":"string"}]}},"required":["enforce","values","atomic"]},"INestQuery":{"type":"object","properties":{"limit":{"type":"string","pattern":"^([+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)$"},"enforce":{"oneOf":[{"const":"false"},{"const":"true"}]},"atomic":{"type":"string"},"values":{"type":"array","items":{"type":"string"}}},"required":["enforce","atomic","values"]},"OmitIQueryatomic":{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"}},"limit":{"type":"number"},"enforce":{"type":"boolean"}},"required":["values","enforce"],"description":"Construct a type with the properties of T except for those in type K."}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/query/swagger.json b/test/features/query/swagger.json index 6fec078d2..9b3873065 100644 --- a/test/features/query/swagger.json +++ b/test/features/query/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -73,7 +73,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "query", + "typed" + ], + "x-samchon-controller": "QueryController" } }, "/query/nest": { @@ -135,7 +140,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "query", + "nest" + ], + "x-samchon-controller": "QueryController" } }, "/query/individual": { @@ -162,7 +172,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "query", + "individual" + ], + "x-samchon-controller": "QueryController" } }, "/query/composite": { @@ -216,7 +231,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "query", + "composite" + ], + "x-samchon-controller": "QueryController" } }, "/query/body": { @@ -244,7 +264,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "query", + "body" + ], + "x-samchon-controller": "QueryController" } }, "/query/big": { @@ -272,7 +297,12 @@ } } } - } + }, + "x-samchon-accessor": [ + "query", + "big" + ], + "x-samchon-controller": "QueryController" } } }, diff --git a/test/features/route-manual-assert/swagger.json b/test/features/route-manual-assert/swagger.json index 8a215c9c7..239ddd7df 100644 --- a/test/features/route-manual-assert/swagger.json +++ b/test/features/route-manual-assert/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/route/random":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/route/random":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["route","random"],"x-samchon-controller":"TypedRouteController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/route-manual-is/swagger.json b/test/features/route-manual-is/swagger.json index 8a215c9c7..239ddd7df 100644 --- a/test/features/route-manual-is/swagger.json +++ b/test/features/route-manual-is/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/route/random":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/route/random":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["route","random"],"x-samchon-controller":"TypedRouteController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/route-manual-stringify/swagger.json b/test/features/route-manual-stringify/swagger.json index 8a215c9c7..41c70f365 100644 --- a/test/features/route-manual-stringify/swagger.json +++ b/test/features/route-manual-stringify/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/route/random":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/route/random":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["route","random"],"x-samchon-controller":"ManualRouteController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/route-manual-validate-log-encrypted/swagger.json b/test/features/route-manual-validate-log-encrypted/swagger.json index ea18a689e..12af93b80 100644 --- a/test/features/route-manual-validate-log-encrypted/swagger.json +++ b/test/features/route-manual-validate-log-encrypted/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/articles/{id}":{"get":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}}},"components":{"schemas":{"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"body":{"type":"string"},"thumbnail":{"oneOf":[{"type":"null"},{"type":"string","format":"uri","contentMediaType":"image/*"}]},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","thumbnail","created_at"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/articles/{id}":{"get":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","articles","at"],"x-samchon-controller":"BbsArticlesController"}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}}},"components":{"schemas":{"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"body":{"type":"string"},"thumbnail":{"oneOf":[{"type":"null"},{"type":"string","format":"uri","contentMediaType":"image/*"}]},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","thumbnail","created_at"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/route-manual-validate-log-fastify/swagger.json b/test/features/route-manual-validate-log-fastify/swagger.json index ea18a689e..12af93b80 100644 --- a/test/features/route-manual-validate-log-fastify/swagger.json +++ b/test/features/route-manual-validate-log-fastify/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/articles/{id}":{"get":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}}},"components":{"schemas":{"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"body":{"type":"string"},"thumbnail":{"oneOf":[{"type":"null"},{"type":"string","format":"uri","contentMediaType":"image/*"}]},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","thumbnail","created_at"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/articles/{id}":{"get":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","articles","at"],"x-samchon-controller":"BbsArticlesController"}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}}},"components":{"schemas":{"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"body":{"type":"string"},"thumbnail":{"oneOf":[{"type":"null"},{"type":"string","format":"uri","contentMediaType":"image/*"}]},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","thumbnail","created_at"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/route-manual-validate-log/swagger.json b/test/features/route-manual-validate-log/swagger.json index ea18a689e..12af93b80 100644 --- a/test/features/route-manual-validate-log/swagger.json +++ b/test/features/route-manual-validate-log/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/articles/{id}":{"get":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}}},"components":{"schemas":{"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"body":{"type":"string"},"thumbnail":{"oneOf":[{"type":"null"},{"type":"string","format":"uri","contentMediaType":"image/*"}]},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","thumbnail","created_at"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/articles/{id}":{"get":{"tags":[],"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","articles","at"],"x-samchon-controller":"BbsArticlesController"}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}}},"components":{"schemas":{"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"body":{"type":"string"},"thumbnail":{"oneOf":[{"type":"null"},{"type":"string","format":"uri","contentMediaType":"image/*"}]},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","thumbnail","created_at"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/route-manual-validate/swagger.json b/test/features/route-manual-validate/swagger.json index 8a215c9c7..41c70f365 100644 --- a/test/features/route-manual-validate/swagger.json +++ b/test/features/route-manual-validate/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/route/random":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/route/random":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["route","random"],"x-samchon-controller":"ManualRouteController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/route/swagger.json b/test/features/route/swagger.json index 8a215c9c7..239ddd7df 100644 --- a/test/features/route/swagger.json +++ b/test/features/route/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/route/random":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/route/random":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["route","random"],"x-samchon-controller":"TypedRouteController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/security/swagger.json b/test/features/security/swagger.json index 37d488b33..25320a764 100644 --- a/test/features/security/swagger.json +++ b/test/features/security/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -35,7 +35,11 @@ { "basic": [] } - ] + ], + "x-samchon-accessor": [ + "basic" + ], + "x-samchon-controller": "SecurityController" } }, "/basic_by_comment": { @@ -58,7 +62,11 @@ { "basic": [] } - ] + ], + "x-samchon-accessor": [ + "basic_by_comment" + ], + "x-samchon-controller": "SecurityController" } }, "/bearer": { @@ -81,7 +89,11 @@ { "bearer": [] } - ] + ], + "x-samchon-accessor": [ + "bearer" + ], + "x-samchon-controller": "SecurityController" } }, "/bearer_by_comment": { @@ -104,7 +116,11 @@ { "bearer": [] } - ] + ], + "x-samchon-accessor": [ + "bearer_by_comment" + ], + "x-samchon-controller": "SecurityController" } }, "/oauth2": { @@ -130,7 +146,11 @@ "read:pets" ] } - ] + ], + "x-samchon-accessor": [ + "oauth2" + ], + "x-samchon-controller": "SecurityController" } }, "/oauth2_by_comment": { @@ -156,7 +176,11 @@ "read:pets" ] } - ] + ], + "x-samchon-accessor": [ + "oauth2_by_comment" + ], + "x-samchon-controller": "SecurityController" } }, "/optional_by_comment": { @@ -180,7 +204,11 @@ { "bearer": [] } - ] + ], + "x-samchon-accessor": [ + "optional_by_comment" + ], + "x-samchon-controller": "SecurityController" } }, "/security": { @@ -198,7 +226,11 @@ } } } - } + }, + "x-samchon-accessor": [ + "security" + ], + "x-samchon-controller": "SecurityController" } } }, diff --git a/test/features/simulate/swagger.json b/test/features/simulate/swagger.json index fca28fdcb..102e734b4 100644 --- a/test/features/simulate/swagger.json +++ b/test/features/simulate/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/{section}/articles":{"patch":{"summary":"Paginate entire articles","description":"Paginate entire articles.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string"}]},"required":true,"description":" Section code"}],"requestBody":{"description":"Page request info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPage.IRequest"}}},"required":true},"responses":{"200":{"description":"Paginated articles with summarized info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPageIBbsArticle.ISummary"}}}}}},"get":{"summary":"Paginate entire articles (query ver.)","description":"Paginate entire articles (query ver.).","tags":[],"parameters":[{"name":"section","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string"}]},"required":true,"description":" Section code"},{"name":"page","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"integer"}]},"required":false},{"name":"limit","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"integer"}]},"required":false}],"responses":{"200":{"description":"Paginated articles with summarized info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPageIBbsArticle.ISummary"}}}}}},"post":{"summary":"Store a new article","description":"Store a new article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"}],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/bbs/{section}/articles/{id}":{"get":{"summary":"Read an article","description":"Read an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string","format":"uuid"}]},"required":true,"description":" Target article ID"}],"responses":{"200":{"description":"Detailed article info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}},"put":{"summary":"Update an article","description":"Update an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true,"description":" Target article ID"}],"requestBody":{"description":"Content to update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"200":{"description":"Updated content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/bbs/{section}/articles/first/{date}":{"get":{"summary":"Get first article of a day","description":"Get first article of a day.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"date","in":"path","schema":{"type":"string","format":"date"},"required":true,"description":" Target data"}],"responses":{"200":{"description":"The first article info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/sellers/authenticate/join":{"post":{"summary":"Join as a seller","description":"Join as a seller.","tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nInformation of yours","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IJoin"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.Post](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nInformation of newly joined seller","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IAuthorized"}}},"x-nestia-encrypted":true}}}},"/sellers/authenticate/login":{"post":{"summary":"Log-in as a seller","description":"Log-in as a seller.","tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nEmail and password","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.ILogin"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.Post](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nInformation of the seller","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IAuthorized"}}},"x-nestia-encrypted":true}}}},"/sellers/authenticate/password/change":{"patch":{"summary":"Change password","description":"Change password.","tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nOld and new passwords","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IChangePassword"}}},"required":true,"x-nestia-encrypted":true},"responses":{"200":{"description":"Empty object","content":{"application/json":{}}}}}},"/sellers/authenticate/exit":{"delete":{"summary":"Erase the seller by itself","description":"Erase the seller by itself.","tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}}},"components":{"schemas":{"IPageIBbsArticle.ISummary":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IBbsArticle.ISummary"}},"pagination":{"$ref":"#/components/schemas/IPage.IPagination"}},"required":["data","pagination"]},"IBbsArticle.ISummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"writer":{"type":"string"},"title":{"type":"string","minLength":3,"maxLength":50},"created_at":{"type":"string","format":"date-time"}},"required":["id","section","writer","title","created_at"]},"IPage.IPagination":{"type":"object","properties":{"current":{"type":"integer"},"limit":{"type":"integer"},"records":{"type":"integer"},"pages":{"type":"integer"}},"required":["current","limit","records","pages"],"description":"Page information."},"IPage.IRequest":{"type":"object","properties":{"page":{"oneOf":[{"type":"null"},{"type":"integer"}]},"limit":{"oneOf":[{"type":"null"},{"type":"integer"}]}},"required":[],"description":"Page request data"},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","section","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"ISeller.IAuthorized":{"type":"object","properties":{"authorization":{"type":"object","properties":{"token":{"type":"string"},"expires_at":{"type":"string"}},"required":["token","expires_at"]},"id":{"type":"number","title":"Primary key","description":"Primary key."},"email":{"type":"string","title":"Email address","description":"Email address."},"name":{"type":"string","title":"Name of the seller","description":"Name of the seller."},"mobile":{"type":"string","title":"Mobile number of the seller","description":"Mobile number of the seller."},"company":{"type":"string","title":"Belonged company name","description":"Belonged company name."},"created_at":{"type":"string","title":"Joined time","description":"Joined time."}},"required":["authorization","id","email","name","mobile","company","created_at"]},"ISeller.IJoin":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"},"name":{"type":"string"},"mobile":{"type":"string"},"company":{"type":"string"}},"required":["email","password","name","mobile","company"]},"ISeller.ILogin":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"}},"required":["email","password"]},"ISeller.IChangePassword":{"type":"object","properties":{"old_password":{"type":"string"},"new_password":{"type":"string"}},"required":["old_password","new_password"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/{section}/articles":{"patch":{"summary":"Paginate entire articles","description":"Paginate entire articles.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string"}]},"required":true,"description":" Section code"}],"requestBody":{"description":"Page request info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPage.IRequest"}}},"required":true},"responses":{"200":{"description":"Paginated articles with summarized info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPageIBbsArticle.ISummary"}}}}},"x-samchon-accessor":["bbs","articles","index"],"x-samchon-controller":"BbsArticlesController"},"get":{"summary":"Paginate entire articles (query ver.)","description":"Paginate entire articles (query ver.).","tags":[],"parameters":[{"name":"section","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string"}]},"required":true,"description":" Section code"},{"name":"page","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"integer"}]},"required":false},{"name":"limit","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"integer"}]},"required":false}],"responses":{"200":{"description":"Paginated articles with summarized info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPageIBbsArticle.ISummary"}}}}},"x-samchon-accessor":["bbs","articles","query"],"x-samchon-controller":"BbsArticlesController"},"post":{"summary":"Store a new article","description":"Store a new article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"}],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","articles","store"],"x-samchon-controller":"BbsArticlesController"}},"/bbs/{section}/articles/{id}":{"get":{"summary":"Read an article","description":"Read an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string","format":"uuid"}]},"required":true,"description":" Target article ID"}],"responses":{"200":{"description":"Detailed article info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","articles","at"],"x-samchon-controller":"BbsArticlesController"},"put":{"summary":"Update an article","description":"Update an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true,"description":" Target article ID"}],"requestBody":{"description":"Content to update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"200":{"description":"Updated content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","articles","update"],"x-samchon-controller":"BbsArticlesController"}},"/bbs/{section}/articles/first/{date}":{"get":{"summary":"Get first article of a day","description":"Get first article of a day.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"date","in":"path","schema":{"type":"string","format":"date"},"required":true,"description":" Target data"}],"responses":{"200":{"description":"The first article info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","articles","first"],"x-samchon-controller":"BbsArticlesController"}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/sellers/authenticate/join":{"post":{"summary":"Join as a seller","description":"Join as a seller.","tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nInformation of yours","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IJoin"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.Post](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nInformation of newly joined seller","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IAuthorized"}}},"x-nestia-encrypted":true}},"x-samchon-accessor":["sellers","authenticate","join"],"x-samchon-controller":"SellerAuthenticateController"}},"/sellers/authenticate/login":{"post":{"summary":"Log-in as a seller","description":"Log-in as a seller.","tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nEmail and password","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.ILogin"}}},"required":true,"x-nestia-encrypted":true},"responses":{"201":{"description":"## Warning\n\nResponse data have been encrypted.\n\nThe response body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedRoute.Post](https://github.com/samchon/@nestia/core#encryptedroute) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nInformation of the seller","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IAuthorized"}}},"x-nestia-encrypted":true}},"x-samchon-accessor":["sellers","authenticate","login"],"x-samchon-controller":"SellerAuthenticateController"}},"/sellers/authenticate/password/change":{"patch":{"summary":"Change password","description":"Change password.","tags":[],"parameters":[],"requestBody":{"description":"## Warning\n\nRequest body must be encrypted.\n\nThe request body data would be encrypted as \"AES-128(256) / CBC mode / PKCS#5 Padding / Base64 Encoding\", through the [EncryptedBody](https://github.com/samchon/@nestia/core#encryptedbody) component.\n\nTherefore, just utilize this swagger editor only for referencing. If you need to call the real API, using [SDK](https://github.com/samchon/nestia#software-development-kit) would be much better.\n\n----------------\n\nOld and new passwords","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/ISeller.IChangePassword"}}},"required":true,"x-nestia-encrypted":true},"responses":{"200":{"description":"Empty object","content":{"application/json":{}}}},"x-samchon-accessor":["sellers","authenticate","password","change"],"x-samchon-controller":"SellerAuthenticateController"}},"/sellers/authenticate/exit":{"delete":{"summary":"Erase the seller by itself","description":"Erase the seller by itself.","tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["sellers","authenticate","exit"],"x-samchon-controller":"SellerAuthenticateController"}}},"components":{"schemas":{"IPageIBbsArticle.ISummary":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IBbsArticle.ISummary"}},"pagination":{"$ref":"#/components/schemas/IPage.IPagination"}},"required":["data","pagination"]},"IBbsArticle.ISummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"writer":{"type":"string"},"title":{"type":"string","minLength":3,"maxLength":50},"created_at":{"type":"string","format":"date-time"}},"required":["id","section","writer","title","created_at"]},"IPage.IPagination":{"type":"object","properties":{"current":{"type":"integer"},"limit":{"type":"integer"},"records":{"type":"integer"},"pages":{"type":"integer"}},"required":["current","limit","records","pages"],"description":"Page information."},"IPage.IRequest":{"type":"object","properties":{"page":{"oneOf":[{"type":"null"},{"type":"integer"}]},"limit":{"oneOf":[{"type":"null"},{"type":"integer"}]}},"required":[],"description":"Page request data"},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","section","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"ISeller.IAuthorized":{"type":"object","properties":{"authorization":{"type":"object","properties":{"token":{"type":"string"},"expires_at":{"type":"string"}},"required":["token","expires_at"]},"id":{"type":"number","title":"Primary key","description":"Primary key."},"email":{"type":"string","title":"Email address","description":"Email address."},"name":{"type":"string","title":"Name of the seller","description":"Name of the seller."},"mobile":{"type":"string","title":"Mobile number of the seller","description":"Mobile number of the seller."},"company":{"type":"string","title":"Belonged company name","description":"Belonged company name."},"created_at":{"type":"string","title":"Joined time","description":"Joined time."}},"required":["authorization","id","email","name","mobile","company","created_at"]},"ISeller.IJoin":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"},"name":{"type":"string"},"mobile":{"type":"string"},"company":{"type":"string"}},"required":["email","password","name","mobile","company"]},"ISeller.ILogin":{"type":"object","properties":{"email":{"type":"string"},"password":{"type":"string"}},"required":["email","password"]},"ISeller.IChangePassword":{"type":"object","properties":{"old_password":{"type":"string"},"new_password":{"type":"string"}},"required":["old_password","new_password"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/status/swagger.json b/test/features/status/swagger.json index ab76414a4..59e709111 100644 --- a/test/features/status/swagger.json +++ b/test/features/status/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}},"/status/random":{"get":{"tags":[],"parameters":[],"responses":{"300":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}},"/status/random":{"get":{"tags":[],"parameters":[],"responses":{"300":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["status","random"],"x-samchon-controller":"StatusController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}},"created_at":{"type":"string","format":"date-time"}},"required":["id","title","body","files","created_at"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/swagger-customizer/swagger.json b/test/features/swagger-customizer/swagger.json index f7327e3e9..9233fc724 100644 --- a/test/features/swagger-customizer/swagger.json +++ b/test/features/swagger-customizer/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -49,6 +49,11 @@ } } }, + "x-samchon-accessor": [ + "custom", + "customize" + ], + "x-samchon-controller": "CustomController", "x-selector": { "method": "get", "path": "/custom/{id}/normal" @@ -82,6 +87,11 @@ } } }, + "x-samchon-accessor": [ + "custom", + "normal" + ], + "x-samchon-controller": "CustomController", "x-special-symbol": "Something Normal" } } diff --git a/test/features/swagger-example/swagger.json b/test/features/swagger-example/swagger.json index 3064860f5..5bf379c93 100644 --- a/test/features/swagger-example/swagger.json +++ b/test/features/swagger-example/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -29,82 +29,87 @@ "$ref": "#/components/schemas/IBbsArticle.ICreate" }, "example": { - "title": "prnybqxguabgdwzep", - "body": "grzevqyehsfjdvszhswzpddjfxkterwdrgncyqburtrfzbabpvfkxxqtjfxwklddaqenysqqhhrbnqpoaxc", + "title": "grgrelygxieysvdrlmyqhfvfgwutxmuahgwk", + "body": "avyo", "files": [ { - "name": "fqdhlmxyxqvemihiybiqjwzurkzergsoqfdeyholulfbhzsyzhthmcmhoxklzmqntaedowrhhysiuzgrohegjwcrbcphylprmmlvqpmgzwcpnedlsvmsnasozcnirawnjhsbhdkdmwdbuvzvmawxkiadqbrq", - "extension": "y", - "url": "https://tnukmkaydz.rdq" + "name": null, + "extension": null, + "url": "https://joxozxeahc.icf" }, { "name": null, - "extension": "wlmk", - "url": "https://lhzxvumpox.ntg" + "extension": null, + "url": "https://omnefrbdij.fhh" + }, + { + "name": "cyafwgoasyfveqolifytdaqehwibdwqqplltgspkuqxzaubjeenbegkwpomftfukpjvvjehsiefzwnugpswcoxkbbrkvsdavuhyedlfdsrkaednxdvlcumaqeoefwhttdzqylxlewdc", + "extension": "mny", + "url": "https://otlenmdtvd.rym" } ] }, "examples": { "z": { - "title": "inzobsbsbepdjbdoqrcnhskkgclxzqhkmblempyajmakjbru", - "body": "ih", + "title": "ytpzimqlgocrzy", + "body": "letciyhdlvfuggjjoeyuwbgrffanloesjbfqycyblc", "files": [ { - "name": null, - "extension": "m", - "url": "https://xtrtlzjybw.eum" + "name": "hqvzjgphbtyahlowbclhkstpcewtujxxzxgqjdtbwaclsoooqjzctjvfwhzamzctgpnwoghmalfxltpyzkiaimszouhpmwxvqdczhdvnomfwtjgpckibqpewhykxuthfqkulviwqvxindobuysgxfhuuswycytoictxngcxfkcwfdulhgogqutmwnviypugaarmuxeztdqyiziqvxknxlih", + "extension": "mzlpaz", + "url": "https://iemxzwfvll.hup" }, { - "name": "paicsbtolklfqclyyjvbofuqnkxaxeykcmcrtrgfdxtqmbulvgavqjqmvvhhvcwsyucqunequmjikxhdaefzbrloxnseocaiegctgpkptsdashsquttnwlgpwtpmqevxsloszkyivwduuahlgeszdotptctuqpm", - "extension": null, - "url": "https://iixyzgxgon.mzr" + "name": null, + "extension": "azswdg", + "url": "https://auntjkoisr.qgb" } ] }, "y": { - "title": "fbn", - "body": "csdhaatrjhbnjrusscjfyfmpmjytqartpfzjwturgqxuenmbmgldaxviqi", + "title": "voefiopitfgmtqcfncgorcrnlznrkhtzbgtjdccxnbhonl", + "body": "qoebjvtumpxmgybnpmvwrhzsssltkikyfzkpdyaqsmrbqbtfprajlumurwvxnzfkurebse", "files": [ { - "name": "itkehwofsyxqrqdpvxzjrweetuableyrhs", - "extension": "jx", - "url": "https://xwbovgbril.xdl" + "name": "gbbrxzyvyagdyzlsassntflizjsqixiwbagxisgbrkwjtumsgvfhuwgtajkkwtxeiqudmsnzqoamrkjxeqzfilrnpsrboajylvyrrvuiziclpnizmuxazuxsugsvgkgfkcqcanglrnavrjnmkhhchojgpkjfddxe", + "extension": "ydwriqfw", + "url": "https://ckoxjsnrdl.udf" }, { "name": null, "extension": null, - "url": "https://wqhhsynfyd.bqe" + "url": "https://gjrranwegb.zuz" }, { - "name": null, - "extension": null, - "url": "https://fdrzgwxbil.lkh" - }, - { - "name": null, + "name": "idljoboutnepouj", "extension": null, - "url": "https://egpjpharfi.xiu" + "url": "https://xonisshkgw.jdh" }, { "name": null, - "extension": "fqztw", - "url": "https://iosjeefgxy.ggg" + "extension": "p", + "url": "https://jmquqbohxe.akf" } ] }, "x": { - "title": "tmr", - "body": "cghmoroaqgizjuyorpyzlefecffjvezqowkqdosddwnfypfpedtmtvsglrcdfcwdpzcrubbumbvwixsl", + "title": "vvpxlxfewwdyuijpi", + "body": "mbcmjhneekqelfmdoiyrmitoqygeirfypdhknbgrstvuwrnnxqgnmphfjrohdf", "files": [ { - "name": "fdhsvoqqbcbvzqnrnqfbmxffkoibodgvdppbbtbqhiqsgloehaumiwhmcxqdobonmgsibhxersuokqjvrkqysmkbovbgxyettxswowwhkjqrfkemwhfdwxphusgcgvkhysnuytwrthbdhtpbbltgcvchenpgsitvzxcjcsxtrevgegjlgwxnskfkzjpwopldiyglepjocwxgjjgdvajkichotyrwxxysbzrvfssjjqutnwfmeoejivasyei", + "name": null, "extension": null, - "url": "https://pasnxkllwu.yam" + "url": "https://qcoedbopdh.vkd" }, { - "name": "mfyuvmmztmu", + "name": null, + "extension": "icuphni", + "url": "https://wehulkqbru.oja" + }, + { + "name": "znnunytfkgiziiptlvvssiikpkosgkghxndjczvtjfevdqkimnqxpgimgbygnypmqgrhufevwqbvrzasrnbwkfrazngsaoruyktrdqdoassyeekgehbcwgtcyzaesyrefzpegqwipzfnikevqaszsqnsxoojgrwxnpsyteyvwcqndosmbfytwcoldaoedyzgvcffeabdcrucwhm", "extension": null, - "url": "https://cyirpylotn.qps" + "url": "https://vplgqmcthu.ffg" } ] } @@ -122,32 +127,48 @@ "$ref": "#/components/schemas/IBbsArticle" }, "example": { - "id": "fc40e38a-8217-4053-ac9f-33f8c9726403", - "created_at": "1972-04-08T04:29:39.660Z", - "title": "ptqs", - "body": "usofbbnrgrtlkpucjztcmnrvppwekifwusuicrclicpg", + "id": "d4dbf704-6467-41ce-9eaf-1b07b2f7ec88", + "created_at": "2023-10-10T16:34:21.551Z", + "title": "wiguxdowlzoahbxikxyx", + "body": "aywvkhqwpcdokynxrurdlrgtrakykbczjjdoqzsomdaauyxzmdjsoqiblhy", "files": [ + { + "name": "dkkipyvgvgccbgbkzlzeymjzucleoydtlqwsotlufocdjmiznmpisoexytrnlwifaavshowovntzxyggfdaqwyx", + "extension": "bgz", + "url": "https://jtqnlxqymn.kkh" + }, + { + "name": "vtyatsgxrdddrvzfxglfvscnrmvdxugticbktnoyldhqhtpbcccebnzlmhtnpcvvniiutisifkcnuenkmlgcdstviayxfxbvmbpdgfxrieznvbleqvpbhvzbqthhnfjykmbraqstnbxhlluwgueeeszhhmevwnfempzrbcsdjdv", + "extension": "xgyejxvj", + "url": "https://qsoiknyvxq.cqg" + }, { "name": null, - "extension": null, - "url": "https://sivmwvnzfl.kfa" + "extension": "fvxts", + "url": "https://emwvbfsnwj.rpw" }, { - "name": "nzqsugvledmyibaarbsizykjbshkmlfgduafpxrcstvcudyroatbcpaoyxoanizwtttnfeyrqaordhiteikrcabmwjkagqwmaaltfdibpebmiffbhrxsfliqjaquzzzqhhsbpcuzqivmriexadpabuhddhvmtuvwwoamzajtavwkukumoojwxltngdtwjejkmguqrcmdlt", - "extension": "rjnkro", - "url": "https://kbvcxflmxm.jjb" + "name": null, + "extension": "tsoxfunz", + "url": "https://tukrozsspr.fdr" }, { "name": null, - "extension": "mqhz", - "url": "https://ykpfwpdwdr.usy" + "extension": "wxaia", + "url": "https://phkcygmxtg.ndi" } ] } } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "create" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/articles/{id}": { @@ -162,7 +183,7 @@ "format": "uuid" }, "required": true, - "example": "7ad8d21f-84f9-4029-8365-0bc0320c9103" + "example": "5657eb2d-0a55-4332-a6e8-4495618650c3" } ], "requestBody": { @@ -172,8 +193,7 @@ "$ref": "#/components/schemas/PartialIBbsArticle.ICreate" }, "example": { - "title": "lodjhdnhjzawozzuvqtzodlvswfohscsbsjyqctjdrceteiprq", - "body": "wfhrvdgffirgzovjfrmpoedihudkcjfjerrnexeal" + "title": "xdldiclwqjhyefkcimjvjqohophnkknjnwtvgn" } } }, @@ -188,75 +208,70 @@ "$ref": "#/components/schemas/IBbsArticle" }, "example": { - "id": "3a8d36d2-4346-4ec3-aa2b-211ac3496134", - "created_at": "1972-08-12T04:09:45.754Z", - "title": "zyirymqxlnrfrgypczrwxsoyuvqlzqfrffpypfwuvfth", - "body": "gnyjdevgjjcenjsfjdlniscqavupdfxwzibaahzszepgobnnegkyr", + "id": "d18f47a3-10a8-4dd7-8705-3ef3fc13ce3a", + "created_at": "1997-09-21T14:33:57.620Z", + "title": "axbkxqietimtyimjtijlmgigqkjqqhcljkjinsa", + "body": "ascfwpvamnlrdptpatxoayxdfolsodtdiiqeuvhzcaskanrgthlkautnouwkfzbregawrlrktgtouajajexxbcanmmgalziqivff", "files": [ { - "name": "wvgxzqccjkmafonpcpebqmcgkayndikqzsnszkuueckgedeknjncssesnudimxwcgbkstvlnjlxdyuhipvodzmztmwgnhpepzzsvgyjshjrdrfpbxkosqqnxiwzbatlwioduoqhpvfvnnvtxxlzdbqzynmmjbpunvwevbmerxcfghibtkqpfjvjtrzsjctdrmipnotehydknoumwxvmvngnxuuhnrkuraudngdwkqedovbtkmpbx", - "extension": "qkltlmz", - "url": "https://mklskqqsth.exn" + "name": "wfwmbxvjuykeplpijgoklpqpftmpmfmolclqkctotvydaocydmcrmxubtcenvxhdtdezfvkmlclrsnrkmmilpifrbczkscwzfdvozeyhiwyoubyymohwvkvezgktbynqlszebawwcpgvdwpswdyhoipiqctbqjusxbyxooxorbdlwpjiwxaimyitbgqvwrktzcazzfhlumfbjfajtdmnjxejvdiolwycrtmdqi", + "extension": null, + "url": "https://zimttfvyhg.ipb" }, { - "name": "qqssusgojdcdsvzcovrejmwnfgavurfihohwxahtuwqgygcripyummhgxssmdmijyuijjmstjslhjttxjmmpxzdfrglyqwgmwpudvimosskkqbegbykyfkqdzzildlfrxzoakgnabtezjktpathkjcpeekxlcmnjdcsfceklvksmwygcdehtuonfkxgxw", - "extension": "u", - "url": "https://untroxnmgh.oqk" + "name": null, + "extension": "gs", + "url": "https://lwqhyzuwte.rip" }, { - "name": "mxtqmqkrqqmcncfzqeczdvlscrdfluntnchrmghu", - "extension": null, - "url": "https://rwmkgpvzgz.wmo" + "name": "keinabjwifiofdztandozhohszaevvwyyjvjsdopgalwtptsyxqrwbxxpusiiernymegyofkndwjhabedquwjhrotoustwuhylujtjjdyhuyrrduftvfbkdaqslfdbgzylsvxrbfxzlakeadhtzjfv", + "extension": "kjfhr", + "url": "https://hcrmbgqtwg.luy" }, { "name": null, - "extension": "in", - "url": "https://socsfchosx.zmz" - }, - { - "name": "bx", - "extension": "wkggymo", - "url": "https://rqwbgtyzpp.evz" + "extension": null, + "url": "https://xxkldcdixv.bpl" } ] }, "examples": { "b": { - "id": "3e20f4e8-63aa-4d6d-8a4e-204455fd8f3f", - "created_at": "2007-03-03T02:43:47.848Z", - "title": "yhyaynhsofbqgozjrstjuozvtxntyfcsqivl", - "body": "xbkgwdbihggsbrapegngujrjmikedpbotahptiogzprechflucvsdmvgwvjexy", - "files": [ - { - "name": "ynnbrhzcgwqmhnksoebkftmpqnoyfgjyzdyrugilyvndubsmilsqsclmrsihvvdgbeyabxf", - "extension": "eqdulhco", - "url": "https://mhmeeremwz.vxc" - } - ] - }, - "a": { - "id": "98ab1db0-5cd3-4afb-9e5b-0b8bdcc37e5a", - "created_at": "1985-04-18T21:56:37.605Z", - "title": "soxplgwarkqhc", - "body": "vsvjupqivtvgrjjbsnlqnkzbttqbzkdclhitnnnbzckcxtsxdzuqfavixcuceh", + "id": "1a4f3db5-1b7c-4a8e-a612-69f6bf2f88e9", + "created_at": "1994-04-21T10:18:49.342Z", + "title": "jgowvehzfqqxprsxuvhbdkozfefgbfpx", + "body": "nutproqgbyyzujqgeogorkoagxn", "files": [ { "name": null, - "extension": "jq", - "url": "https://qnrpnnypbd.lju" + "extension": null, + "url": "https://dxebcpagji.gcj" }, { - "name": "gtrzyptoghgvhyexplzqglbdkphcsjdroyqgaftgjtbyihqwdjetspdoywdqikepwmovrpruokkapfcerxryqeqaycxbhqhgelajxenufpmecrjgawtvcunbzlzyaolwfrejvtdzewwoykpvlmxqckkuouhvpajr", + "name": null, "extension": null, - "url": "https://demwwxlsvn.eev" + "url": "https://mannkzbtjf.rmn" } ] + }, + "a": { + "id": "c0d7148a-1f30-4671-8481-7bccfd32b04e", + "created_at": "2016-09-11T04:00:44.600Z", + "title": "cymmwycfcdmdmlxoskfndke", + "body": "fawqdentnohdaajkqqtndnwashwdumzyjzpenqmfieffsfc", + "files": [] } } } } } - } + }, + "x-samchon-accessor": [ + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } } }, diff --git a/test/features/swagger-extensions/swagger.json b/test/features/swagger-extensions/swagger.json index 8d863bec1..8ced6ac3a 100644 --- a/test/features/swagger-extensions/swagger.json +++ b/test/features/swagger-extensions/swagger.json @@ -23,7 +23,12 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "health", + "get" + ], + "x-samchon-controller": "HealthController" } }, "/performance": { @@ -43,7 +48,12 @@ } }, "x-deprecated": true, - "x-visibility": "public" + "x-visibility": "public", + "x-samchon-accessor": [ + "performance", + "get" + ], + "x-samchon-controller": "PerformanceController" } } }, diff --git "a/test/features/swagger-\355\225\234\352\270\200\352\262\275\353\241\234/swagger.json" "b/test/features/swagger-\355\225\234\352\270\200\352\262\275\353\241\234/swagger.json" index 744a62d61..d431bf692 100644 --- "a/test/features/swagger-\355\225\234\352\270\200\352\262\275\353\241\234/swagger.json" +++ "b/test/features/swagger-\355\225\234\352\270\200\352\262\275\353\241\234/swagger.json" @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"http://localhost:3000","description":"Local Server"}],"info":{"title":"Nestia Swagger Generation Test","version":"1.0.3","description":"Generated by nestia - https://github.com/samchon/nestia"},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"http://localhost:3000","description":"Local Server"}],"info":{"title":"Nestia Swagger Generation Test","version":"1.0.3","description":"Generated by nestia - https://github.com/samchon/nestia"},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/swagger/swagger.json b/test/features/swagger/swagger.json index 744a62d61..d431bf692 100644 --- a/test/features/swagger/swagger.json +++ b/test/features/swagger/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"http://localhost:3000","description":"Local Server"}],"info":{"title":"Nestia Swagger Generation Test","version":"1.0.3","description":"Generated by nestia - https://github.com/samchon/nestia"},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"http://localhost:3000","description":"Local Server"}],"info":{"title":"Nestia Swagger Generation Test","version":"1.0.3","description":"Generated by nestia - https://github.com/samchon/nestia"},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}}},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/tags/swagger.json b/test/features/tags/swagger.json index 5c68638be..7c7de7317 100644 --- a/test/features/tags/swagger.json +++ b/test/features/tags/swagger.json @@ -7,7 +7,7 @@ } ], "info": { - "version": "4.0.4", + "version": "1.0.0", "title": "@samchon/nestia-test", "description": "Test program of Nestia", "license": { @@ -69,7 +69,13 @@ "write" ] } - ] + ], + "x-samchon-accessor": [ + "bbs", + "articles", + "store" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/bbs/articles/{section}/{id}": { @@ -134,7 +140,13 @@ { "bearer": [] } - ] + ], + "x-samchon-accessor": [ + "bbs", + "articles", + "update" + ], + "x-samchon-controller": "BbsArticlesController" } }, "/transaction/user/{pubkey}": { @@ -158,7 +170,13 @@ "application/json": {} } } - } + }, + "x-samchon-accessor": [ + "transaction", + "user", + "findTransactionsByUser" + ], + "x-samchon-controller": "TransactionController" } } }, diff --git a/test/features/variable/swagger.json b/test/features/variable/swagger.json index d8d815f78..ac6c0268a 100644 --- a/test/features/variable/swagger.json +++ b/test/features/variable/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/package/{section}/articles":{"patch":{"summary":"Paginate entire articles","description":"Paginate entire articles.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string"}]},"required":true,"description":" Section code"}],"requestBody":{"description":"Page request info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPage.IRequest"}}},"required":true},"responses":{"200":{"description":"Paginated articles with summarized info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPageIBbsArticle.ISummary"}}}}}},"get":{"summary":"Paginate entire articles (query ver.)","description":"Paginate entire articles (query ver.).","tags":[],"parameters":[{"name":"section","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string"}]},"required":true,"description":" Section code"},{"name":"page","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"integer"}]},"required":false},{"name":"limit","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"integer"}]},"required":false}],"responses":{"200":{"description":"Paginated articles with summarized info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPageIBbsArticle.ISummary"}}}}}},"post":{"summary":"Store a new article","description":"Store a new article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"}],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/bbs/package/{section}/articles/{id}":{"get":{"summary":"Read an article","description":"Read an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string","format":"uuid"}]},"required":true,"description":" Target article ID"}],"responses":{"200":{"description":"Detailed article info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}},"put":{"summary":"Update an article","description":"Update an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true,"description":" Target article ID"}],"requestBody":{"description":"Content to update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"200":{"description":"Updated content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}},"delete":{"summary":"Delete an article","description":"Delete an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true,"description":" Target article ID"}],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/bbs/package/{section}/articles/new/{date}":{"get":{"summary":"Get new article of a day","description":"Get new article of a day.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"date","in":"path","schema":{"type":"string","format":"date"},"required":true,"description":" Target data"}],"responses":{"200":{"description":"The new article info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}}}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}}}}},"components":{"schemas":{"IPageIBbsArticle.ISummary":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IBbsArticle.ISummary"}},"pagination":{"$ref":"#/components/schemas/IPage.IPagination"}},"required":["data","pagination"]},"IBbsArticle.ISummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"writer":{"type":"string"},"title":{"type":"string","minLength":3,"maxLength":50},"created_at":{"type":"string","format":"date-time"}},"required":["id","section","writer","title","created_at"]},"IPage.IPagination":{"type":"object","properties":{"current":{"type":"integer"},"limit":{"type":"integer"},"records":{"type":"integer"},"pages":{"type":"integer"}},"required":["current","limit","records","pages"],"description":"Page information."},"IPage.IRequest":{"type":"object","properties":{"page":{"oneOf":[{"type":"null"},{"type":"integer"}]},"limit":{"oneOf":[{"type":"null"},{"type":"integer"}]}},"required":[],"description":"Page request data"},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","section","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/bbs/package/{section}/articles":{"patch":{"summary":"Paginate entire articles","description":"Paginate entire articles.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string"}]},"required":true,"description":" Section code"}],"requestBody":{"description":"Page request info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPage.IRequest"}}},"required":true},"responses":{"200":{"description":"Paginated articles with summarized info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPageIBbsArticle.ISummary"}}}}},"x-samchon-accessor":["bbs","$package","articles","index"],"x-samchon-controller":"BbsPackageArticlesController"},"get":{"summary":"Paginate entire articles (query ver.)","description":"Paginate entire articles (query ver.).","tags":[],"parameters":[{"name":"section","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string"}]},"required":true,"description":" Section code"},{"name":"page","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"integer"}]},"required":false},{"name":"limit","in":"query","schema":{"oneOf":[{"type":"null"},{"type":"integer"}]},"required":false}],"responses":{"200":{"description":"Paginated articles with summarized info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPageIBbsArticle.ISummary"}}}}},"x-samchon-accessor":["bbs","$package","articles","$catch"],"x-samchon-controller":"BbsPackageArticlesController"},"post":{"summary":"Store a new article","description":"Store a new article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"}],"requestBody":{"description":"Content to store","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"201":{"description":"Newly archived article","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","$package","articles","store"],"x-samchon-controller":"BbsPackageArticlesController"}},"/bbs/package/{section}/articles/{id}":{"get":{"summary":"Read an article","description":"Read an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"oneOf":[{"type":"null"},{"type":"string","format":"uuid"}]},"required":true,"description":" Target article ID"}],"responses":{"200":{"description":"Detailed article info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","$package","articles","at"],"x-samchon-controller":"BbsPackageArticlesController"},"put":{"summary":"Update an article","description":"Update an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true,"description":" Target article ID"}],"requestBody":{"description":"Content to update","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle.IStore"}}},"required":true},"responses":{"200":{"description":"Updated content","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","$package","articles","update"],"x-samchon-controller":"BbsPackageArticlesController"},"delete":{"summary":"Delete an article","description":"Delete an article.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true,"description":" Target article ID"}],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["bbs","$package","articles","$$delete"],"x-samchon-controller":"BbsPackageArticlesController"}},"/bbs/package/{section}/articles/new/{date}":{"get":{"summary":"Get new article of a day","description":"Get new article of a day.","tags":[],"parameters":[{"name":"section","in":"path","schema":{"type":"string"},"required":true,"description":" Section code"},{"name":"date","in":"path","schema":{"type":"string","format":"date"},"required":true,"description":" Target data"}],"responses":{"200":{"description":"The new article info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IBbsArticle"}}}}},"x-samchon-accessor":["bbs","$package","articles","$new"],"x-samchon-controller":"BbsPackageArticlesController"}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}},"/performance":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IPerformance"}}}}},"x-samchon-accessor":["performance","get"],"x-samchon-controller":"PerformanceController"}}},"components":{"schemas":{"IPageIBbsArticle.ISummary":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IBbsArticle.ISummary"}},"pagination":{"$ref":"#/components/schemas/IPage.IPagination"}},"required":["data","pagination"]},"IBbsArticle.ISummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"writer":{"type":"string"},"title":{"type":"string","minLength":3,"maxLength":50},"created_at":{"type":"string","format":"date-time"}},"required":["id","section","writer","title","created_at"]},"IPage.IPagination":{"type":"object","properties":{"current":{"type":"integer"},"limit":{"type":"integer"},"records":{"type":"integer"},"pages":{"type":"integer"}},"required":["current","limit","records","pages"],"description":"Page information."},"IPage.IRequest":{"type":"object","properties":{"page":{"oneOf":[{"type":"null"},{"type":"integer"}]},"limit":{"oneOf":[{"type":"null"},{"type":"integer"}]}},"required":[],"description":"Page request data"},"IBbsArticle":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"section":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["id","section","created_at","title","body","files"]},"IAttachmentFile":{"type":"object","properties":{"name":{"oneOf":[{"type":"null"},{"type":"string","maxLength":255}]},"extension":{"oneOf":[{"type":"null"},{"type":"string","minLength":1,"maxLength":8}]},"url":{"type":"string","format":"uri"}},"required":["name","extension","url"]},"IBbsArticle.IStore":{"type":"object","properties":{"title":{"type":"string","minLength":3,"maxLength":50},"body":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/IAttachmentFile"}}},"required":["title","body","files"]},"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"],"description":"Performance info."},"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"},"heapTotal":{"type":"number"},"heapUsed":{"type":"number"},"external":{"type":"number"},"arrayBuffers":{"type":"number"}},"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"]}},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/websocket-clone/swagger.json b/test/features/websocket-clone/swagger.json index 5e220ed37..f70b83176 100644 --- a/test/features/websocket-clone/swagger.json +++ b/test/features/websocket-clone/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}}},"components":{"schemas":{},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}}},"components":{"schemas":{},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/features/websocket/swagger.json b/test/features/websocket/swagger.json index 425ac514a..930f85e39 100644 --- a/test/features/websocket/swagger.json +++ b/test/features/websocket/swagger.json @@ -1 +1 @@ -{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"4.0.4","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/calculate/health":{"get":{"summary":"Health check API (HTTP GET)","description":"Health check API (HTTP GET).","tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}}}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}}}}},"components":{"schemas":{},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file +{"openapi":"3.1.0","servers":[{"url":"https://github.com/samchon/nestia","description":"insert your server url"}],"info":{"version":"1.0.0","title":"@samchon/nestia-test","description":"Test program of Nestia","license":{"name":"MIT"}},"paths":{"/calculate/health":{"get":{"summary":"Health check API (HTTP GET)","description":"Health check API (HTTP GET).","tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"string"}}}}},"x-samchon-accessor":["calculate","health"],"x-samchon-controller":"CalculateController"}},"/health":{"get":{"tags":[],"parameters":[],"responses":{"200":{"description":"","content":{"application/json":{}}}},"x-samchon-accessor":["health","get"],"x-samchon-controller":"HealthController"}}},"components":{"schemas":{},"securitySchemes":{"bearer":{"type":"apiKey"}}},"tags":[],"x-samchon-emended":true} \ No newline at end of file diff --git a/test/package.json b/test/package.json index 829a48f7a..613e663c0 100644 --- a/test/package.json +++ b/test/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "@samchon/nestia-test", - "version": "4.0.4", + "version": "1.0.0", "description": "Test program of Nestia", "main": "index.js", "scripts": { @@ -48,14 +48,14 @@ "@nestjs/core": "^10.4.15", "@nestjs/platform-express": "^10.4.15", "@nestjs/platform-fastify": "^10.4.15", - "@samchon/openapi": "^2.2.1", + "@samchon/openapi": "^2.3.0", "express": "^4.21.1", "fastify": "^5.1.0", "fastify-multer": "^2.0.3", "multer": "^1.4.5-lts.1", "tgrid": "^1.1.0", "tstl": "^3.0.0", - "typia": "^7.4.1", + "typia": "^7.5.0", "uuid": "^9.0.1" } } \ No newline at end of file