From dc63f8c33d568f506307b2a78501c40fda9058dd Mon Sep 17 00:00:00 2001 From: dedrSE Date: Thu, 30 Oct 2025 03:29:39 +0900 Subject: [PATCH 1/6] =?UTF-8?q?[sunny/week5]=205=EC=A3=BC=EC=B0=A8=20?= =?UTF-8?q?=EA=B3=BC=EC=A0=9C=20=EB=94=94=EC=9E=90=EC=9D=B8=20=EB=B0=8F=20?= =?UTF-8?q?=EB=94=94=ED=85=8C=EC=9D=BC=20=EC=A0=9C=EC=99=B8=20json=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=97=B0=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MovieSchedule.dataset/Contents.json | 12 + .../MovieSchedule.dataset/MovieSchedule.json | 385 ++++++++++++++++++ megabox/Resources/MovieSchedule.json | 385 ++++++++++++++++++ .../MovieBooking/DTO/MovieScheduleDTO.swift | 76 ++++ .../Models/MovieBookingModel.swift | 21 + .../ViewModels/MovieBookingViewModel.swift | 97 ++++- .../MovieBooking/Views/MovieBookingView.swift | 131 +++++- 7 files changed, 1102 insertions(+), 5 deletions(-) create mode 100644 megabox/Resources/Assets.xcassets/MovieSchedule.dataset/Contents.json create mode 100644 megabox/Resources/Assets.xcassets/MovieSchedule.dataset/MovieSchedule.json create mode 100644 megabox/Resources/MovieSchedule.json create mode 100644 megabox/Sources/MovieBooking/DTO/MovieScheduleDTO.swift diff --git a/megabox/Resources/Assets.xcassets/MovieSchedule.dataset/Contents.json b/megabox/Resources/Assets.xcassets/MovieSchedule.dataset/Contents.json new file mode 100644 index 0000000..0358039 --- /dev/null +++ b/megabox/Resources/Assets.xcassets/MovieSchedule.dataset/Contents.json @@ -0,0 +1,12 @@ +{ + "data" : [ + { + "filename" : "MovieSchedule.json", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/megabox/Resources/Assets.xcassets/MovieSchedule.dataset/MovieSchedule.json b/megabox/Resources/Assets.xcassets/MovieSchedule.dataset/MovieSchedule.json new file mode 100644 index 0000000..b95dbe7 --- /dev/null +++ b/megabox/Resources/Assets.xcassets/MovieSchedule.dataset/MovieSchedule.json @@ -0,0 +1,385 @@ +{ + "status": "success", + "message": "Showtimes fetched successfully", + "data": { + "movies": [ + { + "id": "m-001", + "title": "어쩔수가없다", + "age_rating": "15", + "schedules": [ + { + "date": "2025-09-22", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "크리클라이너 1관", + "format": "2D", + "showtimes": [ + { "start": "11:30", "end": "13:58", "available": 109, "total": 116 }, + { "start": "14:20", "end": "16:48", "available": 19, "total": 116 }, + { "start": "17:05", "end": "19:28", "available": 1, "total": 116 }, + { "start": "19:45", "end": "22:02", "available": 100, "total": 116 }, + { "start": "22:20", "end": "00:04", "available": 116, "total": 116 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "BTS관 (7층 1관 [Laser])", + "format": "2D", + "showtimes": [ + { "start": "09:30", "end": "11:50", "available": 75, "total": 116 }, + { "start": "12:00", "end": "14:26", "available": 102, "total": 116 }, + { "start": "14:45", "end": "17:04", "available": 88, "total": 116 } + ] + }, + { + "auditorium": "BTS관 (9층 2관 [Laser])", + "format": "2D", + "showtimes": [ + { "start": "11:30", "end": "13:58", "available": 34, "total": 116 }, + { "start": "14:10", "end": "16:32", "available": 100, "total": 116 }, + { "start": "16:50", "end": "19:00", "available": 13, "total": 116 }, + { "start": "19:20", "end": "21:40", "available": 92, "total": 116 } + ] + } + ] + } + ] + }, + { + "date": "2025-09-23", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "크리클라이너 1관", + "format": "2D", + "showtimes": [ + { "start": "10:30", "end": "12:58", "available": 112, "total": 116 }, + { "start": "13:40", "end": "16:08", "available": 54, "total": 116 }, + { "start": "16:20", "end": "18:48", "available": 22, "total": 116 }, + { "start": "19:30", "end": "21:58", "available": 97, "total": 116 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "BTS관 (7층 1관 [Laser])", + "format": "2D", + "showtimes": [ + { "start": "09:50", "end": "12:10", "available": 81, "total": 116 }, + { "start": "12:30", "end": "14:56", "available": 99, "total": 116 }, + { "start": "15:20", "end": "17:39", "available": 61, "total": 116 } + ] + }, + { + "auditorium": "BTS관 (9층 2관 [Laser])", + "format": "2D", + "showtimes": [ + { "start": "11:10", "end": "13:38", "available": 45, "total": 116 }, + { "start": "14:00", "end": "16:22", "available": 88, "total": 116 }, + { "start": "16:40", "end": "18:58", "available": 24, "total": 116 }, + { "start": "19:10", "end": "21:30", "available": 90, "total": 116 } + ] + } + ] + } + ] + }, + { + "date": "2025-09-24", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "크리클라이너 1관", + "format": "2D", + "showtimes": [ + { "start": "11:00", "end": "13:28", "available": 106, "total": 116 }, + { "start": "13:50", "end": "16:18", "available": 33, "total": 116 }, + { "start": "16:40", "end": "19:08", "available": 5, "total": 116 }, + { "start": "19:20", "end": "21:48", "available": 84, "total": 116 }, + { "start": "22:10", "end": "00:34", "available": 116, "total": 116 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "BTS관 (7층 1관 [Laser])", + "format": "2D", + "showtimes": [ + { "start": "10:10", "end": "12:30", "available": 72, "total": 116 }, + { "start": "12:50", "end": "15:16", "available": 104, "total": 116 }, + { "start": "15:40", "end": "18:00", "available": 76, "total": 116 } + ] + }, + { + "auditorium": "BTS관 (9층 2관 [Laser])", + "format": "2D", + "showtimes": [ + { "start": "11:40", "end": "14:08", "available": 29, "total": 116 }, + { "start": "14:20", "end": "16:42", "available": 93, "total": 116 }, + { "start": "17:10", "end": "19:30", "available": 18, "total": 116 }, + { "start": "19:40", "end": "22:00", "available": 87, "total": 116 } + ] + } + ] + } + ] + } + ] + }, + { + "id": "m-002", + "title": "F1 더 무비", + "age_rating": "12", + "schedules": [ + { + "date": "2025-09-22", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "IMAX 1관", + "format": "IMAX", + "showtimes": [ + { "start": "10:00", "end": "12:15", "available": 45, "total": 50 }, + { "start": "13:30", "end": "15:45", "available": 12, "total": 50 }, + { "start": "17:00", "end": "19:15", "available": 8, "total": 50 }, + { "start": "20:30", "end": "22:45", "available": 35, "total": 50 } + ] + }, + { + "auditorium": "4DX 2관", + "format": "4DX", + "showtimes": [ + { "start": "11:15", "end": "13:30", "available": 28, "total": 40 }, + { "start": "15:45", "end": "18:00", "available": 5, "total": 40 }, + { "start": "19:15", "end": "21:30", "available": 22, "total": 40 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "IMAX 3관", + "format": "IMAX", + "showtimes": [ + { "start": "09:45", "end": "12:00", "available": 38, "total": 50 }, + { "start": "13:15", "end": "15:30", "available": 15, "total": 50 }, + { "start": "16:45", "end": "19:00", "available": 3, "total": 50 }, + { "start": "20:15", "end": "22:30", "available": 42, "total": 50 } + ] + } + ] + } + ] + }, + { + "date": "2025-09-23", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "IMAX 1관", + "format": "IMAX", + "showtimes": [ + { "start": "10:30", "end": "12:45", "available": 48, "total": 50 }, + { "start": "14:00", "end": "16:15", "available": 25, "total": 50 }, + { "start": "17:30", "end": "19:45", "available": 18, "total": 50 }, + { "start": "21:00", "end": "23:15", "available": 41, "total": 50 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "IMAX 3관", + "format": "IMAX", + "showtimes": [ + { "start": "10:00", "end": "12:15", "available": 33, "total": 50 }, + { "start": "13:30", "end": "15:45", "available": 7, "total": 50 }, + { "start": "17:00", "end": "19:15", "available": 12, "total": 50 }, + { "start": "20:30", "end": "22:45", "available": 39, "total": 50 } + ] + } + ] + } + ] + }, + { + "date": "2025-09-24", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "IMAX 1관", + "format": "IMAX", + "showtimes": [ + { "start": "09:30", "end": "11:45", "available": 42, "total": 50 }, + { "start": "12:45", "end": "15:00", "available": 18, "total": 50 }, + { "start": "15:30", "end": "17:45", "available": 6, "total": 50 }, + { "start": "18:15", "end": "20:30", "available": 29, "total": 50 }, + { "start": "21:00", "end": "23:15", "available": 44, "total": 50 } + ] + }, + { + "auditorium": "4DX 2관", + "format": "4DX", + "showtimes": [ + { "start": "10:30", "end": "12:45", "available": 15, "total": 40 }, + { "start": "14:00", "end": "16:15", "available": 3, "total": 40 }, + { "start": "17:30", "end": "19:45", "available": 1, "total": 40 }, + { "start": "20:00", "end": "22:15", "available": 25, "total": 40 } + ] + } + ] + } + ] + } + ] + }, + { + "id": "m-003", + "title": "귀멸의 칼날: 무한성", + "age_rating": "15", + "schedules": [ + { + "date": "2025-09-22", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "2D", + "format": "2D", + "showtimes": [ + { "start": "09:30", "end": "12:20", "available": 85, "total": 120 }, + { "start": "13:00", "end": "15:50", "available": 23, "total": 120 }, + { "start": "16:30", "end": "19:20", "available": 2, "total": 120 }, + { "start": "20:00", "end": "22:50", "available": 78, "total": 120 }, + { "start": "23:30", "end": "02:20", "available": 95, "total": 120 } + ] + }, + { + "auditorium": "4DX 3관", + "format": "4DX", + "showtimes": [ + { "start": "10:45", "end": "13:35", "available": 15, "total": 40 }, + { "start": "14:15", "end": "17:05", "available": 4, "total": 40 }, + { "start": "17:45", "end": "20:35", "available": 1, "total": 40 }, + { "start": "21:15", "end": "00:05", "available": 28, "total": 40 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "2D", + "format": "2D", + "showtimes": [ + { "start": "09:00", "end": "11:50", "available": 67, "total": 120 }, + { "start": "12:30", "end": "15:20", "available": 19, "total": 120 }, + { "start": "16:00", "end": "18:50", "available": 5, "total": 120 }, + { "start": "19:30", "end": "22:20", "available": 89, "total": 120 } + ] + }, + { + "auditorium": "Dolby Cinema 4관", + "format": "Dolby", + "showtimes": [ + { "start": "11:00", "end": "13:50", "available": 22, "total": 60 }, + { "start": "14:30", "end": "17:20", "available": 8, "total": 60 }, + { "start": "18:00", "end": "20:50", "available": 3, "total": 60 }, + { "start": "21:30", "end": "00:20", "available": 45, "total": 60 } + ] + } + ] + } + ] + }, + { + "date": "2025-09-23", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "2D", + "format": "2D", + "showtimes": [ + { "start": "09:45", "end": "12:35", "available": 92, "total": 120 }, + { "start": "13:15", "end": "16:05", "available": 31, "total": 120 }, + { "start": "16:45", "end": "19:35", "available": 7, "total": 120 }, + { "start": "20:15", "end": "23:05", "available": 84, "total": 120 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "2D", + "format": "2D", + "showtimes": [ + { "start": "09:30", "end": "12:20", "available": 74, "total": 120 }, + { "start": "13:00", "end": "15:50", "available": 26, "total": 120 }, + { "start": "16:30", "end": "19:20", "available": 11, "total": 120 }, + { "start": "20:00", "end": "22:50", "available": 96, "total": 120 } + ] + } + ] + } + ] + }, + { + "date": "2025-09-24", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "돌비시네마", + "format": "2D", + "showtimes": [ + { "start": "09:15", "end": "12:05", "available": 88, "total": 120 }, + { "start": "12:45", "end": "15:35", "available": 25, "total": 120 }, + { "start": "16:15", "end": "19:05", "available": 4, "total": 120 }, + { "start": "19:45", "end": "22:35", "available": 81, "total": 120 }, + { "start": "23:15", "end": "02:05", "available": 98, "total": 120 } + ] + } + ] + } + ] + } + ] + } + ] + } +} diff --git a/megabox/Resources/MovieSchedule.json b/megabox/Resources/MovieSchedule.json new file mode 100644 index 0000000..35ce270 --- /dev/null +++ b/megabox/Resources/MovieSchedule.json @@ -0,0 +1,385 @@ +{ + "status": "success", + "message": "Showtimes fetched successfully", + "data": { + "movies": [ + { + "id": "m-001", + "title": "어쩔수가없다", + "age_rating": "15", + "schedules": [ + { + "date": "2025-10-30", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "크리클라이너 1관", + "format": "2D", + "showtimes": [ + { "start": "11:30", "end": "13:58", "available": 109, "total": 116 }, + { "start": "14:20", "end": "16:48", "available": 19, "total": 116 }, + { "start": "17:05", "end": "19:28", "available": 1, "total": 116 }, + { "start": "19:45", "end": "22:02", "available": 100, "total": 116 }, + { "start": "22:20", "end": "00:04", "available": 116, "total": 116 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "BTS관 (7층 1관 [Laser])", + "format": "2D", + "showtimes": [ + { "start": "09:30", "end": "11:50", "available": 75, "total": 116 }, + { "start": "12:00", "end": "14:26", "available": 102, "total": 116 }, + { "start": "14:45", "end": "17:04", "available": 88, "total": 116 } + ] + }, + { + "auditorium": "BTS관 (9층 2관 [Laser])", + "format": "2D", + "showtimes": [ + { "start": "11:30", "end": "13:58", "available": 34, "total": 116 }, + { "start": "14:10", "end": "16:32", "available": 100, "total": 116 }, + { "start": "16:50", "end": "19:00", "available": 13, "total": 116 }, + { "start": "19:20", "end": "21:40", "available": 92, "total": 116 } + ] + } + ] + } + ] + }, + { + "date": "2025-10-31", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "크리클라이너 1관", + "format": "2D", + "showtimes": [ + { "start": "10:30", "end": "12:58", "available": 112, "total": 116 }, + { "start": "13:40", "end": "16:08", "available": 54, "total": 116 }, + { "start": "16:20", "end": "18:48", "available": 22, "total": 116 }, + { "start": "19:30", "end": "21:58", "available": 97, "total": 116 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "BTS관 (7층 1관 [Laser])", + "format": "2D", + "showtimes": [ + { "start": "09:50", "end": "12:10", "available": 81, "total": 116 }, + { "start": "12:30", "end": "14:56", "available": 99, "total": 116 }, + { "start": "15:20", "end": "17:39", "available": 61, "total": 116 } + ] + }, + { + "auditorium": "BTS관 (9층 2관 [Laser])", + "format": "2D", + "showtimes": [ + { "start": "11:10", "end": "13:38", "available": 45, "total": 116 }, + { "start": "14:00", "end": "16:22", "available": 88, "total": 116 }, + { "start": "16:40", "end": "18:58", "available": 24, "total": 116 }, + { "start": "19:10", "end": "21:30", "available": 90, "total": 116 } + ] + } + ] + } + ] + }, + { + "date": "2025-11-01", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "크리클라이너 1관", + "format": "2D", + "showtimes": [ + { "start": "11:00", "end": "13:28", "available": 106, "total": 116 }, + { "start": "13:50", "end": "16:18", "available": 33, "total": 116 }, + { "start": "16:40", "end": "19:08", "available": 5, "total": 116 }, + { "start": "19:20", "end": "21:48", "available": 84, "total": 116 }, + { "start": "22:10", "end": "00:34", "available": 116, "total": 116 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "BTS관 (7층 1관 [Laser])", + "format": "2D", + "showtimes": [ + { "start": "10:10", "end": "12:30", "available": 72, "total": 116 }, + { "start": "12:50", "end": "15:16", "available": 104, "total": 116 }, + { "start": "15:40", "end": "18:00", "available": 76, "total": 116 } + ] + }, + { + "auditorium": "BTS관 (9층 2관 [Laser])", + "format": "2D", + "showtimes": [ + { "start": "11:40", "end": "14:08", "available": 29, "total": 116 }, + { "start": "14:20", "end": "16:42", "available": 93, "total": 116 }, + { "start": "17:10", "end": "19:30", "available": 18, "total": 116 }, + { "start": "19:40", "end": "22:00", "available": 87, "total": 116 } + ] + } + ] + } + ] + } + ] + }, + { + "id": "m-002", + "title": "F1 더 무비", + "age_rating": "12", + "schedules": [ + { + "date": "2025-10-30", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "IMAX 1관", + "format": "IMAX", + "showtimes": [ + { "start": "10:00", "end": "12:15", "available": 45, "total": 50 }, + { "start": "13:30", "end": "15:45", "available": 12, "total": 50 }, + { "start": "17:00", "end": "19:15", "available": 8, "total": 50 }, + { "start": "20:30", "end": "22:45", "available": 35, "total": 50 } + ] + }, + { + "auditorium": "4DX 2관", + "format": "4DX", + "showtimes": [ + { "start": "11:15", "end": "13:30", "available": 28, "total": 40 }, + { "start": "15:45", "end": "18:00", "available": 5, "total": 40 }, + { "start": "19:15", "end": "21:30", "available": 22, "total": 40 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "IMAX 3관", + "format": "IMAX", + "showtimes": [ + { "start": "09:45", "end": "12:00", "available": 38, "total": 50 }, + { "start": "13:15", "end": "15:30", "available": 15, "total": 50 }, + { "start": "16:45", "end": "19:00", "available": 3, "total": 50 }, + { "start": "20:15", "end": "22:30", "available": 42, "total": 50 } + ] + } + ] + } + ] + }, + { + "date": "2025-10-31", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "IMAX 1관", + "format": "IMAX", + "showtimes": [ + { "start": "10:30", "end": "12:45", "available": 48, "total": 50 }, + { "start": "14:00", "end": "16:15", "available": 25, "total": 50 }, + { "start": "17:30", "end": "19:45", "available": 18, "total": 50 }, + { "start": "21:00", "end": "23:15", "available": 41, "total": 50 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "IMAX 3관", + "format": "IMAX", + "showtimes": [ + { "start": "10:00", "end": "12:15", "available": 33, "total": 50 }, + { "start": "13:30", "end": "15:45", "available": 7, "total": 50 }, + { "start": "17:00", "end": "19:15", "available": 12, "total": 50 }, + { "start": "20:30", "end": "22:45", "available": 39, "total": 50 } + ] + } + ] + } + ] + }, + { + "date": "2025-11-01", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "IMAX 1관", + "format": "IMAX", + "showtimes": [ + { "start": "09:30", "end": "11:45", "available": 42, "total": 50 }, + { "start": "12:45", "end": "15:00", "available": 18, "total": 50 }, + { "start": "15:30", "end": "17:45", "available": 6, "total": 50 }, + { "start": "18:15", "end": "20:30", "available": 29, "total": 50 }, + { "start": "21:00", "end": "23:15", "available": 44, "total": 50 } + ] + }, + { + "auditorium": "4DX 2관", + "format": "4DX", + "showtimes": [ + { "start": "10:30", "end": "12:45", "available": 15, "total": 40 }, + { "start": "14:00", "end": "16:15", "available": 3, "total": 40 }, + { "start": "17:30", "end": "19:45", "available": 1, "total": 40 }, + { "start": "20:00", "end": "22:15", "available": 25, "total": 40 } + ] + } + ] + } + ] + } + ] + }, + { + "id": "m-003", + "title": "귀멸의 칼날: 무한성", + "age_rating": "15", + "schedules": [ + { + "date": "2025-10-30", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "2D", + "format": "2D", + "showtimes": [ + { "start": "09:30", "end": "12:20", "available": 85, "total": 120 }, + { "start": "13:00", "end": "15:50", "available": 23, "total": 120 }, + { "start": "16:30", "end": "19:20", "available": 2, "total": 120 }, + { "start": "20:00", "end": "22:50", "available": 78, "total": 120 }, + { "start": "23:30", "end": "02:20", "available": 95, "total": 120 } + ] + }, + { + "auditorium": "4DX 3관", + "format": "4DX", + "showtimes": [ + { "start": "10:45", "end": "13:35", "available": 15, "total": 40 }, + { "start": "14:15", "end": "17:05", "available": 4, "total": 40 }, + { "start": "17:45", "end": "20:35", "available": 1, "total": 40 }, + { "start": "21:15", "end": "00:05", "available": 28, "total": 40 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "2D", + "format": "2D", + "showtimes": [ + { "start": "09:00", "end": "11:50", "available": 67, "total": 120 }, + { "start": "12:30", "end": "15:20", "available": 19, "total": 120 }, + { "start": "16:00", "end": "18:50", "available": 5, "total": 120 }, + { "start": "19:30", "end": "22:20", "available": 89, "total": 120 } + ] + }, + { + "auditorium": "Dolby Cinema 4관", + "format": "Dolby", + "showtimes": [ + { "start": "11:00", "end": "13:50", "available": 22, "total": 60 }, + { "start": "14:30", "end": "17:20", "available": 8, "total": 60 }, + { "start": "18:00", "end": "20:50", "available": 3, "total": 60 }, + { "start": "21:30", "end": "00:20", "available": 45, "total": 60 } + ] + } + ] + } + ] + }, + { + "date": "2025-10-31", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "2D", + "format": "2D", + "showtimes": [ + { "start": "09:45", "end": "12:35", "available": 92, "total": 120 }, + { "start": "13:15", "end": "16:05", "available": 31, "total": 120 }, + { "start": "16:45", "end": "19:35", "available": 7, "total": 120 }, + { "start": "20:15", "end": "23:05", "available": 84, "total": 120 } + ] + } + ] + }, + { + "area": "홍대", + "items": [ + { + "auditorium": "2D", + "format": "2D", + "showtimes": [ + { "start": "09:30", "end": "12:20", "available": 74, "total": 120 }, + { "start": "13:00", "end": "15:50", "available": 26, "total": 120 }, + { "start": "16:30", "end": "19:20", "available": 11, "total": 120 }, + { "start": "20:00", "end": "22:50", "available": 96, "total": 120 } + ] + } + ] + } + ] + }, + { + "date": "2025-11-01", + "areas": [ + { + "area": "강남", + "items": [ + { + "auditorium": "돌비시네마", + "format": "2D", + "showtimes": [ + { "start": "09:15", "end": "12:05", "available": 88, "total": 120 }, + { "start": "12:45", "end": "15:35", "available": 25, "total": 120 }, + { "start": "16:15", "end": "19:05", "available": 4, "total": 120 }, + { "start": "19:45", "end": "22:35", "available": 81, "total": 120 }, + { "start": "23:15", "end": "02:05", "available": 98, "total": 120 } + ] + } + ] + } + ] + } + ] + } + ] + } +} diff --git a/megabox/Sources/MovieBooking/DTO/MovieScheduleDTO.swift b/megabox/Sources/MovieBooking/DTO/MovieScheduleDTO.swift new file mode 100644 index 0000000..57e21ce --- /dev/null +++ b/megabox/Sources/MovieBooking/DTO/MovieScheduleDTO.swift @@ -0,0 +1,76 @@ +import Foundation + +struct MovieScheduleResponseDTO: Decodable { + let status: String + let message: String + let data: MovieScheduleDataDTO +} + +struct MovieScheduleDataDTO: Decodable { + let movies: [MovieDTO] +} + +struct MovieDTO: Decodable { + let id: String + let title: String + let ageRating: String + let schedules: [ScheduleDTO] + + enum CodingKeys: String, CodingKey { + case id, title + case ageRating = "age_rating" + case schedules + } +} + +struct ScheduleDTO: Decodable { + let date: String + let areas: [AreaDTO] +} + +struct AreaDTO: Decodable { + let area: String + let items: [ItemDTO] +} + +struct ItemDTO: Decodable { + let auditorium: String + let format: String + let showtimes: [ShowtimeDTO] +} + +struct ShowtimeDTO: Decodable { + let start: String + let end: String + let available: Int + let total: Int +} + +extension MovieDTO { + func toTheaterShowtimes(for date: Date, theaters selectedTheaters: [String]) -> [TheaterShowtimes] { + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd" + let dateString = formatter.string(from: date) + + // 선택한 날짜의 일정만 찾기 + guard let schedule = schedules.first(where: { $0.date == dateString }) else { return [] } + + // 선택된 지역(극장)만 필터링 + let filteredAreas = schedule.areas.filter { selectedTheaters.contains($0.area) } + + return filteredAreas.map { area in + TheaterShowtimes( + branch: area.area, + rooms: area.items.map { item in + RoomShowtimes( + name: item.auditorium, + format: item.format, + times: item.showtimes.map { show in + Showtime(start: show.start, end: show.end, reserved: show.total - show.available, total: show.total) + } + ) + } + ) + } + } +} diff --git a/megabox/Sources/MovieBooking/Models/MovieBookingModel.swift b/megabox/Sources/MovieBooking/Models/MovieBookingModel.swift index 5db218a..5b3e9be 100644 --- a/megabox/Sources/MovieBooking/Models/MovieBookingModel.swift +++ b/megabox/Sources/MovieBooking/Models/MovieBookingModel.swift @@ -6,3 +6,24 @@ struct MovieBooking: Identifiable { let imageName: String let ageRating: Int? } + +struct Showtime: Identifiable, Hashable { + let id = UUID() + let start: String + let end: String + let reserved: Int + let total: Int +} + +struct RoomShowtimes: Identifiable, Hashable { + let id = UUID() + let name: String // 예: "리클라이너 1관", "BTS관 (7층 1관 [Laser])" + let format: String? // 예: "2D", "3D", "4DX" 등 (필요 없으면 nil) + let times: [Showtime] +} + +struct TheaterShowtimes: Identifiable, Hashable { + let id = UUID() + let branch: String // 예: "강남", "홍대" + let rooms: [RoomShowtimes] +} diff --git a/megabox/Sources/MovieBooking/ViewModels/MovieBookingViewModel.swift b/megabox/Sources/MovieBooking/ViewModels/MovieBookingViewModel.swift index 5517b99..c2d52b5 100644 --- a/megabox/Sources/MovieBooking/ViewModels/MovieBookingViewModel.swift +++ b/megabox/Sources/MovieBooking/ViewModels/MovieBookingViewModel.swift @@ -7,14 +7,22 @@ final class MovieBookingViewModel: ObservableObject { @Published var selectedMovie: MovieBooking? = nil @Published var selectedTheaters: [String] = [] @Published var selectedDate: Date? = nil + @Published var availableDates: [Date] = [] + var canShowDates: Bool { selectedMovie != nil && !selectedTheaters.isEmpty } + @Published var showtimeGroups: [TheaterShowtimes] = [] + @Published var canSelectTheater: Bool = false + var canShowTimes: Bool { canShowDates && selectedDate != nil } + + private let calendar = Calendar.current + private let weekdaySymbolsKOR = ["일", "월", "화", "수", "목", "금", "토"] private var cancellables = Set() init() { movies = [ MovieBooking(title: "F1 더 무비", imageName: "poster_f1", ageRating: 12), - MovieBooking(title: "극장판 귀멸의 칼날", imageName: "poster_demonslayer", ageRating: 15), + MovieBooking(title: "귀멸의 칼날: 무한성", imageName: "poster_demonslayer", ageRating: 15), MovieBooking(title: "어쩔수가없다", imageName: "poster_noway", ageRating: 15), MovieBooking(title: "얼굴", imageName: "poster_face", ageRating: 15), MovieBooking(title: "모노노케 히메", imageName: "poster_princess", ageRating: 15), @@ -24,8 +32,10 @@ final class MovieBookingViewModel: ObservableObject { $selectedMovie .map { $0 != nil } // 영화가 있으면 true, 없으면 false .assign(to: &$canSelectTheater) // 자동으로 canSelectTheater 업데이트 + + regenerateWeek() } - + func selectMovie(_ movie: MovieBooking) { selectedMovie = movie selectedTheaters = [] // 영화 변경 시 극장 초기화 @@ -47,7 +57,7 @@ final class MovieBookingViewModel: ObservableObject { } return "\(age)" } - + func getAgeRatingColor(for movie: MovieBooking?) -> Color { guard let age = movie?.ageRating else { return .green } @@ -58,5 +68,86 @@ final class MovieBookingViewModel: ObservableObject { default: return .gray } } + + + func regenerateWeek(startingFrom date: Date = Date()) { + let start = calendar.startOfDay(for: date) + availableDates = (0..<7).compactMap { calendar.date(byAdding: .day, value: $0, to: start) } + // 선택 초기화(옵션) + if let sel = selectedDate, !availableDates.contains(where: { calendar.isDate($0, inSameDayAs: sel) }) { + selectedDate = nil + } + } + + // 셀 라벨들 + func weekday(_ date: Date) -> String { + let w = calendar.component(.weekday, from: date) // 1=일 + return weekdaySymbolsKOR[w-1] + } + func day(_ date: Date) -> String { + let d = calendar.component(.day, from: date) + return String(d) + } + func isToday(_ date: Date) -> Bool { calendar.isDateInToday(date) } + func isSameDay(_ a: Date?, _ b: Date) -> Bool { + guard let a else { return false } + return calendar.isDate(a, inSameDayAs: b) + } + + // "오늘/내일/요일" 캡션 + func dayCaption(_ date: Date) -> String { + if calendar.isDateInToday(date) { return "오늘" } + if let tomorrow = calendar.date(byAdding: .day, value: 1, to: Date()), + calendar.isDate(date, inSameDayAs: tomorrow) { return "내일" } + return weekday(date) // "일"~"토" + } + + // 주말 판별 + func weekendColor(for date: Date, selected: Bool) -> Color { + if selected { return .white } // 선택 시는 전부 흰색 + let w = calendar.component(.weekday, from: date) // 1=일, 7=토 + if w == 1 { return .red } // 일 + if w == 7 { return .teal } // 토 (시스템 컬러) + return .black // 평일 + } + + func fetchShowtimes(for movie: MovieBooking, theaters: [String], date: Date) async { +// isLoading = true +// defer { isLoading = false } // 끝나면 자동으로 false + + // 1️⃣ 번들에서 JSON 파일 읽기 + guard let url = Bundle.main.url(forResource: "MovieSchedule", withExtension: "json"), + let data = try? Data(contentsOf: url) else { + print("파일을 찾을 수 없습니다.") + showtimeGroups = [] + return + } + + do { + + // JSON 디코딩 (DTO 구조 사용) + let decoded = try JSONDecoder().decode(MovieScheduleResponseDTO.self, from: data) + print("JSON decode 성공. 영화 개수:", decoded.data.movies.count) + // 해당 영화 데이터 찾기 + guard let movieDTO = decoded.data.movies.first(where: { $0.title == movie.title }) else { + print("해당 영화 데이터 없음: \(movie.title)") + showtimeGroups = [] + return + } + + // DTO → Domain 매핑 + let mapped = movieDTO.toTheaterShowtimes(for: date, theaters: theaters) + print("변환된 상영 데이터 개수:", mapped.count) + // View 반영 + showtimeGroups = mapped + + } catch { + print("디코딩 에러:", error) + showtimeGroups = [] + } + } + + + } diff --git a/megabox/Sources/MovieBooking/Views/MovieBookingView.swift b/megabox/Sources/MovieBooking/Views/MovieBookingView.swift index 8d592cc..2cbec74 100644 --- a/megabox/Sources/MovieBooking/Views/MovieBookingView.swift +++ b/megabox/Sources/MovieBooking/Views/MovieBookingView.swift @@ -9,7 +9,17 @@ struct MovieBookingView: View { movieSection .padding(.bottom, 10) theaterSection + + if viewModel.canShowDates { + dateWeekSection + } + + if viewModel.canShowTimes { + showtimeSection + } + Spacer() + } .padding(16) .background(Color.white) @@ -126,6 +136,123 @@ struct MovieBookingView: View { } .frame(maxWidth: .infinity, alignment: .leading) } + + private var dateWeekSection: some View { + VStack(alignment: .leading, spacing: 12) { + Text("날짜 선택") + .font(.semiBold16) + .foregroundColor(.black) + + // 7열 고정 (한 줄) + let cols = Array(repeating: GridItem(.flexible(), spacing: 6), count: 7) + + LazyVGrid(columns: cols, spacing: 0) { + ForEach(Array(viewModel.availableDates.enumerated()), id: \.offset) { idx, date in + let selected = viewModel.isSameDay(viewModel.selectedDate, date) + + Button { + viewModel.selectedDate = date + + Task { + if let movie = viewModel.selectedMovie, + !viewModel.selectedTheaters.isEmpty, + let date = viewModel.selectedDate { + await viewModel.fetchShowtimes(for: movie, theaters: viewModel.selectedTheaters, date: date) + } + } + } label: { + VStack(spacing: 4) { + Text(viewModel.day(date)) + .font(.semiBold16) + .foregroundColor(selected ? .white + : viewModel.weekendColor(for: date, selected: false)) + Text(viewModel.dayCaption(date)) // "오늘/내일/요일" + .font(.medium13) + .foregroundColor(selected ? .white : Color("gray05")) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 10) + .background(selected ? Color("purple03") : .clear) + .cornerRadius(12) + } + .disabled(!viewModel.canShowDates) + } + } + } + } + + private var showtimeSection: some View { + let groups: [TheaterShowtimes] = viewModel.showtimeGroups + + return VStack(alignment: .leading, spacing: 12) { + ForEach(groups, id: \.id) { theater in + TheaterBlock(theater: theater) + } + } + } + + private struct TheaterBlock: View { + let theater: TheaterShowtimes + + var body: some View { + VStack(alignment: .leading, spacing: 8) { + // 극장명: 항상 왼쪽 정렬 + Text(theater.branch) + .font(.bold18) + .foregroundColor(.black) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.leading, 8) + + // 상영관/시간 유무에 따른 분기 + if theater.rooms.isEmpty { + Text("상영 정보가 없습니다") + .font(.medium14) + .foregroundColor(Color("gray05")) + .padding(.leading, 8) + } else { + ForEach(theater.rooms, id: \.id) { room in + RoomRow(room: room) + } + } + } + .padding(.bottom, 8) + .frame(maxWidth: .infinity, alignment: .leading) + } + } + + private struct RoomRow: View { + let room: RoomShowtimes + + var body: some View { + VStack(alignment: .leading, spacing: 4) { + HStack { + Text(room.name) + .font(.semiBold14) + + if let format = room.format { + Text(format) + .font(.medium08) + .foregroundColor(.gray) + } + } + + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 8) { + ForEach(room.times, id: \.id) { time in + Text(time.start) + .font(.semiBold14) + .padding(.vertical, 6) + .padding(.horizontal, 10) + .background(Color("gray01")) + .cornerRadius(8) + } + } + } + } + } + } + + } #Preview { @@ -134,9 +261,9 @@ struct MovieBookingView: View { #Preview("iPhone 11") { - HomeView() + MovieBookingView() } #Preview("iPhone 16 Pro Max") { - HomeView() + MovieBookingView() } From c78fea67b11df9b08a06afc1e9b887a2eb4ada7e Mon Sep 17 00:00:00 2001 From: dedrSE Date: Thu, 6 Nov 2025 05:11:02 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[sunny/week6]=206=EC=A3=BC=EC=B0=A8=20?= =?UTF-8?q?=EA=B3=BC=EC=A0=9C=20git=20ignore=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ megabox/Resources/Secret.xcconfig | 0 megabox/Sources/Utils/KeychainHelper.swift | 0 3 files changed, 3 insertions(+) create mode 100644 megabox/Resources/Secret.xcconfig create mode 100644 megabox/Sources/Utils/KeychainHelper.swift diff --git a/.gitignore b/.gitignore index d28688d..0aa6b57 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,6 @@ fastlane/test_output/ # # Tuist 프로젝트의 설정 파일 /.tuist/ + +# Secret file +*.xcconfig diff --git a/megabox/Resources/Secret.xcconfig b/megabox/Resources/Secret.xcconfig new file mode 100644 index 0000000..e69de29 diff --git a/megabox/Sources/Utils/KeychainHelper.swift b/megabox/Sources/Utils/KeychainHelper.swift new file mode 100644 index 0000000..e69de29 From bb441652e5e818c71afbb75008cc31f8ae5cf6d9 Mon Sep 17 00:00:00 2001 From: dedrSE Date: Thu, 6 Nov 2025 05:12:57 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[sunny/week6]=206=EC=A3=BC=EC=B0=A8=20?= =?UTF-8?q?=EA=B3=BC=EC=A0=9C=20=EC=B9=B4=EC=B9=B4=EC=98=A4=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EC=A0=9C=EC=99=B8=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .package.resolved | 24 ++++++ Derived/Sources/TuistBundle+Megabox.swift | 25 ++++++ Project.swift | 39 +++++++++- megabox.xcodeproj/project.pbxproj | 77 ++++++++++++++++++- megabox/Resources/Secret.xcconfig | 0 megabox/Sources/ContentView.swift | 48 ++++++++---- .../Login/ViewModels/LoginViewModel.swift | 47 +++++++++++ megabox/Sources/Login/Views/LoginView.swift | 20 ++++- megabox/Sources/MegaboxApp.swift | 13 ++++ .../Profile/Views/MemberInfoView.swift | 2 + .../Sources/Profile/Views/ProfileView.swift | 21 +++++ megabox/Sources/Utils/KeychainHelper.swift | 65 ++++++++++++++++ 12 files changed, 361 insertions(+), 20 deletions(-) create mode 100644 .package.resolved create mode 100644 Derived/Sources/TuistBundle+Megabox.swift delete mode 100644 megabox/Resources/Secret.xcconfig diff --git a/.package.resolved b/.package.resolved new file mode 100644 index 0000000..e3dc19e --- /dev/null +++ b/.package.resolved @@ -0,0 +1,24 @@ +{ + "originHash" : "48d44fe9560aaa48bc97ae34cdb596f62fa2d739be3dafd4261b95db8f8c86ab", + "pins" : [ + { + "identity" : "alamofire", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Alamofire/Alamofire.git", + "state" : { + "revision" : "513364f870f6bfc468f9d2ff0a95caccc10044c5", + "version" : "5.10.2" + } + }, + { + "identity" : "kakao-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kakao/kakao-ios-sdk", + "state" : { + "revision" : "e14a8d1fad75645fd5677a295a8b1956ebd14d3d", + "version" : "2.25.0" + } + } + ], + "version" : 3 +} diff --git a/Derived/Sources/TuistBundle+Megabox.swift b/Derived/Sources/TuistBundle+Megabox.swift new file mode 100644 index 0000000..5c2d78a --- /dev/null +++ b/Derived/Sources/TuistBundle+Megabox.swift @@ -0,0 +1,25 @@ +// periphery:ignore:all +// swiftlint:disable:this file_name +// swiftlint:disable all +// swift-format-ignore-file +// swiftformat:disable all +#if hasFeature(InternalImportsByDefault) +public import Foundation +#else +import Foundation +#endif +// MARK: - Swift Bundle Accessor for Frameworks +private class BundleFinder {} +extension Foundation.Bundle { +/// Since megabox is a application, the bundle for classes within this module can be used directly. + static let module = Bundle(for: BundleFinder.self) +} +// MARK: - Objective-C Bundle Accessor +@objc +public class MegaboxResources: NSObject { +@objc public class var bundle: Bundle { + return .module +} +} +// swiftformat:enable all +// swiftlint:enable all \ No newline at end of file diff --git a/Project.swift b/Project.swift index 838f637..1cb89a5 100644 --- a/Project.swift +++ b/Project.swift @@ -2,6 +2,10 @@ import ProjectDescription let project = Project( name: "megabox", + packages: [ + .package(url: "https://github.com/kakao/kakao-ios-sdk", from: "2.20.0"), + .package(url: "https://github.com/Alamofire/Alamofire.git", from: "5.8.0") + ], targets: [ .target( name: "megabox", @@ -24,6 +28,22 @@ let project = Project( "Pretendard-Regular.otf", "Pretendard-SemiBold.otf", "Pretendard-Thin.otf" + ], + + // Secret.xcconfig 키 사용 + "KAKAO_NATIVE_APP_KEY": "$(KAKAO_NATIVE_APP_KEY)", + + // 카카오 로그인용 URL Scheme 등록 + "CFBundleURLTypes": [ + [ + "CFBundleURLSchemes": ["kakao$(KAKAO_NATIVE_APP_KEY)"] + ] + ], + + // 카카오 SDK가 외부 앱을 열 수 있게 허용 + "LSApplicationQueriesSchemes": [ + "kakaokompassauth", + "kakaolink" ] ] ), @@ -31,7 +51,24 @@ let project = Project( "megabox/Sources", "megabox/Resources", ], - dependencies: [] + dependencies: [ + .package(product: "KakaoSDKCommon"), + .package(product: "KakaoSDKAuth"), + .package(product: "KakaoSDKUser"), + .package(product: "Alamofire") + ], + + // xcconfig 연결 + settings: .settings( + base: [ + "OTHER_SWIFT_FLAGS": "-DDEBUG" + ], + configurations: [ + // Secret.xcconfig 연결 + .debug(name: "Debug", xcconfig: "./megabox/Resources/Secret/Secret.xcconfig"), + .release(name: "Release", xcconfig: "./megabox/Resources/Secret/Secret.xcconfig") + ] + ) ), .target( name: "megaboxTests", diff --git a/megabox.xcodeproj/project.pbxproj b/megabox.xcodeproj/project.pbxproj index 726ab6f..32eb527 100644 --- a/megabox.xcodeproj/project.pbxproj +++ b/megabox.xcodeproj/project.pbxproj @@ -3,9 +3,17 @@ archiveVersion = 1; classes = { }; - objectVersion = 70; + objectVersion = 71; objects = { +/* Begin PBXBuildFile section */ + 1C39AFCEC0A9B6DE7B156A6A /* KakaoSDKUser in Frameworks */ = {isa = PBXBuildFile; productRef = 0E54DCF0B8D4BA3D7D76E461 /* KakaoSDKUser */; }; + 33FE1AAB9E90978EB0B68B23 /* KakaoSDKAuth in Frameworks */ = {isa = PBXBuildFile; productRef = D00B2BA63ADCF363F9C89B55 /* KakaoSDKAuth */; }; + A3F8D55EE960672101CABED8 /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = EE94CB5FE1A59E17DE90F38A /* Alamofire */; }; + DA03228E240E5C5472DE4742 /* KakaoSDKCommon in Frameworks */ = {isa = PBXBuildFile; productRef = 3325E827733F1870F34F1F94 /* KakaoSDKCommon */; }; + E3BF9CFEC5D98C1A4CF20187 /* TuistBundle+Megabox.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB45D5E01F2BFC1A6AB653F6 /* TuistBundle+Megabox.swift */; }; +/* End PBXBuildFile section */ + /* Begin PBXContainerItemProxy section */ 8837CD7A1D909152C3B592D5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -43,6 +51,7 @@ 2BDDA1D2F6458E30323A05E7 /* megaboxTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "megaboxTests-Info.plist"; sourceTree = ""; }; BD44B1395767484FD2C78AE0 /* megaboxTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = megaboxTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; C1FE0491C1C7A83A5D01373E /* megabox.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = megabox.app; sourceTree = BUILT_PRODUCTS_DIR; }; + CB45D5E01F2BFC1A6AB653F6 /* TuistBundle+Megabox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+Megabox.swift"; sourceTree = ""; }; E6D1D2FA149FE294E6CBD89D /* megabox-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "megabox-Info.plist"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -57,6 +66,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + DA03228E240E5C5472DE4742 /* KakaoSDKCommon in Frameworks */, + 33FE1AAB9E90978EB0B68B23 /* KakaoSDKAuth in Frameworks */, + 1C39AFCEC0A9B6DE7B156A6A /* KakaoSDKUser in Frameworks */, + A3F8D55EE960672101CABED8 /* Alamofire in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -70,6 +83,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0AE3DD2CC8948F6F6D70B01D /* Sources */ = { + isa = PBXGroup; + children = ( + CB45D5E01F2BFC1A6AB653F6 /* TuistBundle+Megabox.swift */, + ); + path = Sources; + sourceTree = ""; + }; 0D19F4DA33D004128909F5EB = { isa = PBXGroup; children = ( @@ -110,6 +131,7 @@ isa = PBXGroup; children = ( 59C62F6E03885E77D562E1C8 /* InfoPlists */, + 0AE3DD2CC8948F6F6D70B01D /* Sources */, ); path = Derived; sourceTree = ""; @@ -169,6 +191,10 @@ ); name = megabox; packageProductDependencies = ( + 3325E827733F1870F34F1F94 /* KakaoSDKCommon */, + D00B2BA63ADCF363F9C89B55 /* KakaoSDKAuth */, + 0E54DCF0B8D4BA3D7D76E461 /* KakaoSDKUser */, + EE94CB5FE1A59E17DE90F38A /* Alamofire */, ); productName = megabox; productReference = C1FE0491C1C7A83A5D01373E /* megabox.app */; @@ -196,6 +222,10 @@ en, ); mainGroup = 0D19F4DA33D004128909F5EB; + packageReferences = ( + C6CD5CE48056BC6D353A43CF /* XCRemoteSwiftPackageReference "Alamofire" */, + E291957838B5BD9C398FDF11 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */, + ); productRefGroup = B92C82379AC30C9C0D6329B2 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -235,6 +265,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E3BF9CFEC5D98C1A4CF20187 /* TuistBundle+Megabox.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -252,6 +283,8 @@ /* Begin XCBuildConfiguration section */ 6D824C3783955213665B2827 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReferenceAnchor = C1DC9DAE584A07A877FFE3E3 /* Resources */; + baseConfigurationReferenceRelativePath = Secret/Secret.xcconfig; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -262,6 +295,7 @@ "$(inherited)", "@executable_path/Frameworks", ); + OTHER_SWIFT_FLAGS = "-DDEBUG"; PRODUCT_BUNDLE_IDENTIFIER = dev.tuist.megabox; PRODUCT_NAME = megabox; SDKROOT = iphoneos; @@ -303,6 +337,8 @@ }; 7812ABDF116B2F6264B02FDB /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReferenceAnchor = C1DC9DAE584A07A877FFE3E3 /* Resources */; + baseConfigurationReferenceRelativePath = Secret/Secret.xcconfig; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -313,6 +349,7 @@ "$(inherited)", "@executable_path/Frameworks", ); + OTHER_SWIFT_FLAGS = "-DDEBUG"; PRODUCT_BUNDLE_IDENTIFIER = dev.tuist.megabox; PRODUCT_NAME = megabox; SDKROOT = iphoneos; @@ -497,6 +534,44 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + C6CD5CE48056BC6D353A43CF /* XCRemoteSwiftPackageReference "Alamofire" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Alamofire/Alamofire.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.8.0; + }; + }; + E291957838B5BD9C398FDF11 /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kakao/kakao-ios-sdk"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.20.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 0E54DCF0B8D4BA3D7D76E461 /* KakaoSDKUser */ = { + isa = XCSwiftPackageProductDependency; + productName = KakaoSDKUser; + }; + 3325E827733F1870F34F1F94 /* KakaoSDKCommon */ = { + isa = XCSwiftPackageProductDependency; + productName = KakaoSDKCommon; + }; + D00B2BA63ADCF363F9C89B55 /* KakaoSDKAuth */ = { + isa = XCSwiftPackageProductDependency; + productName = KakaoSDKAuth; + }; + EE94CB5FE1A59E17DE90F38A /* Alamofire */ = { + isa = XCSwiftPackageProductDependency; + productName = Alamofire; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = D0ABC90962FFD8356ADE03F1 /* Project object */; } diff --git a/megabox/Resources/Secret.xcconfig b/megabox/Resources/Secret.xcconfig deleted file mode 100644 index e69de29..0000000 diff --git a/megabox/Sources/ContentView.swift b/megabox/Sources/ContentView.swift index 1303e95..fed66ea 100644 --- a/megabox/Sources/ContentView.swift +++ b/megabox/Sources/ContentView.swift @@ -2,26 +2,46 @@ import SwiftUI public struct ContentView: View { @StateObject private var router = NavigationRouter() // 라우터 인스턴스 생성 + @State private var isLoggedIn = false // 로그인 상태 추적 public var body: some View { - NavigationStack(path: $router.path) { - MainTabView() - .navigationDestination(for: Route.self) { route in - switch route { - case .home: - HomeView() - case .profile: - ProfileView() - case .memberInfo: - MemberInfoView() - case .mainTab: + Group { + if isLoggedIn { + // 로그인된 상태면 메인 탭 + NavigationStack(path: $router.path) { MainTabView() - case .login: - LoginView() + .navigationDestination(for: Route.self) { route in + switch route { + case .home: + HomeView() + case .profile: + ProfileView() + case .memberInfo: + MemberInfoView() + case .mainTab: + MainTabView() + case .login: + LoginView() + } + } } + .environmentObject(router) + } else { + // 로그인 안 되어 있으면 로그인 화면 + LoginView() + .environmentObject(router) + } + } + .onAppear { + // Keychain에서 로그인 정보 확인 + if let id = KeychainHelper.shared.read(forKey: "savedId"), !id.isEmpty { + print("로그인 유지: \(id)") + isLoggedIn = true + } else { + print("로그인 필요") + isLoggedIn = false } } - .environmentObject(router) // Observation 기반 환경 주입 } } diff --git a/megabox/Sources/Login/ViewModels/LoginViewModel.swift b/megabox/Sources/Login/ViewModels/LoginViewModel.swift index 2748dbb..4ebf2d8 100644 --- a/megabox/Sources/Login/ViewModels/LoginViewModel.swift +++ b/megabox/Sources/Login/ViewModels/LoginViewModel.swift @@ -5,12 +5,59 @@ // Created by 김세은 on 9/27/25. // import Foundation +import KakaoSDKAuth +import KakaoSDKUser class LoginViewModel: ObservableObject { @Published var loginModel: LoginModel + @Published var kakaoNickname: String = "" init(loginModel: LoginModel) { self.loginModel = loginModel } + + // 카카오 로그인 함수 + func loginWithKakao(router: NavigationRouter) { + if UserApi.isKakaoTalkLoginAvailable() { + // ✅ 카카오톡 앱이 있을 경우 + UserApi.shared.loginWithKakaoTalk { [weak self] oauthToken, error in + if let error = error { + print("KakaoTalk login failed: \(error.localizedDescription)") + } else { + print("KakaoTalk login success") + self?.fetchUserInfo(router: router) + } + } + } else { + // ✅ 카카오 계정 로그인 (웹) + UserApi.shared.loginWithKakaoAccount { [weak self] oauthToken, error in + if let error = error { + print("KakaoAccount login failed: \(error.localizedDescription)") + } else { + print("KakaoAccount login success") + self?.fetchUserInfo(router: router) + } + } + } + } + + private func fetchUserInfo(router: NavigationRouter) { + UserApi.shared.me { [weak self] user, error in + if let error = error { + print("Failed to fetch user info: \(error.localizedDescription)") + return + } + guard let self = self, let user = user else { return } + + self.kakaoNickname = user.kakaoAccount?.profile?.nickname ?? "알 수 없음" + print("로그인 사용자 닉네임: \(self.kakaoNickname)") + + // Keychain 저장 + KeychainHelper.shared.save(self.kakaoNickname, forKey: "savedName") + + // 홈으로 이동 + router.push(.mainTab) + } + } } diff --git a/megabox/Sources/Login/Views/LoginView.swift b/megabox/Sources/Login/Views/LoginView.swift index bb8ca0f..93ce8a8 100644 --- a/megabox/Sources/Login/Views/LoginView.swift +++ b/megabox/Sources/Login/Views/LoginView.swift @@ -6,6 +6,8 @@ // import SwiftUI +import KakaoSDKUser +import KakaoSDKAuth struct LoginView: View { @@ -83,9 +85,16 @@ struct LoginView: View { Button(action: { // print("현재 입력된 아이디:", loginViewModel.loginModel.id) // print("현재 입력된 비번:", loginViewModel.loginModel.pwd) - savedId = loginViewModel.loginModel.id - savedPwd = loginViewModel.loginModel.pwd - savedName = loginViewModel.loginModel.id + "_init" + + let id = loginViewModel.loginModel.id + let pwd = loginViewModel.loginModel.pwd + let name = id + "_init" + + // ✅ Keychain 저장 + KeychainHelper.shared.save(id, forKey: "savedId") + KeychainHelper.shared.save(pwd, forKey: "savedPwd") + KeychainHelper.shared.save(name, forKey: "savedName") + router.push(.mainTab) // print("저장 완료 - id:\(savedId), name:\(savedName)") @@ -114,7 +123,10 @@ struct LoginView: View { Spacer() - Button(action: {}) { + Button(action: { + loginViewModel.loginWithKakao(router: router) + + }) { Image("kakao") } diff --git a/megabox/Sources/MegaboxApp.swift b/megabox/Sources/MegaboxApp.swift index 3d17acb..b22ceae 100644 --- a/megabox/Sources/MegaboxApp.swift +++ b/megabox/Sources/MegaboxApp.swift @@ -1,7 +1,20 @@ import SwiftUI +import KakaoSDKCommon +import KakaoSDKAuth @main struct MegaboxApp: App { + + init() { + // Kakao SDK 초기화 + if let appKey = Bundle.main.infoDictionary?["KAKAO_NATIVE_APP_KEY"] as? String { + KakaoSDK.initSDK(appKey: appKey) +// print("Kakao SDK initialized with key: \(appKey)") + } else { +// print("Kakao SDK 초기화 실패: 앱 키를 찾을 수 없음") + } + } + var body: some Scene { WindowGroup { ContentView() diff --git a/megabox/Sources/Profile/Views/MemberInfoView.swift b/megabox/Sources/Profile/Views/MemberInfoView.swift index 544b599..5257fdf 100644 --- a/megabox/Sources/Profile/Views/MemberInfoView.swift +++ b/megabox/Sources/Profile/Views/MemberInfoView.swift @@ -32,6 +32,8 @@ struct MemberInfoView: View { } .padding(.horizontal, 16) }.onAppear { + savedId = KeychainHelper.shared.read(forKey: "savedId") ?? "" + savedName = KeychainHelper.shared.read(forKey: "savedName") ?? "" tempName = savedName } } diff --git a/megabox/Sources/Profile/Views/ProfileView.swift b/megabox/Sources/Profile/Views/ProfileView.swift index 443b9bd..2fe68fa 100644 --- a/megabox/Sources/Profile/Views/ProfileView.swift +++ b/megabox/Sources/Profile/Views/ProfileView.swift @@ -33,8 +33,29 @@ struct ProfileView: View { .padding(.top, 33) Spacer() // 아래는 남는 공간 차지 + Button("테스트용 로그아웃") { + KeychainHelper.shared.delete(account: "savedId") + KeychainHelper.shared.delete(account: "savedPwd") + KeychainHelper.shared.delete(account: "savedName") + print("🗑️ Keychain 삭제 완료!") + router.reset() // 네비게이션 스택 초기화 + router.push(.login) + } + .foregroundColor(.red) + .padding(.top, 20) } .padding(.horizontal, 16) + + + } + .onAppear { + if let name = KeychainHelper.shared.read(forKey: "savedName") { + savedName = name + print("ProfileView 갱신 : \(name)") + } else { + savedName = "" + print("Keychain에서 이름 없음") + } } } diff --git a/megabox/Sources/Utils/KeychainHelper.swift b/megabox/Sources/Utils/KeychainHelper.swift index e69de29..1018c00 100644 --- a/megabox/Sources/Utils/KeychainHelper.swift +++ b/megabox/Sources/Utils/KeychainHelper.swift @@ -0,0 +1,65 @@ +import Security +import Foundation + +final class KeychainHelper { + static let shared = KeychainHelper() + + private init() {} + + func save(_ value: String, forKey key: String) { + let data = Data(value.utf8) + let query: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrAccount as String: key, + kSecValueData as String: data + ] + // 기존 값 삭제 후 새 값 추가 + SecItemDelete(query as CFDictionary) + SecItemAdd(query as CFDictionary, nil) + } + + func read(forKey key: String) -> String? { + let query: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrAccount as String: key, + kSecReturnData as String: true, + kSecMatchLimit as String: kSecMatchLimitOne + ] + + var result: AnyObject? + SecItemCopyMatching(query as CFDictionary, &result) + if let data = result as? Data { + return String(decoding: data, as: UTF8.self) + } + return nil + } + + /// Keychain에서 지정된 계정과 서비스에 해당하는 항목을 삭제합니다. + /// - Parameters: + /// - account: 계정 식별자 (예: 사용자 이메일) + /// - service: 서비스 이름 (예: "com.example.myapp") + /// - Returns: Keychain 삭제 작업의 상태 코드 (`errSecSuccess` 등) + @discardableResult + func delete(account: String) -> OSStatus { + // 1. 삭제할 항목을 식별할 쿼리 구성 + let query: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, // 삭제 대상 유형 + kSecAttrAccount as String: account, // 계정 식별자 + kSecAttrService as String: "dev.tuist.megabox" // 서비스 구분자 + ] + + // 2. 항목 삭제 시도 + let status = SecItemDelete(query as CFDictionary) + + // 3. 상태 확인 및 그 출력 + if status == errSecSuccess { + print("Keychain 삭제 성공 - [\(kSecAttrService) : \(account)]") + } else if status == errSecItemNotFound { + print("Keychain 항목 없음 - [\(kSecAttrService) : \(account)]") + } else { + print("Keychain 삭제 실패 - status: \(status)") + } + + return status + } +} From 37bf2edaf989052c283b8467b47fa729d8b19272 Mon Sep 17 00:00:00 2001 From: dedrSE Date: Thu, 13 Nov 2025 10:43:17 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[sunny/week6]=206=EC=A3=BC=EC=B0=A8=20?= =?UTF-8?q?=EA=B3=BC=EC=A0=9C=20=EC=B9=B4=EC=B9=B4=EC=98=A4=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- megabox/Sources/Common/Kakao/KakaoDTO.swift | 28 ++++++ .../Kakao/KakaoLoginServiceManager.swift | 93 +++++++++++++++++++ .../Login/ViewModels/LoginViewModel.swift | 62 ++++--------- megabox/Sources/Login/Views/LoginView.swift | 18 +++- 4 files changed, 155 insertions(+), 46 deletions(-) create mode 100644 megabox/Sources/Common/Kakao/KakaoDTO.swift create mode 100644 megabox/Sources/Common/Kakao/KakaoLoginServiceManager.swift diff --git a/megabox/Sources/Common/Kakao/KakaoDTO.swift b/megabox/Sources/Common/Kakao/KakaoDTO.swift new file mode 100644 index 0000000..7c019f9 --- /dev/null +++ b/megabox/Sources/Common/Kakao/KakaoDTO.swift @@ -0,0 +1,28 @@ +import Foundation + +// MARK: - 토큰 응답 DTO +struct KakaoTokenResponse: Codable { + let access_token: String + let token_type: String + let refresh_token: String? + let expires_in: Int + let scope: String? + let refresh_token_expires_in: Int? +} + +// MARK: - 유저 정보 응답 DTO +struct KakaoUserResponse: Codable { + let id: Int + let connected_at: String? + let kakao_account: KakaoAccount? +} + +struct KakaoAccount: Codable { + let profile: KakaoProfile? +} + +struct KakaoProfile: Codable { + let nickname: String? + let thumbnail_image_url: String? + let profile_image_url: String? +} diff --git a/megabox/Sources/Common/Kakao/KakaoLoginServiceManager.swift b/megabox/Sources/Common/Kakao/KakaoLoginServiceManager.swift new file mode 100644 index 0000000..42e5add --- /dev/null +++ b/megabox/Sources/Common/Kakao/KakaoLoginServiceManager.swift @@ -0,0 +1,93 @@ +import Foundation +import Alamofire +import SwiftUI + +final class KaKaoServiceManager : ObservableObject { + + static let shared = KaKaoServiceManager() + + @Published var kakaoNickname: String = "" + @Published var isLoggedIn: Bool = false + + private let session: Session + //kakao 인가코드 url (GET) + private let authKaKaoUrl = "https://kauth.kakao.com/oauth/authorize"; + //kakao 토큰발급 요청 url (POST) + private let tokenKaKaoUrl = "https://kauth.kakao.com/oauth/token"; + //kakao 유저 정보 요청 + private let userInfoKaKaoUrl = "https://kapi.kakao.com/v2/user/me"; + + init() { + let configuration = URLSessionConfiguration.default + configuration.timeoutIntervalForRequest = 10 + + self.session = Session(configuration: configuration) + } + + // MARK: - 카카오 로그인 시작 (웹 인증 GET 요청) + func requestKakaoAuthCode() { + let appKey = Bundle.main.infoDictionary?["KAKAO_NATIVE_APP_KEY"] as? String ?? "" + let redirectURI = "kakao\(appKey)://oauth" + let authURL = "\(authKaKaoUrl)?client_id=\(appKey)&redirect_uri=\(redirectURI)&response_type=code" + + if let url = URL(string: authURL) { + UIApplication.shared.open(url) + } + } + + // MARK: - 인증 코드 → Access Token 요청 + func requestAccessToken(authCode: String, completion: @escaping (String?) -> Void) { + let appKey = Bundle.main.infoDictionary?["KAKAO_NATIVE_APP_KEY"] as? String ?? "" + let redirectURI = "kakao\(appKey)://oauth" + let url = "\(tokenKaKaoUrl)" + + let parameters: [String: String] = [ + "grant_type": "authorization_code", + "client_id": appKey, + "redirect_uri": redirectURI, + "code": authCode + ] + AF.request(url, method: .post, parameters: parameters) + .responseDecodable(of: KakaoTokenResponse.self) { response in + switch response.result { + case .success(let token): + print("Access Token: \(token.access_token)") + completion(token.access_token) + case .failure(let error): + print("Token Error: \(error.localizedDescription)") + completion(nil) + } + } + + } + + // MARK: - 사용자 정보 요청 + func requestUserInfo(accessToken: String, router: NavigationRouter) { + let url = "\(userInfoKaKaoUrl)" + let headers: HTTPHeaders = [ + "Authorization": "Bearer \(accessToken)", + "Content-Type": "application/x-www-form-urlencoded;charset=utf-8" + ] + + + AF.request(url, method: .get, headers: headers) + .responseDecodable(of: KakaoUserResponse.self) { response in + switch response.result { + case .success(let user): + DispatchQueue.main.async { + self.kakaoNickname = user.kakao_account?.profile?.nickname ?? "비회원" + print("Kakao User: \(self.kakaoNickname)") + + KeychainHelper.shared.save(self.kakaoNickname, forKey: "savedName") + self.isLoggedIn = true + router.push(.mainTab) + } + + case .failure(let error): + print("User Info Error: \(error.localizedDescription)") + } + } + + } +} + diff --git a/megabox/Sources/Login/ViewModels/LoginViewModel.swift b/megabox/Sources/Login/ViewModels/LoginViewModel.swift index 4ebf2d8..9828168 100644 --- a/megabox/Sources/Login/ViewModels/LoginViewModel.swift +++ b/megabox/Sources/Login/ViewModels/LoginViewModel.swift @@ -1,63 +1,35 @@ -// -// LoginViewModel.swift -// megabox -// -// Created by 김세은 on 9/27/25. -// import Foundation import KakaoSDKAuth import KakaoSDKUser class LoginViewModel: ObservableObject { @Published var loginModel: LoginModel - @Published var kakaoNickname: String = "" + private let kakaoManager = KaKaoServiceManager.shared + init(loginModel: LoginModel) { self.loginModel = loginModel } - - // 카카오 로그인 함수 + // MARK: - 카카오 로그인 시작 func loginWithKakao(router: NavigationRouter) { - if UserApi.isKakaoTalkLoginAvailable() { - // ✅ 카카오톡 앱이 있을 경우 - UserApi.shared.loginWithKakaoTalk { [weak self] oauthToken, error in - if let error = error { - print("KakaoTalk login failed: \(error.localizedDescription)") - } else { - print("KakaoTalk login success") - self?.fetchUserInfo(router: router) - } - } - } else { - // ✅ 카카오 계정 로그인 (웹) - UserApi.shared.loginWithKakaoAccount { [weak self] oauthToken, error in - if let error = error { - print("KakaoAccount login failed: \(error.localizedDescription)") - } else { - print("KakaoAccount login success") - self?.fetchUserInfo(router: router) + kakaoManager.requestKakaoAuthCode() + } + + // MARK: - 인증 후 AccessToken 처리 (onOpenURL에서 호출) + func handleKakaoAuthCallback(url: URL, router: NavigationRouter) { + if let code = extractAuthCode(from: url) { + kakaoManager.requestAccessToken(authCode: code) { token in + if let token = token { + self.kakaoManager.requestUserInfo(accessToken: token, router: router) } } } } - - private func fetchUserInfo(router: NavigationRouter) { - UserApi.shared.me { [weak self] user, error in - if let error = error { - print("Failed to fetch user info: \(error.localizedDescription)") - return - } - guard let self = self, let user = user else { return } - - self.kakaoNickname = user.kakaoAccount?.profile?.nickname ?? "알 수 없음" - print("로그인 사용자 닉네임: \(self.kakaoNickname)") - - // Keychain 저장 - KeychainHelper.shared.save(self.kakaoNickname, forKey: "savedName") - - // 홈으로 이동 - router.push(.mainTab) - } + + private func extractAuthCode(from url: URL) -> String? { + guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false), + let queryItems = components.queryItems else { return nil } + return queryItems.first(where: { $0.name == "code" })?.value } } diff --git a/megabox/Sources/Login/Views/LoginView.swift b/megabox/Sources/Login/Views/LoginView.swift index 93ce8a8..ad61578 100644 --- a/megabox/Sources/Login/Views/LoginView.swift +++ b/megabox/Sources/Login/Views/LoginView.swift @@ -50,6 +50,22 @@ struct LoginView: View { } .padding(.horizontal, 16) // 좌우 여백 } +// .onAppear(){ +// if AuthApi.hasToken() { +// UserApi.shared.accessTokenInfo { info, error in +// if let error = error { +// print("❌ Token invalid:", error) +// } else { +// print("✅ Token valid, expires in:", info?.expiresIn ?? 0) +// } +// } +// } else { +// print("❌ No Kakao token found") +// } +// } + .onOpenURL { url in + loginViewModel.handleKakaoAuthCallback(url: url, router: router) + } } @@ -90,7 +106,7 @@ struct LoginView: View { let pwd = loginViewModel.loginModel.pwd let name = id + "_init" - // ✅ Keychain 저장 + // Keychain 저장 KeychainHelper.shared.save(id, forKey: "savedId") KeychainHelper.shared.save(pwd, forKey: "savedPwd") KeychainHelper.shared.save(name, forKey: "savedName") From 1fa8133d815042622d72d9099a8140f8db2a927e Mon Sep 17 00:00:00 2001 From: dedrSE Date: Thu, 20 Nov 2025 05:16:14 +0900 Subject: [PATCH 5/6] =?UTF-8?q?[sunny/week8]=208=EC=A3=BC=EC=B0=A8=20?= =?UTF-8?q?=EA=B3=BC=EC=A0=9C=20=EB=AA=A8=EB=B0=94=EC=9D=BC=20=EC=98=A4?= =?UTF-8?q?=EB=8D=94=20=ED=83=AD=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- megabox.xcodeproj/project.pbxproj | 6 +- .../Assets.xcassets/menu/Contents.json | 6 + .../menu/disney_pixar.imageset/Contents.json | 12 ++ .../disney_pixar.imageset/disney_pixar.pdf | Bin 0 -> 66700 bytes .../menu/double_combo.imageset/Contents.json | 12 ++ .../double_combo.imageset/double_combo.pdf | Bin 0 -> 40990 bytes .../Contents.json | 12 ++ .../family_combo_package.pdf | Bin 0 -> 22196 bytes .../menu/inside_out.imageset/Contents.json | 12 ++ .../menu/inside_out.imageset/inside_out.pdf | Bin 0 -> 20337 bytes .../menu/love_combo.imageset/Contents.json | 12 ++ .../menu/love_combo.imageset/love_combo.pdf | Bin 0 -> 38847 bytes .../love_combo_package.imageset/Contents.json | 12 ++ .../love_combo_package.pdf | Bin 0 -> 21847 bytes .../menu/mappin.imageset/Contents.json | 12 ++ .../menu/mappin.imageset/mappin.pdf | Bin 0 -> 4328 bytes .../menu/single_combo.imageset/Contents.json | 12 ++ .../single_combo.imageset/single_combo.pdf | Bin 0 -> 20131 bytes .../single_package.imageset/Contents.json | 12 ++ .../single_package.pdf | Bin 0 -> 34822 bytes .../menu/ticket_book.imageset/Contents.json | 12 ++ .../menu/ticket_book.imageset/ticket_book.pdf | Bin 0 -> 11473 bytes megabox/Sources/ContentView.swift | 2 + megabox/Sources/Home/Views/MainTabView.swift | 2 +- megabox/Sources/Order/Models/OrderModel.swift | 25 ++++ .../Order/ViewModels/OrderViewModel.swift | 28 ++++ .../Order/Views/BestMenuSectionView.swift | 37 +++++ .../Order/Views/DeliverySectionView.swift | 20 +++ .../Order/Views/DirectOrderDetailView.swift | 95 +++++++++++++ .../Order/Views/DirectOrderSectionView.swift | 24 ++++ .../Sources/Order/Views/GiftCardView.swift | 20 +++ .../Order/Views/MenuItemCardModifiers.swift | 94 +++++++++++++ .../Order/Views/MenuItemCardView.swift | 73 ++++++++++ .../Views/OrderCardLayoutModifiers.swift | 130 ++++++++++++++++++ megabox/Sources/Order/Views/OrderView.swift | 88 ++++++++++++ .../Views/RecommendedMenuSectionView.swift | 37 +++++ .../Order/Views/StoreVoucherCardView.swift | 20 +++ .../Order/Views/TheaterChangeBarView.swift | 66 +++++++++ megabox/Sources/Routers/Routers.swift | 1 + 39 files changed, 888 insertions(+), 6 deletions(-) create mode 100644 megabox/Resources/Assets.xcassets/menu/Contents.json create mode 100644 megabox/Resources/Assets.xcassets/menu/disney_pixar.imageset/Contents.json create mode 100644 megabox/Resources/Assets.xcassets/menu/disney_pixar.imageset/disney_pixar.pdf create mode 100644 megabox/Resources/Assets.xcassets/menu/double_combo.imageset/Contents.json create mode 100644 megabox/Resources/Assets.xcassets/menu/double_combo.imageset/double_combo.pdf create mode 100644 megabox/Resources/Assets.xcassets/menu/family_combo_package.imageset/Contents.json create mode 100644 megabox/Resources/Assets.xcassets/menu/family_combo_package.imageset/family_combo_package.pdf create mode 100644 megabox/Resources/Assets.xcassets/menu/inside_out.imageset/Contents.json create mode 100644 megabox/Resources/Assets.xcassets/menu/inside_out.imageset/inside_out.pdf create mode 100644 megabox/Resources/Assets.xcassets/menu/love_combo.imageset/Contents.json create mode 100644 megabox/Resources/Assets.xcassets/menu/love_combo.imageset/love_combo.pdf create mode 100644 megabox/Resources/Assets.xcassets/menu/love_combo_package.imageset/Contents.json create mode 100644 megabox/Resources/Assets.xcassets/menu/love_combo_package.imageset/love_combo_package.pdf create mode 100644 megabox/Resources/Assets.xcassets/menu/mappin.imageset/Contents.json create mode 100644 megabox/Resources/Assets.xcassets/menu/mappin.imageset/mappin.pdf create mode 100644 megabox/Resources/Assets.xcassets/menu/single_combo.imageset/Contents.json create mode 100644 megabox/Resources/Assets.xcassets/menu/single_combo.imageset/single_combo.pdf create mode 100644 megabox/Resources/Assets.xcassets/menu/single_package.imageset/Contents.json create mode 100644 megabox/Resources/Assets.xcassets/menu/single_package.imageset/single_package.pdf create mode 100644 megabox/Resources/Assets.xcassets/menu/ticket_book.imageset/Contents.json create mode 100644 megabox/Resources/Assets.xcassets/menu/ticket_book.imageset/ticket_book.pdf create mode 100644 megabox/Sources/Order/Models/OrderModel.swift create mode 100644 megabox/Sources/Order/ViewModels/OrderViewModel.swift create mode 100644 megabox/Sources/Order/Views/BestMenuSectionView.swift create mode 100644 megabox/Sources/Order/Views/DeliverySectionView.swift create mode 100644 megabox/Sources/Order/Views/DirectOrderDetailView.swift create mode 100644 megabox/Sources/Order/Views/DirectOrderSectionView.swift create mode 100644 megabox/Sources/Order/Views/GiftCardView.swift create mode 100644 megabox/Sources/Order/Views/MenuItemCardModifiers.swift create mode 100644 megabox/Sources/Order/Views/MenuItemCardView.swift create mode 100644 megabox/Sources/Order/Views/OrderCardLayoutModifiers.swift create mode 100644 megabox/Sources/Order/Views/OrderView.swift create mode 100644 megabox/Sources/Order/Views/RecommendedMenuSectionView.swift create mode 100644 megabox/Sources/Order/Views/StoreVoucherCardView.swift create mode 100644 megabox/Sources/Order/Views/TheaterChangeBarView.swift diff --git a/megabox.xcodeproj/project.pbxproj b/megabox.xcodeproj/project.pbxproj index 32eb527..9d9edb1 100644 --- a/megabox.xcodeproj/project.pbxproj +++ b/megabox.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 71; + objectVersion = 70; objects = { /* Begin PBXBuildFile section */ @@ -283,8 +283,6 @@ /* Begin XCBuildConfiguration section */ 6D824C3783955213665B2827 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReferenceAnchor = C1DC9DAE584A07A877FFE3E3 /* Resources */; - baseConfigurationReferenceRelativePath = Secret/Secret.xcconfig; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -337,8 +335,6 @@ }; 7812ABDF116B2F6264B02FDB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReferenceAnchor = C1DC9DAE584A07A877FFE3E3 /* Resources */; - baseConfigurationReferenceRelativePath = Secret/Secret.xcconfig; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; diff --git a/megabox/Resources/Assets.xcassets/menu/Contents.json b/megabox/Resources/Assets.xcassets/menu/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/megabox/Resources/Assets.xcassets/menu/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/megabox/Resources/Assets.xcassets/menu/disney_pixar.imageset/Contents.json b/megabox/Resources/Assets.xcassets/menu/disney_pixar.imageset/Contents.json new file mode 100644 index 0000000..265d998 --- /dev/null +++ b/megabox/Resources/Assets.xcassets/menu/disney_pixar.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "disney_pixar.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/megabox/Resources/Assets.xcassets/menu/disney_pixar.imageset/disney_pixar.pdf b/megabox/Resources/Assets.xcassets/menu/disney_pixar.imageset/disney_pixar.pdf new file mode 100644 index 0000000000000000000000000000000000000000..38d96f7f095756a541bdd25f700969ee98f8601a GIT binary patch literal 66700 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�^ZjQ?Xdn_a=27Q6 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 literal 0 HcmV?d00001 diff --git a/megabox/Resources/Assets.xcassets/menu/family_combo_package.imageset/Contents.json b/megabox/Resources/Assets.xcassets/menu/family_combo_package.imageset/Contents.json new file mode 100644 index 0000000..9d027ee --- /dev/null +++ b/megabox/Resources/Assets.xcassets/menu/family_combo_package.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "family_combo_package.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/megabox/Resources/Assets.xcassets/menu/family_combo_package.imageset/family_combo_package.pdf b/megabox/Resources/Assets.xcassets/menu/family_combo_package.imageset/family_combo_package.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ba01bb67f30b66311f5c7a3b55c324cb0279b666 GIT binary patch literal 22196 zcmb??1yEdDv+fYwA;DckaCdiix8O3kySux)ySrQ%ip zvcK;BR`*^T_DuKc8gc~@Fj9gRS6TYwT=f;z0C83}|L;KnZdJ8ub5|`UPlhU}i$Z z@kje_9+>~bgNnPI2@$=9yrG4Ok<(w(m7NWp{!1w4ByA#kF)ITn6A=?5TVoR1%4U=2gbcn53B3UfQfie_h9RbJJkij-O294^Dj^vlPd^urfk2R6seOK-hI%}I7K6pom^|NbmvqDe0q zil`(nGFn|`uR`yxAKgId>YBG`4c{`r6Csp+5LP`3mwnR5vrm*NoI7pCNe;6{M!%YF z^!JWEdj-cYug4HKQ3_=}VeuL`ja;&Qzwi6a%gv|vbpNaLcC{3$^2#;m`(u3ZNn-Wl z>cK8Unb9ZmSI5&qt!OXLvHI79(=fZnh~3Cgwn>~goBKRHgxx)&J9_sS3=VGHj`{dDy6>TY2IM4+>XxTcY_lt+`n;8aeE(S z?eC&5t9JKatw`kz)%!x=S*Q4&J8$VB+0?dBk?8}rX88Boi7&uF z7>oq|l#nWLM24~8ovbbvt;QU=$$}HXa;XxPN=P1GX>kR9nd~vZi0K%<0Sqt*-|7{S zO&NchbX^Vyx5E^Te~8L-R+iP*krnVbXJ0)|C)QvN)|j zC2;YH#To0Zop(Fk^a!6&fgz7_DD8C_21f~j&5n!qq^d53r}iLDLh*v=yr|nJhWiv1 zFC7>AvWPS`10xhlV)a9vRXI8dYx<@+uyl%q_(8WZiEbKZ7XoBR3CTKY;3xQ1CBpPA z$rNVb&4za%NraTLV%Eh?|f63`VK&|78cjIa*Xu-U`oUt8ZF5*mKsraICj|11`z=+WYIR}gE% zU{?zJu|Z8P=beYzVnDw3aeT%p=XGUDJ za@2V1JE}@a-RAI)2=mRtu=&P>XCskYl0bz|sMX{?e8Kjy`D9FAi9C;k8wf!27NlVg zY2`Lpu+MU0!VYP3#CeN~NON4vo|E=}R@jOBLQ2KW!!v9mhdD-{49>@MkRvTp=a6%8 zFrgRn2<|qfm$Md1!5MhKUb{~W9toag>w=5lYjK~Bs3HFkdu!jjVLL4KLmSDD-iZPN|H+uv}Ld^?( zTtQw^ylq6bAO`XUc=+>b%?l-@>g;UDSSU>xlr2zKk+`GJm2iVh?O%e+Fkns~Kj)(r z?2>s~L~6!@kW6sc$rDVkH5$ZLq8hz^J905f@e7gx?^n&wQp8f-*ao}=^;12s$KFAA zZjkY1K{OBVm>l4fFNGf)a>O)ZU8BybGA2+!#!dwogY52|9}iGyLKw&Qjxf}7f5<6+Sa zKJhdgijeM!C>f}>xx+#Y5i}r^M3Ct>$KkrTDi&O!!f$k*SImV>Kc+ z+zv1QU}I4+6~V6qtlvz9=ZZBXT+~F+_aT4#FUx$1^+c2&MaqML3^PN?gjFBN=~rr? zR}A`iPt5jd5(+8l772)Gp)g?j&2)fxuiJsnqbn3AsSd6_y-s_n36Hw`b0HLYSH!Z+ zqYOI5VY@v7h`Sdy5%e?Qno3QHHwY&wE_7KYjWmp+E};U~LP3ZEhPNIp%WyhTkn

