daiso 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +218 -540
  2. package/dist/api/actionsProxy.js +82 -0
  3. package/dist/api/cgvHandlers.js +103 -16
  4. package/dist/api/daisoHandlers.js +127 -0
  5. package/dist/api/emart24Handlers.js +176 -0
  6. package/dist/api/gs25Handlers.js +256 -0
  7. package/dist/api/handlers.js +184 -108
  8. package/dist/api/healthChecks.js +332 -0
  9. package/dist/api/lottecinemaHandlers.js +155 -0
  10. package/dist/api/lottemartHandlers.js +128 -0
  11. package/dist/api/megaboxHandlers.js +81 -50
  12. package/dist/api/routes/cuRoutes.js +17 -0
  13. package/dist/api/routes/daisoRoutes.js +6 -1
  14. package/dist/api/routes/emart24Routes.js +22 -0
  15. package/dist/api/routes/gs25Routes.js +22 -0
  16. package/dist/api/routes/healthRoutes.js +44 -0
  17. package/dist/api/routes/lottecinemaRoutes.js +22 -0
  18. package/dist/api/routes/lottemartRoutes.js +18 -0
  19. package/dist/api/routes/oliveyoungRoutes.js +6 -1
  20. package/dist/api/routes/sevenelevenRoutes.js +32 -0
  21. package/dist/api/sevenelevenHandlers.js +200 -0
  22. package/dist/cli/args.js +54 -0
  23. package/dist/cli/commands/convenience.js +241 -0
  24. package/dist/cli/commands/daiso.js +96 -0
  25. package/dist/cli/constants.js +5 -0
  26. package/dist/cli/deps.js +48 -0
  27. package/dist/cli/http.js +98 -0
  28. package/dist/cli/interactiveFetch.js +31 -0
  29. package/dist/cli/interactiveItemSearch.js +259 -0
  30. package/dist/cli/interactivePrompt.js +49 -0
  31. package/dist/cli/interactiveTypes.js +4 -0
  32. package/dist/cli/types.js +4 -0
  33. package/dist/cli.js +66 -197
  34. package/dist/cliHelp.js +206 -1
  35. package/dist/cliInteractive.js +174 -0
  36. package/dist/cliPicker.js +56 -0
  37. package/dist/cliRenderer.js +4 -0
  38. package/dist/index.js +147 -8
  39. package/dist/pages/openapi.js +2 -1
  40. package/dist/pages/openapiFullSpec.js +58 -0
  41. package/dist/pages/openapiResponse.js +28 -0
  42. package/dist/pages/openapiSpec.js +2 -41
  43. package/dist/pages/openapiSpecActions.js +109 -0
  44. package/dist/pages/openapiSpecComponents.js +30 -391
  45. package/dist/pages/openapiSpecComponentsCgv.js +24 -0
  46. package/dist/pages/openapiSpecComponentsCu.js +112 -0
  47. package/dist/pages/openapiSpecComponentsDaisoOliveyoung.js +342 -0
  48. package/dist/pages/openapiSpecComponentsEmart24.js +141 -0
  49. package/dist/pages/openapiSpecComponentsGs25.js +109 -0
  50. package/dist/pages/openapiSpecComponentsLotteMart.js +85 -0
  51. package/dist/pages/openapiSpecComponentsLottecinema.js +163 -0
  52. package/dist/pages/openapiSpecComponentsMegabox.js +144 -0
  53. package/dist/pages/openapiSpecComponentsSeveneleven.js +82 -0
  54. package/dist/pages/openapiSpecPathsCgv.js +66 -3
  55. package/dist/pages/openapiSpecPathsCu.js +138 -0
  56. package/dist/pages/openapiSpecPathsDaiso.js +302 -0
  57. package/dist/pages/openapiSpecPathsDaisoOliveyoung.js +4 -376
  58. package/dist/pages/openapiSpecPathsEmart24.js +223 -0
  59. package/dist/pages/openapiSpecPathsGs25.js +166 -0
  60. package/dist/pages/openapiSpecPathsLotteMart.js +135 -0
  61. package/dist/pages/openapiSpecPathsLottecinema.js +212 -0
  62. package/dist/pages/openapiSpecPathsMegabox.js +52 -3
  63. package/dist/pages/openapiSpecPathsOliveyoung.js +231 -0
  64. package/dist/pages/openapiSpecPathsSeveneleven.js +234 -0
  65. package/dist/pages/prompt.js +8 -402
  66. package/dist/pages/promptCoreText.js +278 -0
  67. package/dist/pages/promptReferenceText.js +131 -0
  68. package/dist/pages/promptRetailCinemaText.js +273 -0
  69. package/dist/services/cgv/client.js +6 -1
  70. package/dist/services/cgv/index.js +3 -3
  71. package/dist/services/cgv/location.js +235 -0
  72. package/dist/services/cgv/tools/findTheaters.js +30 -5
  73. package/dist/services/cgv/tools/getTimetable.js +42 -14
  74. package/dist/services/cgv/tools/searchMovies.js +40 -12
  75. package/dist/services/cgv/transport.js +0 -3
  76. package/dist/services/cu/api.js +11 -0
  77. package/dist/services/cu/client.js +297 -0
  78. package/dist/services/cu/index.js +21 -0
  79. package/dist/services/cu/tools/checkInventory.js +123 -0
  80. package/dist/services/cu/tools/findNearbyStores.js +49 -0
  81. package/dist/services/cu/types.js +4 -0
  82. package/dist/services/daiso/api.js +22 -2
  83. package/dist/services/daiso/client.js +59 -0
  84. package/dist/services/daiso/index.js +2 -0
  85. package/dist/services/daiso/product.js +17 -0
  86. package/dist/services/daiso/tools/checkInventory.js +76 -41
  87. package/dist/services/daiso/tools/findStores.js +17 -7
  88. package/dist/services/daiso/tools/getDisplayLocation.js +75 -0
  89. package/dist/services/emart24/api.js +11 -0
  90. package/dist/services/emart24/client.js +173 -0
  91. package/dist/services/emart24/index.js +22 -0
  92. package/dist/services/emart24/inventoryLookup.js +134 -0
  93. package/dist/services/emart24/tools/checkInventory.js +54 -0
  94. package/dist/services/emart24/tools/findNearbyStores.js +72 -0
  95. package/dist/services/emart24/tools/searchProducts.js +63 -0
  96. package/dist/services/emart24/types.js +4 -0
  97. package/dist/services/gs25/api.js +9 -0
  98. package/dist/services/gs25/client.js +198 -0
  99. package/dist/services/gs25/index.js +22 -0
  100. package/dist/services/gs25/storeUtils.js +168 -0
  101. package/dist/services/gs25/tools/checkInventory.js +163 -0
  102. package/dist/services/gs25/tools/findNearbyStores.js +103 -0
  103. package/dist/services/gs25/tools/searchProducts.js +50 -0
  104. package/dist/services/gs25/types.js +4 -0
  105. package/dist/services/lottecinema/api.js +12 -0
  106. package/dist/services/lottecinema/client.js +161 -0
  107. package/dist/services/lottecinema/index.js +30 -0
  108. package/dist/services/lottecinema/location.js +191 -0
  109. package/dist/services/lottecinema/tools/findNearbyTheaters.js +47 -0
  110. package/dist/services/lottecinema/tools/getRemainingSeats.js +85 -0
  111. package/dist/services/lottecinema/tools/listNowShowing.js +79 -0
  112. package/dist/services/lottecinema/types.js +4 -0
  113. package/dist/services/lottemart/api.js +31 -0
  114. package/dist/services/lottemart/client.js +245 -0
  115. package/dist/services/lottemart/clientTypes.js +4 -0
  116. package/dist/services/lottemart/config.js +4 -0
  117. package/dist/services/lottemart/debug.js +92 -0
  118. package/dist/services/lottemart/geocode.js +49 -0
  119. package/dist/services/lottemart/index.js +30 -0
  120. package/dist/services/lottemart/keyword.js +29 -0
  121. package/dist/services/lottemart/parser.js +185 -0
  122. package/dist/services/lottemart/session.js +331 -0
  123. package/dist/services/lottemart/storeSearch.js +52 -0
  124. package/dist/services/lottemart/tools/findNearbyStores.js +67 -0
  125. package/dist/services/lottemart/tools/searchProducts.js +62 -0
  126. package/dist/services/lottemart/types.js +4 -0
  127. package/dist/services/lottemart/zetta.js +105 -0
  128. package/dist/services/megabox/location.js +219 -0
  129. package/dist/services/megabox/tools/findNearbyTheaters.js +13 -44
  130. package/dist/services/megabox/tools/getRemainingSeats.js +31 -3
  131. package/dist/services/megabox/tools/listNowShowing.js +31 -3
  132. package/dist/services/oliveyoung/api.js +2 -0
  133. package/dist/services/oliveyoung/client.js +150 -9
  134. package/dist/services/oliveyoung/index.js +3 -1
  135. package/dist/services/oliveyoung/tools/checkInventory.js +15 -4
  136. package/dist/services/oliveyoung/tools/searchProducts.js +57 -0
  137. package/dist/services/seveneleven/api.js +15 -0
  138. package/dist/services/seveneleven/client.js +279 -0
  139. package/dist/services/seveneleven/index.js +30 -0
  140. package/dist/services/seveneleven/inventory.js +302 -0
  141. package/dist/services/seveneleven/productKeyword.js +141 -0
  142. package/dist/services/seveneleven/tools/checkInventory.js +82 -0
  143. package/dist/services/seveneleven/tools/getCatalogSnapshot.js +55 -0
  144. package/dist/services/seveneleven/tools/getSearchPopwords.js +41 -0
  145. package/dist/services/seveneleven/tools/searchProducts.js +56 -0
  146. package/dist/services/seveneleven/tools/searchStores.js +45 -0
  147. package/dist/services/seveneleven/types.js +4 -0
  148. package/dist/utils/cliInteractiveHelpers.js +63 -0
  149. package/dist/utils/daisoKeyword.js +30 -0
  150. package/dist/utils/http.js +16 -2
  151. package/openapi.json +1977 -734
  152. package/openapi.yaml +1430 -543
  153. package/package.json +28 -15
  154. package/dist/tools/checkInventory.js +0 -98
  155. package/dist/tools/findStores.js +0 -125
  156. package/dist/tools/getPriceInfo.js +0 -77
  157. package/dist/tools/searchProducts.js +0 -61
  158. package/dist/types/index.js +0 -4
package/openapi.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
- "title": "다이소 MCP API",
5
- "description": "다이소 제품 검색, 매장 찾기, 재고 확인을 위한 API입니다.\n\n## 주요 기능\n- 🔍 **제품 검색**: 키워드로 다이소 제품 검색\n- 🏪 **매장 찾기**: 지역/키워드로 매장 검색\n- 📦 **재고 확인**: 온라인 및 오프라인 매장 재고 조회\n- 🎬 **메가박스 지점/영화 조회**: 주변 지점, 상영 목록, 잔여 좌석 조회\n- 🎥 **CGV 지점/영화 조회**: 극장 목록, 영화 목록, 시간표 조회\n\n## 사용 팁\n1. 한글 검색어는 URL 인코딩이 자동 처리됩니다\n2. 재고 확인 시 먼저 제품 검색으로 제품 ID를 확인하세요\n3. 위치 기반 재고 조회 시 lat, lng 파라미터를 활용하세요",
4
+ "title": "다이소 MCP API (OpenAI Actions용)",
5
+ "description": "OpenAI 챗봇의 OpenAPI import 개수 제한을 피하기 위해 모든 GET API를 단일 facade 엔드포인트로 집약한 스펙입니다.\n\n실제 런타임은 기존 /api/{service}/... 엔드포인트로 위임하며, 이 스펙은 OpenAI Actions 등록 전용으로 사용합니다.\n\n브랜드명이 요청 앞부분에 나오면 뒤의 상품/재고 요청까지 같은 브랜드로 해석해야 합니다. 예: \"안산 중앙역 주변 다이소 찾아주시고 핫식스 재고 찾아주세요\"는 다이소 기준 조회를 먼저 수행하고, 결과가 없을 때만 다른 브랜드를 제안합니다.\n\n전체 개별 엔드포인트 스펙이 필요하면 /openapi-full.json 또는 /openapi-full.yaml 을 사용하세요.",
6
6
  "version": "1.0.0",
7
7
  "contact": {
8
8
  "name": "GitHub Repository",
@@ -16,240 +16,190 @@
16
16
  }
17
17
  ],
