daiso 1.0.0

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 (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +741 -0
  3. package/dist/api/cgvHandlers.js +97 -0
  4. package/dist/api/handlers.js +208 -0
  5. package/dist/api/megaboxHandlers.js +145 -0
  6. package/dist/api/response.js +22 -0
  7. package/dist/api/routes/cgvRoutes.js +22 -0
  8. package/dist/api/routes/daisoRoutes.js +27 -0
  9. package/dist/api/routes/megaboxRoutes.js +22 -0
  10. package/dist/api/routes/oliveyoungRoutes.js +17 -0
  11. package/dist/cli.js +140 -0
  12. package/dist/core/interfaces.js +6 -0
  13. package/dist/core/registry.js +121 -0
  14. package/dist/core/types.js +6 -0
  15. package/dist/index.js +123 -0
  16. package/dist/pages/openapi.js +6 -0
  17. package/dist/pages/openapiResponse.js +32 -0
  18. package/dist/pages/openapiSpec.js +43 -0
  19. package/dist/pages/openapiSpecComponents.js +419 -0
  20. package/dist/pages/openapiSpecComponentsCgv.js +123 -0
  21. package/dist/pages/openapiSpecPathsCgv.js +149 -0
  22. package/dist/pages/openapiSpecPathsDaisoOliveyoung.js +381 -0
  23. package/dist/pages/openapiSpecPathsMegabox.js +184 -0
  24. package/dist/pages/openapiYaml.js +58 -0
  25. package/dist/pages/privacy.js +262 -0
  26. package/dist/pages/prompt.js +425 -0
  27. package/dist/services/cgv/api.js +15 -0
  28. package/dist/services/cgv/client.js +146 -0
  29. package/dist/services/cgv/index.js +30 -0
  30. package/dist/services/cgv/timetable.js +16 -0
  31. package/dist/services/cgv/tools/findTheaters.js +43 -0
  32. package/dist/services/cgv/tools/getTimetable.js +47 -0
  33. package/dist/services/cgv/tools/searchMovies.js +40 -0
  34. package/dist/services/cgv/transport.js +91 -0
  35. package/dist/services/cgv/types.js +4 -0
  36. package/dist/services/daiso/api.js +53 -0
  37. package/dist/services/daiso/client.js +35 -0
  38. package/dist/services/daiso/index.js +42 -0
  39. package/dist/services/daiso/tools/checkInventory.js +122 -0
  40. package/dist/services/daiso/tools/findStores.js +145 -0
  41. package/dist/services/daiso/tools/getPriceInfo.js +90 -0
  42. package/dist/services/daiso/tools/searchProducts.js +74 -0
  43. package/dist/services/daiso/types.js +4 -0
  44. package/dist/services/megabox/api.js +8 -0
  45. package/dist/services/megabox/client.js +140 -0
  46. package/dist/services/megabox/index.js +26 -0
  47. package/dist/services/megabox/tools/findNearbyTheaters.js +74 -0
  48. package/dist/services/megabox/tools/getRemainingSeats.js +57 -0
  49. package/dist/services/megabox/tools/listNowShowing.js +51 -0
  50. package/dist/services/megabox/types.js +4 -0
  51. package/dist/services/oliveyoung/api.js +8 -0
  52. package/dist/services/oliveyoung/client.js +90 -0
  53. package/dist/services/oliveyoung/index.js +28 -0
  54. package/dist/services/oliveyoung/tools/checkInventory.js +87 -0
  55. package/dist/services/oliveyoung/tools/findNearbyStores.js +53 -0
  56. package/dist/services/oliveyoung/types.js +4 -0
  57. package/dist/tools/checkInventory.js +98 -0
  58. package/dist/tools/findStores.js +125 -0
  59. package/dist/tools/getPriceInfo.js +77 -0
  60. package/dist/tools/searchProducts.js +61 -0
  61. package/dist/types/index.js +4 -0
  62. package/dist/utils/cache.js +54 -0
  63. package/dist/utils/fetch.js +14 -0
  64. package/dist/utils/format.js +31 -0
  65. package/dist/utils/http.js +35 -0
  66. package/dist/utils/zyte.js +76 -0
  67. package/openapi.json +1938 -0
  68. package/openapi.yaml +1338 -0
  69. package/package.json +79 -0
package/openapi.yaml ADDED
@@ -0,0 +1,1338 @@
1
+
2
+ openapi: 3.1.0
3
+ info:
4
+ title: 다이소 MCP API
5
+ description: |
6
+ 다이소 제품 검색, 매장 찾기, 재고 확인을 위한 API입니다.
7
+
8
+ ## 주요 기능
9
+ - 🔍 **제품 검색**: 키워드로 다이소 제품 검색
10
+ - 🏪 **매장 찾기**: 지역/키워드로 매장 검색
11
+ - 📦 **재고 확인**: 온라인 및 오프라인 매장 재고 조회
12
+ - 🎬 **메가박스 지점/영화 조회**: 주변 지점, 상영 목록, 잔여 좌석 조회
13
+ - 🎥 **CGV 지점/영화 조회**: 극장 목록, 영화 목록, 시간표 조회
14
+
15
+ ## 사용 팁
16
+ 1. 한글 검색어는 URL 인코딩이 자동 처리됩니다
17
+ 2. 재고 확인 시 먼저 제품 검색으로 제품 ID를 확인하세요
18
+ 3. 위치 기반 재고 조회 시 lat, lng 파라미터를 활용하세요
19
+ version: 1.0.0
20
+ contact:
21
+ name: GitHub Repository
22
+ url: "https://github.com/hmmhmmhm/daiso-mcp"
23
+ servers:
24
+ - url: "https://mcp.aka.page"
25
+ description: Production Server
26
+ paths:
27
+ /api/daiso/products:
28
+ get:
29
+ operationId: searchProducts
30
+ summary: 제품 검색
31
+ description: 키워드로 다이소 제품을 검색합니다. 수납박스, 펜, 정리함 등 다양한 키워드로 검색할 수 있습니다.
32
+ parameters:
33
+ - name: q
34
+ in: query
35
+ required: true
36
+ description: "검색 키워드 (예: 수납박스, 펜, 정리함)"
37
+ schema:
38
+ type: string
39
+ example: 수납박스
40
+ - name: page
41
+ in: query
42
+ required: false
43
+ description: 페이지 번호
44
+ schema:
45
+ type: integer
46
+ default: 1
47
+ minimum: 1
48
+ - name: pageSize
49
+ in: query
50
+ required: false
51
+ description: 페이지당 결과 수
52
+ schema:
53
+ type: integer
54
+ default: 30
55
+ minimum: 1
56
+ maximum: 100
57
+ responses:
58
+ 200:
59
+ description: 검색 성공
60
+ content:
61
+ application/json:
62
+ schema:
63
+ $ref: "#/components/schemas/ProductSearchResponse"
64
+ 400:
65
+ description: 잘못된 요청 (검색어 누락)
66
+ content:
67
+ application/json:
68
+ schema:
69
+ $ref: "#/components/schemas/ErrorResponse"
70
+ /api/daiso/products/{productId}:
71
+ get:
72
+ operationId: getProduct
73
+ summary: 제품 상세 정보
74
+ description: 제품 ID로 상세 정보를 조회합니다.
75
+ parameters:
76
+ - name: productId
77
+ in: path
78
+ required: true
79
+ description: 제품 ID (제품 검색 결과의 id 값)
80
+ schema:
81
+ type: string
82
+ example: 1234567890
83
+ responses:
84
+ 200:
85
+ description: 조회 성공
86
+ content:
87
+ application/json:
88
+ schema:
89
+ $ref: "#/components/schemas/ProductDetailResponse"
90
+ 404:
91
+ description: 제품을 찾을 수 없음
92
+ content:
93
+ application/json:
94
+ schema:
95
+ $ref: "#/components/schemas/ErrorResponse"
96
+ /api/daiso/stores:
97
+ get:
98
+ operationId: findStores
99
+ summary: 매장 찾기
100
+ description: 키워드 또는 지역으로 다이소 매장을 검색합니다. keyword 또는 sido 중 하나는 필수입니다.
101
+ parameters:
102
+ - name: keyword
103
+ in: query
104
+ required: false
105
+ description: "매장명 또는 주소 키워드 (예: 강남, 홍대, 안산)"
106
+ schema:
107
+ type: string
108
+ example: 강남
109
+ - name: sido
110
+ in: query
111
+ required: false
112
+ description: "시/도 (예: 서울, 경기, 부산)"
113
+ schema:
114
+ type: string
115
+ example: 서울
116
+ - name: gugun
117
+ in: query
118
+ required: false
119
+ description: "구/군 (예: 강남구, 마포구)"
120
+ schema:
121
+ type: string
122
+ example: 강남구
123
+ - name: dong
124
+ in: query
125
+ required: false
126
+ description: "동 (예: 역삼동, 합정동)"
127
+ schema:
128
+ type: string
129
+ - name: limit
130
+ in: query
131
+ required: false
132
+ description: 최대 결과 수
133
+ schema:
134
+ type: integer
135
+ default: 50
136
+ minimum: 1
137
+ maximum: 100
138
+ responses:
139
+ 200:
140
+ description: 검색 성공
141
+ content:
142
+ application/json:
143
+ schema:
144
+ $ref: "#/components/schemas/StoreSearchResponse"
145
+ 400:
146
+ description: 잘못된 요청 (필수 파라미터 누락)
147
+ content:
148
+ application/json:
149
+ schema:
150
+ $ref: "#/components/schemas/ErrorResponse"
151
+ /api/daiso/inventory:
152
+ get:
153
+ operationId: checkInventory
154
+ summary: 재고 확인
155
+ description: 특정 제품의 온라인 재고와 매장별 재고를 확인합니다. 위치 정보를 제공하면 가까운 매장 순으로 정렬됩니다.
156
+ parameters:
157
+ - name: productId
158
+ in: query
159
+ required: true
160
+ description: 제품 ID (제품 검색 결과의 id 값)
161
+ schema:
162
+ type: string
163
+ example: 1234567890
164
+ - name: lat
165
+ in: query
166
+ required: false
167
+ description: "위도 (기본값: 서울 시청 37.5665)"
168
+ schema:
169
+ type: number
170
+ format: float
171
+ default: 37.5665
172
+ example: 37.4979
173
+ - name: lng
174
+ in: query
175
+ required: false
176
+ description: "경도 (기본값: 서울 시청 126.978)"
177
+ schema:
178
+ type: number
179
+ format: float
180
+ default: 126.978
181
+ example: 127.0276
182
+ - name: keyword
183
+ in: query
184
+ required: false
185
+ description: "매장 검색어 (예: 안산, 강남)"
186
+ schema:
187
+ type: string
188
+ - name: page
189
+ in: query
190
+ required: false
191
+ description: 페이지 번호
192
+ schema:
193
+ type: integer
194
+ default: 1
195
+ minimum: 1
196
+ - name: pageSize
197
+ in: query
198
+ required: false
199
+ description: 페이지당 결과 수
200
+ schema:
201
+ type: integer
202
+ default: 30
203
+ minimum: 1
204
+ maximum: 100
205
+ responses:
206
+ 200:
207
+ description: 조회 성공
208
+ content:
209
+ application/json:
210
+ schema:
211
+ $ref: "#/components/schemas/InventoryResponse"
212
+ 400:
213
+ description: 잘못된 요청 (제품 ID 누락)
214
+ content:
215
+ application/json:
216
+ schema:
217
+ $ref: "#/components/schemas/ErrorResponse"
218
+ /api/oliveyoung/stores:
219
+ get:
220
+ operationId: oliveyoungFindStores
221
+ summary: 올리브영 매장 검색
222
+ description: 위치(위도/경도)와 키워드로 올리브영 매장을 검색합니다.
223
+ parameters:
224
+ - name: keyword
225
+ in: query
226
+ required: false
227
+ description: "매장명 또는 지역 키워드 (예: 명동, 강남)"
228
+ schema:
229
+ type: string
230
+ example: 명동
231
+ - name: lat
232
+ in: query
233
+ required: false
234
+ description: "위도 (기본값: 서울 시청 37.5665)"
235
+ schema:
236
+ type: number
237
+ format: float
238
+ default: 37.5665
239
+ - name: lng
240
+ in: query
241
+ required: false
242
+ description: "경도 (기본값: 서울 시청 126.978)"
243
+ schema:
244
+ type: number
245
+ format: float
246
+ default: 126.978
247
+ - name: pageIdx
248
+ in: query
249
+ required: false
250
+ description: 매장 검색 페이지 번호
251
+ schema:
252
+ type: integer
253
+ default: 1
254
+ minimum: 1
255
+ - name: limit
256
+ in: query
257
+ required: false
258
+ description: 최대 결과 수
259
+ schema:
260
+ type: integer
261
+ default: 20
262
+ minimum: 1
263
+ maximum: 100
264
+ responses:
265
+ 200:
266
+ description: 검색 성공
267
+ content:
268
+ application/json:
269
+ schema:
270
+ $ref: "#/components/schemas/OliveyoungStoreSearchResponse"
271
+ 500:
272
+ description: 올리브영 API 호출 실패
273
+ content:
274
+ application/json:
275
+ schema:
276
+ $ref: "#/components/schemas/ErrorResponse"
277
+ /api/oliveyoung/inventory:
278
+ get:
279
+ operationId: oliveyoungCheckInventory
280
+ summary: 올리브영 재고 확인
281
+ description: 상품 키워드로 올리브영 재고를 검색하고 주변 매장 정보를 함께 조회합니다.
282
+ parameters:
283
+ - name: keyword
284
+ in: query
285
+ required: true
286
+ description: 재고를 확인할 상품 키워드
287
+ schema:
288
+ type: string
289
+ example: 선크림
290
+ - name: lat
291
+ in: query
292
+ required: false
293
+ description: "위도 (기본값: 서울 시청 37.5665)"
294
+ schema:
295
+ type: number
296
+ format: float
297
+ default: 37.5665
298
+ - name: lng
299
+ in: query
300
+ required: false
301
+ description: "경도 (기본값: 서울 시청 126.978)"
302
+ schema:
303
+ type: number
304
+ format: float
305
+ default: 126.978
306
+ - name: storeKeyword
307
+ in: query
308
+ required: false
309
+ description: 주변 매장 필터 키워드
310
+ schema:
311
+ type: string
312
+ - name: page
313
+ in: query
314
+ required: false
315
+ description: 상품 검색 페이지 번호
316
+ schema:
317
+ type: integer
318
+ default: 1
319
+ minimum: 1
320
+ - name: size
321
+ in: query
322
+ required: false
323
+ description: 페이지당 결과 수
324
+ schema:
325
+ type: integer
326
+ default: 20
327
+ minimum: 1
328
+ maximum: 100
329
+ - name: sort
330
+ in: query
331
+ required: false
332
+ description: 정렬 코드
333
+ schema:
334
+ type: string
335
+ default: 01
336
+ - name: includeSoldOut
337
+ in: query
338
+ required: false
339
+ description: 품절 포함 여부 (true/false)
340
+ schema:
341
+ type: boolean
342
+ default: false
343
+ responses:
344
+ 200:
345
+ description: 조회 성공
346
+ content:
347
+ application/json:
348
+ schema:
349
+ $ref: "#/components/schemas/OliveyoungInventoryResponse"
350
+ 400:
351
+ description: 잘못된 요청 (검색어 누락)
352
+ content:
353
+ application/json:
354
+ schema:
355
+ $ref: "#/components/schemas/ErrorResponse"
356
+ 500:
357
+ description: 올리브영 API 호출 실패
358
+ content:
359
+ application/json:
360
+ schema:
361
+ $ref: "#/components/schemas/ErrorResponse"
362
+ /api/megabox/theaters:
363
+ get:
364
+ operationId: megaboxFindNearbyTheaters
365
+ summary: 메가박스 주변 지점 조회
366
+ description: 좌표 기준으로 메가박스 지점을 거리순으로 조회합니다.
367
+ parameters:
368
+ - name: lat
369
+ in: query
370
+ required: false
371
+ description: "위도 (기본값: 서울 시청 37.5665)"
372
+ schema:
373
+ type: number
374
+ format: float
375
+ default: 37.5665
376
+ - name: lng
377
+ in: query
378
+ required: false
379
+ description: "경도 (기본값: 서울 시청 126.978)"
380
+ schema:
381
+ type: number
382
+ format: float
383
+ default: 126.978
384
+ - name: playDate
385
+ in: query
386
+ required: false
387
+ description: 조회 날짜 (YYYYMMDD)
388
+ schema:
389
+ type: string
390
+ example: 20260304
391
+ - name: areaCode
392
+ in: query
393
+ required: false
394
+ description: "지역 코드 (기본값: 11, 서울)"
395
+ schema:
396
+ type: string
397
+ default: 11
398
+ - name: limit
399
+ in: query
400
+ required: false
401
+ description: 최대 결과 수
402
+ schema:
403
+ type: integer
404
+ default: 10
405
+ minimum: 1
406
+ maximum: 100
407
+ responses:
408
+ 200:
409
+ description: 조회 성공
410
+ content:
411
+ application/json:
412
+ schema:
413
+ $ref: "#/components/schemas/MegaboxTheaterSearchResponse"
414
+ 500:
415
+ description: 메가박스 API 호출 실패
416
+ content:
417
+ application/json:
418
+ schema:
419
+ $ref: "#/components/schemas/ErrorResponse"
420
+ /api/megabox/movies:
421
+ get:
422
+ operationId: megaboxListNowShowing
423
+ summary: 메가박스 영화/회차 목록 조회
424
+ description: 날짜, 지점, 영화 조건으로 메가박스 영화 및 상영 회차를 조회합니다.
425
+ parameters:
426
+ - name: playDate
427
+ in: query
428
+ required: false
429
+ description: 조회 날짜 (YYYYMMDD)
430
+ schema:
431
+ type: string
432
+ example: 20260304
433
+ - name: theaterId
434
+ in: query
435
+ required: false
436
+ description: "지점 ID (예: 1372)"
437
+ schema:
438
+ type: string
439
+ example: 1372
440
+ - name: movieId
441
+ in: query
442
+ required: false
443
+ description: "영화 ID (예: 25104500)"
444
+ schema:
445
+ type: string
446
+ example: 25104500
447
+ - name: areaCode
448
+ in: query
449
+ required: false
450
+ description: "지역 코드 (기본값: 11, 서울)"
451
+ schema:
452
+ type: string
453
+ default: 11
454
+ responses:
455
+ 200:
456
+ description: 조회 성공
457
+ content:
458
+ application/json:
459
+ schema:
460
+ $ref: "#/components/schemas/MegaboxMovieListResponse"
461
+ 500:
462
+ description: 메가박스 API 호출 실패
463
+ content:
464
+ application/json:
465
+ schema:
466
+ $ref: "#/components/schemas/ErrorResponse"
467
+ /api/megabox/seats:
468
+ get:
469
+ operationId: megaboxGetRemainingSeats
470
+ summary: 메가박스 잔여 좌석 조회
471
+ description: 영화/지점/날짜 조건으로 회차별 잔여 좌석 수를 조회합니다.
472
+ parameters:
473
+ - name: playDate
474
+ in: query
475
+ required: false
476
+ description: 조회 날짜 (YYYYMMDD)
477
+ schema:
478
+ type: string
479
+ example: 20260304
480
+ - name: theaterId
481
+ in: query
482
+ required: false
483
+ description: 지점 ID
484
+ schema:
485
+ type: string
486
+ - name: movieId
487
+ in: query
488
+ required: false
489
+ description: 영화 ID
490
+ schema:
491
+ type: string
492
+ - name: areaCode
493
+ in: query
494
+ required: false
495
+ description: "지역 코드 (기본값: 11, 서울)"
496
+ schema:
497
+ type: string
498
+ default: 11
499
+ - name: limit
500
+ in: query
501
+ required: false
502
+ description: 최대 결과 수
503
+ schema:
504
+ type: integer
505
+ default: 50
506
+ minimum: 1
507
+ maximum: 200
508
+ responses:
509
+ 200:
510
+ description: 조회 성공
511
+ content:
512
+ application/json:
513
+ schema:
514
+ $ref: "#/components/schemas/MegaboxSeatListResponse"
515
+ 500:
516
+ description: 메가박스 API 호출 실패
517
+ content:
518
+ application/json:
519
+ schema:
520
+ $ref: "#/components/schemas/ErrorResponse"
521
+ /api/cgv/theaters:
522
+ get:
523
+ operationId: cgvFindTheaters
524
+ summary: CGV 극장 목록 조회
525
+ description: 날짜/지역 코드 조건으로 CGV 극장 목록을 조회합니다.
526
+ parameters:
527
+ - name: playDate
528
+ in: query
529
+ required: false
530
+ description: 조회 날짜 (YYYYMMDD)
531
+ schema:
532
+ type: string
533
+ example: 20260304
534
+ - name: regionCode
535
+ in: query
536
+ required: false
537
+ description: "지역 코드 (예: 01 서울)"
538
+ schema:
539
+ type: string
540
+ example: 01
541
+ - name: limit
542
+ in: query
543
+ required: false
544
+ description: 최대 결과 수
545
+ schema:
546
+ type: integer
547
+ default: 30
548
+ minimum: 1
549
+ maximum: 100
550
+ responses:
551
+ 200:
552
+ description: 조회 성공
553
+ content:
554
+ application/json:
555
+ schema:
556
+ $ref: "#/components/schemas/CgvTheaterSearchResponse"
557
+ 500:
558
+ description: CGV API 호출 실패
559
+ content:
560
+ application/json:
561
+ schema:
562
+ $ref: "#/components/schemas/ErrorResponse"
563
+ /api/cgv/movies:
564
+ get:
565
+ operationId: cgvSearchMovies
566
+ summary: CGV 영화 목록 조회
567
+ description: 날짜/극장 조건으로 CGV 영화 목록을 조회합니다.
568
+ parameters:
569
+ - name: playDate
570
+ in: query
571
+ required: false
572
+ description: 조회 날짜 (YYYYMMDD)
573
+ schema:
574
+ type: string
575
+ example: 20260304
576
+ - name: theaterCode
577
+ in: query
578
+ required: false
579
+ description: "극장 코드 (예: 0056)"
580
+ schema:
581
+ type: string
582
+ example: 0056
583
+ responses:
584
+ 200:
585
+ description: 조회 성공
586
+ content:
587
+ application/json:
588
+ schema:
589
+ $ref: "#/components/schemas/CgvMovieSearchResponse"
590
+ 500:
591
+ description: CGV API 호출 실패
592
+ content:
593
+ application/json:
594
+ schema:
595
+ $ref: "#/components/schemas/ErrorResponse"
596
+ /api/cgv/timetable:
597
+ get:
598
+ operationId: cgvGetTimetable
599
+ summary: CGV 시간표 조회
600
+ description: 날짜/극장/영화 조건으로 CGV 상영 시간표를 조회합니다.
601
+ parameters:
602
+ - name: playDate
603
+ in: query
604
+ required: false
605
+ description: 조회 날짜 (YYYYMMDD)
606
+ schema:
607
+ type: string
608
+ example: 20260304
609
+ - name: theaterCode
610
+ in: query
611
+ required: false
612
+ description: 극장 코드
613
+ schema:
614
+ type: string
615
+ - name: movieCode
616
+ in: query
617
+ required: false
618
+ description: 영화 코드
619
+ schema:
620
+ type: string
621
+ - name: limit
622
+ in: query
623
+ required: false
624
+ description: 최대 결과 수
625
+ schema:
626
+ type: integer
627
+ default: 50
628
+ minimum: 1
629
+ maximum: 200
630
+ responses:
631
+ 200:
632
+ description: 조회 성공
633
+ content:
634
+ application/json:
635
+ schema:
636
+ $ref: "#/components/schemas/CgvTimetableResponse"
637
+ 500:
638
+ description: CGV API 호출 실패
639
+ content:
640
+ application/json:
641
+ schema:
642
+ $ref: "#/components/schemas/ErrorResponse"
643
+ components:
644
+ schemas:
645
+ Product:
646
+ type: object
647
+ description: 제품 정보
648
+ properties:
649
+ id:
650
+ type: string
651
+ description: 제품 ID
652
+ example: 1234567890
653
+ name:
654
+ type: string
655
+ description: 제품명
656
+ example: PP 수납박스 대형
657
+ price:
658
+ type: integer
659
+ description: 가격 (원)
660
+ example: 5000
661
+ imageUrl:
662
+ type: string
663
+ description: 제품 이미지 URL
664
+ example: "https://img.daisomall.co.kr/..."
665
+ soldOut:
666
+ type: boolean
667
+ description: 품절 여부
668
+ example: false
669
+ isNew:
670
+ type: boolean
671
+ description: 신상품 여부
672
+ example: false
673
+ pickupAvailable:
674
+ type: boolean
675
+ description: 매장 픽업 가능 여부
676
+ example: true
677
+ ProductDetail:
678
+ type: object
679
+ description: 제품 상세 정보
680
+ properties:
681
+ id:
682
+ type: string
683
+ description: 제품 ID
684
+ name:
685
+ type: string
686
+ description: 제품명
687
+ price:
688
+ type: integer
689
+ description: 가격 (원)
690
+ currency:
691
+ type: string
692
+ description: 통화
693
+ example: KRW
694
+ imageUrl:
695
+ type: string
696
+ description: 제품 이미지 URL
697
+ brand:
698
+ type: string
699
+ description: 브랜드명
700
+ soldOut:
701
+ type: boolean
702
+ description: 품절 여부
703
+ isNew:
704
+ type: boolean
705
+ description: 신상품 여부
706
+ Store:
707
+ type: object
708
+ description: 매장 정보
709
+ properties:
710
+ name:
711
+ type: string
712
+ description: 매장명
713
+ example: 다이소 강남역점
714
+ phone:
715
+ type: string
716
+ description: 전화번호
717
+ example: 02-1234-5678
718
+ address:
719
+ type: string
720
+ description: 주소
721
+ example: 서울특별시 강남구 강남대로 123
722
+ lat:
723
+ type: number
724
+ format: float
725
+ description: 위도
726
+ example: 37.4979
727
+ lng:
728
+ type: number
729
+ format: float
730
+ description: 경도
731
+ example: 127.0276
732
+ openTime:
733
+ type: string
734
+ description: 영업 시작 시간
735
+ example: "10:00"
736
+ closeTime:
737
+ type: string
738
+ description: 영업 종료 시간
739
+ example: "22:00"
740
+ options:
741
+ type: object
742
+ description: 매장 옵션
743
+ properties:
744
+ parking:
745
+ type: boolean
746
+ description: 주차 가능 여부
747
+ pickup:
748
+ type: boolean
749
+ description: 픽업 가능 여부
750
+ taxFree:
751
+ type: boolean
752
+ description: 면세 가능 여부
753
+ StoreInventory:
754
+ type: object
755
+ description: 매장 재고 정보
756
+ properties:
757
+ storeCode:
758
+ type: string
759
+ description: 매장 코드
760
+ example: ST001
761
+ storeName:
762
+ type: string
763
+ description: 매장명
764
+ example: 다이소 강남역점
765
+ address:
766
+ type: string
767
+ description: 주소
768
+ distance:
769
+ type: string
770
+ description: 거리
771
+ example: 0.5km
772
+ quantity:
773
+ type: integer
774
+ description: 재고 수량
775
+ example: 12
776
+ options:
777
+ type: object
778
+ properties:
779
+ parking:
780
+ type: boolean
781
+ pickup:
782
+ type: boolean
783
+ ProductSearchResponse:
784
+ type: object
785
+ properties:
786
+ success:
787
+ type: boolean
788
+ example: true
789
+ data:
790
+ type: object
791
+ properties:
792
+ products:
793
+ type: array
794
+ items:
795
+ $ref: "#/components/schemas/Product"
796
+ meta:
797
+ type: object
798
+ properties:
799
+ total:
800
+ type: integer
801
+ description: 전체 결과 수
802
+ page:
803
+ type: integer
804
+ description: 현재 페이지
805
+ pageSize:
806
+ type: integer
807
+ description: 페이지당 결과 수
808
+ ProductDetailResponse:
809
+ type: object
810
+ properties:
811
+ success:
812
+ type: boolean
813
+ example: true
814
+ data:
815
+ $ref: "#/components/schemas/ProductDetail"
816
+ StoreSearchResponse:
817
+ type: object
818
+ properties:
819
+ success:
820
+ type: boolean
821
+ example: true
822
+ data:
823
+ type: object
824
+ properties:
825
+ stores:
826
+ type: array
827
+ items:
828
+ $ref: "#/components/schemas/Store"
829
+ meta:
830
+ type: object
831
+ properties:
832
+ total:
833
+ type: integer
834
+ description: 전체 결과 수
835
+ InventoryResponse:
836
+ type: object
837
+ properties:
838
+ success:
839
+ type: boolean
840
+ example: true
841
+ data:
842
+ type: object
843
+ properties:
844
+ productId:
845
+ type: string
846
+ description: 제품 ID
847
+ location:
848
+ type: object
849
+ properties:
850
+ latitude:
851
+ type: number
852
+ format: float
853
+ longitude:
854
+ type: number
855
+ format: float
856
+ onlineStock:
857
+ type: integer
858
+ description: 온라인 재고 수량
859
+ example: 150
860
+ storeInventory:
861
+ type: object
862
+ properties:
863
+ totalStores:
864
+ type: integer
865
+ description: 전체 매장 수
866
+ inStockCount:
867
+ type: integer
868
+ description: 재고 있는 매장 수
869
+ stores:
870
+ type: array
871
+ items:
872
+ $ref: "#/components/schemas/StoreInventory"
873
+ meta:
874
+ type: object
875
+ properties:
876
+ total:
877
+ type: integer
878
+ page:
879
+ type: integer
880
+ pageSize:
881
+ type: integer
882
+ OliveyoungStore:
883
+ type: object
884
+ description: 올리브영 매장 정보
885
+ properties:
886
+ storeCode:
887
+ type: string
888
+ example: D176
889
+ storeName:
890
+ type: string
891
+ example: 올리브영 명동 타운
892
+ address:
893
+ type: string
894
+ example: 서울특별시 중구 명동길 53
895
+ latitude:
896
+ type: number
897
+ format: float
898
+ example: 37.56409158
899
+ longitude:
900
+ type: number
901
+ format: float
902
+ example: 126.9851771
903
+ pickupYn:
904
+ type: boolean
905
+ example: false
906
+ o2oRemainQuantity:
907
+ type: integer
908
+ example: 0
909
+ OliveyoungProduct:
910
+ type: object
911
+ description: 올리브영 상품 재고 정보
912
+ properties:
913
+ goodsNumber:
914
+ type: string
915
+ example: A000000200614
916
+ goodsName:
917
+ type: string
918
+ example: 달바 퍼플 톤업 선크림 듀오 기획
919
+ priceToPay:
920
+ type: integer
921
+ example: 32130
922
+ originalPrice:
923
+ type: integer
924
+ example: 51000
925
+ discountRate:
926
+ type: integer
927
+ example: 37
928
+ o2oStockFlag:
929
+ type: boolean
930
+ example: true
931
+ o2oRemainQuantity:
932
+ type: integer
933
+ example: 0
934
+ OliveyoungStoreSearchResponse:
935
+ type: object
936
+ properties:
937
+ success:
938
+ type: boolean
939
+ example: true
940
+ data:
941
+ type: object
942
+ properties:
943
+ stores:
944
+ type: array
945
+ items:
946
+ $ref: "#/components/schemas/OliveyoungStore"
947
+ meta:
948
+ type: object
949
+ properties:
950
+ total:
951
+ type: integer
952
+ page:
953
+ type: integer
954
+ pageSize:
955
+ type: integer
956
+ OliveyoungInventoryResponse:
957
+ type: object
958
+ properties:
959
+ success:
960
+ type: boolean
961
+ example: true
962
+ data:
963
+ type: object
964
+ properties:
965
+ keyword:
966
+ type: string
967
+ example: 선크림
968
+ location:
969
+ type: object
970
+ properties:
971
+ latitude:
972
+ type: number
973
+ format: float
974
+ longitude:
975
+ type: number
976
+ format: float
977
+ nearbyStores:
978
+ type: object
979
+ properties:
980
+ totalCount:
981
+ type: integer
982
+ stores:
983
+ type: array
984
+ items:
985
+ $ref: "#/components/schemas/OliveyoungStore"
986
+ inventory:
987
+ type: object
988
+ properties:
989
+ totalCount:
990
+ type: integer
991
+ nextPage:
992
+ type: boolean
993
+ products:
994
+ type: array
995
+ items:
996
+ $ref: "#/components/schemas/OliveyoungProduct"
997
+ meta:
998
+ type: object
999
+ properties:
1000
+ total:
1001
+ type: integer
1002
+ page:
1003
+ type: integer
1004
+ pageSize:
1005
+ type: integer
1006
+ MegaboxTheater:
1007
+ type: object
1008
+ properties:
1009
+ theaterId:
1010
+ type: string
1011
+ example: 1372
1012
+ theaterName:
1013
+ type: string
1014
+ example: 강남
1015
+ address:
1016
+ type: string
1017
+ example: 서울특별시 강남구 강남대로 438
1018
+ latitude:
1019
+ type: number
1020
+ format: float
1021
+ example: 37.4982
1022
+ longitude:
1023
+ type: number
1024
+ format: float
1025
+ example: 127.0264
1026
+ distanceKm:
1027
+ type: number
1028
+ format: float
1029
+ example: 0.5
1030
+ MegaboxShowtime:
1031
+ type: object
1032
+ properties:
1033
+ scheduleId:
1034
+ type: string
1035
+ example: 2603041372011
1036
+ movieId:
1037
+ type: string
1038
+ example: 25104500
1039
+ movieName:
1040
+ type: string
1041
+ example: 미키 17
1042
+ theaterId:
1043
+ type: string
1044
+ example: 1372
1045
+ theaterName:
1046
+ type: string
1047
+ example: 강남
1048
+ playDate:
1049
+ type: string
1050
+ example: 20260304
1051
+ startTime:
1052
+ type: string
1053
+ example: "09:30"
1054
+ endTime:
1055
+ type: string
1056
+ example: "11:20"
1057
+ totalSeats:
1058
+ type: integer
1059
+ example: 120
1060
+ remainingSeats:
1061
+ type: integer
1062
+ example: 42
1063
+ MegaboxTheaterSearchResponse:
1064
+ type: object
1065
+ properties:
1066
+ success:
1067
+ type: boolean
1068
+ example: true
1069
+ data:
1070
+ type: object
1071
+ properties:
1072
+ location:
1073
+ type: object
1074
+ properties:
1075
+ latitude:
1076
+ type: number
1077
+ format: float
1078
+ longitude:
1079
+ type: number
1080
+ format: float
1081
+ playDate:
1082
+ type: string
1083
+ areaCode:
1084
+ type: string
1085
+ theaters:
1086
+ type: array
1087
+ items:
1088
+ $ref: "#/components/schemas/MegaboxTheater"
1089
+ meta:
1090
+ type: object
1091
+ properties:
1092
+ total:
1093
+ type: integer
1094
+ pageSize:
1095
+ type: integer
1096
+ MegaboxMovieListResponse:
1097
+ type: object
1098
+ properties:
1099
+ success:
1100
+ type: boolean
1101
+ example: true
1102
+ data:
1103
+ type: object
1104
+ properties:
1105
+ playDate:
1106
+ type: string
1107
+ filters:
1108
+ type: object
1109
+ properties:
1110
+ theaterId:
1111
+ type: string
1112
+ nullable: true
1113
+ movieId:
1114
+ type: string
1115
+ nullable: true
1116
+ areaCode:
1117
+ type: string
1118
+ theaters:
1119
+ type: array
1120
+ items:
1121
+ type: object
1122
+ properties:
1123
+ theaterId:
1124
+ type: string
1125
+ theaterName:
1126
+ type: string
1127
+ movies:
1128
+ type: array
1129
+ items:
1130
+ type: object
1131
+ properties:
1132
+ movieId:
1133
+ type: string
1134
+ movieName:
1135
+ type: string
1136
+ movieStatus:
1137
+ type: string
1138
+ showtimes:
1139
+ type: array
1140
+ items:
1141
+ $ref: "#/components/schemas/MegaboxShowtime"
1142
+ meta:
1143
+ type: object
1144
+ properties:
1145
+ total:
1146
+ type: integer
1147
+ MegaboxSeatListResponse:
1148
+ type: object
1149
+ properties:
1150
+ success:
1151
+ type: boolean
1152
+ example: true
1153
+ data:
1154
+ type: object
1155
+ properties:
1156
+ playDate:
1157
+ type: string
1158
+ filters:
1159
+ type: object
1160
+ properties:
1161
+ theaterId:
1162
+ type: string
1163
+ nullable: true
1164
+ movieId:
1165
+ type: string
1166
+ nullable: true
1167
+ areaCode:
1168
+ type: string
1169
+ seats:
1170
+ type: array
1171
+ items:
1172
+ $ref: "#/components/schemas/MegaboxShowtime"
1173
+ meta:
1174
+ type: object
1175
+ properties:
1176
+ total:
1177
+ type: integer
1178
+ pageSize:
1179
+ type: integer
1180
+ CgvTheater:
1181
+ type: object
1182
+ properties:
1183
+ theaterCode:
1184
+ type: string
1185
+ example: 0056
1186
+ theaterName:
1187
+ type: string
1188
+ example: CGV강남
1189
+ regionCode:
1190
+ type: string
1191
+ example: 01
1192
+ CgvMovie:
1193
+ type: object
1194
+ properties:
1195
+ movieCode:
1196
+ type: string
1197
+ example: 200001
1198
+ movieName:
1199
+ type: string
1200
+ example: 테스트 영화
1201
+ rating:
1202
+ type: string
1203
+ example: 12
1204
+ CgvTimetable:
1205
+ type: object
1206
+ properties:
1207
+ scheduleId:
1208
+ type: string
1209
+ example: SCH1
1210
+ movieCode:
1211
+ type: string
1212
+ example: 200001
1213
+ movieName:
1214
+ type: string
1215
+ example: 테스트 영화
1216
+ theaterCode:
1217
+ type: string
1218
+ example: 0056
1219
+ theaterName:
1220
+ type: string
1221
+ example: CGV강남
1222
+ playDate:
1223
+ type: string
1224
+ example: 20260304
1225
+ startTime:
1226
+ type: string
1227
+ example: "09:30"
1228
+ endTime:
1229
+ type: string
1230
+ example: "11:20"
1231
+ totalSeats:
1232
+ type: integer
1233
+ example: 150
1234
+ remainingSeats:
1235
+ type: integer
1236
+ example: 42
1237
+ CgvTheaterSearchResponse:
1238
+ type: object
1239
+ properties:
1240
+ success:
1241
+ type: boolean
1242
+ example: true
1243
+ data:
1244
+ type: object
1245
+ properties:
1246
+ playDate:
1247
+ type: string
1248
+ filters:
1249
+ type: object
1250
+ properties:
1251
+ regionCode:
1252
+ type: string
1253
+ nullable: true
1254
+ theaters:
1255
+ type: array
1256
+ items:
1257
+ $ref: "#/components/schemas/CgvTheater"
1258
+ meta:
1259
+ type: object
1260
+ properties:
1261
+ total:
1262
+ type: integer
1263
+ pageSize:
1264
+ type: integer
1265
+ CgvMovieSearchResponse:
1266
+ type: object
1267
+ properties:
1268
+ success:
1269
+ type: boolean
1270
+ example: true
1271
+ data:
1272
+ type: object
1273
+ properties:
1274
+ playDate:
1275
+ type: string
1276
+ filters:
1277
+ type: object
1278
+ properties:
1279
+ theaterCode:
1280
+ type: string
1281
+ nullable: true
1282
+ movies:
1283
+ type: array
1284
+ items:
1285
+ $ref: "#/components/schemas/CgvMovie"
1286
+ meta:
1287
+ type: object
1288
+ properties:
1289
+ total:
1290
+ type: integer
1291
+ CgvTimetableResponse:
1292
+ type: object
1293
+ properties:
1294
+ success:
1295
+ type: boolean
1296
+ example: true
1297
+ data:
1298
+ type: object
1299
+ properties:
1300
+ playDate:
1301
+ type: string
1302
+ filters:
1303
+ type: object
1304
+ properties:
1305
+ theaterCode:
1306
+ type: string
1307
+ nullable: true
1308
+ movieCode:
1309
+ type: string
1310
+ nullable: true
1311
+ timetable:
1312
+ type: array
1313
+ items:
1314
+ $ref: "#/components/schemas/CgvTimetable"
1315
+ meta:
1316
+ type: object
1317
+ properties:
1318
+ total:
1319
+ type: integer
1320
+ pageSize:
1321
+ type: integer
1322
+ ErrorResponse:
1323
+ type: object
1324
+ properties:
1325
+ success:
1326
+ type: boolean
1327
+ example: false
1328
+ error:
1329
+ type: object
1330
+ properties:
1331
+ code:
1332
+ type: string
1333
+ description: 에러 코드
1334
+ example: MISSING_QUERY
1335
+ message:
1336
+ type: string
1337
+ description: 에러 메시지
1338
+ example: 검색어(q)를 입력해주세요.