daiso 1.0.4 → 1.0.6

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 (166) hide show
  1. package/README.md +249 -533
  2. package/dist/api/actionsProxy.js +82 -0
  3. package/dist/api/cgvHandlers.js +103 -16
  4. package/dist/api/configStatus.js +19 -0
  5. package/dist/api/daisoHandlers.js +127 -0
  6. package/dist/api/emart24Handlers.js +176 -0
  7. package/dist/api/gs25Handlers.js +267 -0
  8. package/dist/api/handlers.js +209 -104
  9. package/dist/api/healthChecks.js +504 -0
  10. package/dist/api/lottecinemaHandlers.js +155 -0
  11. package/dist/api/lottemartHandlers.js +144 -0
  12. package/dist/api/megaboxHandlers.js +81 -50
  13. package/dist/api/response.js +2 -0
  14. package/dist/api/routes/cuRoutes.js +17 -0
  15. package/dist/api/routes/daisoRoutes.js +6 -1
  16. package/dist/api/routes/emart24Routes.js +22 -0
  17. package/dist/api/routes/gs25Routes.js +22 -0
  18. package/dist/api/routes/healthRoutes.js +61 -0
  19. package/dist/api/routes/lottecinemaRoutes.js +22 -0
  20. package/dist/api/routes/lottemartRoutes.js +18 -0
  21. package/dist/api/routes/oliveyoungRoutes.js +6 -1
  22. package/dist/api/routes/sevenelevenRoutes.js +32 -0
  23. package/dist/api/sevenelevenHandlers.js +200 -0
  24. package/dist/bin.js +0 -0
  25. package/dist/cli/args.js +75 -0
  26. package/dist/cli/commandOptions.js +38 -0
  27. package/dist/cli/commands/convenience.js +293 -0
  28. package/dist/cli/commands/daiso.js +112 -0
  29. package/dist/cli/constants.js +5 -0
  30. package/dist/cli/deps.js +48 -0
  31. package/dist/cli/http.js +156 -0
  32. package/dist/cli/interactiveFetch.js +31 -0
  33. package/dist/cli/interactiveItemSearch.js +261 -0
  34. package/dist/cli/interactivePrompt.js +50 -0
  35. package/dist/cli/interactiveTypes.js +4 -0
  36. package/dist/cli/types.js +4 -0
  37. package/dist/cli.js +87 -196
  38. package/dist/cliHelp.js +212 -1
  39. package/dist/cliInteractive.js +243 -0
  40. package/dist/cliPicker.js +57 -0
  41. package/dist/cliRenderer.js +90 -3
  42. package/dist/core/errors.js +66 -0
  43. package/dist/core/registry.js +227 -3
  44. package/dist/index.js +149 -9
  45. package/dist/pages/openapi.js +2 -1
  46. package/dist/pages/openapiFullSpec.js +58 -0
  47. package/dist/pages/openapiResponse.js +28 -0
  48. package/dist/pages/openapiSpec.js +2 -41
  49. package/dist/pages/openapiSpecActions.js +109 -0
  50. package/dist/pages/openapiSpecComponents.js +30 -391
  51. package/dist/pages/openapiSpecComponentsCgv.js +24 -0
  52. package/dist/pages/openapiSpecComponentsCu.js +112 -0
  53. package/dist/pages/openapiSpecComponentsDaisoOliveyoung.js +342 -0
  54. package/dist/pages/openapiSpecComponentsEmart24.js +141 -0
  55. package/dist/pages/openapiSpecComponentsGs25.js +109 -0
  56. package/dist/pages/openapiSpecComponentsLotteMart.js +85 -0
  57. package/dist/pages/openapiSpecComponentsLottecinema.js +163 -0
  58. package/dist/pages/openapiSpecComponentsMegabox.js +144 -0
  59. package/dist/pages/openapiSpecComponentsSeveneleven.js +82 -0
  60. package/dist/pages/openapiSpecPathsCgv.js +66 -3
  61. package/dist/pages/openapiSpecPathsCu.js +145 -0
  62. package/dist/pages/openapiSpecPathsDaiso.js +302 -0
  63. package/dist/pages/openapiSpecPathsDaisoOliveyoung.js +4 -376
  64. package/dist/pages/openapiSpecPathsEmart24.js +223 -0
  65. package/dist/pages/openapiSpecPathsGs25.js +166 -0
  66. package/dist/pages/openapiSpecPathsLotteMart.js +149 -0
  67. package/dist/pages/openapiSpecPathsLottecinema.js +212 -0
  68. package/dist/pages/openapiSpecPathsMegabox.js +52 -3
  69. package/dist/pages/openapiSpecPathsOliveyoung.js +266 -0
  70. package/dist/pages/openapiSpecPathsSeveneleven.js +234 -0
  71. package/dist/pages/prompt.js +8 -402
  72. package/dist/pages/promptCoreText.js +278 -0
  73. package/dist/pages/promptReferenceText.js +137 -0
  74. package/dist/pages/promptRetailCinemaText.js +274 -0
  75. package/dist/services/cgv/client.js +6 -1
  76. package/dist/services/cgv/index.js +3 -3
  77. package/dist/services/cgv/location.js +235 -0
  78. package/dist/services/cgv/tools/findTheaters.js +30 -5
  79. package/dist/services/cgv/tools/getTimetable.js +42 -14
  80. package/dist/services/cgv/tools/searchMovies.js +40 -12
  81. package/dist/services/cgv/transport.js +0 -3
  82. package/dist/services/cu/api.js +11 -0
  83. package/dist/services/cu/client.js +297 -0
  84. package/dist/services/cu/index.js +21 -0
  85. package/dist/services/cu/tools/checkInventory.js +123 -0
  86. package/dist/services/cu/tools/findNearbyStores.js +49 -0
  87. package/dist/services/cu/types.js +4 -0
  88. package/dist/services/daiso/api.js +22 -2
  89. package/dist/services/daiso/client.js +67 -0
  90. package/dist/services/daiso/index.js +4 -0
  91. package/dist/services/daiso/product.js +17 -0
  92. package/dist/services/daiso/tools/checkInventory.js +80 -43
  93. package/dist/services/daiso/tools/findInventoryByName.js +222 -0
  94. package/dist/services/daiso/tools/findStores.js +17 -7
  95. package/dist/services/daiso/tools/getDisplayLocation.js +75 -0
  96. package/dist/services/emart24/api.js +11 -0
  97. package/dist/services/emart24/client.js +182 -0
  98. package/dist/services/emart24/index.js +22 -0
  99. package/dist/services/emart24/inventoryLookup.js +134 -0
  100. package/dist/services/emart24/tools/checkInventory.js +54 -0
  101. package/dist/services/emart24/tools/findNearbyStores.js +72 -0
  102. package/dist/services/emart24/tools/searchProducts.js +73 -0
  103. package/dist/services/emart24/types.js +4 -0
  104. package/dist/services/gs25/api.js +9 -0
  105. package/dist/services/gs25/client.js +208 -0
  106. package/dist/services/gs25/index.js +22 -0
  107. package/dist/services/gs25/storeUtils.js +168 -0
  108. package/dist/services/gs25/tools/checkInventory.js +163 -0
  109. package/dist/services/gs25/tools/findNearbyStores.js +103 -0
  110. package/dist/services/gs25/tools/searchProducts.js +57 -0
  111. package/dist/services/gs25/types.js +4 -0
  112. package/dist/services/lottecinema/api.js +12 -0
  113. package/dist/services/lottecinema/client.js +161 -0
  114. package/dist/services/lottecinema/index.js +30 -0
  115. package/dist/services/lottecinema/location.js +191 -0
  116. package/dist/services/lottecinema/tools/findNearbyTheaters.js +47 -0
  117. package/dist/services/lottecinema/tools/getRemainingSeats.js +85 -0
  118. package/dist/services/lottecinema/tools/listNowShowing.js +79 -0
  119. package/dist/services/lottecinema/types.js +4 -0
  120. package/dist/services/lottemart/api.js +31 -0
  121. package/dist/services/lottemart/client.js +254 -0
  122. package/dist/services/lottemart/clientTypes.js +4 -0
  123. package/dist/services/lottemart/config.js +4 -0
  124. package/dist/services/lottemart/debug.js +92 -0
  125. package/dist/services/lottemart/geocode.js +49 -0
  126. package/dist/services/lottemart/index.js +30 -0
  127. package/dist/services/lottemart/keyword.js +29 -0
  128. package/dist/services/lottemart/parser.js +185 -0
  129. package/dist/services/lottemart/session.js +331 -0
  130. package/dist/services/lottemart/storeSearch.js +52 -0
  131. package/dist/services/lottemart/tools/findNearbyStores.js +67 -0
  132. package/dist/services/lottemart/tools/searchProducts.js +69 -0
  133. package/dist/services/lottemart/types.js +4 -0
  134. package/dist/services/lottemart/zetta.js +105 -0
  135. package/dist/services/megabox/location.js +219 -0
  136. package/dist/services/megabox/tools/findNearbyTheaters.js +13 -44
  137. package/dist/services/megabox/tools/getRemainingSeats.js +31 -3
  138. package/dist/services/megabox/tools/listNowShowing.js +31 -3
  139. package/dist/services/oliveyoung/api.js +2 -0
  140. package/dist/services/oliveyoung/client.js +225 -13
  141. package/dist/services/oliveyoung/index.js +3 -1
  142. package/dist/services/oliveyoung/tools/checkInventory.js +21 -5
  143. package/dist/services/oliveyoung/tools/searchProducts.js +57 -0
  144. package/dist/services/seveneleven/api.js +15 -0
  145. package/dist/services/seveneleven/client.js +286 -0
  146. package/dist/services/seveneleven/index.js +30 -0
  147. package/dist/services/seveneleven/inventory.js +302 -0
  148. package/dist/services/seveneleven/productKeyword.js +141 -0
  149. package/dist/services/seveneleven/tools/checkInventory.js +82 -0
  150. package/dist/services/seveneleven/tools/getCatalogSnapshot.js +55 -0
  151. package/dist/services/seveneleven/tools/getSearchPopwords.js +41 -0
  152. package/dist/services/seveneleven/tools/searchProducts.js +67 -0
  153. package/dist/services/seveneleven/tools/searchStores.js +45 -0
  154. package/dist/services/seveneleven/types.js +4 -0
  155. package/dist/utils/cliInteractiveHelpers.js +63 -0
  156. package/dist/utils/daisoKeyword.js +30 -0
  157. package/dist/utils/http.js +98 -12
  158. package/dist/utils/zyte.js +47 -26
  159. package/openapi.json +1979 -736
  160. package/openapi.yaml +1428 -541
  161. package/package.json +49 -18
  162. package/dist/tools/checkInventory.js +0 -98
  163. package/dist/tools/findStores.js +0 -125
  164. package/dist/tools/getPriceInfo.js +0 -77
  165. package/dist/tools/searchProducts.js +0 -61
  166. 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 파라미터. 상품명만 알면 먼저 daisoSearchProducts 또는 /api/daiso/products로 productId를 확인하세요.",
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": "매장 코드. 다이소 진열 위치는 /api/daiso/inventory 응답의 storeInventory.stores[].storeCode에서 확인하세요.",
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": "매장명. 롯데마트 상품 조회에서 storeCode가 없을 때 사용하며, 모르면 먼저 lottemartFindNearbyStores 또는 /api/lottemart/stores로 확인하세요.",
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)",
353
+ "description": "메가박스/롯데시네마 영화 ID",
536
354
  "schema": {
537
- "type": "number",
538
- "format": "float",
539
- "default": 126.978
355
+ "type": "string"
540
356
  }
541
357
  },
542
358
  {
543
- "name": "playDate",
359
+ "name": "pluCd",
544
360
  "in": "query",
545
361
  "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",
362
+ "description": "이마트24 상품 PLU 코드",
691
363
  "schema": {
692
364
  "type": "string"
693
365
  }
694
366
  },
695
367
  {
696
- "name": "movieId",
368
+ "name": "bizNoArr",
697
369
  "in": "query",
698
370
  "required": false,
699
- "description": "영화 ID",
371
+ "description": "이마트24 사업자번호 목록",
700
372
  "schema": {
701
373
  "type": "string"
702
374
  }
703
375
  },
704
376
  {
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",
759
- "in": "query",
760
- "required": false,
761
- "description": "조회 날짜 (YYYYMMDD)",
762
- "schema": {
763
- "type": "string",
764
- "example": "20260304"
765
- }
766
- },
767
- {
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,14 +901,133 @@
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
- }
1336
- }
1337
- },
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
+ }
1029
+ }
1030
+ },
1338
1031
  "OliveyoungStoreSearchResponse": {
1339
1032
  "type": "object",
1340
1033
  "properties": {
@@ -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
  }