18
18
  "paths": {
19
- "/api/daiso/products": {
19
+ "/api/actions/query": {
20
20
  "get": {
21
- "operationId": "searchProducts",
22
- "summary": "제품 검색",
23
- "description": "키워드로 다이소 제품을 검색합니다. 수납박스, 펜, 정리함 등 다양한 키워드로 검색할 수 있습니다.",
21
+ "operationId": "queryAction",
22
+ "summary": "공통 GET 액션 실행",
23
+ "description": "action 값에 따라 기존 GET API 엔드포인트로 프록시합니다. OpenAI Actions 등록 시 이 단일 엔드포인트를 사용하세요.",
24
24
  "parameters": [
25
25
  {
26
- "name": "q",
26
+ "name": "action",
27
27
  "in": "query",
28
28
  "required": true,
29
- "description": "검색 키워드 (예: 수납박스, 펜, 정리함)",
29
+ "description": "실행할 액션 이름입니다. 사용 가능한 값은 enum 목록을 참고하세요.",
30
30
  "schema": {
31
- "type": "string"
32
- },
33
- "example": "수납박스"
31
+ "type": "string",
32
+ "enum": [
33
+ "daisoSearchProducts",
34
+ "daisoGetProduct",
35
+ "daisoFindStores",
36
+ "daisoCheckInventory",
37
+ "daisoGetDisplayLocation",
38
+ "oliveyoungSearchProducts",
39
+ "oliveyoungFindStores",
40
+ "oliveyoungCheckInventory",
41
+ "cuFindStores",
42
+ "cuCheckInventory",
43
+ "emart24FindStores",
44
+ "emart24SearchProducts",
45
+ "emart24CheckInventory",
46
+ "lottemartFindStores",
47
+ "lottemartSearchProducts",
48
+ "gs25FindStores",
49
+ "gs25SearchProducts",
50
+ "gs25CheckInventory",
51
+ "sevenelevenSearchProducts",
52
+ "sevenelevenSearchStores",
53
+ "sevenelevenCheckInventory",
54
+ "sevenelevenGetPopwords",
55
+ "sevenelevenGetCatalog",
56
+ "megaboxFindTheaters",
57
+ "megaboxListMovies",
58
+ "megaboxGetSeats",
59
+ "lottecinemaFindTheaters",
60
+ "lottecinemaListMovies",
61
+ "lottecinemaGetSeats",
62
+ "cgvFindTheaters",
63
+ "cgvSearchMovies",
64
+ "cgvGetTimetable"
65
+ ]
66
+ }
34
67
  },
35
68
  {
36
- "name": "page",
69
+ "name": "q",
37
70
  "in": "query",
38
71
  "required": false,
39
- "description": "페이지 번호",
72
+ "description": "다이소 제품 검색어",
40
73
  "schema": {
41
- "type": "integer",
42
- "default": 1,
43
- "minimum": 1
74
+ "type": "string"
44
75
  }
45
76
  },
46
77
  {
47
- "name": "pageSize",
78
+ "name": "query",
48
79
  "in": "query",
49
80
  "required": false,
50
- "description": "페이지당 결과 수",
81
+ "description": "세븐일레븐 상품 검색어",
51
82
  "schema": {
52
- "type": "integer",
53
- "default": 30,
54
- "minimum": 1,
55
- "maximum": 100
56
- }
57
- }
58
- ],
59
- "responses": {
60
- "200": {
61
- "description": "검색 성공",
62
- "content": {
63
- "application/json": {
64
- "schema": {
65
- "$ref": "#/components/schemas/ProductSearchResponse"
66
- }
67
- }
83
+ "type": "string"
68
84
  }
69
85
  },
70
- "400": {
71
- "description": "잘못된 요청 (검색어 누락)",
72
- "content": {
73
- "application/json": {
74
- "schema": {
75
- "$ref": "#/components/schemas/ErrorResponse"
76
- }
77
- }
86
+ {
87
+ "name": "itemCode",
88
+ "in": "query",
89
+ "required": false,
90
+ "description": "GS25 상품 코드",
91
+ "schema": {
92
+ "type": "string"
78
93
  }
79
- }
80
- }
81
- }
82
- },
83
- "/api/daiso/products/{productId}": {
84
- "get": {
85
- "operationId": "getProduct",
86
- "summary": "제품 상세 정보",
87
- "description": "제품 ID로 상세 정보를 조회합니다.",
88
- "parameters": [
94
+ },
89
95
  {
90
96
  "name": "productId",
91
- "in": "path",
92
- "required": true,
93
- "description": "제품 ID (제품 검색 결과의 id 값)",
97
+ "in": "query",
98
+ "required": false,
99
+ "description": "제품 ID 또는 상세 조회용 path 파라미터",
94
100
  "schema": {
95
101
  "type": "string"
96
- },
97
- "example": "1234567890"
98
- }
99
- ],
100
- "responses": {
101
- "200": {
102
- "description": "조회 성공",
103
- "content": {
104
- "application/json": {
105
- "schema": {
106
- "$ref": "#/components/schemas/ProductDetailResponse"
107
- }
108
- }
109
102
  }
110
103
  },
111
- "404": {
112
- "description": "제품을 찾을 수 없음",
113
- "content": {
114
- "application/json": {
115
- "schema": {
116
- "$ref": "#/components/schemas/ErrorResponse"
117
- }
118
- }
119
- }
120
- }
121
- }
122
- }
123
- },
124
- "/api/daiso/stores": {
125
- "get": {
126
- "operationId": "findStores",
127
- "summary": "매장 찾기",
128
- "description": "키워드 또는 지역으로 다이소 매장을 검색합니다. keyword 또는 sido 중 하나는 필수입니다.",
129
- "parameters": [
130
104
  {
131
105
  "name": "keyword",
132
106
  "in": "query",
133
107
  "required": false,
134
- "description": "매장명 또는 주소 키워드 (예: 강남, 홍대, 안산)",
108
+ "description": "공통 키워드 파라미터",
135
109
  "schema": {
136
110
  "type": "string"
137
- },
138
- "example": "강남"
111
+ }
139
112
  },
140
113
  {
141
114
  "name": "sido",
142
115
  "in": "query",
143
116
  "required": false,
144
- "description": "시/도 (예: 서울, 경기, 부산)",
117
+ "description": "다이소 시/도",
145
118
  "schema": {
146
119
  "type": "string"
147
- },
148
- "example": "서울"
120
+ }
149
121
  },
150
122
  {
151
123
  "name": "gugun",
152
124
  "in": "query",
153
125
  "required": false,
154
- "description": "구/군 (예: 강남구, 마포구)",
126
+ "description": "다이소 구/군",
155
127
  "schema": {
156
128
  "type": "string"
157
- },
158
- "example": "강남구"
129
+ }
159
130
  },
160
131
  {
161
132
  "name": "dong",
162
133
  "in": "query",
163
134
  "required": false,
164
- "description": "동 (예: 역삼동, 합정동)",
135
+ "description": "다이소 동",
165
136
  "schema": {
166
137
  "type": "string"
167
138
  }
168
139
  },
169
140
  {
170
- "name": "limit",
141
+ "name": "area",
171
142
  "in": "query",
172
143
  "required": false,
173
- "description": "최대 결과 수",
144
+ "description": "롯데마트 지역",
174
145
  "schema": {
175
- "type": "integer",
176
- "default": 50,
177
- "minimum": 1,
178
- "maximum": 100
146
+ "type": "string"
179
147
  }
180
- }
181
- ],
182
- "responses": {
183
- "200": {
184
- "description": "검색 성공",
185
- "content": {
186
- "application/json": {
187
- "schema": {
188
- "$ref": "#/components/schemas/StoreSearchResponse"
189
- }
190
- }
148
+ },
149
+ {
150
+ "name": "area1",
151
+ "in": "query",
152
+ "required": false,
153
+ "description": "이마트24 1차 지역",
154
+ "schema": {
155
+ "type": "string"
191
156
  }
192
157
  },
193
- "400": {
194
- "description": "잘못된 요청 (필수 파라미터 누락)",
195
- "content": {
196
- "application/json": {
197
- "schema": {
198
- "$ref": "#/components/schemas/ErrorResponse"
199
- }
200
- }
158
+ {
159
+ "name": "area2",
160
+ "in": "query",
161
+ "required": false,
162
+ "description": "이마트24 2차 지역",
163
+ "schema": {
164
+ "type": "string"
201
165
  }
202
- }
203
- }
204
- }
205
- },
206
- "/api/daiso/inventory": {
207
- "get": {
208
- "operationId": "checkInventory",
209
- "summary": "재고 확인",
210
- "description": "특정 제품의 온라인 재고와 매장별 재고를 확인합니다. 위치 정보를 제공하면 가까운 매장 순으로 정렬됩니다.",
211
- "parameters": [
166
+ },
212
167
  {
213
- "name": "productId",
168
+ "name": "areaCode",
214
169
  "in": "query",
215
- "required": true,
216
- "description": "제품 ID (제품 검색 결과의 id 값)",
170
+ "required": false,
171
+ "description": "메가박스 지역 코드",
217
172
  "schema": {
218
173
  "type": "string"
219
- },
220
- "example": "1234567890"
174
+ }
221
175
  },
222
176
  {
223
- "name": "lat",
177
+ "name": "brandVariant",
224
178
  "in": "query",
225
179
  "required": false,
226
- "description": "위도 (기본값: 서울 시청 37.5665)",
180
+ "description": "롯데마트 브랜드 변형",
227
181
  "schema": {
228
- "type": "number",
229
- "format": "float",
230
- "default": 37.5665
231
- },
232
- "example": 37.4979
182
+ "type": "string"
183
+ }
233
184
  },
234
185
  {
235
- "name": "lng",
186
+ "name": "lat",
236
187
  "in": "query",
237
188
  "required": false,
238
- "description": "경도 (기본값: 서울 시청 126.978)",
189
+ "description": "위도",
239
190
  "schema": {
240
191
  "type": "number",
241
- "format": "float",
242
- "default": 126.978
243
- },
244
- "example": 127.0276
192
+ "format": "float"
193
+ }
245
194
  },
246
195
  {
247
- "name": "keyword",
196
+ "name": "lng",
248
197
  "in": "query",
249
198
  "required": false,
250
- "description": "매장 검색어 (예: 안산, 강남)",
199
+ "description": "경도",
251
200
  "schema": {
252
- "type": "string"
201
+ "type": "number",
202
+ "format": "float"
253
203
  }
254
204
  },
255
205
  {
@@ -258,95 +208,52 @@
258
208
  "required": false,
259
209
  "description": "페이지 번호",
260
210
  "schema": {
261
- "type": "integer",
262
- "default": 1,
263
- "minimum": 1
211
+ "type": "integer"
264
212
  }
265
213
  },
266
214
  {
267
- "name": "pageSize",
215
+ "name": "pageIdx",
268
216
  "in": "query",
269
217
  "required": false,
270
- "description": "페이지당 결과 수",
218
+ "description": "올리브영 페이지 번호",
271
219
  "schema": {
272
- "type": "integer",
273
- "default": 30,
274
- "minimum": 1,
275
- "maximum": 100
276
- }
277
- }
278
- ],
279
- "responses": {
280
- "200": {
281
- "description": "조회 성공",
282
- "content": {
283
- "application/json": {
284
- "schema": {
285
- "$ref": "#/components/schemas/InventoryResponse"
286
- }
287
- }
220
+ "type": "integer"
288
221
  }
289
222
  },
290
- "400": {
291
- "description": "잘못된 요청 (제품 ID 누락)",
292
- "content": {
293
- "application/json": {
294
- "schema": {
295
- "$ref": "#/components/schemas/ErrorResponse"
296
- }
297
- }
298
- }
299
- }
300
- }
301
- }
302
- },
303
- "/api/oliveyoung/stores": {
304
- "get": {
305
- "operationId": "oliveyoungFindStores",
306
- "summary": "올리브영 매장 검색",
307
- "description": "위치(위도/경도)와 키워드로 올리브영 매장을 검색합니다.",
308
- "parameters": [
309
223
  {
310
- "name": "keyword",
224
+ "name": "pageLimit",
311
225
  "in": "query",
312
226
  "required": false,
313
- "description": "매장명 또는 지역 키워드 (예: 명동, 강남)",
227
+ "description": "롯데마트 추가 페이지 수",
314
228
  "schema": {
315
- "type": "string"
316
- },
317
- "example": "명동"
229
+ "type": "integer"
230
+ }
318
231
  },
319
232
  {
320
- "name": "lat",
233
+ "name": "pageSize",
321
234
  "in": "query",
322
235
  "required": false,
323
- "description": "위도 (기본값: 서울 시청 37.5665)",
236
+ "description": "페이지 크기",
324
237
  "schema": {
325
- "type": "number",
326
- "format": "float",
327
- "default": 37.5665
238
+ "type": "integer"
328
239
  }
329
240
  },
330
241
  {
331
- "name": "lng",
242
+ "name": "size",
332
243
  "in": "query",
333
244
  "required": false,
334
- "description": "경도 (기본값: 서울 시청 126.978)",
245
+ "description": "페이지 크기 또는 검색 크기",
335
246
  "schema": {
336
- "type": "number",
337
- "format": "float",
338
- "default": 126.978
247
+ "type": "integer"
339
248
  }
340
249
  },
341
250
  {
342
- "name": "pageIdx",
251
+ "name": "offset",
343
252
  "in": "query",
344
253
  "required": false,
345
- "description": "매장 검색 페이지 번호",
254
+ "description": "CU 검색 오프셋",
346
255
  "schema": {
347
- "type": "integer",
348
- "default": 1,
349
- "minimum": 1
256
+ "type": "integer"
350
257
  }
351
258
  },
352
259
  {
@@ -355,573 +262,203 @@
355
262
  "required": false,
356
263
  "description": "최대 결과 수",
357
264
  "schema": {
358
- "type": "integer",
359
- "default": 20,
360
- "minimum": 1,
361
- "maximum": 100
362
- }
363
- }
364
- ],
365
- "responses": {
366
- "200": {
367
- "description": "검색 성공",
368
- "content": {
369
- "application/json": {
370
- "schema": {
371
- "$ref": "#/components/schemas/OliveyoungStoreSearchResponse"
372
- }
373
- }
265
+ "type": "integer"
374
266
  }
375
267
  },
376
- "500": {
377
- "description": "올리브영 API 호출 실패",
378
- "content": {
379
- "application/json": {
380
- "schema": {
381
- "$ref": "#/components/schemas/ErrorResponse"
382
- }
383
- }
384
- }
385
- }
386
- }
387
- }
388
- },
389
- "/api/oliveyoung/inventory": {
390
- "get": {
391
- "operationId": "oliveyoungCheckInventory",
392
- "summary": "올리브영 재고 확인",
393
- "description": "상품 키워드로 올리브영 재고를 검색하고 주변 매장 정보를 함께 조회합니다.",
394
- "parameters": [
395
268
  {
396
- "name": "keyword",
269
+ "name": "storeLimit",
397
270
  "in": "query",
398
- "required": true,
399
- "description": "재고를 확인할 상품 키워드",
271
+ "required": false,
272
+ "description": "매장 결과 제한 수",
400
273
  "schema": {
401
- "type": "string"
402
- },
403
- "example": "선크림"
274
+ "type": "integer"
275
+ }
404
276
  },
405
277
  {
406
- "name": "lat",
278
+ "name": "storeCode",
407
279
  "in": "query",
408
280
  "required": false,
409
- "description": "위도 (기본값: 서울 시청 37.5665)",
281
+ "description": "매장 코드",
410
282
  "schema": {
411
- "type": "number",
412
- "format": "float",
413
- "default": 37.5665
283
+ "type": "string"
414
284
  }
415
285
  },
416
286
  {
417
- "name": "lng",
287
+ "name": "storeName",
418
288
  "in": "query",
419
289
  "required": false,
420
- "description": "경도 (기본값: 서울 시청 126.978)",
290
+ "description": "매장명",
421
291
  "schema": {
422
- "type": "number",
423
- "format": "float",
424
- "default": 126.978
292
+ "type": "string"
425
293
  }
426
294
  },
427
295
  {
428
296
  "name": "storeKeyword",
429
297
  "in": "query",
430
298
  "required": false,
431
- "description": "주변 매장 필터 키워드",
299
+ "description": "매장 키워드",
432
300
  "schema": {
433
301
  "type": "string"
434
302
  }
435
303
  },
436
304
  {
437
- "name": "page",
305
+ "name": "playDate",
438
306
  "in": "query",
439
307
  "required": false,
440
- "description": "상품 검색 페이지 번호",
308
+ "description": "상영일(YYYYMMDD)",
441
309
  "schema": {
442
- "type": "integer",
443
- "default": 1,
444
- "minimum": 1
310
+ "type": "string"
445
311
  }
446
312
  },
447
313
  {
448
- "name": "size",
314
+ "name": "regionCode",
449
315
  "in": "query",
450
316
  "required": false,
451
- "description": "페이지당 결과 수",
317
+ "description": "CGV 지역 코드",
452
318
  "schema": {
453
- "type": "integer",
454
- "default": 20,
455
- "minimum": 1,
456
- "maximum": 100
319
+ "type": "string"
457
320
  }
458
321
  },
459
322
  {
460
- "name": "sort",
323
+ "name": "theaterCode",
461
324
  "in": "query",
462
325
  "required": false,
463
- "description": "정렬 코드",
326
+ "description": "CGV 극장 코드",
464
327
  "schema": {
465
- "type": "string",
466
- "default": "01"
328
+ "type": "string"
467
329
  }
468
330
  },
469
331
  {
470
- "name": "includeSoldOut",
332
+ "name": "theaterId",
471
333
  "in": "query",
472
334
  "required": false,
473
- "description": "품절 포함 여부 (true/false)",
335
+ "description": "메가박스/롯데시네마 지점 ID",
474
336
  "schema": {
475
- "type": "boolean",
476
- "default": false
477
- }
478
- }
479
- ],
480
- "responses": {
481
- "200": {
482
- "description": "조회 성공",
483
- "content": {
484
- "application/json": {
485
- "schema": {
486
- "$ref": "#/components/schemas/OliveyoungInventoryResponse"
487
- }
488
- }
489
- }
490
- },
491
- "400": {
492
- "description": "잘못된 요청 (검색어 누락)",
493
- "content": {
494
- "application/json": {
495
- "schema": {
496
- "$ref": "#/components/schemas/ErrorResponse"
497
- }
498
- }
337
+ "type": "string"
499
338
  }
500
339
  },
501
- "500": {
502
- "description": "올리브영 API 호출 실패",
503
- "content": {
504
- "application/json": {
505
- "schema": {
506
- "$ref": "#/components/schemas/ErrorResponse"
507
- }
508
- }
509
- }
510
- }
511
- }
512
- }
513
- },
514
- "/api/megabox/theaters": {
515
- "get": {
516
- "operationId": "megaboxFindNearbyTheaters",
517
- "summary": "메가박스 주변 지점 조회",
518
- "description": "좌표 기준으로 메가박스 지점을 거리순으로 조회합니다.",
519
- "parameters": [
520
340
  {
521
- "name": "lat",
341
+ "name": "movieCode",
522
342
  "in": "query",
523
343
  "required": false,
524
- "description": "위도 (기본값: 서울 시청 37.5665)",
344
+ "description": "CGV 영화 코드",
525
345
  "schema": {
526
- "type": "number",
527
- "format": "float",
528
- "default": 37.5665
346
+ "type": "string"
529
347
  }
530
348
  },
531
349
  {
532
- "name": "lng",
350
+ "name": "movieId",
533
351
  "in": "query",
534
352
  "required": false,
535
- "description": "경도 (기본값: 서울 시청 126.978)",
536
- "schema": {
537
- "type": "number",
538
- "format": "float",
539
- "default": 126.978
540
- }
541
- },
542
- {
543
- "name": "playDate",
544
- "in": "query",
545
- "required": false,
546
- "description": "조회 날짜 (YYYYMMDD)",
547
- "schema": {
548
- "type": "string",
549
- "example": "20260304"
550
- }
551
- },
552
- {
553
- "name": "areaCode",
554
- "in": "query",
555
- "required": false,
556
- "description": "지역 코드 (기본값: 11, 서울)",
557
- "schema": {
558
- "type": "string",
559
- "default": "11"
560
- }
561
- },
562
- {
563
- "name": "limit",
564
- "in": "query",
565
- "required": false,
566
- "description": "최대 결과 수",
567
- "schema": {
568
- "type": "integer",
569
- "default": 10,
570
- "minimum": 1,
571
- "maximum": 100
572
- }
573
- }
574
- ],
575
- "responses": {
576
- "200": {
577
- "description": "조회 성공",
578
- "content": {
579
- "application/json": {
580
- "schema": {
581
- "$ref": "#/components/schemas/MegaboxTheaterSearchResponse"
582
- }
583
- }
584
- }
585
- },
586
- "500": {
587
- "description": "메가박스 API 호출 실패",
588
- "content": {
589
- "application/json": {
590
- "schema": {
591
- "$ref": "#/components/schemas/ErrorResponse"
592
- }
593
- }
594
- }
595
- }
596
- }
597
- }
598
- },
599
- "/api/megabox/movies": {
600
- "get": {
601
- "operationId": "megaboxListNowShowing",
602
- "summary": "메가박스 영화/회차 목록 조회",
603
- "description": "날짜, 지점, 영화 조건으로 메가박스 영화 및 상영 회차를 조회합니다.",
604
- "parameters": [
605
- {
606
- "name": "playDate",
607
- "in": "query",
608
- "required": false,
609
- "description": "조회 날짜 (YYYYMMDD)",
610
- "schema": {
611
- "type": "string",
612
- "example": "20260304"
613
- }
614
- },
615
- {
616
- "name": "theaterId",
617
- "in": "query",
618
- "required": false,
619
- "description": "지점 ID (예: 1372)",
620
- "schema": {
621
- "type": "string",
622
- "example": "1372"
623
- }
624
- },
625
- {
626
- "name": "movieId",
627
- "in": "query",
628
- "required": false,
629
- "description": "영화 ID (예: 25104500)",
630
- "schema": {
631
- "type": "string",
632
- "example": "25104500"
633
- }
634
- },
635
- {
636
- "name": "areaCode",
637
- "in": "query",
638
- "required": false,
639
- "description": "지역 코드 (기본값: 11, 서울)",
640
- "schema": {
641
- "type": "string",
642
- "default": "11"
643
- }
644
- }
645
- ],
646
- "responses": {
647
- "200": {
648
- "description": "조회 성공",
649
- "content": {
650
- "application/json": {
651
- "schema": {
652
- "$ref": "#/components/schemas/MegaboxMovieListResponse"
653
- }
654
- }
655
- }
656
- },
657
- "500": {
658
- "description": "메가박스 API 호출 실패",
659
- "content": {
660
- "application/json": {
661
- "schema": {
662
- "$ref": "#/components/schemas/ErrorResponse"
663
- }
664
- }
665
- }
666
- }
667
- }
668
- }
669
- },
670
- "/api/megabox/seats": {
671
- "get": {
672
- "operationId": "megaboxGetRemainingSeats",
673
- "summary": "메가박스 잔여 좌석 조회",
674
- "description": "영화/지점/날짜 조건으로 회차별 잔여 좌석 수를 조회합니다.",
675
- "parameters": [
676
- {
677
- "name": "playDate",
678
- "in": "query",
679
- "required": false,
680
- "description": "조회 날짜 (YYYYMMDD)",
681
- "schema": {
682
- "type": "string",
683
- "example": "20260304"
684
- }
685
- },
686
- {
687
- "name": "theaterId",
688
- "in": "query",
689
- "required": false,
690
- "description": "지점 ID",
353
+ "description": "메가박스/롯데시네마 영화 ID",
691
354
  "schema": {
692
355
  "type": "string"
693
356
  }
694
357
  },
695
358
  {
696
- "name": "movieId",
359
+ "name": "pluCd",
697
360
  "in": "query",
698
361
  "required": false,
699
- "description": "영화 ID",
362
+ "description": "이마트24 상품 PLU 코드",
700
363
  "schema": {
701
364
  "type": "string"
702
365
  }
703
366
  },
704
367
  {
705
- "name": "areaCode",
706
- "in": "query",
707
- "required": false,
708
- "description": "지역 코드 (기본값: 11, 서울)",
709
- "schema": {
710
- "type": "string",
711
- "default": "11"
712
- }
713
- },
714
- {
715
- "name": "limit",
716
- "in": "query",
717
- "required": false,
718
- "description": "최대 결과 수",
719
- "schema": {
720
- "type": "integer",
721
- "default": 50,
722
- "minimum": 1,
723
- "maximum": 200
724
- }
725
- }
726
- ],
727
- "responses": {
728
- "200": {
729
- "description": "조회 성공",
730
- "content": {
731
- "application/json": {
732
- "schema": {
733
- "$ref": "#/components/schemas/MegaboxSeatListResponse"
734
- }
735
- }
736
- }
737
- },
738
- "500": {
739
- "description": "메가박스 API 호출 실패",
740
- "content": {
741
- "application/json": {
742
- "schema": {
743
- "$ref": "#/components/schemas/ErrorResponse"
744
- }
745
- }
746
- }
747
- }
748
- }
749
- }
750
- },
751
- "/api/cgv/theaters": {
752
- "get": {
753
- "operationId": "cgvFindTheaters",
754
- "summary": "CGV 극장 목록 조회",
755
- "description": "날짜/지역 코드 조건으로 CGV 극장 목록을 조회합니다.",
756
- "parameters": [
757
- {
758
- "name": "playDate",
368
+ "name": "bizNoArr",
759
369
  "in": "query",
760
370
  "required": false,
761
- "description": "조회 날짜 (YYYYMMDD)",
371
+ "description": "이마트24 사업자번호 목록",
762
372
  "schema": {
763
- "type": "string",
764
- "example": "20260304"
373
+ "type": "string"
765
374
  }
766
375
  },
767
376
  {
768
- "name": "regionCode",
377
+ "name": "label",
769
378
  "in": "query",
770
379
  "required": false,
771
- "description": "지역 코드 (예: 01 서울)",
380
+ "description": "세븐일레븐 인기 검색어 라벨",
772
381
  "schema": {
773
- "type": "string",
774
- "example": "01"
382
+ "type": "string"
775
383
  }
776
384
  },
777
385
  {
778
- "name": "limit",
386
+ "name": "sort",
779
387
  "in": "query",
780
388
  "required": false,
781
- "description": "최대 결과 수",
389
+ "description": "정렬 기준",
782
390
  "schema": {
783
- "type": "integer",
784
- "default": 30,
785
- "minimum": 1,
786
- "maximum": 100
787
- }
788
- }
789
- ],
790
- "responses": {
791
- "200": {
792
- "description": "조회 성공",
793
- "content": {
794
- "application/json": {
795
- "schema": {
796
- "$ref": "#/components/schemas/CgvTheaterSearchResponse"
797
- }
798
- }
391
+ "type": "string"
799
392
  }
800
393
  },
801
- "500": {
802
- "description": "CGV API 호출 실패",
803
- "content": {
804
- "application/json": {
805
- "schema": {
806
- "$ref": "#/components/schemas/ErrorResponse"
807
- }
808
- }
809
- }
810
- }
811
- }
812
- }
813
- },
814
- "/api/cgv/movies": {
815
- "get": {
816
- "operationId": "cgvSearchMovies",
817
- "summary": "CGV 영화 목록 조회",
818
- "description": "날짜/극장 조건으로 CGV 영화 목록을 조회합니다.",
819
- "parameters": [
820
394
  {
821
- "name": "playDate",
395
+ "name": "searchSort",
822
396
  "in": "query",
823
397
  "required": false,
824
- "description": "조회 날짜 (YYYYMMDD)",
398
+ "description": "CU 검색 정렬 기준",
825
399
  "schema": {
826
- "type": "string",
827
- "example": "20260304"
400
+ "type": "string"
828
401
  }
829
402
  },
830
403
  {
831
- "name": "theaterCode",
404
+ "name": "service24h",
832
405
  "in": "query",
833
406
  "required": false,
834
- "description": "극장 코드 (예: 0056)",
407
+ "description": "이마트24 24시간 필터",
835
408
  "schema": {
836
- "type": "string",
837
- "example": "0056"
838
- }
839
- }
840
- ],
841
- "responses": {
842
- "200": {
843
- "description": "조회 성공",
844
- "content": {
845
- "application/json": {
846
- "schema": {
847
- "$ref": "#/components/schemas/CgvMovieSearchResponse"
848
- }
849
- }
409
+ "type": "boolean"
850
410
  }
851
411
  },
852
- "500": {
853
- "description": "CGV API 호출 실패",
854
- "content": {
855
- "application/json": {
856
- "schema": {
857
- "$ref": "#/components/schemas/ErrorResponse"
858
- }
859
- }
860
- }
861
- }
862
- }
863
- }
864
- },
865
- "/api/cgv/timetable": {
866
- "get": {
867
- "operationId": "cgvGetTimetable",
868
- "summary": "CGV 시간표 조회",
869
- "description": "날짜/극장/영화 조건으로 CGV 상영 시간표를 조회합니다.",
870
- "parameters": [
871
412
  {
872
- "name": "playDate",
413
+ "name": "includeSoldOut",
873
414
  "in": "query",
874
415
  "required": false,
875
- "description": "조회 날짜 (YYYYMMDD)",
416
+ "description": "올리브영 품절 포함 여부",
876
417
  "schema": {
877
- "type": "string",
878
- "example": "20260304"
418
+ "type": "boolean"
879
419
  }
880
420
  },
881
421
  {
882
- "name": "theaterCode",
422
+ "name": "includeIssues",
883
423
  "in": "query",
884
424
  "required": false,
885
- "description": "극장 코드",
425
+ "description": "세븐일레븐 이달의 행사지 포함 여부",
886
426
  "schema": {
887
- "type": "string"
427
+ "type": "boolean"
888
428
  }
889
429
  },
890
430
  {
891
- "name": "movieCode",
431
+ "name": "includeExhibition",
892
432
  "in": "query",
893
433
  "required": false,
894
- "description": "영화 코드",
434
+ "description": "세븐일레븐 전시상품 포함 여부",
895
435
  "schema": {
896
- "type": "string"
436
+ "type": "boolean"
897
437
  }
898
438
  },
899
439
  {
900
- "name": "limit",
440
+ "name": "timeoutMs",
901
441
  "in": "query",
902
442
  "required": false,
903
- "description": "최대 결과 수",
443
+ "description": "세븐일레븐 inventory 타임아웃",
904
444
  "schema": {
905
- "type": "integer",
906
- "default": 50,
907
- "minimum": 1,
908
- "maximum": 200
445
+ "type": "integer"
909
446
  }
910
447
  }
911
448
  ],
912
449
  "responses": {
913
450
  "200": {
914
- "description": "조회 성공",
451
+ "description": "프록시 호출 성공",
915
452
  "content": {
916
453
  "application/json": {
917
454
  "schema": {
918
- "$ref": "#/components/schemas/CgvTimetableResponse"
455
+ "$ref": "#/components/schemas/ActionQueryResponse"
919
456
  }
920
457
  }
921
458
  }
922
459
  },
923
- "500": {
924
- "description": "CGV API 호출 실패",
460
+ "400": {
461
+ "description": "잘못된 요청",
925
462
  "content": {
926
463
  "application/json": {
927
464
  "schema": {
@@ -958,7 +495,7 @@
958
495
  "imageUrl": {
959
496
  "type": "string",
960
497
  "description": "제품 이미지 URL",
961
- "example": "https://img.daisomall.co.kr/..."
498
+ "example": "https://cdn.daisomall.co.kr/..."
962
499
  },
963
500
  "soldOut": {
964
501
  "type": "boolean",
@@ -1016,6 +553,36 @@
1016
553
  }
1017
554
  }
1018
555
  },
556
+ "InventoryProduct": {
557
+ "type": "object",
558
+ "description": "재고 응답에 포함되는 상품 요약 정보",
559
+ "properties": {
560
+ "id": {
561
+ "type": "string",
562
+ "description": "제품 ID"
563
+ },
564
+ "name": {
565
+ "type": "string",
566
+ "description": "제품명"
567
+ },
568
+ "imageUrl": {
569
+ "type": "string",
570
+ "description": "제품 이미지 URL"
571
+ },
572
+ "brand": {
573
+ "type": "string",
574
+ "description": "브랜드명"
575
+ },
576
+ "soldOut": {
577
+ "type": "boolean",
578
+ "description": "품절 여부"
579
+ },
580
+ "isNew": {
581
+ "type": "boolean",
582
+ "description": "신상품 여부"
583
+ }
584
+ }
585
+ },
1019
586
  "Store": {
1020
587
  "type": "object",
1021
588
  "description": "매장 정보",
@@ -1210,6 +777,9 @@
1210
777
  "type": "string",
1211
778
  "description": "제품 ID"
1212
779
  },
780
+ "product": {
781
+ "$ref": "#/components/schemas/InventoryProduct"
782
+ },
1213
783
  "location": {
1214
784
  "type": "object",
1215
785
  "properties": {
@@ -1313,6 +883,10 @@
1313
883
  "type": "string",
1314
884
  "example": "달바 퍼플 톤업 선크림 듀오 기획"
1315
885
  },
886
+ "imageUrl": {
887
+ "type": "string",
888
+ "example": "https://image.oliveyoung.co.kr/uploads/images/goods/10/0000/0020/A00000020061401ko.jpg"
889
+ },
1316
890
  "priceToPay": {
1317
891
  "type": "integer",
1318
892
  "example": 32130
@@ -1327,12 +901,131 @@
1327
901
  },
1328
902
  "o2oStockFlag": {
1329
903
  "type": "boolean",
904
+ "description": "올리브영 원본 재고 가능 플래그",
1330
905
  "example": true
1331
906
  },
1332
907
  "o2oRemainQuantity": {
1333
908
  "type": "integer",
909
+ "description": "올리브영 원본 잔여 수량 필드. 0이어도 재고가 있을 수 있음",
1334
910
  "example": 0
1335
- }
911
+ },
912
+ "inStock": {
913
+ "type": "boolean",
914
+ "description": "현재 조회한 주변 매장 기준 재고 여부. storeInventory가 있으면 그 결과를 우선 반영",
915
+ "example": true
916
+ },
917
+ "stockStatus": {
918
+ "type": "string",
919
+ "enum": [
920
+ "in_stock",
921
+ "out_of_stock"
922
+ ],
923
+ "example": "in_stock"
924
+ },
925
+ "stockSource": {
926
+ "type": "string",
927
+ "enum": [
928
+ "global_search",
929
+ "nearby_store"
930
+ ],
931
+ "example": "nearby_store"
932
+ },
933
+ "storeInventory": {
934
+ "$ref": "#/components/schemas/OliveyoungProductStoreInventory"
935
+ }
936
+ }
937
+ },
938
+ "OliveyoungStockStore": {
939
+ "type": "object",
940
+ "description": "올리브영 상품별 매장 재고 상태",
941
+ "properties": {
942
+ "storeCode": {
943
+ "type": "string",
944
+ "example": "B040"
945
+ },
946
+ "storeName": {
947
+ "type": "string",
948
+ "example": "안산중앙역점"
949
+ },
950
+ "address": {
951
+ "type": "string",
952
+ "example": "경기도 안산시 단원구 고잔2길 65 1층"
953
+ },
954
+ "latitude": {
955
+ "type": "number",
956
+ "format": "float",
957
+ "example": 37.3177184
958
+ },
959
+ "longitude": {
960
+ "type": "number",
961
+ "format": "float",
962
+ "example": 126.8385857
963
+ },
964
+ "distance": {
965
+ "type": "number",
966
+ "format": "float",
967
+ "example": 0.07
968
+ },
969
+ "pickupYn": {
970
+ "type": "boolean",
971
+ "example": true
972
+ },
973
+ "salesStoreYn": {
974
+ "type": "boolean",
975
+ "example": true
976
+ },
977
+ "remainQuantity": {
978
+ "type": "integer",
979
+ "example": 3
980
+ },
981
+ "o2oRemainQuantity": {
982
+ "type": "integer",
983
+ "example": 2
984
+ },
985
+ "stockStatus": {
986
+ "type": "string",
987
+ "enum": [
988
+ "in_stock",
989
+ "out_of_stock",
990
+ "not_sold"
991
+ ],
992
+ "example": "in_stock"
993
+ },
994
+ "stockLabel": {
995
+ "type": "string",
996
+ "example": "재고 3개"
997
+ },
998
+ "openYn": {
999
+ "type": "boolean",
1000
+ "example": true
1001
+ }
1002
+ }
1003
+ },
1004
+ "OliveyoungProductStoreInventory": {
1005
+ "type": "object",
1006
+ "properties": {
1007
+ "totalCount": {
1008
+ "type": "integer",
1009
+ "example": 1
1010
+ },
1011
+ "inStockCount": {
1012
+ "type": "integer",
1013
+ "example": 1
1014
+ },
1015
+ "outOfStockCount": {
1016
+ "type": "integer",
1017
+ "example": 0
1018
+ },
1019
+ "notSoldCount": {
1020
+ "type": "integer",
1021
+ "example": 0
1022
+ },
1023
+ "stores": {
1024
+ "type": "array",
1025
+ "items": {
1026
+ "$ref": "#/components/schemas/OliveyoungStockStore"
1027
+ }
1028
+ }
1336
1029
  }
1337
1030
  },
1338
1031
  "OliveyoungStoreSearchResponse": {
@@ -1369,6 +1062,51 @@
1369
1062
  }
1370
1063
  }
1371
1064
  },
1065
+ "OliveyoungProductSearchResponse": {
1066
+ "type": "object",
1067
+ "properties": {
1068
+ "success": {
1069
+ "type": "boolean",
1070
+ "example": true
1071
+ },
1072
+ "data": {
1073
+ "type": "object",
1074
+ "properties": {
1075
+ "keyword": {
1076
+ "type": "string",
1077
+ "example": "마스크팩"
1078
+ },
1079
+ "count": {
1080
+ "type": "integer",
1081
+ "example": 2
1082
+ },
1083
+ "products": {
1084
+ "type": "array",
1085
+ "items": {
1086
+ "$ref": "#/components/schemas/OliveyoungProduct"
1087
+ }
1088
+ }
1089
+ }
1090
+ },
1091
+ "meta": {
1092
+ "type": "object",
1093
+ "properties": {
1094
+ "total": {
1095
+ "type": "integer"
1096
+ },
1097
+ "page": {
1098
+ "type": "integer"
1099
+ },
1100
+ "pageSize": {
1101
+ "type": "integer"
1102
+ },
1103
+ "nextPage": {
1104
+ "type": "boolean"
1105
+ }
1106
+ }
1107
+ }
1108
+ }
1109
+ },
1372
1110
  "OliveyoungInventoryResponse": {
1373
1111
  "type": "object",
1374
1112
  "properties": {
@@ -1396,33 +1134,1321 @@
1396
1134
  }
1397
1135
  }
1398
1136
  },
1399
- "nearbyStores": {
1400
- "type": "object",
1401
- "properties": {
1402
- "totalCount": {
1403
- "type": "integer"
1137
+ "nearbyStores": {
1138
+ "type": "object",
1139
+ "properties": {
1140
+ "totalCount": {
1141
+ "type": "integer"
1142
+ },
1143
+ "stores": {
1144
+ "type": "array",
1145
+ "items": {
1146
+ "$ref": "#/components/schemas/OliveyoungStore"
1147
+ }
1148
+ }
1149
+ }
1150
+ },
1151
+ "inventory": {
1152
+ "type": "object",
1153
+ "properties": {
1154
+ "totalCount": {
1155
+ "type": "integer"
1156
+ },
1157
+ "nextPage": {
1158
+ "type": "boolean"
1159
+ },
1160
+ "stockCheckedCount": {
1161
+ "type": "integer"
1162
+ },
1163
+ "stockUncheckedCount": {
1164
+ "type": "integer"
1165
+ },
1166
+ "inStockCount": {
1167
+ "type": "integer"
1168
+ },
1169
+ "outOfStockCount": {
1170
+ "type": "integer"
1171
+ },
1172
+ "products": {
1173
+ "type": "array",
1174
+ "items": {
1175
+ "$ref": "#/components/schemas/OliveyoungProduct"
1176
+ }
1177
+ }
1178
+ }
1179
+ }
1180
+ }
1181
+ },
1182
+ "meta": {
1183
+ "type": "object",
1184
+ "properties": {
1185
+ "total": {
1186
+ "type": "integer"
1187
+ },
1188
+ "page": {
1189
+ "type": "integer"
1190
+ },
1191
+ "pageSize": {
1192
+ "type": "integer"
1193
+ }
1194
+ }
1195
+ }
1196
+ }
1197
+ },
1198
+ "MegaboxTheater": {
1199
+ "type": "object",
1200
+ "properties": {
1201
+ "theaterId": {
1202
+ "type": "string",
1203
+ "example": "1372"
1204
+ },
1205
+ "theaterName": {
1206
+ "type": "string",
1207
+ "example": "강남"
1208
+ },
1209
+ "address": {
1210
+ "type": "string",
1211
+ "example": "서울특별시 강남구 강남대로 438"
1212
+ },
1213
+ "latitude": {
1214
+ "type": "number",
1215
+ "format": "float",
1216
+ "example": 37.4982
1217
+ },
1218
+ "longitude": {
1219
+ "type": "number",
1220
+ "format": "float",
1221
+ "example": 127.0264
1222
+ },
1223
+ "distanceKm": {
1224
+ "type": "number",
1225
+ "format": "float",
1226
+ "example": 0.5
1227
+ }
1228
+ }
1229
+ },
1230
+ "MegaboxShowtime": {
1231
+ "type": "object",
1232
+ "properties": {
1233
+ "scheduleId": {
1234
+ "type": "string",
1235
+ "example": "2603041372011"
1236
+ },
1237
+ "movieId": {
1238
+ "type": "string",
1239
+ "example": "25104500"
1240
+ },
1241
+ "movieName": {
1242
+ "type": "string",
1243
+ "example": "미키 17"
1244
+ },
1245
+ "theaterId": {
1246
+ "type": "string",
1247
+ "example": "1372"
1248
+ },
1249
+ "theaterName": {
1250
+ "type": "string",
1251
+ "example": "강남"
1252
+ },
1253
+ "playDate": {
1254
+ "type": "string",
1255
+ "example": "20260304"
1256
+ },
1257
+ "startTime": {
1258
+ "type": "string",
1259
+ "example": "09:30"
1260
+ },
1261
+ "endTime": {
1262
+ "type": "string",
1263
+ "example": "11:20"
1264
+ },
1265
+ "totalSeats": {
1266
+ "type": "integer",
1267
+ "example": 120
1268
+ },
1269
+ "remainingSeats": {
1270
+ "type": "integer",
1271
+ "example": 42
1272
+ }
1273
+ }
1274
+ },
1275
+ "MegaboxTheaterSearchResponse": {
1276
+ "type": "object",
1277
+ "properties": {
1278
+ "success": {
1279
+ "type": "boolean",
1280
+ "example": true
1281
+ },
1282
+ "data": {
1283
+ "type": "object",
1284
+ "properties": {
1285
+ "location": {
1286
+ "type": "object",
1287
+ "properties": {
1288
+ "latitude": {
1289
+ "type": "number",
1290
+ "format": "float"
1291
+ },
1292
+ "longitude": {
1293
+ "type": "number",
1294
+ "format": "float"
1295
+ }
1296
+ }
1297
+ },
1298
+ "playDate": {
1299
+ "type": "string"
1300
+ },
1301
+ "areaCode": {
1302
+ "type": "string"
1303
+ },
1304
+ "theaters": {
1305
+ "type": "array",
1306
+ "items": {
1307
+ "$ref": "#/components/schemas/MegaboxTheater"
1308
+ }
1309
+ }
1310
+ }
1311
+ },
1312
+ "meta": {
1313
+ "type": "object",
1314
+ "properties": {
1315
+ "total": {
1316
+ "type": "integer"
1317
+ },
1318
+ "pageSize": {
1319
+ "type": "integer"
1320
+ }
1321
+ }
1322
+ }
1323
+ }
1324
+ },
1325
+ "MegaboxMovieListResponse": {
1326
+ "type": "object",
1327
+ "properties": {
1328
+ "success": {
1329
+ "type": "boolean",
1330
+ "example": true
1331
+ },
1332
+ "data": {
1333
+ "type": "object",
1334
+ "properties": {
1335
+ "playDate": {
1336
+ "type": "string"
1337
+ },
1338
+ "filters": {
1339
+ "type": "object",
1340
+ "properties": {
1341
+ "theaterId": {
1342
+ "type": "string",
1343
+ "nullable": true
1344
+ },
1345
+ "movieId": {
1346
+ "type": "string",
1347
+ "nullable": true
1348
+ },
1349
+ "areaCode": {
1350
+ "type": "string"
1351
+ }
1352
+ }
1353
+ },
1354
+ "theaters": {
1355
+ "type": "array",
1356
+ "items": {
1357
+ "type": "object",
1358
+ "properties": {
1359
+ "theaterId": {
1360
+ "type": "string"
1361
+ },
1362
+ "theaterName": {
1363
+ "type": "string"
1364
+ }
1365
+ }
1366
+ }
1367
+ },
1368
+ "movies": {
1369
+ "type": "array",
1370
+ "items": {
1371
+ "type": "object",
1372
+ "properties": {
1373
+ "movieId": {
1374
+ "type": "string"
1375
+ },
1376
+ "movieName": {
1377
+ "type": "string"
1378
+ },
1379
+ "movieStatus": {
1380
+ "type": "string"
1381
+ }
1382
+ }
1383
+ }
1384
+ },
1385
+ "showtimes": {
1386
+ "type": "array",
1387
+ "items": {
1388
+ "$ref": "#/components/schemas/MegaboxShowtime"
1389
+ }
1390
+ }
1391
+ }
1392
+ },
1393
+ "meta": {
1394
+ "type": "object",
1395
+ "properties": {
1396
+ "total": {
1397
+ "type": "integer"
1398
+ }
1399
+ }
1400
+ }
1401
+ }
1402
+ },
1403
+ "MegaboxSeatListResponse": {
1404
+ "type": "object",
1405
+ "properties": {
1406
+ "success": {
1407
+ "type": "boolean",
1408
+ "example": true
1409
+ },
1410
+ "data": {
1411
+ "type": "object",
1412
+ "properties": {
1413
+ "playDate": {
1414
+ "type": "string"
1415
+ },
1416
+ "filters": {
1417
+ "type": "object",
1418
+ "properties": {
1419
+ "theaterId": {
1420
+ "type": "string",
1421
+ "nullable": true
1422
+ },
1423
+ "movieId": {
1424
+ "type": "string",
1425
+ "nullable": true
1426
+ },
1427
+ "areaCode": {
1428
+ "type": "string"
1429
+ }
1430
+ }
1431
+ },
1432
+ "seats": {
1433
+ "type": "array",
1434
+ "items": {
1435
+ "$ref": "#/components/schemas/MegaboxShowtime"
1436
+ }
1437
+ }
1438
+ }
1439
+ },
1440
+ "meta": {
1441
+ "type": "object",
1442
+ "properties": {
1443
+ "total": {
1444
+ "type": "integer"
1445
+ },
1446
+ "pageSize": {
1447
+ "type": "integer"
1448
+ }
1449
+ }
1450
+ }
1451
+ }
1452
+ },
1453
+ "CuStore": {
1454
+ "type": "object",
1455
+ "description": "CU 매장 정보",
1456
+ "properties": {
1457
+ "storeCode": {
1458
+ "type": "string",
1459
+ "example": "28376"
1460
+ },
1461
+ "storeName": {
1462
+ "type": "string",
1463
+ "example": "중앙하이츠빌점"
1464
+ },
1465
+ "phone": {
1466
+ "type": "string",
1467
+ "example": "0315088023"
1468
+ },
1469
+ "address": {
1470
+ "type": "string",
1471
+ "example": "경기도 안산시 단원구 안산천서로 23"
1472
+ },
1473
+ "latitude": {
1474
+ "type": "number",
1475
+ "format": "float",
1476
+ "example": 37.318482
1477
+ },
1478
+ "longitude": {
1479
+ "type": "number",
1480
+ "format": "float",
1481
+ "example": 126.841838
1482
+ },
1483
+ "distanceM": {
1484
+ "type": "number",
1485
+ "example": 97
1486
+ },
1487
+ "stock": {
1488
+ "type": "integer",
1489
+ "example": 10
1490
+ },
1491
+ "deliveryYn": {
1492
+ "type": "boolean",
1493
+ "example": true
1494
+ },
1495
+ "pickupYn": {
1496
+ "type": "boolean",
1497
+ "example": false
1498
+ },
1499
+ "reserveYn": {
1500
+ "type": "boolean",
1501
+ "example": false
1502
+ }
1503
+ }
1504
+ },
1505
+ "CuInventoryItem": {
1506
+ "type": "object",
1507
+ "description": "CU 재고 검색 상품",
1508
+ "properties": {
1509
+ "itemCode": {
1510
+ "type": "string",
1511
+ "example": "8801728108946"
1512
+ },
1513
+ "itemName": {
1514
+ "type": "string",
1515
+ "example": "바삭한 감자칩"
1516
+ },
1517
+ "price": {
1518
+ "type": "integer",
1519
+ "example": 1700
1520
+ },
1521
+ "pickupYn": {
1522
+ "type": "boolean",
1523
+ "example": true
1524
+ },
1525
+ "deliveryYn": {
1526
+ "type": "boolean",
1527
+ "example": true
1528
+ },
1529
+ "reserveYn": {
1530
+ "type": "boolean",
1531
+ "example": false
1532
+ }
1533
+ }
1534
+ },
1535
+ "CuStoreSearchResponse": {
1536
+ "type": "object",
1537
+ "properties": {
1538
+ "success": {
1539
+ "type": "boolean",
1540
+ "example": true
1541
+ },
1542
+ "data": {
1543
+ "type": "object",
1544
+ "properties": {
1545
+ "location": {
1546
+ "type": "object",
1547
+ "properties": {
1548
+ "latitude": {
1549
+ "type": "number",
1550
+ "format": "float"
1551
+ },
1552
+ "longitude": {
1553
+ "type": "number",
1554
+ "format": "float"
1555
+ }
1556
+ }
1557
+ },
1558
+ "keyword": {
1559
+ "type": "string"
1560
+ },
1561
+ "stores": {
1562
+ "type": "array",
1563
+ "items": {
1564
+ "$ref": "#/components/schemas/CuStore"
1565
+ }
1566
+ }
1567
+ }
1568
+ },
1569
+ "meta": {
1570
+ "type": "object",
1571
+ "properties": {
1572
+ "total": {
1573
+ "type": "integer"
1574
+ },
1575
+ "pageSize": {
1576
+ "type": "integer"
1577
+ }
1578
+ }
1579
+ }
1580
+ }
1581
+ },
1582
+ "CuInventoryResponse": {
1583
+ "type": "object",
1584
+ "properties": {
1585
+ "success": {
1586
+ "type": "boolean",
1587
+ "example": true
1588
+ },
1589
+ "data": {
1590
+ "type": "object",
1591
+ "properties": {
1592
+ "keyword": {
1593
+ "type": "string",
1594
+ "example": "과자"
1595
+ },
1596
+ "location": {
1597
+ "type": "object",
1598
+ "properties": {
1599
+ "latitude": {
1600
+ "type": "number",
1601
+ "format": "float"
1602
+ },
1603
+ "longitude": {
1604
+ "type": "number",
1605
+ "format": "float"
1606
+ }
1607
+ }
1608
+ },
1609
+ "nearbyStores": {
1610
+ "type": "object",
1611
+ "properties": {
1612
+ "totalCount": {
1613
+ "type": "integer"
1614
+ },
1615
+ "stores": {
1616
+ "type": "array",
1617
+ "items": {
1618
+ "$ref": "#/components/schemas/CuStore"
1619
+ }
1620
+ }
1621
+ }
1622
+ },
1623
+ "inventory": {
1624
+ "type": "object",
1625
+ "properties": {
1626
+ "totalCount": {
1627
+ "type": "integer"
1628
+ },
1629
+ "spellModifyYn": {
1630
+ "type": "string",
1631
+ "example": "Y"
1632
+ },
1633
+ "items": {
1634
+ "type": "array",
1635
+ "items": {
1636
+ "$ref": "#/components/schemas/CuInventoryItem"
1637
+ }
1638
+ }
1639
+ }
1640
+ }
1641
+ }
1642
+ },
1643
+ "meta": {
1644
+ "type": "object",
1645
+ "properties": {
1646
+ "total": {
1647
+ "type": "integer"
1648
+ },
1649
+ "page": {
1650
+ "type": "integer"
1651
+ },
1652
+ "pageSize": {
1653
+ "type": "integer"
1654
+ }
1655
+ }
1656
+ }
1657
+ }
1658
+ },
1659
+ "Emart24Store": {
1660
+ "type": "object",
1661
+ "properties": {
1662
+ "storeCode": {
1663
+ "type": "string",
1664
+ "example": "28339"
1665
+ },
1666
+ "storeName": {
1667
+ "type": "string",
1668
+ "example": "강남스퀘어점"
1669
+ },
1670
+ "address": {
1671
+ "type": "string",
1672
+ "example": "서울특별시 강남구 강남대로 396"
1673
+ },
1674
+ "phone": {
1675
+ "type": "string",
1676
+ "example": "02-000-0000"
1677
+ },
1678
+ "latitude": {
1679
+ "type": "number",
1680
+ "format": "float",
1681
+ "example": 37.4982
1682
+ },
1683
+ "longitude": {
1684
+ "type": "number",
1685
+ "format": "float",
1686
+ "example": 127.0276
1687
+ },
1688
+ "service24h": {
1689
+ "type": "boolean",
1690
+ "example": true
1691
+ },
1692
+ "distanceM": {
1693
+ "type": "number",
1694
+ "nullable": true,
1695
+ "example": 120
1696
+ }
1697
+ }
1698
+ },
1699
+ "Emart24Product": {
1700
+ "type": "object",
1701
+ "properties": {
1702
+ "pluCd": {
1703
+ "type": "string",
1704
+ "example": "8800244010504"
1705
+ },
1706
+ "goodsName": {
1707
+ "type": "string",
1708
+ "example": "두바이초콜릿"
1709
+ },
1710
+ "originPrice": {
1711
+ "type": "integer",
1712
+ "example": 3500
1713
+ },
1714
+ "viewPrice": {
1715
+ "type": "integer",
1716
+ "example": 3000
1717
+ },
1718
+ "category": {
1719
+ "type": "string",
1720
+ "example": "간식"
1721
+ },
1722
+ "kind": {
1723
+ "type": "string",
1724
+ "example": "초콜릿"
1725
+ }
1726
+ }
1727
+ },
1728
+ "Emart24StoreSearchResponse": {
1729
+ "type": "object",
1730
+ "properties": {
1731
+ "success": {
1732
+ "type": "boolean",
1733
+ "example": true
1734
+ },
1735
+ "data": {
1736
+ "type": "object",
1737
+ "properties": {
1738
+ "stores": {
1739
+ "type": "array",
1740
+ "items": {
1741
+ "$ref": "#/components/schemas/Emart24Store"
1742
+ }
1743
+ }
1744
+ }
1745
+ },
1746
+ "meta": {
1747
+ "type": "object",
1748
+ "properties": {
1749
+ "total": {
1750
+ "type": "integer"
1751
+ },
1752
+ "page": {
1753
+ "type": "integer"
1754
+ },
1755
+ "pageSize": {
1756
+ "type": "integer"
1757
+ }
1758
+ }
1759
+ }
1760
+ }
1761
+ },
1762
+ "Emart24ProductSearchResponse": {
1763
+ "type": "object",
1764
+ "properties": {
1765
+ "success": {
1766
+ "type": "boolean",
1767
+ "example": true
1768
+ },
1769
+ "data": {
1770
+ "type": "object",
1771
+ "properties": {
1772
+ "products": {
1773
+ "type": "array",
1774
+ "items": {
1775
+ "$ref": "#/components/schemas/Emart24Product"
1776
+ }
1777
+ }
1778
+ }
1779
+ },
1780
+ "meta": {
1781
+ "type": "object",
1782
+ "properties": {
1783
+ "total": {
1784
+ "type": "integer"
1785
+ },
1786
+ "page": {
1787
+ "type": "integer"
1788
+ },
1789
+ "pageSize": {
1790
+ "type": "integer"
1791
+ }
1792
+ }
1793
+ }
1794
+ }
1795
+ },
1796
+ "Emart24InventoryResponse": {
1797
+ "type": "object",
1798
+ "properties": {
1799
+ "success": {
1800
+ "type": "boolean",
1801
+ "example": true
1802
+ },
1803
+ "data": {
1804
+ "type": "object",
1805
+ "properties": {
1806
+ "keyword": {
1807
+ "type": "string",
1808
+ "example": "고양이 츄르"
1809
+ },
1810
+ "pluCd": {
1811
+ "type": "string",
1812
+ "example": "8800244010504"
1813
+ },
1814
+ "productCandidates": {
1815
+ "type": "array",
1816
+ "items": {
1817
+ "$ref": "#/components/schemas/Emart24Product"
1818
+ }
1819
+ },
1820
+ "location": {
1821
+ "type": "object",
1822
+ "nullable": true,
1823
+ "properties": {
1824
+ "latitude": {
1825
+ "type": "number",
1826
+ "format": "float"
1827
+ },
1828
+ "longitude": {
1829
+ "type": "number",
1830
+ "format": "float"
1831
+ }
1832
+ }
1833
+ },
1834
+ "storeFilters": {
1835
+ "type": "object",
1836
+ "properties": {
1837
+ "storeKeyword": {
1838
+ "type": "string",
1839
+ "example": "안산 중앙역"
1840
+ },
1841
+ "appliedStoreKeyword": {
1842
+ "type": "string",
1843
+ "example": "안산중앙역"
1844
+ },
1845
+ "area1": {
1846
+ "type": "string",
1847
+ "example": "경기도"
1848
+ },
1849
+ "area2": {
1850
+ "type": "string",
1851
+ "example": "안산시"
1852
+ },
1853
+ "service24h": {
1854
+ "type": "boolean",
1855
+ "example": false
1856
+ },
1857
+ "storeLimit": {
1858
+ "type": "integer",
1859
+ "example": 10
1860
+ },
1861
+ "directBizNos": {
1862
+ "type": "array",
1863
+ "items": {
1864
+ "type": "string",
1865
+ "example": "28339"
1866
+ }
1867
+ }
1868
+ }
1869
+ },
1870
+ "nearbyStores": {
1871
+ "type": "object",
1872
+ "properties": {
1873
+ "totalCount": {
1874
+ "type": "integer",
1875
+ "example": 3
1876
+ },
1877
+ "stores": {
1878
+ "type": "array",
1879
+ "items": {
1880
+ "$ref": "#/components/schemas/Emart24Store"
1881
+ }
1882
+ }
1883
+ }
1884
+ },
1885
+ "goodsInfo": {
1886
+ "type": "object",
1887
+ "nullable": true
1888
+ },
1889
+ "count": {
1890
+ "type": "integer",
1891
+ "example": 1
1892
+ },
1893
+ "stores": {
1894
+ "type": "array",
1895
+ "items": {
1896
+ "type": "object",
1897
+ "properties": {
1898
+ "bizNo": {
1899
+ "type": "string",
1900
+ "example": "28339"
1901
+ },
1902
+ "bizQty": {
1903
+ "type": "integer",
1904
+ "example": 3
1905
+ },
1906
+ "storeName": {
1907
+ "type": "string",
1908
+ "example": "강남스퀘어점"
1909
+ },
1910
+ "address": {
1911
+ "type": "string"
1912
+ },
1913
+ "phone": {
1914
+ "type": "string"
1915
+ },
1916
+ "distanceM": {
1917
+ "type": "number",
1918
+ "nullable": true,
1919
+ "example": 120
1920
+ }
1921
+ }
1922
+ }
1923
+ }
1924
+ }
1925
+ }
1926
+ }
1927
+ },
1928
+ "LotteMartStore": {
1929
+ "type": "object",
1930
+ "properties": {
1931
+ "area": {
1932
+ "type": "string",
1933
+ "example": "서울"
1934
+ },
1935
+ "storeCode": {
1936
+ "type": "string",
1937
+ "example": "2301"
1938
+ },
1939
+ "storeName": {
1940
+ "type": "string",
1941
+ "example": "강변점"
1942
+ },
1943
+ "brandVariant": {
1944
+ "type": "string",
1945
+ "example": "lottemart"
1946
+ },
1947
+ "address": {
1948
+ "type": "string",
1949
+ "example": "서울 광진구 광나루로 56길 85 테크노마트 B2"
1950
+ },
1951
+ "phone": {
1952
+ "type": "string",
1953
+ "example": "02-3424-2502"
1954
+ },
1955
+ "openTime": {
1956
+ "type": "string",
1957
+ "example": "10:00~23:00"
1958
+ },
1959
+ "closedDays": {
1960
+ "type": "string",
1961
+ "example": "03/08(일), 03/22(일)"
1962
+ },
1963
+ "parkingType": {
1964
+ "type": "string",
1965
+ "example": "유료"
1966
+ },
1967
+ "parkingDetails": {
1968
+ "type": "string",
1969
+ "example": "최초 무료주차 : 1시간"
1970
+ },
1971
+ "detailUrl": {
1972
+ "type": "string",
1973
+ "example": "/mobiledowa/market/detail_shop.asp?werks=2301"
1974
+ },
1975
+ "latitude": {
1976
+ "type": "number",
1977
+ "format": "float",
1978
+ "example": 37.5354
1979
+ },
1980
+ "longitude": {
1981
+ "type": "number",
1982
+ "format": "float",
1983
+ "example": 127.0958
1984
+ },
1985
+ "distanceM": {
1986
+ "type": "number",
1987
+ "nullable": true,
1988
+ "example": 530
1989
+ }
1990
+ }
1991
+ },
1992
+ "LotteMartProduct": {
1993
+ "type": "object",
1994
+ "properties": {
1995
+ "area": {
1996
+ "type": "string",
1997
+ "example": "서울"
1998
+ },
1999
+ "storeCode": {
2000
+ "type": "string",
2001
+ "example": "2301"
2002
+ },
2003
+ "storeName": {
2004
+ "type": "string",
2005
+ "example": "강변점"
2006
+ },
2007
+ "keyword": {
2008
+ "type": "string",
2009
+ "example": "콜라"
2010
+ },
2011
+ "productName": {
2012
+ "type": "string",
2013
+ "example": "코카콜라"
2014
+ },
2015
+ "barcode": {
2016
+ "type": "string",
2017
+ "example": "8801094011307"
2018
+ },
2019
+ "spec": {
2020
+ "type": "string",
2021
+ "example": "1.2L"
2022
+ },
2023
+ "manufacturer": {
2024
+ "type": "string",
2025
+ "example": "코카콜라음료 주식회사"
2026
+ },
2027
+ "price": {
2028
+ "type": "integer",
2029
+ "example": 2980
2030
+ },
2031
+ "stockQuantity": {
2032
+ "type": "integer",
2033
+ "example": 20
2034
+ }
2035
+ }
2036
+ },
2037
+ "LotteMartStoreSearchResponse": {
2038
+ "type": "object",
2039
+ "properties": {
2040
+ "success": {
2041
+ "type": "boolean",
2042
+ "example": true
2043
+ },
2044
+ "data": {
2045
+ "type": "object",
2046
+ "properties": {
2047
+ "stores": {
2048
+ "type": "array",
2049
+ "items": {
2050
+ "$ref": "#/components/schemas/LotteMartStore"
2051
+ }
2052
+ }
2053
+ }
2054
+ },
2055
+ "meta": {
2056
+ "type": "object",
2057
+ "properties": {
2058
+ "total": {
2059
+ "type": "integer"
2060
+ },
2061
+ "page": {
2062
+ "type": "integer"
2063
+ },
2064
+ "pageSize": {
2065
+ "type": "integer"
2066
+ }
2067
+ }
2068
+ }
2069
+ }
2070
+ },
2071
+ "LotteMartProductSearchResponse": {
2072
+ "type": "object",
2073
+ "properties": {
2074
+ "success": {
2075
+ "type": "boolean",
2076
+ "example": true
2077
+ },
2078
+ "data": {
2079
+ "type": "object",
2080
+ "properties": {
2081
+ "products": {
2082
+ "type": "array",
2083
+ "items": {
2084
+ "$ref": "#/components/schemas/LotteMartProduct"
2085
+ }
2086
+ }
2087
+ }
2088
+ },
2089
+ "meta": {
2090
+ "type": "object",
2091
+ "properties": {
2092
+ "total": {
2093
+ "type": "integer"
2094
+ },
2095
+ "page": {
2096
+ "type": "integer"
2097
+ },
2098
+ "pageSize": {
2099
+ "type": "integer"
2100
+ }
2101
+ }
2102
+ }
2103
+ }
2104
+ },
2105
+ "Gs25Store": {
2106
+ "type": "object",
2107
+ "properties": {
2108
+ "storeCode": {
2109
+ "type": "string",
2110
+ "example": "VE463"
2111
+ },
2112
+ "storeName": {
2113
+ "type": "string",
2114
+ "example": "강남역점"
2115
+ },
2116
+ "address": {
2117
+ "type": "string",
2118
+ "example": "서울특별시 강남구 강남대로 396"
2119
+ },
2120
+ "phone": {
2121
+ "type": "string",
2122
+ "example": "02-1234-5678"
2123
+ },
2124
+ "latitude": {
2125
+ "type": "number",
2126
+ "format": "float",
2127
+ "example": 37.4982
2128
+ },
2129
+ "longitude": {
2130
+ "type": "number",
2131
+ "format": "float",
2132
+ "example": 127.0276
2133
+ },
2134
+ "realStockQuantity": {
2135
+ "type": "integer",
2136
+ "example": 3
2137
+ },
2138
+ "distanceM": {
2139
+ "type": "number",
2140
+ "nullable": true,
2141
+ "example": 120
2142
+ },
2143
+ "propertyNames": {
2144
+ "type": "array",
2145
+ "items": {
2146
+ "type": "string"
2147
+ },
2148
+ "example": [
2149
+ "반값택배픽업",
2150
+ "와인25플러스"
2151
+ ]
2152
+ }
2153
+ }
2154
+ },
2155
+ "Gs25ProductCandidate": {
2156
+ "type": "object",
2157
+ "properties": {
2158
+ "name": {
2159
+ "type": "string",
2160
+ "example": "오리온)오감자50G"
2161
+ },
2162
+ "sellPrice": {
2163
+ "type": "integer",
2164
+ "nullable": true,
2165
+ "example": 1700
2166
+ },
2167
+ "matchedStoreCount": {
2168
+ "type": "integer",
2169
+ "example": 120
2170
+ },
2171
+ "inStockStoreCount": {
2172
+ "type": "integer",
2173
+ "example": 42
2174
+ },
2175
+ "totalStockQuantity": {
2176
+ "type": "integer",
2177
+ "example": 110
2178
+ }
2179
+ }
2180
+ },
2181
+ "Gs25StoreSearchResponse": {
2182
+ "type": "object",
2183
+ "properties": {
2184
+ "success": {
2185
+ "type": "boolean",
2186
+ "example": true
2187
+ },
2188
+ "data": {
2189
+ "type": "object",
2190
+ "properties": {
2191
+ "stores": {
2192
+ "type": "array",
2193
+ "items": {
2194
+ "$ref": "#/components/schemas/Gs25Store"
2195
+ }
2196
+ }
2197
+ }
2198
+ },
2199
+ "meta": {
2200
+ "type": "object",
2201
+ "properties": {
2202
+ "total": {
2203
+ "type": "integer"
2204
+ },
2205
+ "pageSize": {
2206
+ "type": "integer"
2207
+ }
2208
+ }
2209
+ }
2210
+ }
2211
+ },
2212
+ "Gs25ProductSearchResponse": {
2213
+ "type": "object",
2214
+ "properties": {
2215
+ "success": {
2216
+ "type": "boolean",
2217
+ "example": true
2218
+ },
2219
+ "data": {
2220
+ "type": "object",
2221
+ "properties": {
2222
+ "products": {
2223
+ "type": "array",
2224
+ "items": {
2225
+ "$ref": "#/components/schemas/Gs25ProductCandidate"
2226
+ }
2227
+ }
2228
+ }
2229
+ },
2230
+ "meta": {
2231
+ "type": "object",
2232
+ "properties": {
2233
+ "total": {
2234
+ "type": "integer"
2235
+ },
2236
+ "pageSize": {
2237
+ "type": "integer"
2238
+ }
2239
+ }
2240
+ }
2241
+ }
2242
+ },
2243
+ "Gs25InventoryResponse": {
2244
+ "type": "object",
2245
+ "properties": {
2246
+ "success": {
2247
+ "type": "boolean",
2248
+ "example": true
2249
+ },
2250
+ "data": {
2251
+ "type": "object",
2252
+ "properties": {
2253
+ "keyword": {
2254
+ "type": "string",
2255
+ "example": "오감자"
2256
+ },
2257
+ "product": {
2258
+ "type": "object",
2259
+ "properties": {
2260
+ "name": {
2261
+ "type": "string",
2262
+ "nullable": true,
2263
+ "example": "오리온)오감자50G"
2264
+ },
2265
+ "sellPrice": {
2266
+ "type": "integer",
2267
+ "nullable": true,
2268
+ "example": 1700
2269
+ }
2270
+ }
2271
+ },
2272
+ "inventory": {
2273
+ "type": "object",
2274
+ "properties": {
2275
+ "totalStoreCount": {
2276
+ "type": "integer",
2277
+ "example": 17684
2278
+ },
2279
+ "matchedStoreCount": {
2280
+ "type": "integer",
2281
+ "example": 100
2282
+ },
2283
+ "inStockStoreCount": {
2284
+ "type": "integer",
2285
+ "example": 35
2286
+ },
2287
+ "totalStockQuantity": {
2288
+ "type": "integer",
2289
+ "example": 90
2290
+ },
2291
+ "stores": {
2292
+ "type": "array",
2293
+ "items": {
2294
+ "$ref": "#/components/schemas/Gs25Store"
2295
+ }
2296
+ }
2297
+ }
2298
+ }
2299
+ }
2300
+ }
2301
+ }
2302
+ },
2303
+ "SevenElevenProduct": {
2304
+ "type": "object",
2305
+ "properties": {
2306
+ "itemCode": {
2307
+ "type": "string",
2308
+ "example": "8801056252243"
2309
+ },
2310
+ "itemName": {
2311
+ "type": "string",
2312
+ "example": "칠성)핫식스더킹퍼플500ml"
2313
+ },
2314
+ "salePrice": {
2315
+ "type": "integer",
2316
+ "nullable": true,
2317
+ "example": 3000
2318
+ },
2319
+ "imageUrl": {
2320
+ "type": "string",
2321
+ "nullable": true,
2322
+ "example": ""
2323
+ }
2324
+ }
2325
+ },
2326
+ "SevenElevenStockError": {
2327
+ "type": "object",
2328
+ "nullable": true,
2329
+ "properties": {
2330
+ "cause": {
2331
+ "type": "string",
2332
+ "example": "api"
2333
+ },
2334
+ "httpStatus": {
2335
+ "type": "integer",
2336
+ "nullable": true,
2337
+ "example": 400
2338
+ },
2339
+ "code": {
2340
+ "type": "integer",
2341
+ "nullable": true,
2342
+ "example": 501
2343
+ },
2344
+ "message": {
2345
+ "type": "string",
2346
+ "example": "RSA 복호화 실패"
2347
+ },
2348
+ "raw": {
2349
+ "type": "string",
2350
+ "nullable": true
2351
+ }
2352
+ }
2353
+ },
2354
+ "SevenElevenStoreInventory": {
2355
+ "type": "object",
2356
+ "properties": {
2357
+ "storeCode": {
2358
+ "type": "string",
2359
+ "example": "54928"
2360
+ },
2361
+ "storeName": {
2362
+ "type": "string",
2363
+ "example": "안산중앙일번가점"
2364
+ },
2365
+ "address": {
2366
+ "type": "string",
2367
+ "example": "경기 안산시 단원구 중앙대로 907 2동 2121호"
2368
+ },
2369
+ "latitude": {
2370
+ "type": "number",
2371
+ "format": "float",
2372
+ "example": 37.317371500357
2373
+ },
2374
+ "longitude": {
2375
+ "type": "number",
2376
+ "format": "float",
2377
+ "example": 126.837004318586
2378
+ },
2379
+ "stockQuantity": {
2380
+ "type": "integer",
2381
+ "example": 14
2382
+ },
2383
+ "isSoldOut": {
2384
+ "type": "boolean",
2385
+ "example": false
2386
+ },
2387
+ "distanceM": {
2388
+ "type": "integer",
2389
+ "nullable": true,
2390
+ "example": 100
2391
+ }
2392
+ }
2393
+ },
2394
+ "SevenElevenInventoryResponse": {
2395
+ "type": "object",
2396
+ "properties": {
2397
+ "success": {
2398
+ "type": "boolean",
2399
+ "example": true
2400
+ },
2401
+ "data": {
2402
+ "type": "object",
2403
+ "properties": {
2404
+ "keyword": {
2405
+ "type": "string",
2406
+ "example": "핫식스"
2407
+ },
2408
+ "storeKeyword": {
2409
+ "type": "string",
2410
+ "example": "안산 중앙역"
2411
+ },
2412
+ "product": {
2413
+ "anyOf": [
2414
+ {
2415
+ "$ref": "#/components/schemas/SevenElevenProduct"
1404
2416
  },
1405
- "stores": {
1406
- "type": "array",
1407
- "items": {
1408
- "$ref": "#/components/schemas/OliveyoungStore"
1409
- }
2417
+ {
2418
+ "type": "null"
1410
2419
  }
1411
- }
2420
+ ]
2421
+ },
2422
+ "stockAvailable": {
2423
+ "type": "boolean",
2424
+ "example": true
2425
+ },
2426
+ "stockError": {
2427
+ "$ref": "#/components/schemas/SevenElevenStockError"
2428
+ },
2429
+ "note": {
2430
+ "type": "string",
2431
+ "example": "실시간 재고 데이터가 포함되어 있습니다."
1412
2432
  },
1413
2433
  "inventory": {
1414
2434
  "type": "object",
1415
2435
  "properties": {
1416
- "totalCount": {
1417
- "type": "integer"
2436
+ "totalStoreCount": {
2437
+ "type": "integer",
2438
+ "example": 4
1418
2439
  },
1419
- "nextPage": {
1420
- "type": "boolean"
2440
+ "inStockStoreCount": {
2441
+ "type": "integer",
2442
+ "example": 3
1421
2443
  },
1422
- "products": {
2444
+ "count": {
2445
+ "type": "integer",
2446
+ "example": 4
2447
+ },
2448
+ "stores": {
1423
2449
  "type": "array",
1424
2450
  "items": {
1425
- "$ref": "#/components/schemas/OliveyoungProduct"
2451
+ "$ref": "#/components/schemas/SevenElevenStoreInventory"
1426
2452
  }
1427
2453
  }
1428
2454
  }
@@ -1433,42 +2459,49 @@
1433
2459
  "type": "object",
1434
2460
  "properties": {
1435
2461
  "total": {
1436
- "type": "integer"
1437
- },
1438
- "page": {
1439
- "type": "integer"
2462
+ "type": "integer",
2463
+ "example": 4
1440
2464
  },
1441
2465
  "pageSize": {
1442
- "type": "integer"
2466
+ "type": "integer",
2467
+ "example": 10
1443
2468
  }
1444
2469
  }
1445
2470
  }
1446
2471
  }
1447
2472
  },
1448
- "MegaboxTheater": {
2473
+ "LotteCinemaTheater": {
1449
2474
  "type": "object",
1450
2475
  "properties": {
1451
2476
  "theaterId": {
1452
2477
  "type": "string",
1453
- "example": "1372"
2478
+ "example": "1016"
1454
2479
  },
1455
2480
  "theaterName": {
1456
2481
  "type": "string",
1457
- "example": "강남"
2482
+ "example": "월드타워"
2483
+ },
2484
+ "regionCode": {
2485
+ "type": "string",
2486
+ "example": "1"
2487
+ },
2488
+ "regionDetailCode": {
2489
+ "type": "string",
2490
+ "example": "0001"
1458
2491
  },
1459
2492
  "address": {
1460
2493
  "type": "string",
1461
- "example": "서울특별시 강남구 강남대로 438"
2494
+ "example": "서울 송파구 올림픽로 300"
1462
2495
  },
1463
2496
  "latitude": {
1464
2497
  "type": "number",
1465
2498
  "format": "float",
1466
- "example": 37.4982
2499
+ "example": 37.5132941
1467
2500
  },
1468
2501
  "longitude": {
1469
2502
  "type": "number",
1470
2503
  "format": "float",
1471
- "example": 127.0264
2504
+ "example": 127.104215
1472
2505
  },
1473
2506
  "distanceKm": {
1474
2507
  "type": "number",
@@ -1477,52 +2510,120 @@
1477
2510
  }
1478
2511
  }
1479
2512
  },
1480
- "MegaboxShowtime": {
2513
+ "LotteCinemaResolvedLocation": {
1481
2514
  "type": "object",
1482
2515
  "properties": {
1483
- "scheduleId": {
2516
+ "keyword": {
1484
2517
  "type": "string",
1485
- "example": "2603041372011"
2518
+ "nullable": true,
2519
+ "example": "안산 중앙역"
1486
2520
  },
2521
+ "latitude": {
2522
+ "type": "number",
2523
+ "format": "float",
2524
+ "nullable": true,
2525
+ "example": 37.3172
2526
+ },
2527
+ "longitude": {
2528
+ "type": "number",
2529
+ "format": "float",
2530
+ "nullable": true,
2531
+ "example": 126.839
2532
+ },
2533
+ "geocodeUsed": {
2534
+ "type": "boolean",
2535
+ "example": true
2536
+ },
2537
+ "formattedAddress": {
2538
+ "type": "string",
2539
+ "nullable": true,
2540
+ "example": "대한민국 경기도 안산시 단원구 고잔동 535"
2541
+ }
2542
+ }
2543
+ },
2544
+ "LotteCinemaMovie": {
2545
+ "type": "object",
2546
+ "properties": {
1487
2547
  "movieId": {
1488
2548
  "type": "string",
1489
- "example": "25104500"
2549
+ "example": "23816"
1490
2550
  },
1491
2551
  "movieName": {
1492
2552
  "type": "string",
1493
- "example": "미키 17"
2553
+ "example": "왕과 사는 남자"
2554
+ },
2555
+ "rating": {
2556
+ "type": "string",
2557
+ "example": "12세이상관람가"
2558
+ },
2559
+ "durationMinutes": {
2560
+ "type": "integer",
2561
+ "example": 127
2562
+ },
2563
+ "releaseDate": {
2564
+ "type": "string",
2565
+ "example": "2026-03-10"
2566
+ }
2567
+ }
2568
+ },
2569
+ "LotteCinemaShowtime": {
2570
+ "type": "object",
2571
+ "properties": {
2572
+ "scheduleId": {
2573
+ "type": "string",
2574
+ "example": "20260310-1016-1201-1"
1494
2575
  },
1495
2576
  "theaterId": {
1496
2577
  "type": "string",
1497
- "example": "1372"
2578
+ "example": "1016"
1498
2579
  },
1499
2580
  "theaterName": {
1500
2581
  "type": "string",
1501
- "example": "강남"
2582
+ "example": "월드타워"
2583
+ },
2584
+ "movieId": {
2585
+ "type": "string",
2586
+ "example": "23816"
2587
+ },
2588
+ "movieName": {
2589
+ "type": "string",
2590
+ "example": "왕과 사는 남자"
2591
+ },
2592
+ "screenId": {
2593
+ "type": "string",
2594
+ "example": "1201"
2595
+ },
2596
+ "screenName": {
2597
+ "type": "string",
2598
+ "example": "1관 샤롯데"
1502
2599
  },
1503
2600
  "playDate": {
1504
2601
  "type": "string",
1505
- "example": "20260304"
2602
+ "example": "20260310"
1506
2603
  },
1507
2604
  "startTime": {
1508
2605
  "type": "string",
1509
- "example": "09:30"
2606
+ "example": "10:40"
1510
2607
  },
1511
2608
  "endTime": {
1512
2609
  "type": "string",
1513
- "example": "11:20"
2610
+ "example": "12:47"
1514
2611
  },
1515
2612
  "totalSeats": {
1516
2613
  "type": "integer",
1517
- "example": 120
2614
+ "example": 32
2615
+ },
2616
+ "bookedSeats": {
2617
+ "type": "integer",
2618
+ "example": 28
1518
2619
  },
1519
2620
  "remainingSeats": {
1520
2621
  "type": "integer",
1521
- "example": 42
2622
+ "example": 4
1522
2623
  }
1523
2624
  }
1524
2625
  },
1525
- "MegaboxTheaterSearchResponse": {
2626
+ "LotteCinemaTheaterSearchResponse": {
1526
2627
  "type": "object",
1527
2628
  "properties": {
1528
2629
  "success": {
@@ -1532,29 +2633,34 @@
1532
2633
  "data": {
1533
2634
  "type": "object",
1534
2635
  "properties": {
1535
- "location": {
1536
- "type": "object",
1537
- "properties": {
1538
- "latitude": {
1539
- "type": "number",
1540
- "format": "float"
1541
- },
1542
- "longitude": {
1543
- "type": "number",
1544
- "format": "float"
1545
- }
1546
- }
2636
+ "keyword": {
2637
+ "type": "string",
2638
+ "nullable": true
1547
2639
  },
1548
- "playDate": {
1549
- "type": "string"
2640
+ "latitude": {
2641
+ "type": "number",
2642
+ "format": "float",
2643
+ "nullable": true
1550
2644
  },
1551
- "areaCode": {
2645
+ "longitude": {
2646
+ "type": "number",
2647
+ "format": "float",
2648
+ "nullable": true
2649
+ },
2650
+ "geocodeUsed": {
2651
+ "type": "boolean"
2652
+ },
2653
+ "formattedAddress": {
2654
+ "type": "string",
2655
+ "nullable": true
2656
+ },
2657
+ "playDate": {
1552
2658
  "type": "string"
1553
2659
  },
1554
2660
  "theaters": {
1555
2661
  "type": "array",
1556
2662
  "items": {
1557
- "$ref": "#/components/schemas/MegaboxTheater"
2663
+ "$ref": "#/components/schemas/LotteCinemaTheater"
1558
2664
  }
1559
2665
  }
1560
2666
  }
@@ -1572,7 +2678,7 @@
1572
2678
  }
1573
2679
  }
1574
2680
  },
1575
- "MegaboxMovieListResponse": {
2681
+ "LotteCinemaMovieListResponse": {
1576
2682
  "type": "object",
1577
2683
  "properties": {
1578
2684
  "success": {
@@ -1596,46 +2702,48 @@
1596
2702
  "type": "string",
1597
2703
  "nullable": true
1598
2704
  },
1599
- "areaCode": {
1600
- "type": "string"
2705
+ "keyword": {
2706
+ "type": "string",
2707
+ "nullable": true
2708
+ },
2709
+ "latitude": {
2710
+ "type": "number",
2711
+ "format": "float",
2712
+ "nullable": true
2713
+ },
2714
+ "longitude": {
2715
+ "type": "number",
2716
+ "format": "float",
2717
+ "nullable": true
1601
2718
  }
1602
2719
  }
1603
2720
  },
2721
+ "resolvedTheater": {
2722
+ "anyOf": [
2723
+ {
2724
+ "$ref": "#/components/schemas/LotteCinemaTheater"
2725
+ },
2726
+ {
2727
+ "type": "null"
2728
+ }
2729
+ ]
2730
+ },
1604
2731
  "theaters": {
1605
2732
  "type": "array",
1606
2733
  "items": {
1607
- "type": "object",
1608
- "properties": {
1609
- "theaterId": {
1610
- "type": "string"
1611
- },
1612
- "theaterName": {
1613
- "type": "string"
1614
- }
1615
- }
2734
+ "$ref": "#/components/schemas/LotteCinemaTheater"
1616
2735
  }
1617
2736
  },
1618
2737
  "movies": {
1619
2738
  "type": "array",
1620
2739
  "items": {
1621
- "type": "object",
1622
- "properties": {
1623
- "movieId": {
1624
- "type": "string"
1625
- },
1626
- "movieName": {
1627
- "type": "string"
1628
- },
1629
- "movieStatus": {
1630
- "type": "string"
1631
- }
1632
- }
2740
+ "$ref": "#/components/schemas/LotteCinemaMovie"
1633
2741
  }
1634
2742
  },
1635
2743
  "showtimes": {
1636
2744
  "type": "array",
1637
2745
  "items": {
1638
- "$ref": "#/components/schemas/MegaboxShowtime"
2746
+ "$ref": "#/components/schemas/LotteCinemaShowtime"
1639
2747
  }
1640
2748
  }
1641
2749
  }
@@ -1650,7 +2758,7 @@
1650
2758
  }
1651
2759
  }
1652
2760
  },
1653
- "MegaboxSeatListResponse": {
2761
+ "LotteCinemaSeatListResponse": {
1654
2762
  "type": "object",
1655
2763
  "properties": {
1656
2764
  "success": {
@@ -1674,15 +2782,36 @@
1674
2782
  "type": "string",
1675
2783
  "nullable": true
1676
2784
  },
1677
- "areaCode": {
1678
- "type": "string"
2785
+ "keyword": {
2786
+ "type": "string",
2787
+ "nullable": true
2788
+ },
2789
+ "latitude": {
2790
+ "type": "number",
2791
+ "format": "float",
2792
+ "nullable": true
2793
+ },
2794
+ "longitude": {
2795
+ "type": "number",
2796
+ "format": "float",
2797
+ "nullable": true
1679
2798
  }
1680
2799
  }
1681
2800
  },
2801
+ "resolvedTheater": {
2802
+ "anyOf": [
2803
+ {
2804
+ "$ref": "#/components/schemas/LotteCinemaTheater"
2805
+ },
2806
+ {
2807
+ "type": "null"
2808
+ }
2809
+ ]
2810
+ },
1682
2811
  "seats": {
1683
2812
  "type": "array",
1684
2813
  "items": {
1685
- "$ref": "#/components/schemas/MegaboxShowtime"
2814
+ "$ref": "#/components/schemas/LotteCinemaShowtime"
1686
2815
  }
1687
2816
  }
1688
2817
  }
@@ -1714,6 +2843,26 @@
1714
2843
  "regionCode": {
1715
2844
  "type": "string",
1716
2845
  "example": "01"
2846
+ },
2847
+ "latitude": {
2848
+ "type": "number",
2849
+ "nullable": true,
2850
+ "example": 37.5016
2851
+ },
2852
+ "longitude": {
2853
+ "type": "number",
2854
+ "nullable": true,
2855
+ "example": 127.0264
2856
+ },
2857
+ "distanceKm": {
2858
+ "type": "number",
2859
+ "nullable": true,
2860
+ "example": 0.8
2861
+ },
2862
+ "address": {
2863
+ "type": "string",
2864
+ "nullable": true,
2865
+ "example": "서울특별시 강남구 강남대로 438"
1717
2866
  }
1718
2867
  }
1719
2868
  },
@@ -1798,9 +2947,40 @@
1798
2947
  "regionCode": {
1799
2948
  "type": "string",
1800
2949
  "nullable": true
2950
+ },
2951
+ "keyword": {
2952
+ "type": "string",
2953
+ "nullable": true
2954
+ },
2955
+ "latitude": {
2956
+ "type": "number",
2957
+ "nullable": true
2958
+ },
2959
+ "longitude": {
2960
+ "type": "number",
2961
+ "nullable": true
1801
2962
  }
1802
2963
  }
1803
2964
  },
2965
+ "keyword": {
2966
+ "type": "string",
2967
+ "nullable": true
2968
+ },
2969
+ "latitude": {
2970
+ "type": "number",
2971
+ "nullable": true
2972
+ },
2973
+ "longitude": {
2974
+ "type": "number",
2975
+ "nullable": true
2976
+ },
2977
+ "geocodeUsed": {
2978
+ "type": "boolean"
2979
+ },
2980
+ "formattedAddress": {
2981
+ "type": "string",
2982
+ "nullable": true
2983
+ },
1804
2984
  "theaters": {
1805
2985
  "type": "array",
1806
2986
  "items": {
@@ -1841,9 +3021,31 @@
1841
3021
  "theaterCode": {
1842
3022
  "type": "string",
1843
3023
  "nullable": true
3024
+ },
3025
+ "keyword": {
3026
+ "type": "string",
3027
+ "nullable": true
3028
+ },
3029
+ "latitude": {
3030
+ "type": "number",
3031
+ "nullable": true
3032
+ },
3033
+ "longitude": {
3034
+ "type": "number",
3035
+ "nullable": true
1844
3036
  }
1845
3037
  }
1846
3038
  },
3039
+ "resolvedTheater": {
3040
+ "anyOf": [
3041
+ {
3042
+ "$ref": "#/components/schemas/CgvTheater"
3043
+ },
3044
+ {
3045
+ "type": "null"
3046
+ }
3047
+ ]
3048
+ },
1847
3049
  "movies": {
1848
3050
  "type": "array",
1849
3051
  "items": {
@@ -1885,9 +3087,31 @@
1885
3087
  "movieCode": {
1886
3088
  "type": "string",
1887
3089
  "nullable": true
3090
+ },
3091
+ "keyword": {
3092
+ "type": "string",
3093
+ "nullable": true
3094
+ },
3095
+ "latitude": {
3096
+ "type": "number",
3097
+ "nullable": true
3098
+ },
3099
+ "longitude": {
3100
+ "type": "number",
3101
+ "nullable": true
1888
3102
  }
1889
3103
  }
1890
3104
  },
3105
+ "resolvedTheater": {
3106
+ "anyOf": [
3107
+ {
3108
+ "$ref": "#/components/schemas/CgvTheater"
3109
+ },
3110
+ {
3111
+ "type": "null"
3112
+ }
3113
+ ]
3114
+ },
1891
3115
  "timetable": {
1892
3116
  "type": "array",
1893
3117
  "items": {
@@ -1932,6 +3156,25 @@
1932
3156
  }
1933
3157
  }
1934
3158
  }
3159
+ },
3160
+ "ActionQueryResponse": {
3161
+ "type": "object",
3162
+ "properties": {
3163
+ "success": {
3164
+ "type": "boolean",
3165
+ "example": true
3166
+ },
3167
+ "data": {
3168
+ "type": "object",
3169
+ "additionalProperties": true,
3170
+ "description": "대상 엔드포인트가 반환한 data 객체"
3171
+ },
3172
+ "meta": {
3173
+ "type": "object",
3174
+ "additionalProperties": true,
3175
+ "description": "대상 엔드포인트가 반환한 meta 객체"
3176
+ }
3177
+ }
1935
3178
  }
1936
3179
  }
1937
3180
  }