n}F7aZX%g}t%5n?GC|mo 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 aHU{7$L`M?`$8GZ<;G!Z(FbpQIrtn{SaOyk& literal 0 HcmV?d00001 diff --git a/megabox/Resources/Assets.xcassets/menu/inside_out.imageset/Contents.json b/megabox/Resources/Assets.xcassets/menu/inside_out.imageset/Contents.json new file mode 100644 index 0000000..8a09a83 --- /dev/null +++ b/megabox/Resources/Assets.xcassets/menu/inside_out.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "inside_out.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/megabox/Resources/Assets.xcassets/menu/inside_out.imageset/inside_out.pdf b/megabox/Resources/Assets.xcassets/menu/inside_out.imageset/inside_out.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7ad6232e27c1d55646d6a840fa9b1c7690d4d4dc GIT binary patch literal 20337 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 H$=&&X{62ZC literal 0 HcmV?d00001 diff --git a/megabox/Resources/Assets.xcassets/menu/love_combo.imageset/Contents.json b/megabox/Resources/Assets.xcassets/menu/love_combo.imageset/Contents.json new file mode 100644 index 0000000..bab69cf --- /dev/null +++ b/megabox/Resources/Assets.xcassets/menu/love_combo.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "love_combo.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/megabox/Resources/Assets.xcassets/menu/love_combo.imageset/love_combo.pdf b/megabox/Resources/Assets.xcassets/menu/love_combo.imageset/love_combo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7b6d9abc329f0dff8ddc2220099b42b498d7c198 GIT binary patch literal 38847 zcmb@t1ymhP*DiQ)4Fq>5xCD212=4CA!R6o%3GNUe5Foe(cXxMpcR4u0hP?mxefQp( zf8Cii>+Z91R?06B|TQQht6?W;IVo zb5dq4MH3ryQ`dLhyD+P|nYjL=mH`@Dn*U2FYVGQxWbQ2H0CaS)H@9~s<^Gr9i@Cj} zs}(8hd$TJ4Qc0UzTUxo2vT}d^mqOFp?61pz&cz(;9Gq1hjZNSC7B_ddHZ_-WHun6N zv!u11tGP3&E-AC5ow2LAxVfo=nK`NcyH!vS(Z$u-+!%-mf;d}40AcJk!(9$7GssVK z%4cw{B_vH_(Ezn|5Q9khXogiG2i+0H>&17>XBW{xG0DFjMPk$dmH3N$t%IV$jao=Fo(^Gwd5w z!G9at)?`zSf#ZnrwTe~%;vEl0-Kn!np4bu64UNFZFpvMx4U)aO!feiM82GAEeTC4R z>%j_i(Hv601$ImgW;ZTly4sovxCMft~jhcKI2vTEcffb*rdx5w7FG z=;IVQtLR}<8VaG%+xG&$8UnRVOQER>)Z7W{OS8+;pN=y|Ax)R6ii-Mz zKf7DZ>jqDYs|aoAQLhdP_qdnW+QDb@M2#Pc^fjZ|R4U3@OMOdb_b%?3Yqwc-#o1C^6|V%H zt@n9D5-2y8Oy**Vj1^|lB*cYlK;N=P3=7lhps8HA(BQwOJ0+18c`K{Iwxj(y>nwlQ z_{>a37}e%Yk9F$-FD%AvU9F^O`jZ(ywD{5x+})*5#VC<;DI3BjMl^)@$hCchG2e!% zrAV5EqM^a?7Z&QCRCvL@-Q5;+rHnE!q9Uo8ivQ?k`9qlFF)b=9R4ZUvn*Kl;jVRX_MSg&-(-BrQ?LUu^D2|`~v@)17Y%$%e-H?N&f zV2@rcAvJai?}swuMx`j(cTcDv%13U$^Ycq5l0&NA2X>Inp*v=LPQF!)sPzY%!KpQ? zn2zTi8ZtSq9KLmQK`9td{Ls4x))y=ovl93h@GVVBYH@+<%|K!sF^t)9E5?T_SD}>D z(j6A7IFh-I->rJS1m92|zr`CSW+9BhtP;aOHf9 z`Df<@f`M7{E&BDLdI$vPLj7k47{eeqIrV+N*eaIm#VaW;zhKKMR%pjiNh}5*agr$X zIg*B4%*}vZicH%+6;F4Ldy){Q^vlG8`jtOH=k%!r8r~n`HswcvgxMidt>hloJ1~z) z{N()iTDDX8$s2iJkr}0I)u?j5BCmzd7wzVLMIIBiRpb9qL@uH)26`VUY+ldJ|!ZSt_3+!YG<7!2AsJpvOAQ|5Dy#=JtNmvQ7TRp$I_S=Ty=7jxcQl0v++f& z?Us8NQl?3Sb43*LsbS9{x`OtSrb)BYz7&ou4mkFYxWWBaXCg$_yeEFB4L-=?hPCT| z&xr5I?H>o<&$6V5tp9}Xp{-t_#kN~9iV;~a7q$^K@axUyFzcY^#<2s<3pP{2cdR0p z?JyGx7QW}CIu5K6*Gd4%5oKmD=xGh(JGaPX z^h$WCLTB#be{ZTkhu(``NhSjS6uIXlTG&+ReV7u<%1qH_&Sr;tk2Ar8>*I|r>ZNCl zp?abQ1S|^^r?A=(Xg*1_+;Bfdd5;fQK_LFb%>VWE*-D-Foabpgq~dVzXA)+)D$5r& zMq6GPy&O0aBb-@9p zmhb0+!i)&%F*(Ka@Ag^vk6(UIAQ%KrZk>f3h;TJWqdaZ%Z_>jm~%U1Tw}EFy2lSi zR6J7h_{k9yZw7ZkSON%L^g~c-&f&D8r7@+QV)ilLClf!Kj3~=H-?b1b?|&UM1r3e` z!rxFruZgH7W-ipM%EZvjEW9gGh`i8y4c>KqFiip~KUj1x<1)r13T<-J^4EOWZ^*`e_#m?pg9hAlaJdkLxTv@jd=?G=8H<6lk`VaS6McU1b}9h>{G z@AFfsl02)8P*b7ZRh?-Vs)gw{`YuDKX>NET1PYA3UtJ#0bsNcRj%SVWVsa5)mR^ol zsa?0D9zcips<=rQn%Cjp5GY_0&A4 z;y;fbC@HE%CtkzK>;E=c+Xou@wRumRGuPYsxPw=%G5VtjSzH}u-h$Sb1g7=C?z+Ed z$@fXK#{0g5Tq%*)P-ZdIL#fx3_s_o1(0Baa2-r>#QBvV|6z=GLUT@OITc4%0w5#Qq z#?6_*@93Rr`gjVY=qcjL$tv>uoL)Y4*BH{ftJc8PCM793k%fmRFx{3_oAgWEGV@1> z$>a&U4aY&%nV1-)a=C0;?jf}D?T~-4KL7^YBz-F8u}fDt(GKB zq_Uz~DXwd@9lX5v!!pS?AE(vsc5Mdb9mKZR8sR6SUx} z9<*jNi;y&mt%iyA_*H9?(>QSRvERa5&plFvUi$Niva}R)LCB0;2&V)HYHlnaUMjcizf8>oi1woeEUzK80au@8*S($EqE>gY$2U@u{n_FnF7T1( zh!&wr8Qa*zc-A4O-3rz?I&(9mkh9zDTg(Z^-c+I_QHg$|9pCquJoUY1izdV}Z(B`)Pfg%F#=E6{I zvO&>6!2(qgv7%2xdu-Pv=yUPqbC+tCLd$Q_7)OOZl4zD`d~=Up>c#}snN?zD(CWF` zU5Tn)?U)Ix5!5s(*83&e4}kiv^f5ICq0&Ds9S$ZZOGnOy*($QQw+K*C@eW%=vs0k! znSc!yI%`5%V0N%Zm?$&`k$5H9PxGxuk1J^W|!drd_ zpXhfAA&x2sLqwWE&EqgNX6YA@t-?WxDc)1SG9<8;G3ynzcLhkOMBRo)E3z2HQ<}IL z2d`**;H#r)=`U(UqrH#$GDaVUp09mi;(2VreUsj8t;o92*jL;t?yTPBZmD`J2k8B+ z00C&JQ?l)f{x}JitphI5R-A(9C64vs>^=2`-%>+|wB*&)B8u^-3HP44P?T&pLbx5f z3DG67leQzukX5JluX($;sE|BQ3{&hL2&vjJi(AVXL40J9gslFwzDu6R-+VmRi}>;( z3Q`I2HtZ##xHY)1r#Eke!Yx)el=$dTy9r%!`$nTCT3Kn6GOUYPi#)+q(y*dkL%Rel z7A&iYNwc1;i&JrCl$ak>rmQNu()vCNe&QLLvt~_WrNl#)M!#ev*EGLku|Ru}ol$`r z;wG$Wd@!xiejb7@K<=l6kPhw5_24v`&C$%but(ajrrp^X*?bBycH`R>HTm}WIY2pl z{Trd;Lf7w=1a^xkA#7*h^@k|l8^Oasq+z0USy;JwyAm6B8R8juTM)a)dx$9lO#mX(nAB#1iXY9M5o#l>S5oVZD2iwW@ zTzukRtT#Uo_Pv?(?wfq~L!&?~rhr=1<1cTbtRD&WQK5*FyN8<*OqCwVmBaOhpHsM4 zB1^56Uzc{Rn;$Jcww5MmhUjdmgH{ zXcQ&MhS0A;cxpM$Q<|CT+o$zBBZ1x&XXMHqz*6mvTRK)#f-MhU;raIKbaXTdnXtX~ zOh3~JMaq@|7|xuK#$@-|rd;FTO#lJAbPijYyW=C z-~>o$F^ka&K0{qK*WofKD=AWWlH@&e%h0LzPk@WlC0Y!Tf-k@NOvG4Y5C}qfp38ks z{;b-4!RExOwv{=e#KIW&mt(>f{#-uv%x`W&_=wa|A!f?%BUC|{oH}!4_RZY1s=7+r zsrsQx6?W*sFl{tm8g{A|#pfZ^~pPsPgjXI9R*PKmI{ag|)Z8S;rG6yQ0>_j}_8g5Tq=vqRUE@`^^n|RIfe172yoF z&*OAQXw6BUSkyX$PCslqCBn>TdBNDX6;d#N*kuzG5UeL#_@> zs@_41)f;5Y%$bmdcXVWMUun6GDzRMr5tnobcB>EyPD3X~*-bElMt9gM+|xKVc#IzT%1dfjA_- zoda$3Gth21bS4GmvCRen;akP8-QA?wS@wpNGjJRUOgCe!#Zac~*q>=qpt1yJhgdxM8eKMip0TKb!q5>e(ofT%Zr6TdzBqY}kj z42?K`Vb74VC8b1Tl^bM77*T@!Yy+uEg6PToBZ*Fv%jJ@0<`sUndK;p*vd zkzJbbmH#7rNgWk>OnhxHEPSolHrXSfSzNOGqq_G)27n()k;(~xI7kscQVfY#MFxYU zcrO;Z5vTCyY`5~iWp;Y+nFGvT?hwuG&HhC@y_fz{XNZ5vuK(iD*tu9Z|2q7mX8Vu& zFSRD}m&USxXR!Xwaj8g&{;w3*|4eZG%kpnFjf0cxUm68cw*Qs-%B)MVR>D}q9&qru zi)Ms?(C%&zlTQIuhcW&P3b4yXPXHJrd_?cmM^g?&lMsj26NZ%_bad4+`-rBz3JU|H zrWb^aILyr*K|ogtMdEraKUb<*x!zII;_rK$xpI*8l=B9NvxgG@?3@qZmuqCG=p}B3 zNpug5Fci$=)QD%jxdG$b;}LxA;DKA+61n<);KLJ&t6DF?9X7gl+ndr;8z$%(nW;Jx zr+ZavcLzROI1QTse^j)Q2*A(t%7^Vc(27Zn3g}j+^tXK0V`P!m$Y78`BOOh2Ld;GK zbmZ**Qzc_<5<+k8H0ASZjTia23LVmdMrA4cAWfvqnM$N>qAf@(n$jbWF~p5$3}+7s zH$*l^YA3kymI;qH2mqFq0pEJE-fV})&9ZJ{AxX25gs&MZ#FKbP#769Kg~b)3U}poc zC!zWSAnXF59AVEp2_AxlKO&NM*>u7nkivWw#$E)}2k|Qb?gCzZ5)wji{6t|7VEYME z8yvZb*a%@C4DlKHml1L+wCW~NS|BMroH8lhFIa0a*f=~hC>Ao!K>{5}7_oRIWK2{9 zGK5-)WmqiXJ|!MCm^l$4v4fwHlN?2;&8X4B7?XyR)VMH-#`t9j1l=j0G42AOHkCkF zgs6o*C!2a8E6e&Xsb0 zk&PNu$%nb%=HP@}DrJ%>Ep{wmf|ysdW^xJPy+K${^p#Gyb{L0s} z-aBKdsu^xVg%6ftE?qF&+}tcos2(3Z5IrCkVhMVDI}D%Iw+(rgk1DPPPAj>XUQ}&I`rtTOub4b6U$LTrae!hiAbx?P?2g9 z_x$omDwSLlXF3Aj{6qw(sy!cBg z$5Fvp+E^#P#Ht*(C@oj32&4i|-)=-#7*ZP2{Z^P%>iXpt+u)NkMk|VZO?J)95v1~ zHZSuo)2JcHVhienR*xEmmT6l*OLPYQOu9~bd%ATx90#+tf=#hilkF#)WGgo-c`MaA z{W_TCPs=#9hLg!h#5ZPMcx@Si`FS}zg%nf8(?@gPr#Pndb29Q)ik_rniw0&RXXvL+ zrZc7&<_$|aL^=%K0wKBrtmBLvJAV#rw&lbdH*TTyVD~sts8iHW@#cBuh4*8ca_zY8 z*zB}WX<-z|Bn*)yt`z(({$U+t9eTvbwm7=}#mIfIY=Y4A+=_|4l9R+F4v#qMi==>Q zuV|miH;EXD$Ub^G-w~RTwiJOB!}8OzgmRm*u=3=xmvWb~m9n>Lmb$HFwZ&C^aqZn2 ztLxl(iAvy@-D7;}XITm=-$eM$YAQp*^c`iFU~ z;bx09*u2}EF_1KlsFC?nIZj#0YqD~rY9u&ClffU`j;NKakvaswnrhc;U=Ink9bG;S1u#Fn3Lsa z3!W{CJb~A0a-xy79MyFfnQu)MoCoylHHwP6m%Y%5YT_4W@V9%}6sptbZip z>@df;mmlG`V>%t#-(Q`tk3ghW8i1ReiwE)!y46!l&lWN(ezc6Yt~>XY-yYT2UdW-kx#sT*8VWBgPUFUn4Zp~1I?j)gXv)}K1iU-T!7D`Hx%37 z{)p@cf8Sz6WkJ0rq2;IZEdw|H`8Jd&S=@H>{B>b)tdLAGT&gLL*?;2UO>^rB{t!w1p8S@f_)P#_c*Gr`M&c7m zhM4X@>RrtvvY8Fzujzr?WM*JH(4b|*0T{IgD0#C&gI!oO9BE!!cs>U`I{Ba(ezoKH z(m8<+zZ3t0E|6M-*Q+5TzEcMJmHmNTD!|5)joW!RaC=V%AGxnl(D!&H@e4gzQYsU0V8Hvb4lJ z$e`2%aFu<9iH4t|_-~?8_Wy*RtbfDDe@CSp|53lERAt1(M2%g{%}D>osw(eU)qi_& z{>SV8Xj+)-Z#VynWd9#&VO4o!7hBT53F&{k{BIJ)e_{OF?SG_*#l_VA+XV63;@c+R zqpYNiBme>e0FZwF0p7L%UnD@*765>}Jb(@W0Kfwv!mR<&@1=Ja0RH<106_hO06@JT zA^z%qLjKzdf%_Bcf0X|^zMTQMm8=|G9bBv&97)-jJ_EQ#W#pm%w)QUnlt2Ab{5VS# zwG<1ehCT{FNIQKH^?U0Cput1nLf}F{kOLsmAfV77-g*Hf?|s5R{3HKVd*4AoLP5j8 z!oedTBE37*eFQ*4KtVx5L&3oO?FPd4-41|8gFz=_5rM@}Hijd2!ekAM&w-~9t?I&3 znYyH8GjR?=K*Ywu#l!zZMNLCX$NoMrxOsTR#3dx9q-A7P)zmdKwX}6i&CD$FvwX0;W0(ybE>)!DA-gku}qw&5V0xQw?2XYLi-2V z|2JSk|G$v^2iX6>wE_?WK>j08kdRO?P*6}X?`ta<7+84NzXFc{|BoR2OOXDN4}S&q zKl1k82*i6E@5o`HpkPrE5fJ}l`~O^cTYDdt=x@saWGIOD!32c{5CXjVALd2?X#Nju zZ)Z_u1nigzS41Sts-8w&hTv|FOde^9A zyh~cbgYFm9sO@n_m|+#%nIYI;miHpC9sk(Hx`4p;YlTDW4<@8ErnxLU;ICQAdfl`& z9QQ-H0K^1gw~14U!r%^b#Rux@qtte+X`DVGEcQ}_@(Ldj&{b_L<>U4G`ovfQk~>*z zG7Hm9$f+lZPt+TL_hI1`5edA~*FbC^_RZYdsb%>37gW>^nW;H_5UPg5aIUJHnDn&s z9AS8%|7MIKVV!L`o&VQ$w#$o9_LWBQhDhkdW1Z-XR*7E8HPfJFZEQU$GP$t;doybQ zMDxVg>`R%8ur~mr52NRf5V7B6ymh*K3fHg?`xP4-A>A*h<1gpE@8%$<1Q7H>#@LgX z-&A_;aOx{pN*}JhGF&o-k;@fs5?|s)=BxVrgL_Y}A<4}L&glVFecj$WogQ6+4?2pq zBR&>dSveR!TIpRwnjMX>4{z+u-t zS@`WyL#CAm4_>QFddOyG5@kb_-pw$^ZMxxV9CxshZvbewNgub(BOlGnhMoN%+ivLy z_`nZ1h(yUhjBbT4d}9Az2^vr|2Y?q1$kF zZ%(-WEMb)mpsNiKM^oR1u2^Nw#1X=IW_(E85egTi!x4mR>Ilejqgs~4|HaBV?J69OH-6b(ik+PU^8W&kZjCDoyOx~;<^>Xc zPwMSawxw+-QtJIWY#fIBqstElT-b9#{LD2+KKV)xvQ@pT&*vxK=L2et+v2UmT8PjM z@KRth#pDEZ(MdX^2>slE@>}!AWn@3m{bA#cbR&Vs<>ZMZ_!(sgLJ}S7KF{HYqH>Jw z;fc^P*PZ7}fh)&@>60)>Wtk5s9gk>ZlZtI&O#u?GzZa%oo~V{W8*L%tB1(Yeh#2S+ zluZ{By5>mHS53{ruVlVjeU-PWoE3VYNj)XW^BcK3+Q4|lGaU2WRKz@1UH+80C1-Wb zF2|1D?f$)>Sw>VZZLt?w2E8nn;VrbP5*b#Vf)$3HzAWY-Mf;7TSmiP zP0e-UOStgXD$f#KowEMp!x0qM6AKRld*ZcqF}eZn;CnwaGwHypUK27=^l}{;37eHA zEO;Ic+;YW`qRO=n+&4fMPTAJ$Y|Eu#UuV1R*h{i`u{9iJm8rvrzFjW<8}$UxnXkUd zVe%i2O_D{IJB!Qg9wPd!u(r!LfH0V`FDspaxlYD)G4y5kDn~aX(RK9RQHC<+f_Ug& z7_sb24hAs_b;PA>dX(kpd18Hid-IQvU1R5E{$y&JXR!kg4-_5WTm`h51tA~WH&mv7 zrQ_z;fH5Lr`E>mHHG9F**?-8FDW_5Cm~ug~5P!V*-jqkmNep_aClH&5G3L zO(bO4P|Oy4OsuRI+RS{Vo#H2XvhiV>yM2nS(UtdhE6juT&b_zi&3v6<9Sd*4F>c`V55S?iA(Ei}}h@sl&hzgW+6Mhf+u6dRtz;tjy^ zYW#IBBh%>BO0!C~)`q@owX3guV$FXA_0Hqr`xYvptpWD}Bjv&~ZIPY~M@1gwcMV*< z6fMin(J$WzMnze62@~K3-vF>T^r#p*VuH!ucctZIg&y_Z6qL&BkQ9JxEp}(T%qDYl z!~iC(3t+bDL*(7m!`S6P9~$VXldU`@bcaA!9{4Qe=eJ@0adtCix3|2Wn!u+!fBUN8 zmVVKC$!{sU+OU^E+phhy4_V7)`Pq&`)_r%XpqjI+BXT9CvyK@!`@03jMu*zfpVkt! z`2#ywzq`VN!iaV>P)v_juUBThvV5Woe{?W0%IP@@RCFF9rlT-`xNg>}c_YdX`AY}- zGs5;rG(a~jXyKGK-U$RwMoGkGs6c>N!}DpSrQRoe>G0gDTtwYQmct2u6?(|)?u;9; zF6q5m=@;2Fk<*%ini(Z;Ldst3xHFjB3|jBGtA8JRi3p~c9xU4Zs-q^m$j7u%Rg_T> z2?`LDS&GIgyw1tAeQny{*x)yS)kKsRY#p%V!E~Fm%9`UenqwEkV71Fme{Ct(JQD5H zC5TAeTkcX7rZfqBUYQH(=tVzX7U)89!F0|w)c;nIo1kF8!^Gb>+DGz9yZbq9h;irz zZC=QPd5KA%cSO-}*|NLYtu427h=I|RW38_Xz}H${v`f8?fN4{bN6^s7t|zI`D5`b zGi6(D;o2+I*~jPcG{*2mp<=|Ta|vA-FFMr?62u5Y1>aN#@Kb;>w)^u@!(U0PSXakz z#X*~0VU$XMgl$oZFowVsJIP-M086anGjPT$Lf>W6^BVy20ZI*gR}g_k-EK&=ba!)& zwG3FIekjjsoWS$%5`JX>P4|NMw#L7kUT*aGy8&yHARP;fFkqrFgw`WyR{g!|3zLUV zIPOz#n}oIweIcIwp4DewvHS+S3{S@@AA%-&{kRsghL}vkBsYMT*1W5aC6I(Y1YJb6 ze%8_Xs}s1!7@@Czr8lWNsHa2V>m848uf+b{6_=9b+ams3Rr|+~*fBk4^xj2^2d!#OvqWeu#Cy;x=arz6dGL7I>#|wveK8B$v-M zt(OqFf7zf1IIbkA8U1X+5gRY}^KiN9j(D+ac>@HgkG%s+kBxXA9v#tsgqMQfq2na1 znX-XyrAXf>*Y)wtu~DLO)QY0b8Mv?)F&Ou;-vGbwyVtw~q!cbM`UhQsHqbG07~3zH zAb**5NjK!FW7;A^0DtbZ)Kh{Xzz9-XE*DdG_IW$EL+4azGrFTTtJD%UFCR3~d0(F@ zT`j@R8~q$F9X)7fJ|k^T5hp29nI=g6J{1eT0c=tiZ3@*7s~h2x9PpdAhG93 ze=sg-j`#gcu%bv}trgwp)(;dSHFqpa+~K7c)0lSChf;5ytXtu!J(E*Nm$NO^O z%)+LnRO#R3m5xHJ{tY8d8a3|=z*Ls_XY+rX`Jew@Dv!Jj3M*{fy{Nufa^@5rV@Npw zfer+6?ANkg6fxYB*dFd=>T2jR0OU!?BVL8l%Hw)3>`+V2ykZ+RDWI(_kU*aQdbEoo zf@TuOljy6uI&>8&MEZ->`^`4>8^RxmY^PrXUF=x)AXK)Z0e=#da{|5k=DUxNAGe>_ ze~UTh^6lCh3M2=~p_>yXyC4YZ`ggGinfga|)GYL(;`@j^ENrzz!>ME_G)%iTPT%#P zBWyLLO}LLTntu=OpReCSaKrW3ia~sB1UYPTh45QLzX2BSCEe;1N7BBoA*(?4AQP!4 z1vTwjLUXN=E{q&#zY+)k`BhRhtZNIbbNA0S?f4K>%zi>spYq3dL5RYS!@rAD5Yxwd z{#20cf%wc1h2Y*>#*Wc7DXah1m@aNj#3~g#cPt`^5^66M@d<0BwIin;;*vQ)5DH}3 z)A6AdEk~;G@QzrPvDX?|)lgpq+I_;)`S$?2oEshaV-42ou9r!3n`Te;idW)T;jyS( ziiwx+;&1}ON|Yt8kU{dARZ8_y{R!sCJ^|WqSz(yD0LCEU<(~(uV8d|`!_(L62L6h? z-FyY*z0z~F{XLuKA&+^DW~V6^u8tY?ywE&m2L-;3wK<(9?T(|99EV<=*NnU}e;~Ij zGS=6}q#eA2oURiCiahNRqUEDy`O(Du9t2BfoTMk`pF{f>+!}zGq17q>yaLQ^LOP^X^mtPk?iZJx!C_`~CqfDcYg?{?lb#{@d z+2<5v{%wK~m6)A#o<+sGE1cW`a0 zcy9XHL{o}EHSbPe*NI1mLI7}76nswKC!dF8TR9SW9Wz^@a@!{5j7{aY3_`)7qyIkn zED!g!4wB(lJR^lg1FsRrz&<`35G){X1xv**nB}g+)_! za+09uyP0&(h;^&bzP6eXCv0HIJ>vQo2^nA&dF47WPUF1aj0@waspr#3GO;Cu2h*e& zBo5v<_ki9)%0o;4I`M-gsV^)*aN$a{<7J19-Y~^ z&$bUH%?26R>FH+~NMEC>s$3e#@^mxJxhhtJlh?X-kcF~4-ltRqe*eqxUXsh$XW?ne z>GL&galRDkA9`lM1lGY`S5i)q&4t^I@K$3*&hDZG8!Y<;`fB$z_DWw2na9FhK^L6R zJNqdQsaWaYEV^IuD61NgF(M`BY=${Q6r+x|7Us1+w?z>yV}?!qH(}#S5g@&7` zP@s%$sVMeX$Oqn`x(}8*KY(XH^*)TRCdiP|l?06rgeu8wY97xDA-w@CVwYgMs2>6e z4bgqv5W_O%8;{(p!B=8-5Nv1sI7uJ9&U7ACUlHB|Aw&?)UDoBx@ZD zT&S*Xa*M>TqK7nSYcSowjgc!7#>MipL{nbLSz97 z&eUh*S+w1st(=2N8lP$O7WJclm+0$f8%Y7?E**9+V9-zODVmRc_{5rM618+YKUaki zub;A)C+?DF%lA{Rdyfiqa~Q;x`m15Op2|802VP-rD=8nmw`?6S4&_RYQn8y`>+e({ z?CnPP@$d>7w7#21^~pqg1I4S? z*68>!#ihkXNr!%Op5;io#6QWsj=lkKTVc#mT1pQ!brwPk3~R@{?M*#qc7Yc{-}h3{ zp3hez?L!9;AGcePdOFZvXAIi5{yw@bSeA8#t zqgK}Ynzj=Zs|-3v7%aq)O(eq1JkcD7RmnTDVpoFixEF-Xn7^i^+iAW5Rt!FXxf`=Z zI^0E^r&f}#%g^)lOuYR$Kbxte4VP84XtgT8Fm4hdZ8P_gpf4W@q1<>!w$xg!iYMSv z)FDa|%Zzs++j!RiU}0rWF5Uo_8mM0W;@0mcB93pamRi#Nbaple59 zxvhvHV%T`nGo`6ubxq5!58ZG*dQ2{DCB??FVY0H#)l&TdCl^M0-fM?=v9cBu0D^u8D`oi27AZ45HJ;g+}3v18sLC zUO&Hjx|Z%Wjm|k(d!T4ttF_0`f zR=K55eBXDM;(|NOMJ#(k9E@h zYyI2G_>unO(dq@Gj~r$*^IiS-f<~?)Mqq-aF_I_rSF`}Kdb7Y*)*RO#kP z(&>wG6#+?ijI};nGE>4`hd9`y09~k9MLSPYutJMKdt!;f+Bcx#2xuodsd&?ll$KA5 zAGQY;x3ka7KG4+Z(|BH)3{Yq}Ie}(goaMKLl2$TB3LuJb=Z`lbMO2D)L~$yEP@QwF zZYgddZtWgdu2+ko`t+Swy^Dp~o+$r)b=wW_ELWeCU#Oo1_Zju_UZ?ePzRDJ>VNsT` zc8F@NY@+t@R|143G&3|hDj}ikI_*QaL&cKb(fY^iGev)M`yZxjRVy=epRMm^HK#&y#Z^gc~fUNhISBqjGsyQB(?y=nD)#w#m_@Ol%_cj zn)Lp=WAipL!!#tx$f_^e>RU401gyRHV_w=}s4Shs6)3JR3HNRLNhVv^(=z#m?D~n; zwFx>zNhL<<`Ckh%5*l=$mIWF%3`TE8Y<07F>iB?iXARCwD_?UFDO5jpE=~*w&*1I4 z9;8QZqxKjgK1=)#mjPGUmvKos-5EF7#iG|h4N}q_xI1MA9%%_7*R3&&U-s?ojg9_k z&!Ln&SBqGy4xvSW+>_kz?4&$n%rw#rd@yb`-L8zp&nn-RXuh1Qkz%l=e6;{~z!Wy?`Z<_!>wNVx*4EFj=Q%sj)E-^WT2P&T{W1QJSIY#2>LD@%mML|S zPU4PaAI~RKA62lIt;&%BcCuv{cc#qVXek4ME|X(G6D}Z2lKUvgHkKq|tHij-BEGD> zJ|8oQs>x`9ZT-q-YJL1H-_~A3H>5bCj~|xkDWSbw=R|SA;aZUGrMSb)5CUW=Jnv(8 znOsRZYe%fF@Y-7|@8Dpvi;b2WV4_viECc8 zU_i@g56qetIS{V~j?V02i^oOTjj!%rH!kdlpDA9Bh&|YXvAKQdjo8OZerBF!YNg(` zMI!lXfYAI-7wU*mk;T~~5bo)Pc6FjtmgJomVLj49`OMu?_W_t|$DmXV{O0ntq&F@I zK=*!46$q-)+E-)vl<6LVo73%l{#`1bVl&AS6E={yEhiIlze;9o-9a4*Cf*|VH zS%O8_R2R_Qq&{5%GjR}qd?~YI+!`2isL!t*^Tnj za2d32drxT7Rq*P)@U^`!Q{5MBtCp4*U#ARE=E!PeheAAu8^0V_sb?v{`Jf2Ec`YsY zZ)U6`MeI+V`Eh{cglnpJP#JQMZ40;=KXoO5OnK-ydn2&a;^a8>-vHEmAuj4)L=*`% z`36;WM7z9ylk%XTL;(^Rp91;skGE(4zpXOpHMb|tiO@zH<471(F5sBs9_@~% zHhnII>D+qVZwAWHs@h_%N4U=J6chZ_ag8v$9ztyBUJei|c(;*O17P0R`PPNIXfS8a zc1QF&<17b_agZ*3RenilS@G@>OMVE07#q;~x&Mj*=%P00b~yHAGh_YB(KoJ;yN$utAJ-FF{Sx8){K ztw~Itq_P$a$>IT$(TZ?*t59xTT{lO{AO-pla0k=?PzYO zkNKG5SVETcb(>)z=ral|t0Gjs&*Sz4hJlUFOXzx@H_WJl%!(a+v<@pmv<%+r$hddJ zEeX2Z7Ci}?j!Zda;xfAm?_dRgF|MO{2@VshGlGDZ=4dv0t12k{C9AMdSEfXJvGvn- z{W1|SB%DuO+>p{}w`4COcwD-YIhyTM!&tUJGo~DK_B6-+tbE3s-nljwlZ*E4UzhH`Ar)UQ!WD`WZ6wj_HC)Ls$r+ThSRPvx&?88GI9 ztxVXpl6uIhIFSg6({Gd|lyd^70pmVU`;V;@aC_3Sf2kS{uoAu1UJe@=Jwa@6!F> zNuOj(_j;b<+iq0Taj2Bhu3{K1t(j?gS3rZnrzY=%R^?Ygw!{OFY#_?k#AJjaT}60I}vHkAHir>*<-(B_*e; zw6smz-^JS6l(*dqgl~6)NVLGj$qt2}8kOm@{MHEJdF7QM`ohuCZwD04YL2Iks{IIk zAg*X3i*m&-LEbq*s#rXIP^?62RkNbty`83e4RA0_>5DR_h!`=XB?Dp6Q=}eQ?=0vy zjVB-m;qJG254-_Bv=f7Rw%X2O~kv5z(YZlQh? zM49~w#;OdXY)@6ZY#Smmni zlikr;q5LRO)msS@n~818P$nJUt8M9nj23`%{^K)<(3PbY++=&_9F;2h{_SS-nXlJ# zR@z`|H-})2RhR9O?)1z1_d3Q8NKdqDK5`Fz+YTWeAI~dVxjeQaY3=R#L!?|NUBu9f zn3ESzm~M?TqtLp>eB(MU6=Q?`5ID@b>07GO&l!No#U3ajI;bjrF5T9{i~Uv&F-U}+ z*u50P*v|w#AwD#N)&WcQyUl5+ zro^*Z8dmXH%EMA|UmXk2iz-&`(j)jXh^Y2ZbZCBkdr9N*-`y^S8$015(z-aAAA^_l{DfL+CxBMoPFF z^{D5Z_x=6WUEg)@{l~18?AgzrzGo)$d7hd1EXj=xhK0WKcGc$?rY=m$wVHg#WTV?` z*Uh#ZUAk~7HDo{&q%pX(Xr3BE9mp%Ln#a0Reu&CG)dehmt}e^A)aUastk+|7K_v;F z_xh4bA5XEh*U~E9g&9JD^OZQ;F*oyGDQS$l-D;UO)bZ|#CHBG)NfzUYtiPqlq7hF$ z)lgP8&DG2UhbAaJAD8Tvp}5O?h39&&v3K={-p*qTROK66RqWSLNd%oe<2k{Ll59L= zxx%L+Wl!@^id-50c<}q2VP*2O3`%tJJfKmrIc@H{xjQ(iRT?cFZ~5x1Y5$Cche?dW z+e#K^wET3i)n>!{!uNig6dv%^&H%#^$?1C*1BW_qPGKkOphD>^8V#BmXZ!46;OeZk zd6?9QowwO8o(Tp|a$x$tK+9mq`6uKGA8N`UG~nAUn94v8t2SAzJ?T;GL=7eOp5h)> zy7T*RzP8G{9cRbiXO=qJ2kAX-4`7ZG0@pX$P&7(YsdFv)vhj$po85^Rb2V0ut&NTf za=E9JCEdO-NwtTV{u9ykxPR^#q-&d(_BKIdX;?#USR`Y;ZCH0-#BJHzhlZZ9m|D}Y zgWc#Dq;5F0dPp*T#8Zc3nlK1t3~!IxofB^(lMRiH$kflg@?kWYKMZ@b!scR2I#yD? zxOaP!Y3ZZ%=yYj^>;ltlBF(0|UAX+*H7s(5jfoP+*lUG!#aFFiv>VHQb{eM+*k?$^ z>8f+~OP)_x2Fy}!dVU`5c*@V~LmI(rx7XTAbNL60Rh78QB`&vvjCTeCQC%h_D{m76@^y z@vEUM`s`S7WN?kf;`&=itQ^mI+V&~#)~PTawyNOz^83lYd`g6dk|yRsr(s2FPTJs%8y8LGy*6m*RX4~kj^~I=~3K-0J1nY?GG0LFmP4~}`P@7HKDR)M0 z*R0qyAf7L2Ce(x-ia5Z%Y}t`XH<$H<9;nh9Jg$ZQkuEnzf}h8&v+pU~6W}Sp|K>uv zh}`?TuVHHh&srnnUHJT;*j+zEG#A0|IV=QT$6ZDz&HKA@&{+uXj@EjpU_T8uBrcs~xRujTfOnc?` z21Z6?^!7_9nCrE2sXh0eRXA_Ev*#q`6fJp?gnG)L{pvKS&t{;MD9r`5`j+oJd(tW? zJFeCK8ISG4o4EC42Llpx%2bB`E1l@Oy`qw~)$ILmlVw9!eR^IHJ&-#mV%SRWnyD$G zNa*LYFNq32C*?GqI(-ZxaeX@};dVEtP>QO;^OnkH79-Qt-i+u4wuC-UiYYNd!%ODw z1DzvD$DrrK)Os)34SFAUK4uJQxdxByKfkW;CnPvKG;X^WP&N`OEI49)QF8&>CJoKb z9q)B#yEU?+9#y)8d3x<`8in&%vHZSeY+^AIv75JM-O{;_UuP3CaSq#Kf{Mdf8ZGNku#(sZzc3C@X+i0ZI;E~H}IMGp@H!){JW-6vS{|&sJ-pS2^ z$F3D=O(fPO5DwTZjONgE+!IfW8G8JCp?O3+d+te%5A?@n zy9$`N-!zgEFr9uQ(!;drq7}F-4juwmw8Y!N=Fy!YUA*DaF~eys2iJTLw9+3>&>{!C zsj=ytuN9vAM@IHaUC4O!Tw2|iM1EILNwf~-(8+<%p1~pY6QTDj>_AdN(cy|>^eF9x5YR!DULFZm+ zL3E2ZH8O!2lwJF&(jg1~eLichHY!twBsiPmeURas74(Fc7I(umH`3_svXDMUo8n{? zgmFg@!)BbYkZ$0HSQ!E)fq!^kI8@13AfdxbDh@>57^VsTqeWCfJ7`orj~3jA?K@#6d+M&i*yyEjOq=}UM$b2|c7pJFp5FXKurS~4VVt}lGjqj5dYg5{0X0=Q7?Wt` z<&9c|qvhfL#TO7L8>$uRcN1?1**v)58^|(20GoxM@ot6}x;(kg_72P1r}i?0Z{&k; za7p!ODCXKR$d0nI{7Z~jY8LBTJ^JUzAdsl!Wgk!J2}p9ofhvSh4{E*!n|FgerX&@s z3+@_bj+;NXyYYF{At~buBvIqQ31c{|^z85&#(2gsz?1QDae_wpQ*hT^Hdm}H-eMF~ zICC{|5VL6hKz zH$BwFn%&rwOG#Br5j7THOczzDQAwyR?_HbkR@S;VOK+ZbIMi&+v+txo8#bar<1FZb zARev}*QWP(D11z8-IV*tHT>W-ViTeK!Y-k)LRreqHIW=WS^4H>{Gv)zk7b_=2QMRto(Z)>Mg*3FW<%YF&tj&-q?|PC#~_1%^Q*H-E#O47uY+#y6M`%6i6ael{6{5qE>s%E5CMtU9O2Z{TS>0J6 zll2ZQA~`xew4MwyA);;ECf^ORS-+p+=XDJmrXxdSY{xe++Z$A~HxfSe3eGqLF%^WM zR8TO?-n(MMgSkhL!3qfNVz~j5WEg27hW#Lup{$E>Hr;SMZutJLpaWtVSXZJL!|hf_+dC9~B#fxm=$ zDI8oLT{K|8D1}vC&K|8SFsHj*UKtv9O64}^Z3WNaR?khmla|;RrrqT2M00hNoSNIRkb3R!S0x*9!D{Zri23z54v+ zs%a>hH#LuhWeGDACaeZW$Tm&v(mYw1GF&P0Xy1Pz7GdIS{QPXhYq``LGOBP_K`QZq zE#|{Z3A9SGW!Ti$=7R;piqB-@+LQSMTMoThzG&kujZ_=)A^aRH%*qae8dc$Cs?gDq z<=qXdE+s6RrVq>xy-{1u%uRySSuPyTc{wZNWc|owpRz;^t3?2qIAe<09%AmU(C{S) zn=NuG?I2tLeRkI8ql{gbPY8THrAxYG+a7vNxJOzsfC80y&DoV6MKO7}({Gu2463nh zh3~qP*L)t?I=bJtN0JV)hJ;M;VXvaiC!3N_l?L@`Rt~J?oG!du_%ux0`i4>FRNiVM zmnt9Otm-ogwiX7F#P(qfl7>D8XGO+jWI#hA_baQUT9b#hKk_&G!x| zSZ3iqIO_aBqDtJ2l52O`L~d`0kmNc*(0>||n7hj~AgBz?oufvsb}52<)o6qA_g)QuZs&r!9SNY2-C$l?FOfijG2#k9eU7u24~rrRjPMnYIRk0 z@>t*P*qRaXJGDm=;CR5UpqPBM)Q=+iS~*uMEy;9mO|0mj=(YLb9dI0yKr1AcWeJMh!8V!9Nm!HUmTS3FQ>kj?xFYimg$=GrskizY0 z9JWwk!@Q=ut)eHiSNUFOjTmfu?>JUFi&ct0l+TNZ?CI#uw^pJk6GY{6$mn9vHxQ?a z39AZa7Y>$rH1rRtxYY{gX>JIDF&yDcs~&thUC?A=hdt(88|YR-Z7HqAqAi)R45r@5$ZG1_GlxTAL=xU?e51AQhzng)5X=!+{^nnec zh2G75`_uyK%#_IX2bIH8geye%2%k9GXhvp5HI+kZw@knKK)Y#XvCM-)#lg9}W=!U_ z&X~b6sh-}oC>haPE61Say}VIWSKO}CdQt}E`N3Vgjh6fConzjoy)4qOdgm#3$qeuN zv$J$Ww%!BnY#fR>x9~GZFOkd>AXW`iZ3xxswQ&832%);73bu4C zu-~!8PyxEB*5;jhCZi~5ry%-}?<3mko@b6l2RQv;V0qtnPLZwCDeYk3$R|*jzSa}M zCc8Wvg}r^x9A{&Ofd1i78qb%Fp4tjI^VF)gTdqyic&nN@ zCQGlvF#bqnI)nzJC}%|lsYCSR{Jq&pGd*dN*M!cpvB(?}%GNYjKHD{YMLl0*?Os($ z0u22kBu5EV#?u*Le0pnwSP^J~;CgPb40Y!n9Td~F^g0pe_~_V!kgaf;-ovZYUU(`g z8lN0nEv@s^IwIek!Q+rLejtL+D1-;zRBQH9Bi7@{zPurlu?LUbkGUOppvO~(p}h1S zDY)4#W&>m1+ADV6aHxY=*pR^Jn6N@Fu-suuxXqcloC)Y+!Of|rQw@LcZY5iEAA^jQ z&M%77pgGFnlmtr;qP!0NkXKuZr4)A>kiLWv6MsZ9Z#~CGPE%d zF}9lXT3^N|F{QwmHGze7oFgB@CGd8*YR@F8W& z=@>NpY#Y&pz+Uez$u2S^_k^&o_M|t6hx760GG4i!j1rl?okb<0DW^Jd!x==W{gK8W z>iv1?;!AL-w0Khqe5U2lV#;BaG0Z9!<<6pRh^2sR$)rkarK^f7piPn88OAW-QD{4( z%hiDOv%*eGUk09C9IIDfi)E(QVEjUjsx-O0kvqGiNe_UCmBEq#?IhaE2RSo4Jv({O z!r*Kp-Z3o_BUqj`TSo3kkt1vz65R38$u=_d9P0Xx*(=vnIckk*?VA2}0p^m-LpA|v z^va6jW@odAYc~PCTlj0-yNVRrcUHM+V)4)B@v*8{bz>>0iwh*zn_ZzH=PYB0g-Oht zgO>Yq4-<7SA zf%H>vvpXo`I{FrBSmxdC(3UmZ-&yI&b$j708n(H4mA`;xLHOOh_~x0gS5n@Aje-{l z+Vj;5#`=ilDQ?EG?&^&XTUJ6;}6i|@9KP)yOk=qaWQS4QvHacHSsYW z`H!N#7dtCyU(@l9CTdNh1MWYWhWb)<=|cN#LuOaYs#bJv?#eHDizMm<+$=T;ag}Xv zU%Sz#_-?f$!WAKi^(DiRF3C|Hp-6Xnu$r7c6R54mOG-|R@@;rg`oVNMGHN@ykU;y@ zPpQx0G#&eF)H|%0dk%T@O{Rn?*UjbFCfg4*mQn91gks>EicMa$3FTuy`E1 z;q|uY&;sqyJQ9%ZkhSz_WL(m<_x?GB%o&$Z=^5mWTb&wimS*(wAJJ0C@)1}BltYy- zNSbbjq-RE@2Q%7;&M{q4_)zZQ7$vB$sU2c*ebw^Z+&PIWQ(1Tv2Qp8;cykiTgKe{5 ziiu9^(KaP|PLO0zuf{pSm#XzrOFYK16S#G*Hb!%Ru&BLFt%deUQ<6M!OlQa3R++? zs!CD89te)GAM%>MWs9klit>p6V=T*b3o^(e#385ZypX8%+|>`Y*GQ{qSnwD|{GxZ( zsCm*cud9eGZtJSuh!E5v(FuIO4x2|(yi28++_#4$@RW-(K1*wkY>4*XAzz*ELN zy-@ckdwVDy<_bByZ0*#&FCSh$20g7oZ8Sgvg|(jNysi2qDwBFO_vWIg+IdXORb=c(U+rB#D%&`TrYb%$cxD24D z7L_P4hq{x28_0O1h&sPr`@z%4imiRGp~4RH^xr|X>T&R@k{a~+kCxDc5OY}I^?f^bzDFNT-N zOtGb6-mmwY#1*9o9BuO&sJOd_=aE!-IscK!)*F;XK9rn+N|X%D^=<5Tbt^5J$ST@f z5A$d?U>p)v@a9CWEFm)RPR-emYJHNJmUgQJIVb}Ao0@FsvAnWgmm7q$@(bOljeKvV zEIc4jEa#>o6dAmkb75*cf3VELrw)P0@J&^XN>?Rla)g2R=${$!R$5=B7d54;OjX&q zaWidWKB)^q>Zys1$xCg>!p82)rff(@^U2DTOKT|28A#a08m-#vF-4CJNjR2uJy5Cz z=h*fy=IL_Fxv_c6ygABv-V7Gi*SWtJZG~fQNhwy%MAtmI3OhgKKB1R?itmu5A*H*T z2$2W3fRmaJxgUd`d9v|M7gY&&TYSF$`AK@yYO~O&tNvOQ`@^d`L3v}DXI`d6W~0TK z;`oINw;(l@{Ao+G+P7-v4o3ltk5+(Jt%?-+sb4og9u)v%7B@Cn0*O&-L=g7aN|(Ut zLcOf4Nn1S>1S(6)B1%<*=h{51D|Gw>;$u#;Q5@-^O>^^L05%8@^}KdtHZ)BimYpeM z-NK#oxv1lo(1_B@(flXwiIIju^k|v;Y6^XTSxMizPr1r>&`Y5{Zg4lU>w4-~cS$VS zl{cCUZ45yyOsr+sNJrmBL9Ft6X+?JH3t|MV)b2RiIIAk*{LUS|U+N9n=tfw1dvynK z%5gF-iRsA}50KuQi-{JIPcgJMC+5A6>p=2Pn8j~V;$K+_6HdU`j0nuEm8|Z)d0c(7 zA9#7Mh~*Df9nP7MDqQ3i_4&vX`8!0 z{GT1lMIY_qoW3X=$ieF*Z@y|A)Rn14+}x1q+d~eF?-Z_9#(W^Z=bsv59AY*vq7%6E zgvjgD!A(!)L12&Il@A!ib9SpWPP6iI|K5J#rspY-8DuxPn4G?ZdZz5hhc;kn3il)B zUu11=@D#; zrEQ9N@f(AA-~(i3GWhx1)2AFl{!kL?$@MgJIdD2;v-~1_v$$pAss^y8Iu#mv3|jj% z{U`nEF^I^ZV`)K&+;IO~Y&8kr^dzanK18i^QBm1S1gyxqVlyW;b_0qa;)Kbi;Vh3H zeY!^aSd(DswA-ON{fdDaMtRy1D+33I>)x6YMt*WSHs-DL z?PT16c7kJZ2-m&wiy@a5qJ8E$K{VT~D+Uh_fJIeI81^{84uR5FTu_Ud&-djojY((A zH+3c|O-fxbID5tfH-sIm=0CiSu0Y)rkQjyxmzMinNy!Y}&UJP0nfB>mjF_1e9%vtu zTj^RErk>ey(`c$Rp`}+UZ|M~WW7D%dZx@8&>QBewIu!eN7`rLdWD7mw@B$7x-@lHq zC74RUN-6=JKH*TJ+UEi0Z18lFyCre&b_o%HBAbhk_nqI6+Z(&LxLDD=&-Im_qQUbE+0MIk=-kCzmqNZIE^w59qrmz}1w6Kz zM(>2Ztas9IuuEg!^=bfx%orOw+)AdjHYndL@@$sCU(1M+M#N=1z)-05F*U-<9Y&adiVTkn0 zgF>5IFF};Jn^aR~K?kB776EfL#o-e*orjmf)8_|_Xg_E`&;;5{u;qdhTKhI%um z=z|;8petI=!bVbM&hfa98>~5DMk>}!`cwBB159eEZdMx&n2^@DjFiJ>7EwY~Py2JL zLKh-txafLT`V)nUm1NQp?^e9C=o27C)umvYK+{HvSpYuj)WIs8Hw4@~lCZU-;Sf`y zgR&k$dhwx&8q#VI404gfN$IjHyqT*31=Dwd3B*olmuhc*lnr*lnJMw^9f@AZL0x$BkiVjc!4FD@?X3K_-n>s*iJe>@i&^C_N6 z`xqoPj}&{y3h0n3k3qagq|@efEw}4ck-3WW`|?8Wx87E6O#sUOCy-xvXdd|C2x@yX z)?T5HrkG^2a$*=W8D*;&a1;ksX;_5vAjCZU!isRm^&(#nDfKfdTB`-`eWH{&9EP$G z3&FcAn6RuVn~|Dn=ls;VGmU!*T@Wws*=^xZ9ngaZMT)*3wq(wss(i`APUYTZc^v%Xduv^-5v6;fAvW=oQIDnN*b z4RWA?NndxN-cPI`X5~9dJV%XQUWi8_f($OAy9-HElm?K&L<-LvcrFLHeWI0Q zIbWtK4eZ+lA1S%c)J;%f_MUN8GR_d4?%(#3(%@j9z5RY#TX@r7`(pb!2H$gtS4D=O zdv>kRi06)gcJMLX1wDNQ`DBr7nE0s2^%lNAspyTzc=!iFPin)>(Ojjiz3-+5bLx|% zD2$_&K6~uy6D>8nf7SlD)C&>FM&89_=m3>ZvPb13{V+6mX z+8uH{n{yKNWu4D*f@SD-z%!L-kwuK0w{tFm>2f;n;4NG9WT^DUtdft%W0+Sx&@OhUryV#N%z9T4DEJf9|99-*@{B6X1Wb3xI8@e&rNLIr5D&HDwTj~Yl^0FYDNQQFzxzCJp+Pn|tBz)zd zI4i9ZY{KnBF1I!++yD}47kv<%oP-v^QJ^ST^u}ex^y`Cey)*r)Mv*-R6^1v3`%IEn zlerpChc~Qz-iB=x=~=LmS4b6yExWN#mz5T}HC3hYOzQR6eo_z&0#`;*4aHv}u?0|5 zIO=kP?LO^5nQwm~nUx#paSEIm`QfU?g$nw!H8EXmx&wR)eh%qSWaZO~&YR~L!qjJJ z9?dZNwa!(fOk{-qhN9i||o1?OukNRre5>m$inL`D>kO*N+!IwWo%~tj~Sf zYLNV_`7VRL6-&p2#!A|BXX2-Pzm?3r`g8tf^AIKJBTttcwLFTdB2ui!x4a>c?U z{@NdcK@k<&3aulyjkAw-@)T!g*5kUOnWz?VCqL83g-nJA@MZ9+N{^rX=xuTTe(wt zNVc*Fdc)ftRE!vea~$a$w^sJEn8R1wIFm2*ujc8l+J&U!I^tF5^r6OHz(haA=Dm_v z@2XcJiayMnd+=r;Z=Xt-g5qd@WW&(4AVSRyRFqQHNo`$dw^+ zCb^@8EsmA@Or%E{?jEN|w68M<#45igDZesBpW?KEy~W%_u$qQMmoIvg1lDN@(~wH= z2Fx5;@I~XT19;FgF4yxxif(o309awh%}ZoGR>!l=Bx1YG8Q*S?c}d#{J1%`GHCAP| zdc)<&eQdV?a(Y2ESJZ{fSl{Jxn(Cad$Ib%vBp644*6}gTn1y|#fjWT8LO*9qf zDLNx0k_To}D3}faOrr`rAMQZ&@N=TCkyOZo{WHqkYfAm%j1$mH9~gOdIh@0r)EC0{ zvU@l=IXKtpmX}Ie7tnMK9|^I+Z54%k7Ha&Mo zdU9dYr#1qmTMm?6m2~=c;012UN+aTR4zw*X^On(O@rBlFp(R2i?poU_2gaO*=y;3P<-C7ojqb-lg*Dtk=t$ zBi(^6VE>~RzS4Z0HicAuH`W*BW{)k>zkM57MKmd65ji>f#;34CivK{v-YP$OS&|su>AdImEu!#YDh9SS5COKRAzx}uw9RuQ@wqX0&H?dQ@ieB-HuMF* z$Rkbo^U8;)9?G6w1jUM0d1t#l-R`_z0KFt5KZI~0Tq#}4v{}l&KS*(!!l-CX=TBgc zp$LfMM*rd=idqm`I6*} z6W)}XPmKIvs=#*vU%6TCD*hx4f6?MOf;};M3^<{P;AB?v-@cH)c6Xc{WyH2Gm0#Yw z(=+Tc&5@BdCgTQd#5@-pY5gd$Av3vqPy{x^bV;CzPcf`Y<3-jiHO@MFXJ+@x(Q8jJ z)W);HV^Bdx$huK4@|9d36FPUcGk;Y7YT5Y$SV38Bm`l=#f|-$~v;!&YgtiyDPbI-# zpy9qWtS|zTCSje9A9mlh_;smimlq>OreUPy8M0&is%}wK`|dzc8~J;Uj|YBhtzs?L zs~!85*B@AH6KcLtlPOelhHIOfzw`>rP=p?+!UhBlx15Pci82{&ZQGj-QMo_JY^!6 z%x=&Qep+d2vgQ4W?icu2+Vm@Edx_Ji&w4KUS*8E;)&n>oX7My{-&=>uhpb!Fuza;_QPv#=dMZ z10hMNY|#!+EKg}LiJ5mK?`!49RD;M<#oc7h zt~{lSfh)-iA7+PA44kETP4R>E4GqhNKb?N;okg8>B;^oev_7veT86k;8|4DKN^?G+ zX=XG5Vc_NmG#j5Yz)%eHI?Cju#D-35}rR6SJxTFDMcTadOR}nDu=_<)FPR<_{ zi@JDO*_oj@2_Nge&?=C;@ky!*8Rb$O-tHg&rcybSdgd%xax-N1yxI=Q==~kG;T?9R zT1xwI{ZXZdwr!ac*X2w^ppfYN;PStO{(#}xh+FSsqMocExon%q~)|-c(nJ;L&<7DC#kn0;BJx} zP8*ZPuelpb#8nb-&c#w=Yc4@ifG+ROA_$LSfMi5u*GMwvD8)457}RHY#gOzE6sC7W zy&q!UwC_Cz)j~Z1K1l^k{6^Y}M`z4!z}ENU}$ft)+SN!J7*zZFP9N zT*i0prPbpicAkkY**&8I$n3yYbrmZ7lIy$GN!K{_vH=bPX0Og37OIud#wibAP3b#+ z)!|Dk&LX*r@UyN?A$DVcf3>oSJ_NjxWEkB9%m z$+st`%zooz;Ncb$5c+Ybt>6#&e>>FnJKuuPFNe#@*xNYS{z8uW_5RxtwkPzc-#(mb z0C%eWLu&`yhxR7c#^1S1zdrYw88 z85LysCApvZ{2A8|84&3Y_Ya39;g16Uko|D{NaBa&XAH)_*4~fjmV}Q9O$n_DRS5rQ zFY~YW^0T;Bzn1-%YWQ27{F09!&L0lTUvm62-jf__0XYWp3l`!K0zQI3Gykh${BZpD zhumNWp#5=bb2Hqt0m^++_Wv+sob>o_Lxuo1?~eh4o9l=8H-*b@3YXs$F25;Uep9&o zrf~U9;qsfpjF@N!?{9lE<|Aw(&OLqc$e?Zy)m$>yi)cJulemH*P)~{8=@P8M# z{s-*#we5cEC4BtcKf&9HI^>)9H+cIE-hP9(-{9>xc>4|BeuKB);O#ef`wiay&x5z0 z9GZV4;N<>kp8Okl`)0lSNx{kecXQ=GOoJy6f0_n4rCc3l)ErOPMp!@45U@ zl>ZjpufXs>pvSKqqu-z-klbH{rrbX*JSP?M9rp5^7+hNeO_+&`iM_JDiK)qnef+z%`yR}}*7Bj- zJsV?nn4_f$gQLBZ$xqBLXKiZpwHYhh+dOhIHnC^8B@HvPddTuE?XTH6`QiK)_!g8G z%nRiKb3=J}_`bQh0XIJ%18~C!<>3XN+JLM{d#KEiLBgp*$eelVC9 z%wS6VLk3tWzoBXCzhrzud_YV7>iZX&0MKCnE)(Df|I42Mzu>?937oW!zlG%y65;{g z(?4bZN|%=lu)6-kA1^o8NyGnJSYBQMu7COC72pNh+CTjX{7c3MKEd&S_s0k3{b$*D z1$cP=SyzCJ59r>14+|VV{%;xozsk!CtS0zp9RM=m?ff%7p?~L3KuGA9I&idq2(vV? zCp_uza`%9)bBj+1EC}Ti;Nb>hWclaq*B-^GYGVWR#*^OiwTE)5!Q4$w8Vk?{9ULFp UJAQ3Gyn?_#2;q$zQcBYQ3!E7F0RR91 literal 0 HcmV?d00001 diff --git a/megabox/Resources/Assets.xcassets/menu/love_combo_package.imageset/Contents.json b/megabox/Resources/Assets.xcassets/menu/love_combo_package.imageset/Contents.json new file mode 100644 index 0000000..496fe48 --- /dev/null +++ b/megabox/Resources/Assets.xcassets/menu/love_combo_package.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "love_combo_package.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/megabox/Resources/Assets.xcassets/menu/love_combo_package.imageset/love_combo_package.pdf b/megabox/Resources/Assets.xcassets/menu/love_combo_package.imageset/love_combo_package.pdf new file mode 100644 index 0000000000000000000000000000000000000000..838ce5451a3233c3b5cfc1f273d308c5101bb555 GIT binary patch literal 21847 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 literal 0 HcmV?d00001 diff --git a/megabox/Resources/Assets.xcassets/menu/mappin.imageset/Contents.json b/megabox/Resources/Assets.xcassets/menu/mappin.imageset/Contents.json new file mode 100644 index 0000000..4f75a04 --- /dev/null +++ b/megabox/Resources/Assets.xcassets/menu/mappin.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "mappin.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/megabox/Resources/Assets.xcassets/menu/mappin.imageset/mappin.pdf b/megabox/Resources/Assets.xcassets/menu/mappin.imageset/mappin.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3956b8776131854f7b2da946c23e3a555727d2b3 GIT binary patch literal 4328 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 AXaE2J literal 0 HcmV?d00001 diff --git a/megabox/Resources/Assets.xcassets/menu/single_combo.imageset/Contents.json b/megabox/Resources/Assets.xcassets/menu/single_combo.imageset/Contents.json new file mode 100644 index 0000000..ddd76c1 --- /dev/null +++ b/megabox/Resources/Assets.xcassets/menu/single_combo.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "single_combo.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/megabox/Resources/Assets.xcassets/menu/single_combo.imageset/single_combo.pdf b/megabox/Resources/Assets.xcassets/menu/single_combo.imageset/single_combo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..483cc2e0775e80f6ac0d2418a1f90ed9b02c1aae GIT binary patch literal 20131 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 KjZIEn{(k@!wY^CI literal 0 HcmV?d00001 diff --git a/megabox/Sources/ContentView.swift b/megabox/Sources/ContentView.swift index fed66ea..8ed9a8c 100644 --- a/megabox/Sources/ContentView.swift +++ b/megabox/Sources/ContentView.swift @@ -22,6 +22,8 @@ public struct ContentView: View { MainTabView() case .login: LoginView() + case .directOrderDetail: + DirectOrderDetailView() } } } diff --git a/megabox/Sources/Home/Views/MainTabView.swift b/megabox/Sources/Home/Views/MainTabView.swift index f6ca8d1..8d02322 100644 --- a/megabox/Sources/Home/Views/MainTabView.swift +++ b/megabox/Sources/Home/Views/MainTabView.swift @@ -17,7 +17,7 @@ struct MainTabView: View { Tab("모바일 오더", systemImage: "ticket.fill", value: 2) { - HomeView() + OrderView() } diff --git a/megabox/Sources/Order/Models/OrderModel.swift b/megabox/Sources/Order/Models/OrderModel.swift new file mode 100644 index 0000000..aa1e8b6 --- /dev/null +++ b/megabox/Sources/Order/Models/OrderModel.swift @@ -0,0 +1,25 @@ +import Foundation + +struct MenuItem: Identifiable { + let id = UUID() + let name: String + let price: Int + let imageName: String + let isBest: Bool + let isRecommended: Bool + let isSoldOut: Bool + let discountRate: Int? // 할인율 (예: 10, 20 등) + let originalPrice: Int? // 원래 가격 (할인이 있는 경우) + + init(name: String, price: Int, imageName: String, isBest: Bool = false, isRecommended: Bool = false, isSoldOut: Bool = false, discountRate: Int? = nil, originalPrice: Int? = nil) { + self.name = name + self.price = price + self.imageName = imageName + self.isBest = isBest + self.isRecommended = isRecommended + self.isSoldOut = isSoldOut + self.discountRate = discountRate + self.originalPrice = originalPrice + } +} + diff --git a/megabox/Sources/Order/ViewModels/OrderViewModel.swift b/megabox/Sources/Order/ViewModels/OrderViewModel.swift new file mode 100644 index 0000000..d544daa --- /dev/null +++ b/megabox/Sources/Order/ViewModels/OrderViewModel.swift @@ -0,0 +1,28 @@ +import SwiftUI + +@Observable +class OrderViewModel { + var recommendedMenus: [MenuItem] = [ + MenuItem(name: "러브 콤보", price: 10900, imageName: "love_combo"), + MenuItem(name: "더블 콤보", price: 24900, imageName: "double_combo"), + MenuItem(name: "디즈니 픽사 포스터", price: 15900, imageName: "disney_pixar") + ] + + var bestMenus: [MenuItem] = [ + MenuItem(name: "싱글 패키지", price: 8900, imageName: "single_package"), + MenuItem(name: "더블 콤보", price: 24900, imageName: "double_combo"), + MenuItem(name: "러브 콤보 패키지", price: 32000, imageName: "love_combo_package") + ] + + var allMenus: [MenuItem] = [ + MenuItem(name: "싱글 콤보", price: 10900, imageName: "single_combo", isBest: true), + MenuItem(name: "러브 콤보", price: 10900, imageName: "love_combo", isBest: true), + MenuItem(name: "더블 콤보", price: 24900, imageName: "double_combo", isBest: true), + MenuItem(name: "러브 콤보 패키지", price: 32000, imageName: "love_combo_package"), + MenuItem(name: "패밀리 콤보 패키지", price: 47000, imageName: "family_combo_package"), + MenuItem(name: "메가박스 오리지널 티켓북 시즌4 돌비", price: 10900, imageName: "ticket_book", isRecommended: true), + MenuItem(name: "디즈니 픽사 포스터", price: 15900, imageName: "disney_pixar", isSoldOut: true), + MenuItem(name: "인사이드아웃2 감정", price: 29900, imageName: "inside_out", originalPrice: 35900) + ] +} + diff --git a/megabox/Sources/Order/Views/BestMenuSectionView.swift b/megabox/Sources/Order/Views/BestMenuSectionView.swift new file mode 100644 index 0000000..6b5392e --- /dev/null +++ b/megabox/Sources/Order/Views/BestMenuSectionView.swift @@ -0,0 +1,37 @@ +import SwiftUI + +struct BestMenuSectionView: View { + let menus: [MenuItem] + + var body: some View { + VStack(alignment: .leading, spacing: 16) { + VStack(alignment: .leading, spacing: 8) { + Text("베스트 메뉴") + .font(.bold22) + .foregroundColor(.black) + + Text("영화 볼때 뭐먹지 고민될 때 베스트 메뉴!") + .font(.regular12) + .foregroundColor(Color("gray04")) + } + + ScrollView(.horizontal, showsIndicators: false) { + LazyHStack(spacing: 15) { + ForEach(menus) { menu in + MenuItemCardView(menuItem: menu) + } + } + } + } + } +} + +#Preview { + BestMenuSectionView(menus: [ + MenuItem(name: "싱글 패키지", price: 8900, imageName: "single_package"), + MenuItem(name: "러브 콤보 패키지", price: 19900, imageName: "love_combo_package"), + MenuItem(name: "더블 패키지", price: 22900, imageName: "double_package") + ]) + .padding() +} + diff --git a/megabox/Sources/Order/Views/DeliverySectionView.swift b/megabox/Sources/Order/Views/DeliverySectionView.swift new file mode 100644 index 0000000..426d27f --- /dev/null +++ b/megabox/Sources/Order/Views/DeliverySectionView.swift @@ -0,0 +1,20 @@ +import SwiftUI + +struct DeliverySectionView: View { + var body: some View { + EmptyView() + .modifier(HorizontalLayoutStyle( + title: "어디서든 팝콘 만나기", + description: "팝콘 콜라 스낵 모든 메뉴 배달 가능!", + iconName: "moped", + iconSize: 50, + iconBackgroundColor: nil, + titleFont: .bold22 + )) + } +} + +#Preview { + DeliverySectionView() +} + diff --git a/megabox/Sources/Order/Views/DirectOrderDetailView.swift b/megabox/Sources/Order/Views/DirectOrderDetailView.swift new file mode 100644 index 0000000..fbc0b50 --- /dev/null +++ b/megabox/Sources/Order/Views/DirectOrderDetailView.swift @@ -0,0 +1,95 @@ +import SwiftUI + +struct DirectOrderDetailView: View { + @EnvironmentObject var router: NavigationRouter + @State private var orderViewModel = OrderViewModel() + @State private var selectedTheater: String = "강남" + + var body: some View { + ZStack { + Color.white + .ignoresSafeArea() + + VStack(spacing: 0) { + // 상단 헤더 + headerView + + ScrollView { + VStack(spacing: 16) { + // 메뉴 그리드 + menuGridSection + .padding(.top, 16) + .padding(.bottom, 32) + } + .padding(.horizontal, 16) + } + } + } + .navigationBarBackButtonHidden(true) + } + + private var headerView: some View { + VStack(spacing: 0) { + // 상단 바 (뒤로가기, 타이틀, 장바구니) + HStack { + // 뒤로가기 버튼 + Button { + router.pop() + } label: { + Image(systemName: "chevron.left") + .foregroundColor(.black) + .font(.system(size: 18, weight: .medium)) + } + + // 타이틀 + Text("바로주문") + .font(.semiBold18) + .foregroundColor(.black) + + Spacer() + + // 장바구니 아이콘 + Button { + // 장바구니 액션 + } label: { + Image(systemName: "cart") + .foregroundColor(.black) + .font(.system(size: 20)) + } + } + .padding(.horizontal, 16) + .padding(.vertical, 12) + .background(Color.white) + + // 극장 선택 바 (흰색 배경) + TheaterChangeBarView(selectedTheater: selectedTheater, onChangeTheater: { + // 극장 변경 액션 + }, style: .white) + + // 구분선 + Divider() + .background(Color("gray02")) + } + } + + private var menuGridSection: some View { + let columns = [ + GridItem(.flexible(), spacing: 12), + GridItem(.flexible(), spacing: 12) + ] + + return LazyVGrid(columns: columns, spacing: 20) { + ForEach(orderViewModel.allMenus) { menu in + MenuItemCardView(menuItem: menu) + } + } + } +} + +#Preview { + NavigationStack { + DirectOrderDetailView() + .environmentObject(NavigationRouter()) + } +} + diff --git a/megabox/Sources/Order/Views/DirectOrderSectionView.swift b/megabox/Sources/Order/Views/DirectOrderSectionView.swift new file mode 100644 index 0000000..fd8bb5e --- /dev/null +++ b/megabox/Sources/Order/Views/DirectOrderSectionView.swift @@ -0,0 +1,24 @@ +import SwiftUI + +struct DirectOrderSectionView: View { + @EnvironmentObject var router: NavigationRouter + + var body: some View { + Button { + router.push(.directOrderDetail) + } label: { + EmptyView() + .modifier(TopLeftTextLayoutStyle( + title: "바로 주문", + description: "이제 줄서지 말고\n모바일로 주문하고 픽업!", + iconName: "popcorn", + iconSize: 50 + )) + } + } +} + +#Preview { + DirectOrderSectionView() + .padding() +} diff --git a/megabox/Sources/Order/Views/GiftCardView.swift b/megabox/Sources/Order/Views/GiftCardView.swift new file mode 100644 index 0000000..db7f083 --- /dev/null +++ b/megabox/Sources/Order/Views/GiftCardView.swift @@ -0,0 +1,20 @@ +import SwiftUI + +struct GiftCardView: View { + var body: some View { + EmptyView() + .modifier(TopLeftTextLayoutStyle( + title: "선물하기", + description: nil, + iconName: "gift", + iconSize: 50, + titleFont: .bold22 + )) + } +} + +#Preview { + GiftCardView() + .padding() +} + diff --git a/megabox/Sources/Order/Views/MenuItemCardModifiers.swift b/megabox/Sources/Order/Views/MenuItemCardModifiers.swift new file mode 100644 index 0000000..a0ad291 --- /dev/null +++ b/megabox/Sources/Order/Views/MenuItemCardModifiers.swift @@ -0,0 +1,94 @@ +import SwiftUI + +// BEST 배지 ViewModifier +struct BestBadgeModifier: ViewModifier { + let isBest: Bool + + func body(content: Content) -> some View { + ZStack(alignment: .topTrailing) { + content + + if isBest { + Text("BEST") + .font(.medium10) + .foregroundColor(.white) + .padding(.horizontal, 8) + .padding(.vertical, 4) + .background(Color.red) + .cornerRadius(4) + .padding(8) + } + } + } +} + +// 추천 배지 ViewModifier +struct RecommendedBadgeModifier: ViewModifier { + let isRecommended: Bool + + func body(content: Content) -> some View { + ZStack(alignment: .topTrailing) { + content + + if isRecommended { + Text("추천") + .font(.medium10) + .foregroundColor(.white) + .padding(.horizontal, 8) + .padding(.vertical, 4) + .background(Color.blue) + .cornerRadius(4) + .padding(8) + } + } + } +} + +// 품절 ViewModifier +struct SoldOutModifier: ViewModifier { + let isSoldOut: Bool + + func body(content: Content) -> some View { + ZStack { + content + + if isSoldOut { + Color.black.opacity(0.5) + .cornerRadius(10) + + Text("품절") + .font(.bold18) + .foregroundColor(.white) + } + } + } +} + +// 할인율 ViewModifier +struct DiscountModifier: ViewModifier { + let discountRate: Int? + + func body(content: Content) -> some View { + content + } +} + +// View 확장 메서드 +extension View { + func bestBadge(_ isBest: Bool) -> some View { + self.modifier(BestBadgeModifier(isBest: isBest)) + } + + func recommendedBadge(_ isRecommended: Bool) -> some View { + self.modifier(RecommendedBadgeModifier(isRecommended: isRecommended)) + } + + func soldout(_ isSoldOut: Bool) -> some View { + self.modifier(SoldOutModifier(isSoldOut: isSoldOut)) + } + + func discount(_ discountRate: Int?) -> some View { + self.modifier(DiscountModifier(discountRate: discountRate)) + } +} + diff --git a/megabox/Sources/Order/Views/MenuItemCardView.swift b/megabox/Sources/Order/Views/MenuItemCardView.swift new file mode 100644 index 0000000..2da1018 --- /dev/null +++ b/megabox/Sources/Order/Views/MenuItemCardView.swift @@ -0,0 +1,73 @@ +import SwiftUI + +struct MenuItemCardView: View { + let menuItem: MenuItem + + var body: some View { + VStack(alignment: .leading, spacing: 8) { + // 이미지 영역 + RoundedRectangle(cornerRadius: 10) + .fill(Color("gray00")) + .frame(width: 148, height: 148) + .overlay( + Image(menuItem.imageName) + .resizable() + .aspectRatio(contentMode: .fill) + .clipped() + ) + .cornerRadius(10) + .bestBadge(menuItem.isBest) + .recommendedBadge(menuItem.isRecommended) + .soldout(menuItem.isSoldOut) + + // 텍스트 영역 + VStack(alignment: .leading, spacing: 4) { + Text(menuItem.name) + .font(.regular13) + .foregroundColor(.black) + + // 가격 표시 + if let originalPrice = menuItem.originalPrice { + HStack(spacing: 4) { + Text("\(formatPrice(menuItem.price))원") + .font(.semiBold14) + .foregroundColor(.black) + + Text("\(formatPrice(originalPrice))원") + .font(.regular09) + .foregroundColor(Color("gray04")) + .strikethrough() + } + } else { + Text("\(formatPrice(menuItem.price))원") + .font(.semiBold14) + .foregroundColor(.black) + } + } + } + .frame(width: 158) + } + + private func formatPrice(_ price: Int) -> String { + let formatter = NumberFormatter() + formatter.numberStyle = .decimal + return formatter.string(from: NSNumber(value: price)) ?? "\(price)" + } +} + +#Preview("BEST") { + MenuItemCardView(menuItem: MenuItem(name: "러브 콤보", price: 10900, imageName: "love_combo", isBest: true)) +} + +#Preview("추천") { + MenuItemCardView(menuItem: MenuItem(name: "메가박스 오리지널 티켓북", price: 10900, imageName: "ticket_book", isRecommended: true)) +} + +#Preview("품절") { + MenuItemCardView(menuItem: MenuItem(name: "디즈니 픽사 포스터", price: 15900, imageName: "disney_pixar", isSoldOut: true)) +} + +#Preview("할인") { + MenuItemCardView(menuItem: MenuItem(name: "인사이드아웃2 감정", price: 29900, imageName: "inside_out", originalPrice: 35900)) +} + diff --git a/megabox/Sources/Order/Views/OrderCardLayoutModifiers.swift b/megabox/Sources/Order/Views/OrderCardLayoutModifiers.swift new file mode 100644 index 0000000..d0fa377 --- /dev/null +++ b/megabox/Sources/Order/Views/OrderCardLayoutModifiers.swift @@ -0,0 +1,130 @@ +import SwiftUI + +// 기본 카드 스타일 Modifier +struct OrderCardStyle: ViewModifier { + func body(content: Content) -> some View { + content + .background(Color.white) + .cornerRadius(10) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(Color("gray02"), lineWidth: 1) + ) + } +} + +// 레이아웃 Modifier: 텍스트 왼쪽 상단, 아이콘 오른쪽 하단 (바로 주문 / 선물하기 / 스토어 교환권) +struct TopLeftTextLayoutStyle: ViewModifier { + let title: String + let description: String? + let iconName: String + let iconSize: CGFloat + let titleFont: Font + + init(title: String, description: String?, iconName: String, iconSize: CGFloat, titleFont: Font = .bold24) { + self.title = title + self.description = description + self.iconName = iconName + self.iconSize = iconSize + self.titleFont = titleFont + } + + func body(content: Content) -> some View { + ZStack(alignment: .topLeading) { + // 카드 배경 + RoundedRectangle(cornerRadius: 10) + .fill(Color.white) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(Color("gray02"), lineWidth: 1) + ) + + // 텍스트 (왼쪽 상단) + VStack(alignment: .leading, spacing: 8) { + Text(title) + .font(titleFont) + .foregroundColor(.black) + + if let description = description { + Text(description) + .font(.regular12) + .foregroundColor(Color("gray04")) + .multilineTextAlignment(.leading) + .frame(maxWidth: .infinity, alignment: .leading) + } + } + .padding(.horizontal, 12) + .padding(.top, 15) + + // 아이콘 (오른쪽 하단) + HStack { + Spacer() + VStack { + Spacer() + Image(systemName: iconName) + .font(.system(size: iconSize, weight: .light)) + .foregroundColor(.black) + } + } + .padding(.horizontal, 12) + .padding(.vertical, 15) + } + .modifier(OrderCardStyle()) + } +} + +// 레이아웃 Modifier: 텍스트 왼쪽, 아이콘 오른쪽 가로 배치 (어디서든 팝콘 만나기용) +struct HorizontalLayoutStyle: ViewModifier { + let title: String + let description: String? + let iconName: String + let iconSize: CGFloat + let iconBackgroundColor: Color? + let titleFont: Font + + init(title: String, description: String?, iconName: String, iconSize: CGFloat, iconBackgroundColor: Color?, titleFont: Font = .bold24) { + self.title = title + self.description = description + self.iconName = iconName + self.iconSize = iconSize + self.iconBackgroundColor = iconBackgroundColor + self.titleFont = titleFont + } + + func body(content: Content) -> some View { + ZStack { + // 카드 배경 + RoundedRectangle(cornerRadius: 10) + .fill(Color.white) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(Color("gray02"), lineWidth: 1) + ) + + HStack(spacing: 16) { + VStack(alignment: .leading, spacing: 8) { + Text(title) + .font(titleFont) + .foregroundColor(.black) + + if let description = description { + Text(description) + .font(.regular13) + .foregroundColor(Color("gray04")) + } + } + + Spacer() + + // 아이콘 + Image(systemName: iconName) + .font(.system(size: iconSize, weight: .light)) + .foregroundColor(.black) + } + .padding(.horizontal, 12) + .padding(.vertical, 15) + } + .modifier(OrderCardStyle()) + } +} + diff --git a/megabox/Sources/Order/Views/OrderView.swift b/megabox/Sources/Order/Views/OrderView.swift new file mode 100644 index 0000000..d3effc3 --- /dev/null +++ b/megabox/Sources/Order/Views/OrderView.swift @@ -0,0 +1,88 @@ +import SwiftUI + +struct OrderView: View { + @State private var orderViewModel = OrderViewModel() + @State private var selectedTheater: String = "강남" + + var body: some View { + ZStack { + Color.white + .ignoresSafeArea() + + VStack(spacing: 0) { + + ScrollView { + // 헤더 (극장 선택) + headerSection + .padding(.bottom, 26) + VStack(spacing: 15) { + // 바로 주문 및 카드 섹션 + HStack(alignment: .top, spacing: 12) { + // 바로 주문 카드 (남은 공간 차지) + DirectOrderSectionView() + .frame(maxWidth: .infinity) + .frame(height: 308) + + // 오른쪽 카드들 (정사각형) + VStack(spacing: 12) { + StoreVoucherCardView() + .aspectRatio(1, contentMode: .fit) + .frame(width: 148) + + GiftCardView() + .aspectRatio(1, contentMode: .fit) + .frame(width: 148) + } + } + .frame(height: 308) + + // 어디서든 팝콘 만나기 섹션 + DeliverySectionView() + .frame(height: 104) + .padding(.vertical, 5) + .padding(.bottom, 15) + + // 추천 메뉴 섹션 + RecommendedMenuSectionView(menus: orderViewModel.recommendedMenus) + .padding(.bottom, 25) + + // 베스트 메뉴 섹션 + BestMenuSectionView(menus: orderViewModel.bestMenus) + .padding(.bottom, 32) + } + .padding(.horizontal, 16) + } + } + } + } + + private var headerSection: some View { + VStack(spacing: 0) { + // MEGABOX 로고 + HStack{ + Image("homeMegaboxLogo") + .resizable() + .scaledToFit() + .frame(width: 120, height: 25) + Spacer() + } + .padding(.leading, 16) + .padding(.bottom, 17) + .background(Color.white) + + // 극장 선택 바 (보라색 배경) + TheaterChangeBarView(selectedTheater: selectedTheater) { + // 극장 변경 액션 + } + } + } +} + +#Preview { + OrderView() +} + +#Preview("iPhone 16 Pro Max") { + OrderView() +} + diff --git a/megabox/Sources/Order/Views/RecommendedMenuSectionView.swift b/megabox/Sources/Order/Views/RecommendedMenuSectionView.swift new file mode 100644 index 0000000..b8d9b27 --- /dev/null +++ b/megabox/Sources/Order/Views/RecommendedMenuSectionView.swift @@ -0,0 +1,37 @@ +import SwiftUI + +struct RecommendedMenuSectionView: View { + let menus: [MenuItem] + + var body: some View { + VStack(alignment: .leading, spacing: 16) { + VStack(alignment: .leading, spacing: 8) { + Text("추천 메뉴") + .font(.bold22) + .foregroundColor(.black) + + Text("영화 볼때 뭐먹지 고민될 땐 추천 메뉴!") + .font(.regular12) + .foregroundColor(Color("gray04")) + } + + ScrollView(.horizontal, showsIndicators: false) { + LazyHStack(spacing: 15) { + ForEach(menus) { menu in + MenuItemCardView(menuItem: menu) + } + } + } + } + } +} + +#Preview { + RecommendedMenuSectionView(menus: [ + MenuItem(name: "러브 콤보", price: 10900, imageName: "love_combo"), + MenuItem(name: "더블 콤보", price: 24900, imageName: "double_combo"), + MenuItem(name: "디즈니 픽사 콤보", price: 15900, imageName: "disney_pixar") + ]) + .padding() +} + diff --git a/megabox/Sources/Order/Views/StoreVoucherCardView.swift b/megabox/Sources/Order/Views/StoreVoucherCardView.swift new file mode 100644 index 0000000..9068784 --- /dev/null +++ b/megabox/Sources/Order/Views/StoreVoucherCardView.swift @@ -0,0 +1,20 @@ +import SwiftUI + +struct StoreVoucherCardView: View { + var body: some View { + EmptyView() + .modifier(TopLeftTextLayoutStyle( + title: "스토어 교환권", + description: nil, + iconName: "ticket", + iconSize: 50, + titleFont: .bold22 + )) + } +} + +#Preview { + StoreVoucherCardView() + .padding() +} + diff --git a/megabox/Sources/Order/Views/TheaterChangeBarView.swift b/megabox/Sources/Order/Views/TheaterChangeBarView.swift new file mode 100644 index 0000000..01e6d22 --- /dev/null +++ b/megabox/Sources/Order/Views/TheaterChangeBarView.swift @@ -0,0 +1,66 @@ +import SwiftUI + +enum TheaterBarStyle { + case purple // 보라색 배경, 흰색 텍스트 + case white // 흰색 배경, 검은색 텍스트, 보라색 버튼 +} + +struct TheaterChangeBarView: View { + let selectedTheater: String + let onChangeTheater: () -> Void + let style: TheaterBarStyle + + init(selectedTheater: String, onChangeTheater: @escaping () -> Void, style: TheaterBarStyle = .purple) { + self.selectedTheater = selectedTheater + self.onChangeTheater = onChangeTheater + self.style = style + } + + var body: some View { + HStack { + // 왼쪽: 위치 아이콘과 극장명 + HStack(spacing: 8) { + Image(systemName: "mappin.circle.fill") + .foregroundColor(style == .purple ? .white : .black) + .font(.system(size: 16)) + + Text(selectedTheater) + .font(.semiBold13) + .foregroundStyle(style == .purple ? Color.white : Color.black) + } + + Spacer() + + // 오른쪽: 극장 변경 버튼 + Button { + onChangeTheater() + } label: { + Text("극장 변경") + .font(.semiBold13) + .foregroundColor(style == .purple ? .white : Color("purple03")) + .padding(.horizontal, 12) + .padding(.vertical, 6) + .overlay( + RoundedRectangle(cornerRadius: 5) + .stroke(style == .purple ? Color.white : Color("gray02"), lineWidth: 1) + ) + } + } + .padding(.horizontal, style == .purple ? 20 : 16) + .padding(.vertical, 10) + .background(style == .purple ? Color("purple03") : Color.white) + } +} + +#Preview("Purple Style") { + TheaterChangeBarView(selectedTheater: "강남", style: .purple) { + print("극장 변경") + } +} + +#Preview("White Style") { + TheaterChangeBarView(selectedTheater: "강남", style: .white) { + print("극장 변경") + } +} + diff --git a/megabox/Sources/Routers/Routers.swift b/megabox/Sources/Routers/Routers.swift index a14b1ff..3686834 100644 --- a/megabox/Sources/Routers/Routers.swift +++ b/megabox/Sources/Routers/Routers.swift @@ -6,4 +6,5 @@ enum Route: Hashable { case memberInfo // 프로필 → 회원정보 관리 case home case login + case directOrderDetail // 바로 주문 상세 } From 888b5faabce0319888fba15e1550b4aa82f98070 Mon Sep 17 00:00:00 2001 From: dedrSE Date: Thu, 27 Nov 2025 11:57:10 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[sunny/week9]=209=EC=A3=BC=EC=B0=A8=20?= =?UTF-8?q?=EA=B3=BC=EC=A0=9C=20=ED=94=84=EB=A1=9C=ED=95=84=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=84=A0=ED=83=9D=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Order/Views/BestMenuSectionView.swift | 4 +- .../Order/Views/DirectOrderDetailView.swift | 6 +-- .../Order/Views/MenuItemCardModifiers.swift | 6 +-- .../Order/Views/MenuItemCardView.swift | 8 +-- .../Views/OrderCardLayoutModifiers.swift | 12 ++--- .../Views/RecommendedMenuSectionView.swift | 4 +- .../Order/Views/TheaterChangeBarView.swift | 4 +- .../Sources/Profile/Views/ProfileView.swift | 51 +++++++++++++++++-- megabox/Sources/Utils/Photo/ImagePicker.swift | 46 +++++++++++++++++ 9 files changed, 115 insertions(+), 26 deletions(-) create mode 100644 megabox/Sources/Utils/Photo/ImagePicker.swift diff --git a/megabox/Sources/Order/Views/BestMenuSectionView.swift b/megabox/Sources/Order/Views/BestMenuSectionView.swift index 6b5392e..df30605 100644 --- a/megabox/Sources/Order/Views/BestMenuSectionView.swift +++ b/megabox/Sources/Order/Views/BestMenuSectionView.swift @@ -8,11 +8,11 @@ struct BestMenuSectionView: View { VStack(alignment: .leading, spacing: 8) { Text("베스트 메뉴") .font(.bold22) - .foregroundColor(.black) + .foregroundStyle(.black) Text("영화 볼때 뭐먹지 고민될 때 베스트 메뉴!") .font(.regular12) - .foregroundColor(Color("gray04")) + .foregroundStyle(Color("gray04")) } ScrollView(.horizontal, showsIndicators: false) { diff --git a/megabox/Sources/Order/Views/DirectOrderDetailView.swift b/megabox/Sources/Order/Views/DirectOrderDetailView.swift index fbc0b50..ff02082 100644 --- a/megabox/Sources/Order/Views/DirectOrderDetailView.swift +++ b/megabox/Sources/Order/Views/DirectOrderDetailView.swift @@ -37,14 +37,14 @@ struct DirectOrderDetailView: View { router.pop() } label: { Image(systemName: "chevron.left") - .foregroundColor(.black) + .foregroundStyle(.black) .font(.system(size: 18, weight: .medium)) } // 타이틀 Text("바로주문") .font(.semiBold18) - .foregroundColor(.black) + .foregroundStyle(.black) Spacer() @@ -53,7 +53,7 @@ struct DirectOrderDetailView: View { // 장바구니 액션 } label: { Image(systemName: "cart") - .foregroundColor(.black) + .foregroundStyle(.black) .font(.system(size: 20)) } } diff --git a/megabox/Sources/Order/Views/MenuItemCardModifiers.swift b/megabox/Sources/Order/Views/MenuItemCardModifiers.swift index a0ad291..8f0da34 100644 --- a/megabox/Sources/Order/Views/MenuItemCardModifiers.swift +++ b/megabox/Sources/Order/Views/MenuItemCardModifiers.swift @@ -11,7 +11,7 @@ struct BestBadgeModifier: ViewModifier { if isBest { Text("BEST") .font(.medium10) - .foregroundColor(.white) + .foregroundStyle(.white) .padding(.horizontal, 8) .padding(.vertical, 4) .background(Color.red) @@ -33,7 +33,7 @@ struct RecommendedBadgeModifier: ViewModifier { if isRecommended { Text("추천") .font(.medium10) - .foregroundColor(.white) + .foregroundStyle(.white) .padding(.horizontal, 8) .padding(.vertical, 4) .background(Color.blue) @@ -58,7 +58,7 @@ struct SoldOutModifier: ViewModifier { Text("품절") .font(.bold18) - .foregroundColor(.white) + .foregroundStyle(.white) } } } diff --git a/megabox/Sources/Order/Views/MenuItemCardView.swift b/megabox/Sources/Order/Views/MenuItemCardView.swift index 2da1018..7c9f339 100644 --- a/megabox/Sources/Order/Views/MenuItemCardView.swift +++ b/megabox/Sources/Order/Views/MenuItemCardView.swift @@ -24,24 +24,24 @@ struct MenuItemCardView: View { VStack(alignment: .leading, spacing: 4) { Text(menuItem.name) .font(.regular13) - .foregroundColor(.black) + .foregroundStyle(.black) // 가격 표시 if let originalPrice = menuItem.originalPrice { HStack(spacing: 4) { Text("\(formatPrice(menuItem.price))원") .font(.semiBold14) - .foregroundColor(.black) + .foregroundStyle(.black) Text("\(formatPrice(originalPrice))원") .font(.regular09) - .foregroundColor(Color("gray04")) + .foregroundStyle(Color("gray04")) .strikethrough() } } else { Text("\(formatPrice(menuItem.price))원") .font(.semiBold14) - .foregroundColor(.black) + .foregroundStyle(.black) } } } diff --git a/megabox/Sources/Order/Views/OrderCardLayoutModifiers.swift b/megabox/Sources/Order/Views/OrderCardLayoutModifiers.swift index d0fa377..35caf6f 100644 --- a/megabox/Sources/Order/Views/OrderCardLayoutModifiers.swift +++ b/megabox/Sources/Order/Views/OrderCardLayoutModifiers.swift @@ -43,12 +43,12 @@ struct TopLeftTextLayoutStyle: ViewModifier { VStack(alignment: .leading, spacing: 8) { Text(title) .font(titleFont) - .foregroundColor(.black) + .foregroundStyle(.black) if let description = description { Text(description) .font(.regular12) - .foregroundColor(Color("gray04")) + .foregroundStyle(Color("gray04")) .multilineTextAlignment(.leading) .frame(maxWidth: .infinity, alignment: .leading) } @@ -63,7 +63,7 @@ struct TopLeftTextLayoutStyle: ViewModifier { Spacer() Image(systemName: iconName) .font(.system(size: iconSize, weight: .light)) - .foregroundColor(.black) + .foregroundStyle(.black) } } .padding(.horizontal, 12) @@ -105,12 +105,12 @@ struct HorizontalLayoutStyle: ViewModifier { VStack(alignment: .leading, spacing: 8) { Text(title) .font(titleFont) - .foregroundColor(.black) + .foregroundStyle(.black) if let description = description { Text(description) .font(.regular13) - .foregroundColor(Color("gray04")) + .foregroundStyle(Color("gray04")) } } @@ -119,7 +119,7 @@ struct HorizontalLayoutStyle: ViewModifier { // 아이콘 Image(systemName: iconName) .font(.system(size: iconSize, weight: .light)) - .foregroundColor(.black) + .foregroundStyle(.black) } .padding(.horizontal, 12) .padding(.vertical, 15) diff --git a/megabox/Sources/Order/Views/RecommendedMenuSectionView.swift b/megabox/Sources/Order/Views/RecommendedMenuSectionView.swift index b8d9b27..dc6880a 100644 --- a/megabox/Sources/Order/Views/RecommendedMenuSectionView.swift +++ b/megabox/Sources/Order/Views/RecommendedMenuSectionView.swift @@ -8,11 +8,11 @@ struct RecommendedMenuSectionView: View { VStack(alignment: .leading, spacing: 8) { Text("추천 메뉴") .font(.bold22) - .foregroundColor(.black) + .foregroundStyle(.black) Text("영화 볼때 뭐먹지 고민될 땐 추천 메뉴!") .font(.regular12) - .foregroundColor(Color("gray04")) + .foregroundStyle(Color("gray04")) } ScrollView(.horizontal, showsIndicators: false) { diff --git a/megabox/Sources/Order/Views/TheaterChangeBarView.swift b/megabox/Sources/Order/Views/TheaterChangeBarView.swift index 01e6d22..c10e8c6 100644 --- a/megabox/Sources/Order/Views/TheaterChangeBarView.swift +++ b/megabox/Sources/Order/Views/TheaterChangeBarView.swift @@ -21,7 +21,7 @@ struct TheaterChangeBarView: View { // 왼쪽: 위치 아이콘과 극장명 HStack(spacing: 8) { Image(systemName: "mappin.circle.fill") - .foregroundColor(style == .purple ? .white : .black) + .foregroundStyle(style == .purple ? .white : .black) .font(.system(size: 16)) Text(selectedTheater) @@ -37,7 +37,7 @@ struct TheaterChangeBarView: View { } label: { Text("극장 변경") .font(.semiBold13) - .foregroundColor(style == .purple ? .white : Color("purple03")) + .foregroundStyle(style == .purple ? .white : Color("purple03")) .padding(.horizontal, 12) .padding(.vertical, 6) .overlay( diff --git a/megabox/Sources/Profile/Views/ProfileView.swift b/megabox/Sources/Profile/Views/ProfileView.swift index 2fe68fa..8b5b3ea 100644 --- a/megabox/Sources/Profile/Views/ProfileView.swift +++ b/megabox/Sources/Profile/Views/ProfileView.swift @@ -11,6 +11,13 @@ struct ProfileView: View { @AppStorage("savedName") private var savedName: String = "" @EnvironmentObject var router: NavigationRouter // 추가 + //프로필 사진 기능 + @State private var showImagePicker = false + @State private var selectedImages: [UIImage] = [] + + private var selectedImage: UIImage? { + selectedImages.first + } var body: some View { @@ -18,10 +25,14 @@ struct ProfileView: View { Color.white .ignoresSafeArea() // 안전 영역(노치, 홈바 영역)까지 채우기 VStack { - headerView - .padding(.top, 59) // 상단 여백 - - memberShipPointView + HStack { + profileImageView + VStack { + headerView + memberShipPointView + } + } + .padding(.top, 59) // 상단 여백 clubMembershipButtonView .padding(.top, 15) @@ -59,6 +70,38 @@ struct ProfileView: View { } } + private var profileImageView: some View { + ZStack { + // 업로드된 프로필 이미지 + if let selectedImage { + Image(uiImage: selectedImage) + .resizable() + .scaledToFill() + .frame(width: 55, height: 55) + .clipShape(Circle()) + } else { + // 기본 아이콘 + Image(systemName: "person.crop.circle") + .resizable() + .scaledToFit() + .frame(width: 55, height: 55) + .foregroundStyle(Color("gray04")) + } + } + .onLongPressGesture(minimumDuration: 1.0) { + showImagePicker = true + } + .sheet(isPresented: $showImagePicker) { + ImagePicker(images: $selectedImages, selectedLimit: 1) + } + .onChange(of: selectedImages) { oldValue, newValue in + // 이미지가 선택되면 첫 번째 이미지만 유지 + if newValue.count > 1 { + selectedImages = Array(newValue.prefix(1)) + } + } + } + private var headerView: some View { HStack { VStack(alignment: .leading) { diff --git a/megabox/Sources/Utils/Photo/ImagePicker.swift b/megabox/Sources/Utils/Photo/ImagePicker.swift new file mode 100644 index 0000000..5b58898 --- /dev/null +++ b/megabox/Sources/Utils/Photo/ImagePicker.swift @@ -0,0 +1,46 @@ +import SwiftUI +import PhotosUI + +struct ImagePicker: UIViewControllerRepresentable { + @Environment(\.dismiss) var dismiss + @Binding var images: [UIImage] + var selectedLimit: Int + + func makeUIViewController(context: Context) -> PHPickerViewController { + var config = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared()) + config.selectionLimit = selectedLimit + config.filter = .images + + let picker = PHPickerViewController(configuration: config) + picker.delegate = context.coordinator + return picker + } + + func updateUIViewController(_ uiViewController: PHPickerViewController, context: Context) {} + + func makeCoordinator() -> Coordinator { + Coordinator(parent: self) + } + + class Coordinator: NSObject, PHPickerViewControllerDelegate { + var parent: ImagePicker + + init(parent: ImagePicker) { + self.parent = parent + } + + func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { + parent.dismiss() + + for result in results { + result.itemProvider.loadObject(ofClass: UIImage.self) { object, error in + if let image = object as? UIImage { + DispatchQueue.main.async { + self.parent.images.append(image) + } + } + } + } + } + } +}