From 653f4378f11c014ce32dbbd46ce633d98f1a2c3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=B7=E1=84=8C=E1=85=B5=E1=84=8B?= =?UTF-8?q?=E1=85=AD=E1=86=BC?= Date: Sat, 11 Oct 2025 17:36:44 +0900 Subject: [PATCH 1/8] =?UTF-8?q?4=EC=A3=BC=EC=B0=A8=EA=B3=BC=EC=A0=9C(?= =?UTF-8?q?=EB=AF=B8=EC=99=84=EC=84=B1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Contents.json" | 12 + .../\353\241\234\354\246\210.pdf" | Bin 0 -> 19013 bytes .../Contents.json" | 12 + .../\353\263\264\354\212\244.pdf" | Bin 0 -> 183071 bytes .../Contents.json" | 12 + .../\354\225\274\353\213\271.pdf" | Bin 0 -> 240102 bytes .../Type.swift => EnumTypes/ChartType.swift} | 5 - week03/Megabox/EnumTypes/InfoType.swift | 6 + week03/Megabox/Model/MovieCards.swift | 3 + week03/Megabox/Model/MovieDescription.swift | 14 ++ .../Megabox/ViewModels/LoginViewModel.swift | 1 - .../ViewModels/MovieBookingViewModel.swift | 122 ++++++++++ .../ViewModels/MovieCardsViewModel.swift | 31 ++- .../Views/SingleViews/InfoButtonView.swift | 2 +- .../Views/SingleViews/MovieBookingView.swift | 219 ++++++++++++++++++ .../Views/SingleViews/MovieDetailView.swift | 16 +- .../Views/SingleViews/UserInfoView.swift | 1 - week03/Megabox/Views/Tabviews/HomeView.swift | 2 +- week03/Megabox/Views/Tabviews/Tabs.swift | 62 ++--- 19 files changed, 456 insertions(+), 64 deletions(-) create mode 100644 "week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" create mode 100644 "week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/\353\241\234\354\246\210.pdf" create mode 100644 "week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" create mode 100644 "week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/\353\263\264\354\212\244.pdf" create mode 100644 "week03/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/Contents.json" create mode 100644 "week03/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/\354\225\274\353\213\271.pdf" rename week03/Megabox/{Model/Type.swift => EnumTypes/ChartType.swift} (75%) create mode 100644 week03/Megabox/EnumTypes/InfoType.swift create mode 100644 week03/Megabox/Model/MovieDescription.swift create mode 100644 week03/Megabox/ViewModels/MovieBookingViewModel.swift create mode 100644 week03/Megabox/Views/SingleViews/MovieBookingView.swift diff --git "a/week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" "b/week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" new file mode 100644 index 0000000..c09e07f --- /dev/null +++ "b/week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "로즈.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/\353\241\234\354\246\210.pdf" "b/week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/\353\241\234\354\246\210.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..e8e77e3de2a06de9335151a62bf20945d0c621dc GIT binary patch literal 19013 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 literal 0 HcmV?d00001 diff --git "a/week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" "b/week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" new file mode 100644 index 0000000..181483a --- /dev/null +++ "b/week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "보스.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git "a/week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/\353\263\264\354\212\244.pdf" "b/week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/\353\263\264\354\212\244.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..109ca202a7ba6eca8e4c0e2df7c5559042d79666 GIT binary patch literal 183071 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%0DjoaUMdgP?%+pKm36 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 + var selectedMovie: MovieCards? { + movieCards.first { $0.id == selectedMovieID } + } + + init() { + + loadMovieData() + generateDatesForWeek() + + setupButtonStateSubscription() + setupDateSelectionSubscription() + } + + private func setupButtonStateSubscription() { + $selectedMovieID + .map { movieID in + return movieID != nil + } .assign(to: &$isTheaterButtonEnabled) + } + + private func setupDateSelectionSubscription() { + $selectedTheaters + // selectedTheaters 배열이 비어있지 않으면 true, 비어있으면 false 반환 + .map { !$0.isEmpty } + // 그 결과를 isDateSelectionEnabled에 할당 + .assign(to: &$isDateSelectionEnabled) + } + + + + // 뷰에서 호출할 메서드 (로직을 뷰에서 분리) + func selectMovie(id: UUID?) { + // 애니메이션 효과를 위해 main thread에서 실행 + DispatchQueue.main.async { + withAnimation { + self.selectedMovieID = id + } + } + } + //날짜를 선택/해제하는 메서드 추가 + func selectDate(_ date: Date) { + // 이미 선택된 날짜를 다시 누르면 선택 해제 + if selectedDate == date { + selectedDate = nil + } else { + // 다른 날짜를 누르면 그 날짜로 선택 변경 + selectedDate = date + } + } + + + //극장을 선택(또는 해제)하는 메서드 추가 + func selectTheater(name: String) { + // 배열에 이미 선택한 극장 이름이 있는지 확인 + if let index = selectedTheaters.firstIndex(of: name) { + // 있으면 배열에서 제거 (선택 해제) + selectedTheaters.remove(at: index) + } else { + // 없으면 배열에 추가 (선택) + selectedTheaters.append(name) + } + } + //오늘부터 7일간의 날짜를 생성하는 메서드 + private func generateDatesForWeek() { + let calendar = Calendar.current + let today = Date() + + var dates: [Date] = [] + for i in 0..<7 { + if let date = calendar.date(byAdding: .day, value: i, to: today) { + dates.append(date) + } + } + self.weekDates = dates + } + + + private func loadMovieData() { + let azzulDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let guikalDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let f1Desc = MovieDescription(detail1: "최고가 되지 못한 전설 VS 최고가 되고 싶은 루키", detail2: "한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고", detail3: "한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트).", detail4: "그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게", detail5: "레이싱 복귀를 제안받으며 최하위 팀인 APGXP에 합류한다.") + let faceDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let himeDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let bossDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let yadangDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let rosesDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + + + + let azzul = MovieCards(image: Image("어쩔수가없다"), booking: true, movieName: "어쩔수가없다",watchedStatus: "20만", movieNameEn: "Can't Help It", movieDescription: azzulDesc) + let guikal = MovieCards(image: Image("귀멸의칼날"), booking: true, movieName: "극장판 귀멸의칼날",watchedStatus: "1", movieNameEn: "Demon Slayer", movieDescription: guikalDesc) + let f1 = MovieCards(image: Image("f1"), booking: true, movieName: "F1 더 무비", watchedStatus: "1", movieNameEn: "F1: The Movie", movieDescription: f1Desc) + let face = MovieCards(image: Image("얼굴"), booking: true, movieName: "얼굴", watchedStatus: "20만", movieNameEn: "Face", movieDescription: faceDesc) + let hime = MovieCards(image: Image("모노노케히메"), booking: true, movieName: "모노노케히메", watchedStatus: "20만", movieNameEn: "Princess Mononoke", movieDescription: himeDesc) + let boss = MovieCards(image: Image("보스"), booking: true, movieName: "보스", watchedStatus: "20만", movieNameEn: "The boss", movieDescription: bossDesc) + let yadang = MovieCards(image: Image("야당"), booking: true, movieName: "야당", watchedStatus: "20만", movieNameEn: "Yadang", movieDescription: yadangDesc) + let roses = MovieCards(image: Image("로즈"), booking: true, movieName: "The Roses", watchedStatus: "20만", movieNameEn: "The roses", movieDescription: rosesDesc) + + + + self.movieCards = [azzul, guikal, f1, face, hime, boss, yadang, roses] + } +} diff --git a/week03/Megabox/ViewModels/MovieCardsViewModel.swift b/week03/Megabox/ViewModels/MovieCardsViewModel.swift index cebc21f..cd03ea2 100644 --- a/week03/Megabox/ViewModels/MovieCardsViewModel.swift +++ b/week03/Megabox/ViewModels/MovieCardsViewModel.swift @@ -4,17 +4,34 @@ import Foundation @Observable class MovieCardsViewModel{ - + // 모델안에 모델을 넣는식 + // var movieCards: [MovieCards] = [] init() { - let azzul = MovieCards(image: Image("어쩔수가없다"), booking: true, movieName: "어쩔수가없다",watchedStatus: "20만", movieNameEn: "Can't Help It") - let guikal = MovieCards(image: Image("귀멸의칼날"), booking: true, movieName: "극장판 귀멸의칼날",watchedStatus: "1", movieNameEn: "Demon Slayer") - let f1 = MovieCards(image: Image("f1"), booking: true, movieName: "F1 더 무비", watchedStatus: "1", movieNameEn: "F1: The Movie") - let face = MovieCards(image: Image("얼굴"), booking: true, movieName: "얼굴", watchedStatus: "20만", movieNameEn: "Face") - let hime = MovieCards(image: Image("모노노케히메"), booking: true, movieName: "모노노케히메", watchedStatus: "20만", movieNameEn: "Princess Mononoke") + let azzulDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let guikalDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let f1Desc = MovieDescription(detail1: "최고가 되지 못한 전설 VS 최고가 되고 싶은 루키", detail2: "한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고", detail3: "한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트).", detail4: "그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게", detail5: "레이싱 복귀를 제안받으며 최하위 팀인 APGXP에 합류한다.") + let faceDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let himeDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let bossDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let yadangDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let rosesDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + + - self.movieCards = [azzul, guikal, f1, hime] + let azzul = MovieCards(image: Image("어쩔수가없다"), booking: true, movieName: "어쩔수가없다",watchedStatus: "20만", movieNameEn: "Can't Help It", movieDescription: azzulDesc) + let guikal = MovieCards(image: Image("귀멸의칼날"), booking: true, movieName: "극장판 귀멸의칼날",watchedStatus: "1", movieNameEn: "Demon Slayer", movieDescription: guikalDesc) + let f1 = MovieCards(image: Image("f1"), booking: true, movieName: "F1 더 무비", watchedStatus: "1", movieNameEn: "F1: The Movie", movieDescription: f1Desc) + let face = MovieCards(image: Image("얼굴"), booking: true, movieName: "얼굴", watchedStatus: "20만", movieNameEn: "Face", movieDescription: faceDesc) + let hime = MovieCards(image: Image("모노노케히메"), booking: true, movieName: "모노노케히메", watchedStatus: "20만", movieNameEn: "Princess Mononoke", movieDescription: himeDesc) + let boss = MovieCards(image: Image("보스"), booking: true, movieName: "보스", watchedStatus: "20만", movieNameEn: "The boss", movieDescription: bossDesc) + let yadang = MovieCards(image: Image("야당"), booking: true, movieName: "야당", watchedStatus: "20만", movieNameEn: "Yadang", movieDescription: yadangDesc) + let roses = MovieCards(image: Image("로즈"), booking: true, movieName: "The Roses", watchedStatus: "20만", movieNameEn: "The roses", movieDescription: rosesDesc) + + + + self.movieCards = [azzul, guikal, f1, face, hime, boss, yadang, roses] } diff --git a/week03/Megabox/Views/SingleViews/InfoButtonView.swift b/week03/Megabox/Views/SingleViews/InfoButtonView.swift index 4b3e9c3..4c946e0 100644 --- a/week03/Megabox/Views/SingleViews/InfoButtonView.swift +++ b/week03/Megabox/Views/SingleViews/InfoButtonView.swift @@ -25,7 +25,7 @@ struct InfoButton: View { } else { Rectangle() .frame(height: 3) - .foregroundColor(.clear) + .foregroundColor(.grey02) } } .padding(.vertical, 8) diff --git a/week03/Megabox/Views/SingleViews/MovieBookingView.swift b/week03/Megabox/Views/SingleViews/MovieBookingView.swift new file mode 100644 index 0000000..770ff16 --- /dev/null +++ b/week03/Megabox/Views/SingleViews/MovieBookingView.swift @@ -0,0 +1,219 @@ +import SwiftUI + +struct MovieBookingView: View { + + @StateObject private var viewModel = MovieBookingViewModel() + + + // MARK: - Main Body + var body: some View { + NavigationStack { + + VStack(spacing: 0) { + + HStack { + Text("영화별 예매") + .font(.bold22) + .foregroundColor(.white) + } + .frame(maxWidth: .infinity) + .padding(.top, 31) + .padding(.bottom, 10) + .background(.purple03) + ScrollView + { + + VStack(alignment: .leading, spacing: 23) { + + movieSelectionHeader + moviePostersList + theaterSelectionButtons + + dateSelectionView + } + .padding(.horizontal) + .padding(.top) + } + + + } + + } + } + + // MARK: - UI Components (분리된 서브 뷰) + + /// 1. 선택된 영화 정보를 보여주는 헤더 뷰 + private var movieSelectionHeader: some View { + HStack { + Text("15") + .font(.bold18) + .foregroundColor(.white) + .frame(width: 26, height: 24) + .background(.orange) // 순서 수정 + .cornerRadius(4) + .overlay( + RoundedRectangle(cornerRadius: 4) + .stroke(Color.black, lineWidth: 1) // 100% 검은색 외곽선 + ) + .shadow(color: .black.opacity(0.25), radius: 3, x: 0, y: 2) + + Spacer() + + Text(viewModel.selectedMovie?.movieName ?? "영화를 선택하세요") + .font(.semiBold18) + .frame(width: 238, height: 24, alignment: .leading) + + + Button(action: {}, label: { + Text("전체영화") + .font(.semiBold14) + .foregroundColor(.black) + .padding(.horizontal, 10) + .padding(.vertical, 10) + .frame(width: 69, height: 30) + .overlay( + RoundedRectangle(cornerRadius: 8) + .stroke(Color.grey02, lineWidth: 1) + ) + }) + } + + } + + /// 2. 영화 포스터들을 보여주는 가로 스크롤 뷰 + private var moviePostersList: some View { + ScrollView(.horizontal) { + HStack(spacing: 8) { + ForEach(viewModel.movieCards) { movie in + movie.image + .resizable() + .frame(width: 62, height: 89) + .cornerRadius(10) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(viewModel.selectedMovieID == movie.id ? .purple03 : Color.clear, lineWidth: 4) + ) + .onTapGesture { + withAnimation { + viewModel.selectMovie(id: movie.id) + } + } + } + } + } + + } + + /// 3. 극장 선택 버튼들을 보여주는 뷰 + private var theaterSelectionButtons: some View { + HStack(spacing: 10) { + ForEach(["강남", "홍대", "신촌"], id: \.self) { theaterName in + theaterButton(place: theaterName) + } + } + + } + + + private var dateSelectionView: some View { + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 5) { + ForEach(viewModel.weekDates, id: \.self) { date in + dateCell(for: date) + } + } + } + // 극장이 선택되지 않았다면 전체적으로 반투명하게 처리 + .opacity(viewModel.isDateSelectionEnabled ? 1.0 : 0.4) + // 극장이 선택되지 않았다면 터치 불가 + .disabled(!viewModel.isDateSelectionEnabled) + } + + + //------------------------------------ + private func theaterButton(place: String) -> some View { + + + Button(action: { + + viewModel.selectTheater(name: place) + + + }, label: { + Text(place) + .font(.semiBold16) + .foregroundColor(viewModel.selectedTheaters.contains(place) ? .white : (viewModel.isTheaterButtonEnabled ? .grey05 : .gray)) + .padding(.horizontal, 10) + .padding(.vertical, 10) + .frame(width:55, height: 35) + .background(viewModel.selectedTheaters.contains(place) ? .purple03 : Color.grey01) + .cornerRadius(15) + + + + }).disabled(!viewModel.isTheaterButtonEnabled) + .animation(.easeInOut(duration: 0.2), value: viewModel.selectedTheaters.contains(place)) + .animation(.easeInOut(duration: 0.2), value: viewModel.isTheaterButtonEnabled) + + } + + + private func dateCell(for date: Date) -> some View { + + + VStack(spacing: 4){ + // "9.22" 형식으로 날짜 표시 + Text(date.formatted(.dateTime.day())) + .font(.bold18) + + // "오늘", "내일", "수" 형식으로 요일 표시 + Text(formatWeekday(date)) + .font(.semiBold14) + + } + .padding(.vertical,12) + .padding(.horizontal, 10) + .frame(width: 55, height: 60) + .foregroundColor(viewModel.selectedDate == date ? .white : getWeekdayColor(for: date)) + .background( + RoundedRectangle(cornerRadius: 12) + .fill(viewModel.selectedDate == date ? .purple03: Color.clear) + ) + .onTapGesture { + viewModel.selectDate(date) + } + } + + + private func getWeekdayColor(for date: Date) -> Color { + let calendar = Calendar.current + if calendar.isDateInWeekend(date) { + let weekday = calendar.component(.weekday, from: date) + return weekday == 1 ? .red : .tag // 일요일: 빨강, 토요일: 파랑 + } + return .black // 평일: 검정 + } + + private func formatWeekday(_ date: Date) -> String { + let calendar = Calendar.current + if calendar.isDateInToday(date) { + return "오늘" + } else if calendar.isDateInTomorrow(date) { + return "내일" + } else { + // "월", "화", "수"... 형식으로 변환 + let formatter = DateFormatter() + formatter.locale = Locale(identifier: "ko_KR") + formatter.dateFormat = "E" // "E"는 요일을 한 글자로 표시 + return formatter.string(from: date) + } + } + +} + + +#Preview { + MovieBookingView() +} + diff --git a/week03/Megabox/Views/SingleViews/MovieDetailView.swift b/week03/Megabox/Views/SingleViews/MovieDetailView.swift index 66ba118..39d1341 100644 --- a/week03/Megabox/Views/SingleViews/MovieDetailView.swift +++ b/week03/Megabox/Views/SingleViews/MovieDetailView.swift @@ -7,6 +7,7 @@ struct MovieDetailView: View { @Environment(\.dismiss) private var dismiss let movie: MovieCards + var body: some View { ScrollView{ @@ -85,13 +86,13 @@ struct MovieDetailView: View { .foregroundColor(.grey03) Group{ - text(text: "최고가 되지 못한 전설 VS 최고가 되고 싶은 루키") + text(text: movie.movieDescription.detail1) .padding(.vertical) - text(text: "한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고") - text(text: "한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트).") - text(text: "그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게") - text(text: "레이싱 복귀를 제안받으며 최하위 팀인 APGXP에 합류한다.") + text(text: movie.movieDescription.detail2) + text(text: movie.movieDescription.detail3) + text(text: movie.movieDescription.detail4) + text(text: movie.movieDescription.detail5) } .padding(.horizontal) } @@ -162,8 +163,3 @@ struct MovieDetailView: View { } - - -#Preview { - MovieDetailView(movie: MovieCardsViewModel().movieCards[2]) -} diff --git a/week03/Megabox/Views/SingleViews/UserInfoView.swift b/week03/Megabox/Views/SingleViews/UserInfoView.swift index af5158f..58b46df 100644 --- a/week03/Megabox/Views/SingleViews/UserInfoView.swift +++ b/week03/Megabox/Views/SingleViews/UserInfoView.swift @@ -38,7 +38,6 @@ struct UserInfoView: View { } HStack { - // 👇 makeBackward 함수 호출 대신 Button을 직접 여기에 넣습니다. Button(action: { dismiss() }, label: { diff --git a/week03/Megabox/Views/Tabviews/HomeView.swift b/week03/Megabox/Views/Tabviews/HomeView.swift index d5e3563..4c32034 100644 --- a/week03/Megabox/Views/Tabviews/HomeView.swift +++ b/week03/Megabox/Views/Tabviews/HomeView.swift @@ -6,7 +6,7 @@ struct HomeView: View { //현재 버튼의 상태 저장 @State private var selectedChart: ChartType = .movieChart @State private var viewModel = MovieCardsViewModel() - + var body: some View { diff --git a/week03/Megabox/Views/Tabviews/Tabs.swift b/week03/Megabox/Views/Tabviews/Tabs.swift index 5a828f0..6e09cbf 100644 --- a/week03/Megabox/Views/Tabviews/Tabs.swift +++ b/week03/Megabox/Views/Tabviews/Tabs.swift @@ -3,54 +3,40 @@ import SwiftUI struct Tabs: View { @State private var selectedTab = 0 + // @Environment 프로퍼티는 그대로 유지합니다. @Environment(UserViewModel.self) private var userViewModel - var body: some View { - - TabView(selection: $selectedTab){ + // TabView의 selection 바인딩은 그대로 사용합니다. + TabView(selection: $selectedTab) { + // 1. HomeView 탭 + Tab("홈", systemImage: "house.fill", value: 0) { + HomeView() + } - HomeView() - .tabItem { - Image(systemName: "house.fill") - Text("홈") - } - .tag(0) // 첫 번째 탭의 태그 - - Text("바로 예매") - .tabItem { - Image(systemName: "movieclapper") - Text("바로 예매") - } - .tag(1) // 두 번째 탭의 태그 - - Text("모바일 오더") - .tabItem { - Image(systemName: "popcorn") - Text("모바일오더") - } - .tag(2) // 세 번째 탭의 태그 + // 2. "바로 예매" 탭 + Tab("바로 예매", systemImage: "movieclapper", value: 1) { + Text("바로 예매") + } + + // 3. "모바일 오더" 탭 + Tab("모바일오더", systemImage: "popcorn", value: 2) { + Text("모바일 오더") + } - NavigationStack { - ProfileView() - } - .tabItem { - Image(systemName: "person.fill") - Text("마이 페이지") - } - .tag(3) + // 4. "마이 페이지" 탭 + Tab("마이 페이지", systemImage: "person.fill", value: 3) { + NavigationStack { + ProfileView() } - .navigationBarBackButtonHidden(true) - - - + } + } + // 이 수정자는 TabView에 적용되는 것이므로 그대로 둡니다. + .navigationBarBackButtonHidden(true) } } #Preview { Tabs().environment(UserViewModel()) } - - - From 01db1c4decb945a1523da2c2df3a01d5ba395afd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=B7=E1=84=8C=E1=85=B5=E1=84=8B?= =?UTF-8?q?=E1=85=AD=E1=86=BC?= Date: Sat, 11 Oct 2025 17:38:27 +0900 Subject: [PATCH 2/8] =?UTF-8?q?4=EC=A3=BC=EC=B0=A8=EA=B3=BC=EC=A0=9C(?= =?UTF-8?q?=EB=AF=B8=EC=99=84=EC=84=B1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Megabox.xcodeproj/project.pbxproj | 0 .../project.xcworkspace/contents.xcworkspacedata | 0 .../xcdebugger/Breakpoints_v2.xcbkptlist | 0 .../xcschemes/xcschememanagement.plist | 0 .../AccentColor.colorset/Contents.json | 0 .../AppIcon.appiconset/Contents.json | 0 .../Assets.xcassets/Apple.imageset/Apple.pdf | Bin .../Assets.xcassets/Apple.imageset/Contents.json | 0 .../Assets.xcassets/Button_1.imageset/Button_1.pdf | Bin .../Assets.xcassets/Button_1.imageset/Contents.json | 0 .../Megabox/Assets.xcassets/Contents.json | 0 .../Assets.xcassets/Kakao.imageset/Contents.json | 0 .../Assets.xcassets/Kakao.imageset/Kakao.pdf | Bin .../Assets.xcassets/Naver.imageset/Contents.json | 0 .../Assets.xcassets/Naver.imageset/LoginBtn.pdf | Bin .../Assets.xcassets/arrow.imageset/Contents.json | 0 .../Assets.xcassets/arrow.imageset/arrow.pdf | Bin .../Assets.xcassets/f1.imageset/Contents.json | 0 .../Megabox/Assets.xcassets/f1.imageset/f1.pdf | Bin .../Assets.xcassets/image 2.imageset/Contents.json | 0 .../Assets.xcassets/image 2.imageset/image 2.pdf | Bin .../Assets.xcassets/image 3.imageset/Contents.json | 0 .../Assets.xcassets/image 3.imageset/image 3.pdf | Bin .../meboxLogo 1.imageset/Contents.json | 0 .../meboxLogo 1.imageset/meboxLogo 1.pdf | Bin .../meboxLogo 2.imageset/Contents.json | 0 .../meboxLogo 2.imageset/meboxLogo 1.pdf | Bin .../Assets.xcassets/movie.imageset/Contents.json | 0 .../Assets.xcassets/movie.imageset/movie.pdf | Bin .../moviefeed.imageset/Contents.json | 0 .../moviefeed.imageset/moviefeed.pdf | Bin .../Assets.xcassets/sony.imageset/Contents.json | 0 .../Megabox/Assets.xcassets/sony.imageset/sony.pdf | Bin .../Assets.xcassets/umc 1.imageset/Contents.json | 0 .../Assets.xcassets/umc 1.imageset/umc 1.pdf | Bin .../Contents.json" | 0 ...251\270\354\235\230\354\271\274\353\202\240.pdf" | Bin .../Contents.json" | 0 ...236\245\353\263\204\354\230\210\353\247\244.pdf" | Bin .../Contents.json" | 0 .../\353\241\234\354\246\210.pdf" | Bin .../Contents.json" | 0 ...205\270\354\274\200\355\236\210\353\251\224.pdf" | Bin .../Contents.json" | 0 ...260\224\354\235\274\354\230\244\353\215\224.pdf" | Bin .../Contents.json" | 0 .../\353\263\264\354\212\244.pdf" | Bin .../Contents.json" | 0 .../\354\225\274\353\213\271.pdf" | Bin .../Contents.json" | 0 ...210\230\352\260\200\354\227\206\353\213\244.pdf" | Bin .../Contents.json" | 0 .../\354\226\274\352\265\264.pdf" | Bin .../Contents.json" | 0 ...231\224\353\263\204\354\230\210\353\247\244.pdf" | Bin .../Contents.json" | 0 ...263\204\352\264\200\354\230\210\353\247\244.pdf" | Bin .../Contents.json" | 0 ...12\244\355\204\260 \354\202\254\354\247\204.pdf" | Bin .../Megabox/EnumTypes/ChartType.swift | 0 {week03 => week04}/Megabox/EnumTypes/InfoType.swift | 0 .../Fonts/ColorSets.xcassets/Blue/Contents.json | 0 .../Blue/blue00.colorset/Contents.json | 0 .../Blue/blue01.colorset/Contents.json | 0 .../Blue/blue02.colorset/Contents.json | 0 .../Blue/blue03.colorset/Contents.json | 0 .../Blue/blue04.colorset/Contents.json | 0 .../Blue/blue05.colorset/Contents.json | 0 .../Blue/blue06.colorset/Contents.json | 0 .../Blue/blue07.colorset/Contents.json | 0 .../Blue/blue08.colorset/Contents.json | 0 .../Blue/blue09.colorset/Contents.json | 0 .../Megabox/Fonts/ColorSets.xcassets/Contents.json | 0 .../Fonts/ColorSets.xcassets/Etc/Contents.json | 0 .../Etc/tag.colorset/Contents.json | 0 .../Fonts/ColorSets.xcassets/Grey/Contents.json | 0 .../Grey/grey00.colorset/Contents.json | 0 .../Grey/grey01.colorset/Contents.json | 0 .../Grey/grey02.colorset/Contents.json | 0 .../Grey/grey03.colorset/Contents.json | 0 .../Grey/grey04.colorset/Contents.json | 0 .../Grey/grey05.colorset/Contents.json | 0 .../Grey/grey06.colorset/Contents.json | 0 .../Grey/grey07.colorset/Contents.json | 0 .../Grey/grey08.colorset/Contents.json | 0 .../Grey/grey09.colorset/Contents.json | 0 .../Fonts/ColorSets.xcassets/Purple/Contents.json | 0 .../Purple/purple00.colorset/Contents.json | 0 .../Purple/purple01.colorset/Contents.json | 0 .../Purple/purple02.colorset/Contents.json | 0 .../Purple/purple03.colorset/Contents.json | 0 .../Purple/purple04.colorset/Contents.json | 0 .../Purple/purple05.colorset/Contents.json | 0 .../Purple/purple06.colorset/Contents.json | 0 .../Purple/purple07.colorset/Contents.json | 0 .../Purple/purple08.colorset/Contents.json | 0 .../Purple/purple09.colorset/Contents.json | 0 .../WhiteBlack/Black.colorset/Contents.json | 0 .../ColorSets.xcassets/WhiteBlack/Contents.json | 0 .../WhiteBlack/White.colorset/Contents.json | 0 {week03 => week04}/Megabox/Fonts/Font.swift | 0 .../Megabox/Fonts/Pretendard-Black.otf | Bin .../Megabox/Fonts/Pretendard-Bold.otf | Bin .../Megabox/Fonts/Pretendard-ExtraBold.otf | Bin .../Megabox/Fonts/Pretendard-ExtraLight.otf | Bin .../Megabox/Fonts/Pretendard-Light.ttf | Bin .../Megabox/Fonts/Pretendard-Medium.ttf | Bin .../Megabox/Fonts/Pretendard-Regular.ttf | Bin .../Megabox/Fonts/Pretendard-SemiBold.ttf | Bin .../Megabox/Fonts/Pretendard-Thin.ttf | Bin .../Megabox/Fonts/PretendardVariable.ttf | Bin {week03 => week04}/Megabox/Info.plist | 0 .../Megabox/LoginNavigation/ContentView.swift | 0 {week03 => week04}/Megabox/MegaboxApp.swift | 0 .../Megabox/Model/ColorExtension.swift | 0 {week03 => week04}/Megabox/Model/LoginModel.swift | 0 {week03 => week04}/Megabox/Model/MovieCards.swift | 0 .../Megabox/Model/MovieDescription.swift | 0 .../Megabox/ViewModels/LoginViewModel.swift | 0 .../Megabox/ViewModels/MovieBookingViewModel.swift | 0 .../Megabox/ViewModels/MovieCardsViewModel.swift | 0 .../Megabox/ViewModels/UserViewModel.swift | 0 .../Megabox/Views/SingleViews/InfoButtonView.swift | 0 .../Megabox/Views/SingleViews/LoginView.swift | 0 .../Views/SingleViews/MovieBookingView.swift | 0 .../Megabox/Views/SingleViews/MovieCardView.swift | 0 .../Megabox/Views/SingleViews/MovieDetailView.swift | 0 .../Megabox/Views/SingleViews/SplashView.swift | 0 .../Megabox/Views/SingleViews/UserInfoView.swift | 0 .../Megabox/Views/Tabviews/HomeView.swift | 0 .../Megabox/Views/Tabviews/ProfileView.swift | 0 .../Megabox/Views/Tabviews/Tabs.swift | 0 {week03 => week04}/MegaboxTests/MegaboxTests.swift | 0 .../MegaboxUITests/MegaboxUITests.swift | 0 .../MegaboxUITests/MegaboxUITestsLaunchTests.swift | 0 {week03 => week04}/keyword/.gitkeep | 0 {week03 => week04}/mission/.gitkeep | 0 137 files changed, 0 insertions(+), 0 deletions(-) rename {week03 => week04}/Megabox.xcodeproj/project.pbxproj (100%) rename {week03 => week04}/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename {week03 => week04}/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist (100%) rename {week03 => week04}/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist (100%) rename {week03 => week04}/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/Apple.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/Button_1.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/Kakao.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/Naver.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/arrow.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/f1.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/f1.imageset/f1.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/image 2.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/image 3.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/movie.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/movie.imageset/movie.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/sony.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/sony.imageset/sony.pdf (100%) rename {week03 => week04}/Megabox/Assets.xcassets/umc 1.imageset/Contents.json (100%) rename {week03 => week04}/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf (100%) rename "week03/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/Contents.json" => "week04/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/Contents.json" (100%) rename "week03/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" => "week04/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" (100%) rename "week03/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" => "week04/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" (100%) rename "week03/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" => "week04/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" (100%) rename "week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" => "week04/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" (100%) rename "week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/\353\241\234\354\246\210.pdf" => "week04/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/\353\241\234\354\246\210.pdf" (100%) rename "week03/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/Contents.json" => "week04/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/Contents.json" (100%) rename "week03/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" => "week04/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" (100%) rename "week03/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" => "week04/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" (100%) rename "week03/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" => "week04/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" (100%) rename "week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" => "week04/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" (100%) rename "week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/\353\263\264\354\212\244.pdf" => "week04/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/\353\263\264\354\212\244.pdf" (100%) rename "week03/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/Contents.json" => "week04/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/Contents.json" (100%) rename "week03/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/\354\225\274\353\213\271.pdf" => "week04/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/\354\225\274\353\213\271.pdf" (100%) rename "week03/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/Contents.json" => "week04/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/Contents.json" (100%) rename "week03/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" => "week04/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" (100%) rename "week03/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/Contents.json" => "week04/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/Contents.json" (100%) rename "week03/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/\354\226\274\352\265\264.pdf" => "week04/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/\354\226\274\352\265\264.pdf" (100%) rename "week03/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" => "week04/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" (100%) rename "week03/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" => "week04/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" (100%) rename "week03/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" => "week04/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" (100%) rename "week03/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" => "week04/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" (100%) rename "week03/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" => "week04/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" (100%) rename "week03/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" => "week04/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" (100%) rename {week03 => week04}/Megabox/EnumTypes/ChartType.swift (100%) rename {week03 => week04}/Megabox/EnumTypes/InfoType.swift (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json (100%) rename {week03 => week04}/Megabox/Fonts/Font.swift (100%) rename {week03 => week04}/Megabox/Fonts/Pretendard-Black.otf (100%) rename {week03 => week04}/Megabox/Fonts/Pretendard-Bold.otf (100%) rename {week03 => week04}/Megabox/Fonts/Pretendard-ExtraBold.otf (100%) rename {week03 => week04}/Megabox/Fonts/Pretendard-ExtraLight.otf (100%) rename {week03 => week04}/Megabox/Fonts/Pretendard-Light.ttf (100%) rename {week03 => week04}/Megabox/Fonts/Pretendard-Medium.ttf (100%) rename {week03 => week04}/Megabox/Fonts/Pretendard-Regular.ttf (100%) rename {week03 => week04}/Megabox/Fonts/Pretendard-SemiBold.ttf (100%) rename {week03 => week04}/Megabox/Fonts/Pretendard-Thin.ttf (100%) rename {week03 => week04}/Megabox/Fonts/PretendardVariable.ttf (100%) rename {week03 => week04}/Megabox/Info.plist (100%) rename {week03 => week04}/Megabox/LoginNavigation/ContentView.swift (100%) rename {week03 => week04}/Megabox/MegaboxApp.swift (100%) rename {week03 => week04}/Megabox/Model/ColorExtension.swift (100%) rename {week03 => week04}/Megabox/Model/LoginModel.swift (100%) rename {week03 => week04}/Megabox/Model/MovieCards.swift (100%) rename {week03 => week04}/Megabox/Model/MovieDescription.swift (100%) rename {week03 => week04}/Megabox/ViewModels/LoginViewModel.swift (100%) rename {week03 => week04}/Megabox/ViewModels/MovieBookingViewModel.swift (100%) rename {week03 => week04}/Megabox/ViewModels/MovieCardsViewModel.swift (100%) rename {week03 => week04}/Megabox/ViewModels/UserViewModel.swift (100%) rename {week03 => week04}/Megabox/Views/SingleViews/InfoButtonView.swift (100%) rename {week03 => week04}/Megabox/Views/SingleViews/LoginView.swift (100%) rename {week03 => week04}/Megabox/Views/SingleViews/MovieBookingView.swift (100%) rename {week03 => week04}/Megabox/Views/SingleViews/MovieCardView.swift (100%) rename {week03 => week04}/Megabox/Views/SingleViews/MovieDetailView.swift (100%) rename {week03 => week04}/Megabox/Views/SingleViews/SplashView.swift (100%) rename {week03 => week04}/Megabox/Views/SingleViews/UserInfoView.swift (100%) rename {week03 => week04}/Megabox/Views/Tabviews/HomeView.swift (100%) rename {week03 => week04}/Megabox/Views/Tabviews/ProfileView.swift (100%) rename {week03 => week04}/Megabox/Views/Tabviews/Tabs.swift (100%) rename {week03 => week04}/MegaboxTests/MegaboxTests.swift (100%) rename {week03 => week04}/MegaboxUITests/MegaboxUITests.swift (100%) rename {week03 => week04}/MegaboxUITests/MegaboxUITestsLaunchTests.swift (100%) rename {week03 => week04}/keyword/.gitkeep (100%) rename {week03 => week04}/mission/.gitkeep (100%) diff --git a/week03/Megabox.xcodeproj/project.pbxproj b/week04/Megabox.xcodeproj/project.pbxproj similarity index 100% rename from week03/Megabox.xcodeproj/project.pbxproj rename to week04/Megabox.xcodeproj/project.pbxproj diff --git a/week03/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/week04/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from week03/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to week04/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/week03/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/week04/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist similarity index 100% rename from week03/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist rename to week04/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist diff --git a/week03/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist b/week04/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 100% rename from week03/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist rename to week04/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/week03/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json b/week04/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json rename to week04/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json b/week04/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json rename to week04/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf b/week04/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf rename to week04/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf diff --git a/week03/Megabox/Assets.xcassets/Apple.imageset/Contents.json b/week04/Megabox/Assets.xcassets/Apple.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/Apple.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/Apple.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf b/week04/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf rename to week04/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf diff --git a/week03/Megabox/Assets.xcassets/Button_1.imageset/Contents.json b/week04/Megabox/Assets.xcassets/Button_1.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/Button_1.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/Button_1.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/Contents.json b/week04/Megabox/Assets.xcassets/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/Contents.json rename to week04/Megabox/Assets.xcassets/Contents.json diff --git a/week03/Megabox/Assets.xcassets/Kakao.imageset/Contents.json b/week04/Megabox/Assets.xcassets/Kakao.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/Kakao.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/Kakao.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf b/week04/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf rename to week04/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf diff --git a/week03/Megabox/Assets.xcassets/Naver.imageset/Contents.json b/week04/Megabox/Assets.xcassets/Naver.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/Naver.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/Naver.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf b/week04/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf rename to week04/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf diff --git a/week03/Megabox/Assets.xcassets/arrow.imageset/Contents.json b/week04/Megabox/Assets.xcassets/arrow.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/arrow.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/arrow.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf b/week04/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf rename to week04/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf diff --git a/week03/Megabox/Assets.xcassets/f1.imageset/Contents.json b/week04/Megabox/Assets.xcassets/f1.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/f1.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/f1.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/f1.imageset/f1.pdf b/week04/Megabox/Assets.xcassets/f1.imageset/f1.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/f1.imageset/f1.pdf rename to week04/Megabox/Assets.xcassets/f1.imageset/f1.pdf diff --git a/week03/Megabox/Assets.xcassets/image 2.imageset/Contents.json b/week04/Megabox/Assets.xcassets/image 2.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/image 2.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/image 2.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf b/week04/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf rename to week04/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf diff --git a/week03/Megabox/Assets.xcassets/image 3.imageset/Contents.json b/week04/Megabox/Assets.xcassets/image 3.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/image 3.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/image 3.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf b/week04/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf rename to week04/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf diff --git a/week03/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json b/week04/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf b/week04/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf rename to week04/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf diff --git a/week03/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json b/week04/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf b/week04/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf rename to week04/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf diff --git a/week03/Megabox/Assets.xcassets/movie.imageset/Contents.json b/week04/Megabox/Assets.xcassets/movie.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/movie.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/movie.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/movie.imageset/movie.pdf b/week04/Megabox/Assets.xcassets/movie.imageset/movie.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/movie.imageset/movie.pdf rename to week04/Megabox/Assets.xcassets/movie.imageset/movie.pdf diff --git a/week03/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json b/week04/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf b/week04/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf rename to week04/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf diff --git a/week03/Megabox/Assets.xcassets/sony.imageset/Contents.json b/week04/Megabox/Assets.xcassets/sony.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/sony.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/sony.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/sony.imageset/sony.pdf b/week04/Megabox/Assets.xcassets/sony.imageset/sony.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/sony.imageset/sony.pdf rename to week04/Megabox/Assets.xcassets/sony.imageset/sony.pdf diff --git a/week03/Megabox/Assets.xcassets/umc 1.imageset/Contents.json b/week04/Megabox/Assets.xcassets/umc 1.imageset/Contents.json similarity index 100% rename from week03/Megabox/Assets.xcassets/umc 1.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/umc 1.imageset/Contents.json diff --git a/week03/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf b/week04/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf similarity index 100% rename from week03/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf rename to week04/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf diff --git "a/week03/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/Contents.json" "b/week04/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/Contents.json" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/Contents.json" rename to "week04/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/Contents.json" diff --git "a/week03/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" "b/week04/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" rename to "week04/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" diff --git "a/week03/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" "b/week04/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" rename to "week04/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" diff --git "a/week03/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" "b/week04/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" rename to "week04/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" diff --git "a/week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" "b/week04/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" rename to "week04/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" diff --git "a/week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/\353\241\234\354\246\210.pdf" "b/week04/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/\353\241\234\354\246\210.pdf" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/\353\241\234\354\246\210.pdf" rename to "week04/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/\353\241\234\354\246\210.pdf" diff --git "a/week03/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/Contents.json" "b/week04/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/Contents.json" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/Contents.json" rename to "week04/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/Contents.json" diff --git "a/week03/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" "b/week04/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" rename to "week04/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" diff --git "a/week03/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" "b/week04/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" rename to "week04/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" diff --git "a/week03/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" "b/week04/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" rename to "week04/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" diff --git "a/week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" "b/week04/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" rename to "week04/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" diff --git "a/week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/\353\263\264\354\212\244.pdf" "b/week04/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/\353\263\264\354\212\244.pdf" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/\353\263\264\354\212\244.pdf" rename to "week04/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/\353\263\264\354\212\244.pdf" diff --git "a/week03/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/Contents.json" "b/week04/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/Contents.json" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/Contents.json" rename to "week04/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/Contents.json" diff --git "a/week03/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/\354\225\274\353\213\271.pdf" "b/week04/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/\354\225\274\353\213\271.pdf" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/\354\225\274\353\213\271.pdf" rename to "week04/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/\354\225\274\353\213\271.pdf" diff --git "a/week03/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/Contents.json" "b/week04/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/Contents.json" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/Contents.json" rename to "week04/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/Contents.json" diff --git "a/week03/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" "b/week04/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" rename to "week04/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" diff --git "a/week03/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/Contents.json" "b/week04/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/Contents.json" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/Contents.json" rename to "week04/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/Contents.json" diff --git "a/week03/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/\354\226\274\352\265\264.pdf" "b/week04/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/\354\226\274\352\265\264.pdf" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/\354\226\274\352\265\264.pdf" rename to "week04/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/\354\226\274\352\265\264.pdf" diff --git "a/week03/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" "b/week04/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" rename to "week04/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" diff --git "a/week03/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" "b/week04/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" rename to "week04/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" diff --git "a/week03/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" "b/week04/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" rename to "week04/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" diff --git "a/week03/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" "b/week04/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" rename to "week04/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" diff --git "a/week03/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" "b/week04/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" rename to "week04/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" diff --git "a/week03/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" "b/week04/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" similarity index 100% rename from "week03/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" rename to "week04/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" diff --git a/week03/Megabox/EnumTypes/ChartType.swift b/week04/Megabox/EnumTypes/ChartType.swift similarity index 100% rename from week03/Megabox/EnumTypes/ChartType.swift rename to week04/Megabox/EnumTypes/ChartType.swift diff --git a/week03/Megabox/EnumTypes/InfoType.swift b/week04/Megabox/EnumTypes/InfoType.swift similarity index 100% rename from week03/Megabox/EnumTypes/InfoType.swift rename to week04/Megabox/EnumTypes/InfoType.swift diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json diff --git a/week03/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json b/week04/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json similarity index 100% rename from week03/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json rename to week04/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json diff --git a/week03/Megabox/Fonts/Font.swift b/week04/Megabox/Fonts/Font.swift similarity index 100% rename from week03/Megabox/Fonts/Font.swift rename to week04/Megabox/Fonts/Font.swift diff --git a/week03/Megabox/Fonts/Pretendard-Black.otf b/week04/Megabox/Fonts/Pretendard-Black.otf similarity index 100% rename from week03/Megabox/Fonts/Pretendard-Black.otf rename to week04/Megabox/Fonts/Pretendard-Black.otf diff --git a/week03/Megabox/Fonts/Pretendard-Bold.otf b/week04/Megabox/Fonts/Pretendard-Bold.otf similarity index 100% rename from week03/Megabox/Fonts/Pretendard-Bold.otf rename to week04/Megabox/Fonts/Pretendard-Bold.otf diff --git a/week03/Megabox/Fonts/Pretendard-ExtraBold.otf b/week04/Megabox/Fonts/Pretendard-ExtraBold.otf similarity index 100% rename from week03/Megabox/Fonts/Pretendard-ExtraBold.otf rename to week04/Megabox/Fonts/Pretendard-ExtraBold.otf diff --git a/week03/Megabox/Fonts/Pretendard-ExtraLight.otf b/week04/Megabox/Fonts/Pretendard-ExtraLight.otf similarity index 100% rename from week03/Megabox/Fonts/Pretendard-ExtraLight.otf rename to week04/Megabox/Fonts/Pretendard-ExtraLight.otf diff --git a/week03/Megabox/Fonts/Pretendard-Light.ttf b/week04/Megabox/Fonts/Pretendard-Light.ttf similarity index 100% rename from week03/Megabox/Fonts/Pretendard-Light.ttf rename to week04/Megabox/Fonts/Pretendard-Light.ttf diff --git a/week03/Megabox/Fonts/Pretendard-Medium.ttf b/week04/Megabox/Fonts/Pretendard-Medium.ttf similarity index 100% rename from week03/Megabox/Fonts/Pretendard-Medium.ttf rename to week04/Megabox/Fonts/Pretendard-Medium.ttf diff --git a/week03/Megabox/Fonts/Pretendard-Regular.ttf b/week04/Megabox/Fonts/Pretendard-Regular.ttf similarity index 100% rename from week03/Megabox/Fonts/Pretendard-Regular.ttf rename to week04/Megabox/Fonts/Pretendard-Regular.ttf diff --git a/week03/Megabox/Fonts/Pretendard-SemiBold.ttf b/week04/Megabox/Fonts/Pretendard-SemiBold.ttf similarity index 100% rename from week03/Megabox/Fonts/Pretendard-SemiBold.ttf rename to week04/Megabox/Fonts/Pretendard-SemiBold.ttf diff --git a/week03/Megabox/Fonts/Pretendard-Thin.ttf b/week04/Megabox/Fonts/Pretendard-Thin.ttf similarity index 100% rename from week03/Megabox/Fonts/Pretendard-Thin.ttf rename to week04/Megabox/Fonts/Pretendard-Thin.ttf diff --git a/week03/Megabox/Fonts/PretendardVariable.ttf b/week04/Megabox/Fonts/PretendardVariable.ttf similarity index 100% rename from week03/Megabox/Fonts/PretendardVariable.ttf rename to week04/Megabox/Fonts/PretendardVariable.ttf diff --git a/week03/Megabox/Info.plist b/week04/Megabox/Info.plist similarity index 100% rename from week03/Megabox/Info.plist rename to week04/Megabox/Info.plist diff --git a/week03/Megabox/LoginNavigation/ContentView.swift b/week04/Megabox/LoginNavigation/ContentView.swift similarity index 100% rename from week03/Megabox/LoginNavigation/ContentView.swift rename to week04/Megabox/LoginNavigation/ContentView.swift diff --git a/week03/Megabox/MegaboxApp.swift b/week04/Megabox/MegaboxApp.swift similarity index 100% rename from week03/Megabox/MegaboxApp.swift rename to week04/Megabox/MegaboxApp.swift diff --git a/week03/Megabox/Model/ColorExtension.swift b/week04/Megabox/Model/ColorExtension.swift similarity index 100% rename from week03/Megabox/Model/ColorExtension.swift rename to week04/Megabox/Model/ColorExtension.swift diff --git a/week03/Megabox/Model/LoginModel.swift b/week04/Megabox/Model/LoginModel.swift similarity index 100% rename from week03/Megabox/Model/LoginModel.swift rename to week04/Megabox/Model/LoginModel.swift diff --git a/week03/Megabox/Model/MovieCards.swift b/week04/Megabox/Model/MovieCards.swift similarity index 100% rename from week03/Megabox/Model/MovieCards.swift rename to week04/Megabox/Model/MovieCards.swift diff --git a/week03/Megabox/Model/MovieDescription.swift b/week04/Megabox/Model/MovieDescription.swift similarity index 100% rename from week03/Megabox/Model/MovieDescription.swift rename to week04/Megabox/Model/MovieDescription.swift diff --git a/week03/Megabox/ViewModels/LoginViewModel.swift b/week04/Megabox/ViewModels/LoginViewModel.swift similarity index 100% rename from week03/Megabox/ViewModels/LoginViewModel.swift rename to week04/Megabox/ViewModels/LoginViewModel.swift diff --git a/week03/Megabox/ViewModels/MovieBookingViewModel.swift b/week04/Megabox/ViewModels/MovieBookingViewModel.swift similarity index 100% rename from week03/Megabox/ViewModels/MovieBookingViewModel.swift rename to week04/Megabox/ViewModels/MovieBookingViewModel.swift diff --git a/week03/Megabox/ViewModels/MovieCardsViewModel.swift b/week04/Megabox/ViewModels/MovieCardsViewModel.swift similarity index 100% rename from week03/Megabox/ViewModels/MovieCardsViewModel.swift rename to week04/Megabox/ViewModels/MovieCardsViewModel.swift diff --git a/week03/Megabox/ViewModels/UserViewModel.swift b/week04/Megabox/ViewModels/UserViewModel.swift similarity index 100% rename from week03/Megabox/ViewModels/UserViewModel.swift rename to week04/Megabox/ViewModels/UserViewModel.swift diff --git a/week03/Megabox/Views/SingleViews/InfoButtonView.swift b/week04/Megabox/Views/SingleViews/InfoButtonView.swift similarity index 100% rename from week03/Megabox/Views/SingleViews/InfoButtonView.swift rename to week04/Megabox/Views/SingleViews/InfoButtonView.swift diff --git a/week03/Megabox/Views/SingleViews/LoginView.swift b/week04/Megabox/Views/SingleViews/LoginView.swift similarity index 100% rename from week03/Megabox/Views/SingleViews/LoginView.swift rename to week04/Megabox/Views/SingleViews/LoginView.swift diff --git a/week03/Megabox/Views/SingleViews/MovieBookingView.swift b/week04/Megabox/Views/SingleViews/MovieBookingView.swift similarity index 100% rename from week03/Megabox/Views/SingleViews/MovieBookingView.swift rename to week04/Megabox/Views/SingleViews/MovieBookingView.swift diff --git a/week03/Megabox/Views/SingleViews/MovieCardView.swift b/week04/Megabox/Views/SingleViews/MovieCardView.swift similarity index 100% rename from week03/Megabox/Views/SingleViews/MovieCardView.swift rename to week04/Megabox/Views/SingleViews/MovieCardView.swift diff --git a/week03/Megabox/Views/SingleViews/MovieDetailView.swift b/week04/Megabox/Views/SingleViews/MovieDetailView.swift similarity index 100% rename from week03/Megabox/Views/SingleViews/MovieDetailView.swift rename to week04/Megabox/Views/SingleViews/MovieDetailView.swift diff --git a/week03/Megabox/Views/SingleViews/SplashView.swift b/week04/Megabox/Views/SingleViews/SplashView.swift similarity index 100% rename from week03/Megabox/Views/SingleViews/SplashView.swift rename to week04/Megabox/Views/SingleViews/SplashView.swift diff --git a/week03/Megabox/Views/SingleViews/UserInfoView.swift b/week04/Megabox/Views/SingleViews/UserInfoView.swift similarity index 100% rename from week03/Megabox/Views/SingleViews/UserInfoView.swift rename to week04/Megabox/Views/SingleViews/UserInfoView.swift diff --git a/week03/Megabox/Views/Tabviews/HomeView.swift b/week04/Megabox/Views/Tabviews/HomeView.swift similarity index 100% rename from week03/Megabox/Views/Tabviews/HomeView.swift rename to week04/Megabox/Views/Tabviews/HomeView.swift diff --git a/week03/Megabox/Views/Tabviews/ProfileView.swift b/week04/Megabox/Views/Tabviews/ProfileView.swift similarity index 100% rename from week03/Megabox/Views/Tabviews/ProfileView.swift rename to week04/Megabox/Views/Tabviews/ProfileView.swift diff --git a/week03/Megabox/Views/Tabviews/Tabs.swift b/week04/Megabox/Views/Tabviews/Tabs.swift similarity index 100% rename from week03/Megabox/Views/Tabviews/Tabs.swift rename to week04/Megabox/Views/Tabviews/Tabs.swift diff --git a/week03/MegaboxTests/MegaboxTests.swift b/week04/MegaboxTests/MegaboxTests.swift similarity index 100% rename from week03/MegaboxTests/MegaboxTests.swift rename to week04/MegaboxTests/MegaboxTests.swift diff --git a/week03/MegaboxUITests/MegaboxUITests.swift b/week04/MegaboxUITests/MegaboxUITests.swift similarity index 100% rename from week03/MegaboxUITests/MegaboxUITests.swift rename to week04/MegaboxUITests/MegaboxUITests.swift diff --git a/week03/MegaboxUITests/MegaboxUITestsLaunchTests.swift b/week04/MegaboxUITests/MegaboxUITestsLaunchTests.swift similarity index 100% rename from week03/MegaboxUITests/MegaboxUITestsLaunchTests.swift rename to week04/MegaboxUITests/MegaboxUITestsLaunchTests.swift diff --git a/week03/keyword/.gitkeep b/week04/keyword/.gitkeep similarity index 100% rename from week03/keyword/.gitkeep rename to week04/keyword/.gitkeep diff --git a/week03/mission/.gitkeep b/week04/mission/.gitkeep similarity index 100% rename from week03/mission/.gitkeep rename to week04/mission/.gitkeep From 6ea98bcbd21ed6428c4ab7ef8e7dd954ac1da328 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=B7=E1=84=8C=E1=85=B5=E1=84=8B?= =?UTF-8?q?=E1=85=AD=E1=86=BC?= Date: Fri, 31 Oct 2025 00:18:09 +0900 Subject: [PATCH 3/8] =?UTF-8?q?5=EC=A3=BC=EC=B0=A8=20=EA=B3=BC=EC=A0=9C?= =?UTF-8?q?=EC=A4=91=20Race=20Condition=20=EB=B0=9C=EC=83=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../m-001.imageset/Contents.json | 0 ...0\352\260\200\354\227\206\353\213\244.pdf" | Bin .../Contents.json | 0 .../{f1.imageset => m-002.imageset}/f1.pdf | Bin .../m-003.imageset/Contents.json | 0 ...0\354\235\230\354\271\274\353\202\240.pdf" | Bin .../m-004.imageset/Contents.json | 0 .../\354\226\274\352\265\264.pdf" | Bin .../m-005.imageset/Contents.json | 0 ...0\354\274\200\355\236\210\353\251\224.pdf" | Bin .../m-006.imageset/Contents.json | 0 .../\353\263\264\354\212\244.pdf" | Bin .../m-007.imageset/Contents.json | 0 .../\354\225\274\353\213\271.pdf" | Bin .../m-008.imageset/Contents.json | 0 .../\353\241\234\354\246\210.pdf" | Bin week04/Megabox/JSON/MovieSchedule.json | 385 ++++++++++++++++++ week04/Megabox/Model/DTO/APIResponseDTO.swift | 167 ++++++++ week04/Megabox/Model/MovieCards.swift | 2 +- week04/Megabox/Model/MovieDescription.swift | 11 +- week04/Megabox/Model/Theater.swift | 25 ++ .../ViewModels/MovieBookingViewModel.swift | 276 +++++++++++-- .../ViewModels/MovieCardsViewModel.swift | 41 +- .../{ => MovieView}/MovieBookingView.swift | 190 +++++++-- .../{ => MovieView}/MovieCardView.swift | 0 .../{ => MovieView}/MovieDetailView.swift | 12 +- .../MovieView/MovieSheetView.swift | 127 ++++++ week04/Megabox/Views/Tabviews/Tabs.swift | 4 +- 28 files changed, 1135 insertions(+), 105 deletions(-) rename "week04/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/Contents.json" => week04/Megabox/Assets.xcassets/m-001.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" => "week04/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" (100%) rename week04/Megabox/Assets.xcassets/{f1.imageset => m-002.imageset}/Contents.json (100%) rename week04/Megabox/Assets.xcassets/{f1.imageset => m-002.imageset}/f1.pdf (100%) rename "week04/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/Contents.json" => week04/Megabox/Assets.xcassets/m-003.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" => "week04/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" (100%) rename "week04/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/Contents.json" => week04/Megabox/Assets.xcassets/m-004.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/\354\226\274\352\265\264.pdf" => "week04/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" (100%) rename "week04/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/Contents.json" => week04/Megabox/Assets.xcassets/m-005.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" => "week04/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" (100%) rename "week04/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" => week04/Megabox/Assets.xcassets/m-006.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/\353\263\264\354\212\244.pdf" => "week04/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" (100%) rename "week04/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/Contents.json" => week04/Megabox/Assets.xcassets/m-007.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/\354\225\274\353\213\271.pdf" => "week04/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" (100%) rename "week04/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" => week04/Megabox/Assets.xcassets/m-008.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/\353\241\234\354\246\210.pdf" => "week04/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" (100%) create mode 100644 week04/Megabox/JSON/MovieSchedule.json create mode 100644 week04/Megabox/Model/DTO/APIResponseDTO.swift create mode 100644 week04/Megabox/Model/Theater.swift rename week04/Megabox/Views/SingleViews/{ => MovieView}/MovieBookingView.swift (51%) rename week04/Megabox/Views/SingleViews/{ => MovieView}/MovieCardView.swift (100%) rename week04/Megabox/Views/SingleViews/{ => MovieView}/MovieDetailView.swift (91%) create mode 100644 week04/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift diff --git "a/week04/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/Contents.json" b/week04/Megabox/Assets.xcassets/m-001.imageset/Contents.json similarity index 100% rename from "week04/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/Contents.json" rename to week04/Megabox/Assets.xcassets/m-001.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" "b/week04/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" rename to "week04/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" diff --git a/week04/Megabox/Assets.xcassets/f1.imageset/Contents.json b/week04/Megabox/Assets.xcassets/m-002.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/f1.imageset/Contents.json rename to week04/Megabox/Assets.xcassets/m-002.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/f1.imageset/f1.pdf b/week04/Megabox/Assets.xcassets/m-002.imageset/f1.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/f1.imageset/f1.pdf rename to week04/Megabox/Assets.xcassets/m-002.imageset/f1.pdf diff --git "a/week04/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/Contents.json" b/week04/Megabox/Assets.xcassets/m-003.imageset/Contents.json similarity index 100% rename from "week04/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/Contents.json" rename to week04/Megabox/Assets.xcassets/m-003.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" "b/week04/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" rename to "week04/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" diff --git "a/week04/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/Contents.json" b/week04/Megabox/Assets.xcassets/m-004.imageset/Contents.json similarity index 100% rename from "week04/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/Contents.json" rename to week04/Megabox/Assets.xcassets/m-004.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/\354\226\274\352\265\264.pdf" "b/week04/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\354\226\274\352\265\264.imageset/\354\226\274\352\265\264.pdf" rename to "week04/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" diff --git "a/week04/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/Contents.json" b/week04/Megabox/Assets.xcassets/m-005.imageset/Contents.json similarity index 100% rename from "week04/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/Contents.json" rename to week04/Megabox/Assets.xcassets/m-005.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" "b/week04/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" rename to "week04/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" diff --git "a/week04/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" b/week04/Megabox/Assets.xcassets/m-006.imageset/Contents.json similarity index 100% rename from "week04/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/Contents.json" rename to week04/Megabox/Assets.xcassets/m-006.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/\353\263\264\354\212\244.pdf" "b/week04/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\353\263\264\354\212\244.imageset/\353\263\264\354\212\244.pdf" rename to "week04/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" diff --git "a/week04/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/Contents.json" b/week04/Megabox/Assets.xcassets/m-007.imageset/Contents.json similarity index 100% rename from "week04/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/Contents.json" rename to week04/Megabox/Assets.xcassets/m-007.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/\354\225\274\353\213\271.pdf" "b/week04/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\354\225\274\353\213\271.imageset/\354\225\274\353\213\271.pdf" rename to "week04/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" diff --git "a/week04/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" b/week04/Megabox/Assets.xcassets/m-008.imageset/Contents.json similarity index 100% rename from "week04/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/Contents.json" rename to week04/Megabox/Assets.xcassets/m-008.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/\353\241\234\354\246\210.pdf" "b/week04/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\353\241\234\354\246\210.imageset/\353\241\234\354\246\210.pdf" rename to "week04/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" diff --git a/week04/Megabox/JSON/MovieSchedule.json b/week04/Megabox/JSON/MovieSchedule.json new file mode 100644 index 0000000..b95dbe7 --- /dev/null +++ b/week04/Megabox/JSON/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/week04/Megabox/Model/DTO/APIResponseDTO.swift b/week04/Megabox/Model/DTO/APIResponseDTO.swift new file mode 100644 index 0000000..f27138d --- /dev/null +++ b/week04/Megabox/Model/DTO/APIResponseDTO.swift @@ -0,0 +1,167 @@ +import Foundation +import SwiftUI +struct APIResponseDTO: Codable{ + + let status: String + let message: String + let data: MovieData + + +} + +struct MovieData: Codable{ + + let movies: [MovieDTO] + + + +} + +struct MovieDTO: Codable{ + + let id: String //--- id + let title: String //-- movieName + let age_rating: String + let schedules: [MovieInfoDTO] + + + +} +struct MovieInfoDTO: Codable{ + + + let date: String + let areas: [MovieAreaDTO] + + + +} +struct MovieAreaDTO: Codable{ + let area: String // --theaterName + let items: [MovieItemsDTO] + +} + +struct MovieItemsDTO: Codable{ + + let auditorium: String // -- screenName + let format: String // -- format + let showtimes: [ShowTimesDTO] + + +} +struct ShowTimesDTO: Codable{ + + let start: String // -- startTime + let end: String // -- endTime + let available: Int //-- remainingSeats + let total: Int // -- totalSeats + + + +} +//----------------- + +extension ShowTimesDTO { + // ShowTimesDTO(DTO) -> Time(Domain) + func toDomain() -> Time { + return Time( + // id는 Time 모델이 자동으로 생성 + startTime: self.start, + endTime: "~\(self.end)", // 도메인 모델의 주석(~13:58)을 참고 + remainingSeats: self.available, // DTO -> Domain + totalSeats: self.total // DTO -> Domain + ) + } +} +extension MovieItemsDTO { + // MovieItemsDTO(DTO) -> ScreenSchedule(Domain) + func toDomain() -> ScreenSchedule { + return ScreenSchedule( + // id는 ScreenSchedule 모델이 자동으로 생성 + screenName: self.auditorium, // DTO의 auditorium -> Domain의 screenName + format: self.format, + //(1번 함수 재사용) + times: self.showtimes.map { $0.toDomain() } + ) + } +} +extension MovieAreaDTO { + // MovieAreaDTO(DTO) -> TheaterSchedule(Domain) + func toDomain() -> TheaterSchedule { + return TheaterSchedule( + // id는 TheaterSchedule 모델이 자동으로 생성 + theaterName: self.area, // DTO의 area -> Domain의 theaterName + // DTO의 [MovieItemsDTO] 배열을 + // Domain의 [ScreenSchedule] 배열로 변환 (2번 함수 재사용) + screens: self.items.map { $0.toDomain() } + ) + } +} + +extension MovieInfoDTO{ + + + + +} +// APIResponseDTO.swift 파일에 이미 정의된 매퍼 +extension MovieDTO { + private func fetchLocalDescription(for movieID: String) -> MovieDescription { + + // 원래는 뷰모델에서 관리했는데 이 설명이 jSON에는 없는 데이터이므로 여기에서 관리 + + let localData: [String: MovieDescription] = [ + + "m-001": MovieDescription(details: [ + "어쩔 수 없는 상황에 처한", + "그들의 이야기" + ]), + "m-002": MovieDescription(details: [ + "귀멸의 칼날, 새로운 이야기", + "무한성에서의 최종 결전" + ]), + "m-003": MovieDescription(details: [ + "최고가 되지 못한 전설 VS 최고가 되고 싶은 루키", + "한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고", + "한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트).", + "그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게", + "레이싱 복귀를 제안받으며 최하위 팀인 APGXP에 합류한다." + ]), + "m-004": MovieDescription(details: [ + "얼굴" + ]), + "m-005": MovieDescription(details: [ + "히메" + ]), + "m-006": MovieDescription(details: [ + "보스" + ]), + "m-007": MovieDescription(details: [ + "야당" + ]), + "m-008": MovieDescription(details: [ + "장미" + ]), + + ] + + // movieID에 해당하는 설명을 반환하고, 없으면 빈 설명을 반환 + return localData[movieID] ?? MovieDescription(details: []) + } + // MovieDTO(DTO) -> MovieCards(Domain) + func toDomainCard() -> MovieCards { + let description = fetchLocalDescription(for: self.id) + return MovieCards( + id: self.id, + image: Image(self.id), // DTO의 "m-001" ID로 에셋 이미지 + booking: true, + movieName: self.title, // DTO.title -> Domain.movieName + watchedStatus: "01", // DTO에 없는 정보 -> 앱의 비즈니스 로직 + movieNameEn: "나중에", // DTO에 없는 정보 -> 앱의 비즈니스 로직 + movieDescription: description// 별도 정의 필요 + ) + } + + +} diff --git a/week04/Megabox/Model/MovieCards.swift b/week04/Megabox/Model/MovieCards.swift index 63b45d6..e040e9c 100644 --- a/week04/Megabox/Model/MovieCards.swift +++ b/week04/Megabox/Model/MovieCards.swift @@ -4,7 +4,7 @@ import Foundation struct MovieCards: Identifiable{ - let id = UUID() + let id : String var image: Image var booking: Bool var movieName: String diff --git a/week04/Megabox/Model/MovieDescription.swift b/week04/Megabox/Model/MovieDescription.swift index e08a35b..43c9c40 100644 --- a/week04/Megabox/Model/MovieDescription.swift +++ b/week04/Megabox/Model/MovieDescription.swift @@ -1,14 +1,7 @@ import SwiftUI import Foundation -struct MovieDescription: Identifiable{ - +struct MovieDescription: Identifiable { let id = UUID() - let detail1: String - let detail2: String - let detail3: String - let detail4: String - let detail5: String - - + let details: [String] } diff --git a/week04/Megabox/Model/Theater.swift b/week04/Megabox/Model/Theater.swift new file mode 100644 index 0000000..5f0d111 --- /dev/null +++ b/week04/Megabox/Model/Theater.swift @@ -0,0 +1,25 @@ +import Foundation + +// 이미지 레이아웃에 필요한 모든 정보를 담도록 모델을 변경합니다. +struct Time: Identifiable { + let id = UUID() + let startTime: String // 예: "11:30" + let endTime: String // 예: "~13:58" + let remainingSeats: Int // 예: 109 + let totalSeats: Int // 예: 116 +} + +/// "크리클라이너 1관" 처럼 상영관 하나의 정보를 담는 모델 +struct ScreenSchedule: Identifiable { + let id = UUID() + let screenName: String // "크리클라이너 1관" + let format: String // "2D" + let times: [Time] // 이 상영관의 시간표 목록 +} + +/// "강남" 극장처럼, 여러 상영관을 보유하는 모델 +struct TheaterSchedule: Identifiable { + let id = UUID() + let theaterName: String // "강남" + let screens: [ScreenSchedule] // 이 극장의 상영관 목록 +} diff --git a/week04/Megabox/ViewModels/MovieBookingViewModel.swift b/week04/Megabox/ViewModels/MovieBookingViewModel.swift index 41f45cb..b235015 100644 --- a/week04/Megabox/ViewModels/MovieBookingViewModel.swift +++ b/week04/Megabox/ViewModels/MovieBookingViewModel.swift @@ -7,55 +7,186 @@ class MovieBookingViewModel: ObservableObject { // UI와 관련된 데이터들 @Published var movieCards: [MovieCards] = [] - @Published var selectedMovieID: UUID? = nil + @Published var selectedMovieID: String? + @Published var isTheaterButtonEnabled: Bool = false @Published var selectedTheaters: [String] = [] @Published var weekDates: [Date] = [] @Published var selectedDate: Date? = nil - @Published var isDateSelectionEnabled: Bool = false + @Published var isAllSelected: Bool = false + @Published var schedules: [TheaterSchedule] = [] + + @Published var searchText = "" + @Published var filteredMovies: [MovieCards] = [] + @Published var isSearching: Bool = false + + @Published var allMovieDTOs: [MovieDTO] = [] + + private var cancellables = Set() + var selectedMovie: MovieCards? { movieCards.first { $0.id == selectedMovieID } } init() { - loadMovieData() - generateDatesForWeek() - + + loadDataFromJSON() setupButtonStateSubscription() setupDateSelectionSubscription() + + setupTimeSelectionSubscription() + + setupSearchSubscription() + + } + + // MovieBookingViewModel.swift + private func loadDataFromJSON() { + + // 1. ⭐️ 모든 영화를 담을 임시 배열을 만듭니다. + var allLoadedMovies: [MovieCards] = [] + + // 2. JSON 데이터 로드 및 디코딩 + if let url = Bundle.main.url(forResource: "MovieSchedule", withExtension: "json"), + let data = try? Data(contentsOf: url) { + + + do { + let response = try JSONDecoder().decode(APIResponseDTO.self, from: data) + self.allMovieDTOs = response.data.movies + + // 3. ⭐️ JSON 영화 3개를 매핑하여 임시 배열에 추가 + let jsonMovies = self.allMovieDTOs.map { $0.toDomainCard() } + allLoadedMovies.append(contentsOf: jsonMovies) + + } catch { + print("JSON Decoding error: \(error)") + // 디코딩에 실패해도 4번의 하드코딩 데이터는 로드됩니다. + } + } + + // 4. ⭐️ JSON에 없는 5개의 하드코딩 영화를 정의합니다. + // (기존 loadMovieData에서 복사해 온 코드) + let faceDesc = MovieDescription(details: []) + let himeDesc = MovieDescription(details: []) + let bossDesc = MovieDescription(details: []) + let yadangDesc = MovieDescription(details: []) + let rosesDesc = MovieDescription(details: []) + + let face = MovieCards(id: "m-004", image: Image("m-004"), booking: true, movieName: "얼굴", watchedStatus: "20만", movieNameEn: "Face", movieDescription: faceDesc) + let hime = MovieCards(id: "m-005", image: Image("m-005"), booking: true, movieName: "모노노케히메", watchedStatus: "20만", movieNameEn: "Princess Mononoke", movieDescription: himeDesc) + let boss = MovieCards(id: "m-006", image: Image("m-006"), booking: true, movieName: "보스", watchedStatus: "20만", movieNameEn: "The boss", movieDescription: bossDesc) + let yadang = MovieCards(id: "m-007", image: Image("m-007"), booking: true, movieName: "야당", watchedStatus: "20만", movieNameEn: "Yadang", movieDescription: yadangDesc) + let roses = MovieCards(id: "m-008", image: Image("m-008"), booking: true, movieName: "The Roses", watchedStatus: "20만", movieNameEn: "The roses", movieDescription: rosesDesc) + + // 5. ⭐️ 하드코딩 영화 5개를 임시 배열에 "추가"합니다. + allLoadedMovies.append(contentsOf: [face, hime, boss, yadang, roses]) + + // 6. ⭐️ JSON 3개 + 하드코딩 5개 = 총 8개의 영화를 @Published 프로퍼티에 할당합니다. + self.movieCards = allLoadedMovies } private func setupButtonStateSubscription() { $selectedMovieID .map { movieID in return movieID != nil - } .assign(to: &$isTheaterButtonEnabled) + } .assign(to: &$isTheaterButtonEnabled) //이걸 true로 변경 } private func setupDateSelectionSubscription() { $selectedTheaters - // selectedTheaters 배열이 비어있지 않으면 true, 비어있으면 false 반환 + // selectedTheaters 에 변화가 생겼을 시 .map { !$0.isEmpty } - // 그 결과를 isDateSelectionEnabled에 할당 + // isDateSelectionEnable의 상태를 변경 .assign(to: &$isDateSelectionEnabled) } + private func setupTimeSelectionSubscription(){ + Publishers.CombineLatest3($selectedMovieID, $selectedTheaters, $selectedDate) + .map{ (movieID, theaters, date) in + + return movieID != nil && !theaters.isEmpty && date != nil + + + } + //하나의 sink 블록 안에서 + .sink { [weak self] allSelected in + self?.isAllSelected = allSelected //1. 뷰에서 날짜를 보이게 하는 Published변수인 isAllselected를 true로 변화 + + // 2. 그거와 별개로 allSelected를 가지고 외부 데이터를 호출하는 코드 + if allSelected { + + self?.loadTimeData() + } else { + // 하나라도 선택이 풀리면 시간 데이터를 비웁니다. + self?.schedules = [] + } + } + .store(in: &cancellables) + } + + private func setupSearchSubscription() { // ⬅️ 12. 검색 로직 함수 추가 + $searchText + .removeDuplicates() // 중복된 입력 무시 + .handleEvents(receiveOutput: { text in + // 딜레이가 시작되기 직전, 텍스트가 비어있지 않으면 "검색중" 상태로 변경 + if !text.isEmpty { + self.isSearching = true + } + }) + .debounce(for: .milliseconds(400), scheduler: DispatchQueue.main) // 400ms 딜레이 + .sink { [weak self] (text) in + guard let self = self else { return } + + // 딜레이가 끝나면 "검색중" 상태 해제 + self.isSearching = false + + if text.isEmpty { + self.filteredMovies = [] // 검색어가 비면 필터 결과 비우기 + } else { + // 검색어(text)를 포함하는 영화를 `movieCards`에서 찾기 (대소문자 무시) + self.filteredMovies = self.movieCards.filter { movie in + movie.movieName.localizedCaseInsensitiveContains(text) + } + } + } + .store(in: &cancellables) // 구독 저장 + } + // 뷰에서 호출할 메서드 (로직을 뷰에서 분리) - func selectMovie(id: UUID?) { + func selectMovie(id: String?) { // 애니메이션 효과를 위해 main thread에서 실행 DispatchQueue.main.async { withAnimation { self.selectedMovieID = id + + self.selectedDate = nil + self.schedules = [] + + self.loadDatesForSelectedMovie() } } } + + //극장을 선택(또는 해제)하는 메서드 추가 + func selectTheater(name: String) { + // 배열에 이미 선택한 극장 이름이 있는지 확인 + if let index = selectedTheaters.firstIndex(of: name) { + // 있으면 배열에서 제거 (다시선택 해서 해제하는 역할) + selectedTheaters.remove(at: index) + } else { + // 없으면 배열에 추가 (선택) + selectedTheaters.append(name) + } + } + //날짜를 선택/해제하는 메서드 추가 func selectDate(_ date: Date) { // 이미 선택된 날짜를 다시 누르면 선택 해제 @@ -68,17 +199,7 @@ class MovieBookingViewModel: ObservableObject { } - //극장을 선택(또는 해제)하는 메서드 추가 - func selectTheater(name: String) { - // 배열에 이미 선택한 극장 이름이 있는지 확인 - if let index = selectedTheaters.firstIndex(of: name) { - // 있으면 배열에서 제거 (선택 해제) - selectedTheaters.remove(at: index) - } else { - // 없으면 배열에 추가 (선택) - selectedTheaters.append(name) - } - } + //오늘부터 7일간의 날짜를 생성하는 메서드 private func generateDatesForWeek() { let calendar = Calendar.current @@ -94,29 +215,106 @@ class MovieBookingViewModel: ObservableObject { } - private func loadMovieData() { - let azzulDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") - let guikalDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") - let f1Desc = MovieDescription(detail1: "최고가 되지 못한 전설 VS 최고가 되고 싶은 루키", detail2: "한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고", detail3: "한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트).", detail4: "그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게", detail5: "레이싱 복귀를 제안받으며 최하위 팀인 APGXP에 합류한다.") - let faceDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") - let himeDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") - let bossDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") - let yadangDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") - let rosesDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + private func loadDatesForSelectedMovie() { + // 1. 선택된 영화 ID로 DTO 찾기 + guard let movieID = selectedMovieID, + let movieDTO = allMovieDTOs.first(where: { $0.id == movieID }) else { + self.weekDates = [] // 선택된 영화 없으면 날짜 비우기 + return + } + + // 2. DTO의 schedules에서 날짜 문자열 목록 추출 + // (예: ["2025-09-22", "2025-09-23", "2025-09-24"]) + let dateStrings = movieDTO.schedules.map { $0.date } + + // 3. ⭐️ 날짜 문자열을 [Date] 객체 배열로 변환 (사용자가 말한 Formatter) + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd" + formatter.locale = Locale(identifier: "ko_KR") // 한국 시간대 보장 + + self.weekDates = dateStrings.compactMap { formatter.date(from: $0) } + } + + // MovieBookingViewModel.swift + private func loadTimeData() { + + print("--- 1. loadTimeData()가 호출되었습니다. ---") + + // 1. 필요한 모든 ID/날짜가 있는지 확인 + guard let movieID = selectedMovieID, + let movieDTO = allMovieDTOs.first(where: { $0.id == movieID }), + let selectedDate = selectedDate else { + + print("🚨 오류: movieID, movieDTO, 또는 selectedDate가 nil입니다.") + print("movieID: \(selectedMovieID ?? "nil")") + print("selectedDate: \(selectedDate?.description ?? "nil")") + self.schedules = [] + return + } + + print("✅ 선택된 영화 ID: \(movieID)") - let azzul = MovieCards(image: Image("어쩔수가없다"), booking: true, movieName: "어쩔수가없다",watchedStatus: "20만", movieNameEn: "Can't Help It", movieDescription: azzulDesc) - let guikal = MovieCards(image: Image("귀멸의칼날"), booking: true, movieName: "극장판 귀멸의칼날",watchedStatus: "1", movieNameEn: "Demon Slayer", movieDescription: guikalDesc) - let f1 = MovieCards(image: Image("f1"), booking: true, movieName: "F1 더 무비", watchedStatus: "1", movieNameEn: "F1: The Movie", movieDescription: f1Desc) - let face = MovieCards(image: Image("얼굴"), booking: true, movieName: "얼굴", watchedStatus: "20만", movieNameEn: "Face", movieDescription: faceDesc) - let hime = MovieCards(image: Image("모노노케히메"), booking: true, movieName: "모노노케히메", watchedStatus: "20만", movieNameEn: "Princess Mononoke", movieDescription: himeDesc) - let boss = MovieCards(image: Image("보스"), booking: true, movieName: "보스", watchedStatus: "20만", movieNameEn: "The boss", movieDescription: bossDesc) - let yadang = MovieCards(image: Image("야당"), booking: true, movieName: "야당", watchedStatus: "20만", movieNameEn: "Yadang", movieDescription: yadangDesc) - let roses = MovieCards(image: Image("로즈"), booking: true, movieName: "The Roses", watchedStatus: "20만", movieNameEn: "The roses", movieDescription: rosesDesc) + // 2. ⭐️ 선택된 날짜(Date)를 JSON의 날짜 문자열(String)로 변환 + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd" + // ⭐️ 1번 문제점 해결: Locale을 설정해야만 날짜 비교가 정확히 됩니다. + formatter.locale = Locale(identifier: "ko_KR") + let selectedDateString = formatter.string(from: selectedDate) + print("✅ 선택된 날짜 (String 변환): '\(selectedDateString)'") + + // 3. ⭐️ 선택한 날짜에 해당하는 스케줄 DTO 찾기 + + // ❗️ 여기서 nil이 되는지 확인하기 위해 JSON의 모든 날짜를 출력합니다. + let allAvailableDates = movieDTO.schedules.map { $0.date } + print("ℹ️ JSON에 있는 날짜 목록: \(allAvailableDates)") + + + guard let scheduleForDate = movieDTO.schedules.first(where: { $0.date == selectedDateString }) else { + // 해당 날짜에 상영 정보가 없는 경우 (JSON에 날짜는 있지만 area가 없을 수 있음) + // -> 빈 스케줄 로드 + + print("🚨 오류: '\(selectedDateString)' 날짜에 해당하는 스케줄(scheduleForDate)을 JSON에서 찾지 못했습니다.") + + self.schedules = selectedTheaters.map { TheaterSchedule(theaterName: $0, screens: []) } + return + } + + print("✅ 날짜 매칭 성공: '\(selectedDateString)'의 스케줄을 찾았습니다.") + + // 4. ⭐️ 선택된 각 극장별로 시간표 DTO를 -> 도메인 모델로 변환 + var loadedSchedules: [TheaterSchedule] = [] + + // ❗️ 여기서 nil이 되는지 확인하기 위해 JSON의 모든 극장 이름을 출력합니다. + let allAvailableAreas = scheduleForDate.areas.map { $0.area } + print("ℹ️ 해당 날짜의 JSON에 있는 극장 목록: \(allAvailableAreas)") + + + for theaterName in selectedTheaters { + + print("--- 🔄 '\(theaterName)' 극장 처리 시작 ---") + + // ⭐️ 2번 문제점: View의 "강남"과 JSON의 "강남점"이 다르면 매칭 실패 + if let areaDTO = scheduleForDate.areas.first(where: { $0.area == theaterName }) { + // "강남", "홍대"처럼 DTO 데이터가 있으면 ⭐️매퍼(toDomain)⭐️ 호출 + print("✅ '\(theaterName)' 극장 매칭 성공. toDomain()을 호출합니다.") + loadedSchedules.append(areaDTO.toDomain()) + } else { + // "신촌"처럼 DTO 데이터가 아예 없으면 + // screens가 비어있는 도메인 모델 추가 + + print("🚨 오류: '\(theaterName)' 극장을 JSON에서 찾지 못했습니다. (View 이름: '\(theaterName)' vs JSON 목록: \(allAvailableAreas))") + + loadedSchedules.append(TheaterSchedule(theaterName: theaterName, screens: [])) + } + } + + // 5. 변환된 도메인 모델을 할당하여 View 업데이트 + print("--- ✅ 5. loadTimeData() 완료. schedules에 \(loadedSchedules.count)개의 극장 정보를 할당합니다. ---") + self.schedules = loadedSchedules + } - self.movieCards = [azzul, guikal, f1, face, hime, boss, yadang, roses] - } } diff --git a/week04/Megabox/ViewModels/MovieCardsViewModel.swift b/week04/Megabox/ViewModels/MovieCardsViewModel.swift index cd03ea2..ba3a239 100644 --- a/week04/Megabox/ViewModels/MovieCardsViewModel.swift +++ b/week04/Megabox/ViewModels/MovieCardsViewModel.swift @@ -9,27 +9,32 @@ class MovieCardsViewModel{ var movieCards: [MovieCards] = [] init() { - let azzulDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") - let guikalDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") - let f1Desc = MovieDescription(detail1: "최고가 되지 못한 전설 VS 최고가 되고 싶은 루키", detail2: "한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고", detail3: "한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트).", detail4: "그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게", detail5: "레이싱 복귀를 제안받으며 최하위 팀인 APGXP에 합류한다.") - let faceDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") - let himeDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") - let bossDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") - let yadangDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") - let rosesDesc = MovieDescription(detail1: "", detail2: "", detail3: "", detail4: "", detail5: "") + let azzulDesc = MovieDescription(details: []) + let guikalDesc = MovieDescription(details: []) + let f1Desc = MovieDescription(details: [ + "최고가 되지 못한 전설 VS 최고가 싶은 루키", + "한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고", + "한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트).", + "그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게", + "레이싱 복귀를 제안받으며 최하위 팀인 APXGP에 합류한다." + ]) + let faceDesc = MovieDescription(details: []) + let himeDesc = MovieDescription(details: []) + let bossDesc = MovieDescription(details: []) + let yadangDesc = MovieDescription(details: []) + let rosesDesc = MovieDescription(details: []) + - let azzul = MovieCards(image: Image("어쩔수가없다"), booking: true, movieName: "어쩔수가없다",watchedStatus: "20만", movieNameEn: "Can't Help It", movieDescription: azzulDesc) - let guikal = MovieCards(image: Image("귀멸의칼날"), booking: true, movieName: "극장판 귀멸의칼날",watchedStatus: "1", movieNameEn: "Demon Slayer", movieDescription: guikalDesc) - let f1 = MovieCards(image: Image("f1"), booking: true, movieName: "F1 더 무비", watchedStatus: "1", movieNameEn: "F1: The Movie", movieDescription: f1Desc) - let face = MovieCards(image: Image("얼굴"), booking: true, movieName: "얼굴", watchedStatus: "20만", movieNameEn: "Face", movieDescription: faceDesc) - let hime = MovieCards(image: Image("모노노케히메"), booking: true, movieName: "모노노케히메", watchedStatus: "20만", movieNameEn: "Princess Mononoke", movieDescription: himeDesc) - let boss = MovieCards(image: Image("보스"), booking: true, movieName: "보스", watchedStatus: "20만", movieNameEn: "The boss", movieDescription: bossDesc) - let yadang = MovieCards(image: Image("야당"), booking: true, movieName: "야당", watchedStatus: "20만", movieNameEn: "Yadang", movieDescription: yadangDesc) - let roses = MovieCards(image: Image("로즈"), booking: true, movieName: "The Roses", watchedStatus: "20만", movieNameEn: "The roses", movieDescription: rosesDesc) - - + let azzul = MovieCards(id: "m-001", image: Image("m-001"), booking: true, movieName: "어쩔수가없다",watchedStatus: "20만", movieNameEn: "Can't Help It", movieDescription: azzulDesc) + let f1 = MovieCards(id: "m-002", image: Image("m-002"),booking: true,movieName: "F1 더 무비", watchedStatus: "1", movieNameEn: "F1: The Movie", movieDescription: f1Desc) + let guikal = MovieCards(id: "m-003", image: Image("m-003"),booking: true, movieName: "극장판 귀멸의칼날",watchedStatus: "1", movieNameEn: "Demon Slayer", movieDescription: guikalDesc) + let face = MovieCards(id: "m-004", image: Image("m-004"),booking: true, movieName: "얼굴", watchedStatus: "20만", movieNameEn: "Face", movieDescription: faceDesc) + let hime = MovieCards(id: "m-005", image: Image("m-005"), booking: true, movieName: "모노노케히메", watchedStatus: "20만", movieNameEn: "Princess Mononoke", movieDescription: himeDesc) + let boss = MovieCards(id:"m-006", image: Image("m-006"), booking: true, movieName: "보스", watchedStatus: "20만", movieNameEn: "The boss", movieDescription: bossDesc) + let yadang = MovieCards(id:"m-007", image: Image("m-007"),booking: true, movieName: "야당", watchedStatus: "20만", movieNameEn: "Yadang", movieDescription: yadangDesc) + let roses = MovieCards(id:"m-008", image: Image("m-008"), booking: true, movieName: "The Roses", watchedStatus: "20만", movieNameEn: "The roses", movieDescription: rosesDesc) self.movieCards = [azzul, guikal, f1, face, hime, boss, yadang, roses] diff --git a/week04/Megabox/Views/SingleViews/MovieBookingView.swift b/week04/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift similarity index 51% rename from week04/Megabox/Views/SingleViews/MovieBookingView.swift rename to week04/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift index 770ff16..7bd3f0a 100644 --- a/week04/Megabox/Views/SingleViews/MovieBookingView.swift +++ b/week04/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift @@ -4,6 +4,15 @@ struct MovieBookingView: View { @StateObject private var viewModel = MovieBookingViewModel() + @State private var isShowingMovieSheet = false + + private var timeGridColumns: [GridItem] = [ + GridItem(.flexible()), + GridItem(.flexible()), + GridItem(.flexible()), + GridItem(.flexible()) + ] + // MARK: - Main Body var body: some View { @@ -30,6 +39,8 @@ struct MovieBookingView: View { theaterSelectionButtons dateSelectionView + timeSelectionView + } .padding(.horizontal) .padding(.top) @@ -40,7 +51,7 @@ struct MovieBookingView: View { } } - + // MARK: - UI Components (분리된 서브 뷰) /// 1. 선택된 영화 정보를 보여주는 헤더 뷰 @@ -65,7 +76,12 @@ struct MovieBookingView: View { .frame(width: 238, height: 24, alignment: .leading) - Button(action: {}, label: { + Button(action: { + + isShowingMovieSheet = true + + + }, label: { Text("전체영화") .font(.semiBold14) .foregroundColor(.black) @@ -77,6 +93,16 @@ struct MovieBookingView: View { .stroke(Color.grey02, lineWidth: 1) ) }) + .sheet(isPresented: $isShowingMovieSheet){ + + MovieSheetView(viewModel: self.viewModel) + .presentationDragIndicator(.visible) + + + } + + + } } @@ -115,12 +141,12 @@ struct MovieBookingView: View { } - +// 4. 날짜 버튼들을 보여주는 뷰 private var dateSelectionView: some View { ScrollView(.horizontal, showsIndicators: false) { HStack(spacing: 5) { ForEach(viewModel.weekDates, id: \.self) { date in - dateCell(for: date) + dateButton(for: date) } } } @@ -131,7 +157,69 @@ struct MovieBookingView: View { } + private var timeSelectionView: some View { + + + // VStack으로 감싸서 여러 극장 정보를 세로로 나열합니다. + VStack(alignment: .leading, spacing: 25) { + + // ViewModel의 schedules 배열을 순회합니다. (예: "강남", "홍대"가 순서대로 들어옴) + ForEach(viewModel.schedules) { schedule in + + // --- 1. 극장 이름 (예: "강남") --- + Text(schedule.theaterName) + .font(.bold18) + .foregroundColor(.black) + + // --- 2. 상영관 목록 또는 "시간대 없음" --- + + // Check 1: "홍대", "신촌" (screens empty) + if schedule.screens.isEmpty { + // "홍대", "신촌" 등 screens 배열이 비어있는 경우 + Text("해당 영화관에는 시간대가 없습니다.") + .font(.system(size: 14)) + .foregroundColor(.gray) + .padding(.vertical, 20) + .frame(maxWidth: .infinity, alignment: .center) + + // Check 2: "강남" (screens not empty) + } else { + + + VStack(spacing: 15) { + + // 이 극장의 모든 상영관(예: 1관, 2관...)을 순회 + ForEach(schedule.screens) { screen in + + // --- 상영관 이름 (예: "크리클라이너 1관") --- + HStack { + Text(screen.screenName) + .font(.bold18) + Spacer() + Text(screen.format) + .font(.semiBold14) + .foregroundColor(.black) + } + + // --- 시간표 그리드 --- + LazyVGrid(columns: timeGridColumns, spacing: 19) { + ForEach(screen.times) { time in + timeCell(for: time) // + } + } + } + } + } + } + } + // 3가지 조건이 모두 충족되어야만 보이도록 처리 (애니메이션과 함께) + .opacity(viewModel.isAllSelected ? 1.0 : 0.0) + .animation(.easeInOut, value: viewModel.isAllSelected) + .disabled(!viewModel.isAllSelected) + } + //------------------------------------ + private func theaterButton(place: String) -> some View { @@ -159,32 +247,36 @@ struct MovieBookingView: View { } - private func dateCell(for date: Date) -> some View { + // MovieBookingView.swift - - VStack(spacing: 4){ - // "9.22" 형식으로 날짜 표시 - Text(date.formatted(.dateTime.day())) - .font(.bold18) - - // "오늘", "내일", "수" 형식으로 요일 표시 - Text(formatWeekday(date)) - .font(.semiBold14) - - } - .padding(.vertical,12) - .padding(.horizontal, 10) - .frame(width: 55, height: 60) - .foregroundColor(viewModel.selectedDate == date ? .white : getWeekdayColor(for: date)) - .background( - RoundedRectangle(cornerRadius: 12) - .fill(viewModel.selectedDate == date ? .purple03: Color.clear) - ) - .onTapGesture { - viewModel.selectDate(date) - } - } - + private func dateButton(for date: Date) -> some View { + + // 1. Button으로 감싸고 action을 정의합니다. + Button(action: { + // 2. 탭 했을 때 viewModel의 함수를 호출하는 것은 동일합니다. + viewModel.selectDate(date) + }) { + // 3. 기존 VStack은 Button의 Label(콘텐츠)이 됩니다. + VStack(spacing: 4){ + Text(date.formatted(.dateTime.day())) + .font(.bold18) + + Text(formatWeekday(date)) + .font(.semiBold14) + + } + .padding(.vertical,12) + .padding(.horizontal, 10) + .frame(width: 55, height: 60) + .foregroundColor(viewModel.selectedDate == date ? .white : getWeekdayColor(for: date)) + .background( + RoundedRectangle(cornerRadius: 12) + .fill(viewModel.selectedDate == date ? .purple03: Color.clear) + ) + } + + .buttonStyle(.plain) + } private func getWeekdayColor(for date: Date) -> Color { let calendar = Calendar.current @@ -209,6 +301,46 @@ struct MovieBookingView: View { return formatter.string(from: date) } } + + private func timeCell(for time: Time) -> some View { + VStack(spacing: 4) { + Spacer() + Text(time.startTime) + .foregroundColor(.black) + .font(.bold18) + .frame(width: 55, height: 24) + + + Text(time.endTime) + .font(.regular12) + .foregroundColor(.grey03) + .frame(width: 55, height: 24) + + + HStack(spacing: 4){ + + Text("\(time.remainingSeats)") + .foregroundColor(.purple03) + .font(.semiBold14) + + Text("/") + + Text("\(time.totalSeats)") + .foregroundColor(.grey03) + .font(.semiBold14) + + + } + .frame(width:59, height: 20) + .padding(10) + } + .padding(10) + .frame(width: 75, height: 86) + .background( + RoundedRectangle(cornerRadius: 12) + .stroke(.grey02, lineWidth: 1) + ) + } } diff --git a/week04/Megabox/Views/SingleViews/MovieCardView.swift b/week04/Megabox/Views/SingleViews/MovieView/MovieCardView.swift similarity index 100% rename from week04/Megabox/Views/SingleViews/MovieCardView.swift rename to week04/Megabox/Views/SingleViews/MovieView/MovieCardView.swift diff --git a/week04/Megabox/Views/SingleViews/MovieDetailView.swift b/week04/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift similarity index 91% rename from week04/Megabox/Views/SingleViews/MovieDetailView.swift rename to week04/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift index 39d1341..9c75138 100644 --- a/week04/Megabox/Views/SingleViews/MovieDetailView.swift +++ b/week04/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift @@ -85,14 +85,10 @@ struct MovieDetailView: View { .font(.semiBold14) .foregroundColor(.grey03) Group{ - - text(text: movie.movieDescription.detail1) - .padding(.vertical) - - text(text: movie.movieDescription.detail2) - text(text: movie.movieDescription.detail3) - text(text: movie.movieDescription.detail4) - text(text: movie.movieDescription.detail5) + ForEach(movie.movieDescription.details, id: \.self) { detailLine in + text(text: detailLine) + } + } .padding(.horizontal) } diff --git a/week04/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift b/week04/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift new file mode 100644 index 0000000..a16aab4 --- /dev/null +++ b/week04/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift @@ -0,0 +1,127 @@ +import SwiftUI + +struct MovieSheetView: View { + +// @StateObject private var viewModel = MovieBookingViewModel() + @Environment(\.dismiss) var dismiss + @ObservedObject var viewModel: MovieBookingViewModel + + private var movieGridColumns: [GridItem] = [ + GridItem(.flexible()), + GridItem(.flexible()), + GridItem(.flexible()) + ] + + init(viewModel: MovieBookingViewModel) + { + self.viewModel = viewModel + } + + var body: some View { + + VStack{ + Spacer() + + Text("영화 선택") + .font(.regular20) + .foregroundColor(.black) + + searchMovieView + .padding(.horizontal, 16) + + + + ScrollView{ + + if viewModel.isSearching{ + Text("검색중...") + .font(.semiBold14) + .foregroundColor(.gray) + .padding(.top, 50) + } + else if viewModel.searchText.isEmpty{ + movieSheetView(for:self.viewModel.movieCards) + } + else if viewModel.filteredMovies.isEmpty{ + Text("검색 결과가 없습니다.") + .font(.semiBold14) + .foregroundColor(.gray) + .padding(.top, 50) + } + else { + // ViewModel의 'filteredMovies' 목록을 그림 + movieSheetView(for: viewModel.filteredMovies) + } + + } + + + + } + .padding(.top, 16) + } + + private var searchMovieView: some View { + + + HStack{ + Image(systemName: "magnifyingglass") + .foregroundColor(.grey04) + + TextField("Search", text: $viewModel.searchText) + .autocorrectionDisabled() // 자동 수정 비활성화 + .textInputAutocapitalization(.never) // 첫 글자 대문자 비활성화 + + Image(systemName: "mic.fill") + .foregroundColor(.grey04) + } + .padding(.horizontal, 10) + .frame(height: 36) + .background(.grey01) + .cornerRadius(10) + + + + + + + + + + + } + + private func movieSheetView(for movies:[MovieCards]) -> some View{ + + LazyVGrid(columns:movieGridColumns, spacing: 36){ + ForEach(movies) { movie in + VStack{ + movie.image + .resizable() + .frame(width: 95, height: 135) + .padding(8) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(viewModel.selectedMovieID == movie.id ? .purple03 : Color.clear, lineWidth: 4) + ) + .onTapGesture { + withAnimation { + viewModel.selectMovie(id: movie.id) + } + } + + Text(movie.movieName) + .font(.semiBold14) + .foregroundColor(.black) + + } + } + } + + } + + +} +#Preview { + MovieSheetView(viewModel: MovieBookingViewModel()) +} diff --git a/week04/Megabox/Views/Tabviews/Tabs.swift b/week04/Megabox/Views/Tabviews/Tabs.swift index 6e09cbf..7469da4 100644 --- a/week04/Megabox/Views/Tabviews/Tabs.swift +++ b/week04/Megabox/Views/Tabviews/Tabs.swift @@ -17,7 +17,9 @@ struct Tabs: View { // 2. "바로 예매" 탭 Tab("바로 예매", systemImage: "movieclapper", value: 1) { - Text("바로 예매") + NavigationStack { + MovieBookingView() + } } // 3. "모바일 오더" 탭 From 8a4bbc0494c918c8551cc8a00a8521cead00fef9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=B7=E1=84=8C=E1=85=B5=E1=84=8B?= =?UTF-8?q?=E1=85=AD=E1=86=BC?= Date: Sat, 1 Nov 2025 16:55:45 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=EB=A0=88=EC=9D=B4=EC=8A=A4=20=EC=BB=A8?= =?UTF-8?q?=EB=94=94=EC=85=98=20=ED=95=B4=EA=B2=B0=20=EB=B0=8F,=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=B7=B0?= =?UTF-8?q?=EB=AA=A8=EB=8D=B8=20=ED=8C=8C=EC=9D=BC=20=EC=84=B8=EB=B6=84?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- week04/Megabox/Model/DTO/APIResponseDTO.swift | 52 ++- .../ViewModels/MovieBookingViewModel.swift | 320 ------------------ .../MovieBookingViewModels/DataLogic.swift | 56 +++ .../MovieBookingViewModel.swift | 103 ++++++ .../MovieDataService.swift | 55 +++ .../Subscriptions.swift | 66 ++++ .../MovieView/MovieBookingView.swift | 22 +- 7 files changed, 314 insertions(+), 360 deletions(-) delete mode 100644 week04/Megabox/ViewModels/MovieBookingViewModel.swift create mode 100644 week04/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift create mode 100644 week04/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift create mode 100644 week04/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift create mode 100644 week04/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift diff --git a/week04/Megabox/Model/DTO/APIResponseDTO.swift b/week04/Megabox/Model/DTO/APIResponseDTO.swift index f27138d..e648ffd 100644 --- a/week04/Megabox/Model/DTO/APIResponseDTO.swift +++ b/week04/Megabox/Model/DTO/APIResponseDTO.swift @@ -19,8 +19,8 @@ struct MovieData: Codable{ struct MovieDTO: Codable{ - let id: String //--- id - let title: String //-- movieName + let id: String + let title: String let age_rating: String let schedules: [MovieInfoDTO] @@ -37,25 +37,25 @@ struct MovieInfoDTO: Codable{ } struct MovieAreaDTO: Codable{ - let area: String // --theaterName + let area: String let items: [MovieItemsDTO] } struct MovieItemsDTO: Codable{ - let auditorium: String // -- screenName - let format: String // -- format + let auditorium: String + let format: String let showtimes: [ShowTimesDTO] } struct ShowTimesDTO: Codable{ - let start: String // -- startTime - let end: String // -- endTime - let available: Int //-- remainingSeats - let total: Int // -- totalSeats + let start: String + let end: String + let available: Int + let total: Int @@ -66,12 +66,12 @@ extension ShowTimesDTO { // ShowTimesDTO(DTO) -> Time(Domain) func toDomain() -> Time { return Time( - // id는 Time 모델이 자동으로 생성 + startTime: self.start, - endTime: "~\(self.end)", // 도메인 모델의 주석(~13:58)을 참고 - remainingSeats: self.available, // DTO -> Domain - totalSeats: self.total // DTO -> Domain - ) + endTime: "~\(self.end)", + remainingSeats: self.available, + totalSeats: self.total + ) } } extension MovieItemsDTO { @@ -90,22 +90,14 @@ extension MovieAreaDTO { // MovieAreaDTO(DTO) -> TheaterSchedule(Domain) func toDomain() -> TheaterSchedule { return TheaterSchedule( - // id는 TheaterSchedule 모델이 자동으로 생성 - theaterName: self.area, // DTO의 area -> Domain의 theaterName - // DTO의 [MovieItemsDTO] 배열을 - // Domain의 [ScreenSchedule] 배열로 변환 (2번 함수 재사용) + + theaterName: self.area, screens: self.items.map { $0.toDomain() } ) } } -extension MovieInfoDTO{ - - - - -} -// APIResponseDTO.swift 파일에 이미 정의된 매퍼 + extension MovieDTO { private func fetchLocalDescription(for movieID: String) -> MovieDescription { @@ -154,12 +146,12 @@ extension MovieDTO { let description = fetchLocalDescription(for: self.id) return MovieCards( id: self.id, - image: Image(self.id), // DTO의 "m-001" ID로 에셋 이미지 + image: Image(self.id), booking: true, - movieName: self.title, // DTO.title -> Domain.movieName - watchedStatus: "01", // DTO에 없는 정보 -> 앱의 비즈니스 로직 - movieNameEn: "나중에", // DTO에 없는 정보 -> 앱의 비즈니스 로직 - movieDescription: description// 별도 정의 필요 + movieName: self.title, + watchedStatus: "01", + movieNameEn: "나중에", + movieDescription: description // 별도 정의한 description 사용 ) } diff --git a/week04/Megabox/ViewModels/MovieBookingViewModel.swift b/week04/Megabox/ViewModels/MovieBookingViewModel.swift deleted file mode 100644 index b235015..0000000 --- a/week04/Megabox/ViewModels/MovieBookingViewModel.swift +++ /dev/null @@ -1,320 +0,0 @@ -import Foundation -import Combine -import SwiftUI - - -class MovieBookingViewModel: ObservableObject { - - // UI와 관련된 데이터들 - @Published var movieCards: [MovieCards] = [] - @Published var selectedMovieID: String? - - @Published var isTheaterButtonEnabled: Bool = false - @Published var selectedTheaters: [String] = [] - - @Published var weekDates: [Date] = [] - @Published var selectedDate: Date? = nil - @Published var isDateSelectionEnabled: Bool = false - - @Published var isAllSelected: Bool = false - @Published var schedules: [TheaterSchedule] = [] - - @Published var searchText = "" - @Published var filteredMovies: [MovieCards] = [] - @Published var isSearching: Bool = false - - @Published var allMovieDTOs: [MovieDTO] = [] - - - private var cancellables = Set() - - var selectedMovie: MovieCards? { - movieCards.first { $0.id == selectedMovieID } - } - - init() { - - - loadDataFromJSON() - setupButtonStateSubscription() - setupDateSelectionSubscription() - - setupTimeSelectionSubscription() - - setupSearchSubscription() - - } - - // MovieBookingViewModel.swift - private func loadDataFromJSON() { - - // 1. ⭐️ 모든 영화를 담을 임시 배열을 만듭니다. - var allLoadedMovies: [MovieCards] = [] - - // 2. JSON 데이터 로드 및 디코딩 - if let url = Bundle.main.url(forResource: "MovieSchedule", withExtension: "json"), - let data = try? Data(contentsOf: url) { - - - do { - let response = try JSONDecoder().decode(APIResponseDTO.self, from: data) - self.allMovieDTOs = response.data.movies - - // 3. ⭐️ JSON 영화 3개를 매핑하여 임시 배열에 추가 - let jsonMovies = self.allMovieDTOs.map { $0.toDomainCard() } - allLoadedMovies.append(contentsOf: jsonMovies) - - } catch { - print("JSON Decoding error: \(error)") - // 디코딩에 실패해도 4번의 하드코딩 데이터는 로드됩니다. - } - } - - // 4. ⭐️ JSON에 없는 5개의 하드코딩 영화를 정의합니다. - // (기존 loadMovieData에서 복사해 온 코드) - let faceDesc = MovieDescription(details: []) - let himeDesc = MovieDescription(details: []) - let bossDesc = MovieDescription(details: []) - let yadangDesc = MovieDescription(details: []) - let rosesDesc = MovieDescription(details: []) - - let face = MovieCards(id: "m-004", image: Image("m-004"), booking: true, movieName: "얼굴", watchedStatus: "20만", movieNameEn: "Face", movieDescription: faceDesc) - let hime = MovieCards(id: "m-005", image: Image("m-005"), booking: true, movieName: "모노노케히메", watchedStatus: "20만", movieNameEn: "Princess Mononoke", movieDescription: himeDesc) - let boss = MovieCards(id: "m-006", image: Image("m-006"), booking: true, movieName: "보스", watchedStatus: "20만", movieNameEn: "The boss", movieDescription: bossDesc) - let yadang = MovieCards(id: "m-007", image: Image("m-007"), booking: true, movieName: "야당", watchedStatus: "20만", movieNameEn: "Yadang", movieDescription: yadangDesc) - let roses = MovieCards(id: "m-008", image: Image("m-008"), booking: true, movieName: "The Roses", watchedStatus: "20만", movieNameEn: "The roses", movieDescription: rosesDesc) - - // 5. ⭐️ 하드코딩 영화 5개를 임시 배열에 "추가"합니다. - allLoadedMovies.append(contentsOf: [face, hime, boss, yadang, roses]) - - // 6. ⭐️ JSON 3개 + 하드코딩 5개 = 총 8개의 영화를 @Published 프로퍼티에 할당합니다. - self.movieCards = allLoadedMovies - } - - private func setupButtonStateSubscription() { - $selectedMovieID - .map { movieID in - return movieID != nil - } .assign(to: &$isTheaterButtonEnabled) //이걸 true로 변경 - } - - private func setupDateSelectionSubscription() { - $selectedTheaters - // selectedTheaters 에 변화가 생겼을 시 - .map { !$0.isEmpty } - // isDateSelectionEnable의 상태를 변경 - .assign(to: &$isDateSelectionEnabled) - } - - private func setupTimeSelectionSubscription(){ - Publishers.CombineLatest3($selectedMovieID, $selectedTheaters, $selectedDate) - .map{ (movieID, theaters, date) in - - return movieID != nil && !theaters.isEmpty && date != nil - - - } - //하나의 sink 블록 안에서 - .sink { [weak self] allSelected in - self?.isAllSelected = allSelected //1. 뷰에서 날짜를 보이게 하는 Published변수인 isAllselected를 true로 변화 - - // 2. 그거와 별개로 allSelected를 가지고 외부 데이터를 호출하는 코드 - if allSelected { - - self?.loadTimeData() - } else { - // 하나라도 선택이 풀리면 시간 데이터를 비웁니다. - self?.schedules = [] - } - } - .store(in: &cancellables) - } - - private func setupSearchSubscription() { // ⬅️ 12. 검색 로직 함수 추가 - $searchText - .removeDuplicates() // 중복된 입력 무시 - .handleEvents(receiveOutput: { text in - // 딜레이가 시작되기 직전, 텍스트가 비어있지 않으면 "검색중" 상태로 변경 - if !text.isEmpty { - self.isSearching = true - } - }) - .debounce(for: .milliseconds(400), scheduler: DispatchQueue.main) // 400ms 딜레이 - .sink { [weak self] (text) in - guard let self = self else { return } - - // 딜레이가 끝나면 "검색중" 상태 해제 - self.isSearching = false - - if text.isEmpty { - self.filteredMovies = [] // 검색어가 비면 필터 결과 비우기 - } else { - // 검색어(text)를 포함하는 영화를 `movieCards`에서 찾기 (대소문자 무시) - self.filteredMovies = self.movieCards.filter { movie in - movie.movieName.localizedCaseInsensitiveContains(text) - } - } - } - .store(in: &cancellables) // 구독 저장 - } - - - - // 뷰에서 호출할 메서드 (로직을 뷰에서 분리) - func selectMovie(id: String?) { - // 애니메이션 효과를 위해 main thread에서 실행 - DispatchQueue.main.async { - withAnimation { - self.selectedMovieID = id - - self.selectedDate = nil - self.schedules = [] - - self.loadDatesForSelectedMovie() - } - } - } - - //극장을 선택(또는 해제)하는 메서드 추가 - func selectTheater(name: String) { - // 배열에 이미 선택한 극장 이름이 있는지 확인 - if let index = selectedTheaters.firstIndex(of: name) { - // 있으면 배열에서 제거 (다시선택 해서 해제하는 역할) - selectedTheaters.remove(at: index) - } else { - // 없으면 배열에 추가 (선택) - selectedTheaters.append(name) - } - } - - //날짜를 선택/해제하는 메서드 추가 - func selectDate(_ date: Date) { - // 이미 선택된 날짜를 다시 누르면 선택 해제 - if selectedDate == date { - selectedDate = nil - } else { - // 다른 날짜를 누르면 그 날짜로 선택 변경 - selectedDate = date - } - } - - - - //오늘부터 7일간의 날짜를 생성하는 메서드 - private func generateDatesForWeek() { - let calendar = Calendar.current - let today = Date() - - var dates: [Date] = [] - for i in 0..<7 { - if let date = calendar.date(byAdding: .day, value: i, to: today) { - dates.append(date) - } - } - self.weekDates = dates - } - - - - private func loadDatesForSelectedMovie() { - // 1. 선택된 영화 ID로 DTO 찾기 - guard let movieID = selectedMovieID, - let movieDTO = allMovieDTOs.first(where: { $0.id == movieID }) else { - self.weekDates = [] // 선택된 영화 없으면 날짜 비우기 - return - } - - // 2. DTO의 schedules에서 날짜 문자열 목록 추출 - // (예: ["2025-09-22", "2025-09-23", "2025-09-24"]) - let dateStrings = movieDTO.schedules.map { $0.date } - - // 3. ⭐️ 날짜 문자열을 [Date] 객체 배열로 변환 (사용자가 말한 Formatter) - let formatter = DateFormatter() - formatter.dateFormat = "yyyy-MM-dd" - formatter.locale = Locale(identifier: "ko_KR") // 한국 시간대 보장 - - self.weekDates = dateStrings.compactMap { formatter.date(from: $0) } - } - - // MovieBookingViewModel.swift - - private func loadTimeData() { - - print("--- 1. loadTimeData()가 호출되었습니다. ---") - - // 1. 필요한 모든 ID/날짜가 있는지 확인 - guard let movieID = selectedMovieID, - let movieDTO = allMovieDTOs.first(where: { $0.id == movieID }), - let selectedDate = selectedDate else { - - print("🚨 오류: movieID, movieDTO, 또는 selectedDate가 nil입니다.") - print("movieID: \(selectedMovieID ?? "nil")") - print("selectedDate: \(selectedDate?.description ?? "nil")") - self.schedules = [] - return - } - - print("✅ 선택된 영화 ID: \(movieID)") - - // 2. ⭐️ 선택된 날짜(Date)를 JSON의 날짜 문자열(String)로 변환 - let formatter = DateFormatter() - formatter.dateFormat = "yyyy-MM-dd" - // ⭐️ 1번 문제점 해결: Locale을 설정해야만 날짜 비교가 정확히 됩니다. - formatter.locale = Locale(identifier: "ko_KR") - let selectedDateString = formatter.string(from: selectedDate) - - print("✅ 선택된 날짜 (String 변환): '\(selectedDateString)'") - - // 3. ⭐️ 선택한 날짜에 해당하는 스케줄 DTO 찾기 - - // ❗️ 여기서 nil이 되는지 확인하기 위해 JSON의 모든 날짜를 출력합니다. - let allAvailableDates = movieDTO.schedules.map { $0.date } - print("ℹ️ JSON에 있는 날짜 목록: \(allAvailableDates)") - - - guard let scheduleForDate = movieDTO.schedules.first(where: { $0.date == selectedDateString }) else { - // 해당 날짜에 상영 정보가 없는 경우 (JSON에 날짜는 있지만 area가 없을 수 있음) - // -> 빈 스케줄 로드 - - print("🚨 오류: '\(selectedDateString)' 날짜에 해당하는 스케줄(scheduleForDate)을 JSON에서 찾지 못했습니다.") - - self.schedules = selectedTheaters.map { TheaterSchedule(theaterName: $0, screens: []) } - return - } - - print("✅ 날짜 매칭 성공: '\(selectedDateString)'의 스케줄을 찾았습니다.") - - // 4. ⭐️ 선택된 각 극장별로 시간표 DTO를 -> 도메인 모델로 변환 - var loadedSchedules: [TheaterSchedule] = [] - - // ❗️ 여기서 nil이 되는지 확인하기 위해 JSON의 모든 극장 이름을 출력합니다. - let allAvailableAreas = scheduleForDate.areas.map { $0.area } - print("ℹ️ 해당 날짜의 JSON에 있는 극장 목록: \(allAvailableAreas)") - - - for theaterName in selectedTheaters { - - print("--- 🔄 '\(theaterName)' 극장 처리 시작 ---") - - // ⭐️ 2번 문제점: View의 "강남"과 JSON의 "강남점"이 다르면 매칭 실패 - if let areaDTO = scheduleForDate.areas.first(where: { $0.area == theaterName }) { - // "강남", "홍대"처럼 DTO 데이터가 있으면 ⭐️매퍼(toDomain)⭐️ 호출 - print("✅ '\(theaterName)' 극장 매칭 성공. toDomain()을 호출합니다.") - loadedSchedules.append(areaDTO.toDomain()) - } else { - // "신촌"처럼 DTO 데이터가 아예 없으면 - // screens가 비어있는 도메인 모델 추가 - - print("🚨 오류: '\(theaterName)' 극장을 JSON에서 찾지 못했습니다. (View 이름: '\(theaterName)' vs JSON 목록: \(allAvailableAreas))") - - loadedSchedules.append(TheaterSchedule(theaterName: theaterName, screens: [])) - } - } - - // 5. 변환된 도메인 모델을 할당하여 View 업데이트 - print("--- ✅ 5. loadTimeData() 완료. schedules에 \(loadedSchedules.count)개의 극장 정보를 할당합니다. ---") - self.schedules = loadedSchedules - } - - -} diff --git a/week04/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift b/week04/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift new file mode 100644 index 0000000..2509d5e --- /dev/null +++ b/week04/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift @@ -0,0 +1,56 @@ +import Foundation + +// ViewModel 안에서의 데이터 처리 로직 +extension MovieBookingViewModel { + + + func loadDatesForSelectedMovie() { + // 1. 선택된 영화 ID로 DTO 찾기 + guard let movieID = selectedMovieID, + let movieDTO = allMovieDTOs.first(where: { $0.id == movieID })else { + self.weekDates = [] + return + } + + let dateStrings = movieDTO.schedules.map { $0.date } + + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd" + formatter.locale = Locale(identifier: "ko_KR") // 한국 시간대 보장 + + self.weekDates = dateStrings.compactMap { formatter.date(from: $0) } + } + + + func loadTimeData(movieID: String, theaters: [String], date: Date) { + + guard let movieDTO = allMovieDTOs.first(where: { $0.id == movieID })else { + self.schedules = [] + return + } + + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd" + formatter.locale = Locale(identifier: "ko_KR") + let selectedDateString = formatter.string(from: date) + + guard let scheduleForDate = movieDTO.schedules.first(where: { $0.date == selectedDateString }) else { + // 해당 날짜에 상영 정보가 없는 경우 + self.schedules = theaters.map { TheaterSchedule(theaterName: $0, screens: []) } + return + } + + var loadedSchedules: [TheaterSchedule] = [] + + for theaterName in selectedTheaters { + if let areaDTO = scheduleForDate.areas.first(where: { $0.area == theaterName }) { + loadedSchedules.append(areaDTO.toDomain()) + } else { + // DTO에 해당 극장 정보가 없으면 빈 스케줄 추가 + loadedSchedules.append(TheaterSchedule(theaterName: theaterName, screens: [])) + } + } + + self.schedules = loadedSchedules + } +} diff --git a/week04/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift b/week04/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift new file mode 100644 index 0000000..895ffb2 --- /dev/null +++ b/week04/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift @@ -0,0 +1,103 @@ +import Foundation +import Combine +import SwiftUI + +class MovieBookingViewModel: ObservableObject { + + @Published var errorMessage: String? = nil + + @Published var movieCards: [MovieCards] = [] + @Published var selectedMovieID: String? + + @Published var isTheaterButtonEnabled: Bool = false + @Published var selectedTheaters: [String] = [] + + @Published var weekDates: [Date] = [] + @Published var selectedDate: Date? = nil + @Published var isDateSelectionEnabled: Bool = false + + @Published var schedules: [TheaterSchedule] = [] + + @Published var searchText = "" + @Published var filteredMovies: [MovieCards] = [] + @Published var isSearching: Bool = false + + @Published var allMovieDTOs: [MovieDTO] = [] + + // MARK: - Properties + var cancellables = Set() + private let dataService = MovieDataService() + + var selectedMovie: MovieCards? { + movieCards.first { $0.id == selectedMovieID } + } + + + init() { + // DataService를 통해 데이터 로드 + loadInitialData() + + // 구독 설정 + setupButtonStateSubscription() + setupDateSelectionSubscription() + setupTimeSelectionSubscription() + setupSearchSubscription() + } + + private func loadInitialData() { + do { + // JSON 데이터를 받아옴 + let (loadedMovies, loadedDTOs) = try dataService.loadDataFromJSON() + + + self.movieCards = loadedMovies + self.allMovieDTOs = loadedDTOs + + } catch { + + print("Failed to load movies: \(error)") + self.errorMessage = "영화 목록을 불러오는 데 실패했습니다." + if let movieError = error as? MovieLoadError { + switch movieError { + case .invalidData: + self.errorMessage = "영화 데이터가 유효하지 않음" + case .decodingFailed: + self.errorMessage = "영화를 불러오는 데 실패했습니다." + case .networkFailed(let specificError): + self.errorMessage = "네트워크 오류: \(specificError.localizedDescription)" + case .fileNotFound: + self.errorMessage = "영화 파일을 찾을 수 없습니다." + } + } + } + } + + + func selectMovie(id: String?) { + DispatchQueue.main.async { + withAnimation { + self.selectedMovieID = id + self.selectedDate = nil + self.schedules = [] + self.loadDatesForSelectedMovie() + } + } + } + + func selectTheater(name: String) { + if let index = selectedTheaters.firstIndex(of: name) { + selectedTheaters.remove(at: index) + } else { + selectedTheaters.append(name) + } + } + + func selectDate(_ date: Date) { + if selectedDate == date { + selectedDate = nil + } else { + selectedDate = date + } + } +} + diff --git a/week04/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift b/week04/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift new file mode 100644 index 0000000..a51e22d --- /dev/null +++ b/week04/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift @@ -0,0 +1,55 @@ +import Foundation +import SwiftUI +enum MovieLoadError: Error, LocalizedError{ + + case invalidData + case decodingFailed(Error) + case networkFailed(Error) + case fileNotFound + + +} +class MovieDataService { + + + func loadDataFromJSON() throws -> (movies: [MovieCards], dtos: [MovieDTO]) { + + var allLoadedMovies: [MovieCards] = [] + var allLoadedDTOs: [MovieDTO] = [] + + // JSON 데이터 로드 및 디코딩 + if let url = Bundle.main.url(forResource: "MovieSchedule", withExtension: "json"), + let data = try? Data(contentsOf: url) { + + do { + let response = try JSONDecoder().decode(APIResponseDTO.self, from: data) + allLoadedDTOs = response.data.movies // DTO 저장 + + let jsonMovies = allLoadedDTOs.map { $0.toDomainCard() } + allLoadedMovies.append(contentsOf: jsonMovies) + + } catch { + throw MovieLoadError.decodingFailed(error) + } + } else { + throw MovieLoadError.fileNotFound + } + + // JSON파일에는 없는 데이터 추가 + let faceDesc = MovieDescription(details: []) + let himeDesc = MovieDescription(details: []) + let bossDesc = MovieDescription(details: []) + let yadangDesc = MovieDescription(details: []) + let rosesDesc = MovieDescription(details: []) + + let face = MovieCards(id: "m-004", image: Image("m-004"), booking: true, movieName: "얼굴", watchedStatus: "20만", movieNameEn: "Face", movieDescription: faceDesc) + let hime = MovieCards(id: "m-005", image: Image("m-005"), booking: true, movieName: "모노노케히메", watchedStatus: "20만", movieNameEn: "Princess Mononoke", movieDescription: himeDesc) + let boss = MovieCards(id: "m-006", image: Image("m-006"), booking: true, movieName: "보스", watchedStatus: "20만", movieNameEn: "The boss", movieDescription: bossDesc) + let yadang = MovieCards(id: "m-007", image: Image("m-007"), booking: true, movieName: "야당", watchedStatus: "20만", movieNameEn: "Yadang", movieDescription: yadangDesc) + let roses = MovieCards(id: "m-008", image: Image("m-008"), booking: true, movieName: "The Roses", watchedStatus: "20만", movieNameEn: "The roses", movieDescription: rosesDesc) + + allLoadedMovies.append(contentsOf: [face, hime, boss, yadang, roses]) + + return (movies: allLoadedMovies, dtos: allLoadedDTOs) + } +} diff --git a/week04/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift b/week04/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift new file mode 100644 index 0000000..bdff24c --- /dev/null +++ b/week04/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift @@ -0,0 +1,66 @@ +import Foundation +import Combine + +// ViewModel의 내부 Combine 구독 객체 +extension MovieBookingViewModel { + + //이 두개 함수는 단순히 값 할당만하면 되니 assign 사용 + func setupButtonStateSubscription() { + $selectedMovieID + .map { $0 != nil } + .assign(to: &$isTheaterButtonEnabled) + } + + func setupDateSelectionSubscription() { + $selectedTheaters + .map { !$0.isEmpty } + .assign(to: &$isDateSelectionEnabled) + } + + + // 얘는 정보 받아서 더 복잡한 코드를 수행해야하니 .sink사용 + func setupTimeSelectionSubscription() { + Publishers.CombineLatest3($selectedMovieID, $selectedTheaters, $selectedDate) + //실제로 값이 바뀌었을 때만 동작하도록 보장 + .removeDuplicates { (prev, current) in + return prev.0 == current.0 && prev.1 == current.1 && prev.2 == current.2 + } + .sink { [weak self] (movieID, theaters, date) in + if let movieID = movieID, !theaters.isEmpty, let date = date { + //sink안에서 값을 전달한 후 UI를 업데이트 해야됨 + //파라미터로 sink안에서 업데이트된 값을 전달 + //이렇게 안하고 직접 뷰모델에 접근해서 데이터를 사용하면 레이스 컨디션 발생 + self?.loadTimeData(movieID: movieID, theaters: theaters, date: date) + } else { + self?.schedules = [] + } + } + .store(in: &cancellables) + } + + + func setupSearchSubscription() { + $searchText + .removeDuplicates() + .handleEvents(receiveOutput: { text in + if !text.isEmpty { + self.isSearching = true + } + }) + .debounce(for: .milliseconds(400), scheduler: DispatchQueue.main) + .sink { [weak self] (text) in + guard let self = self else { return } + + self.isSearching = false + + if text.isEmpty { + self.filteredMovies = [] + } else { + self.filteredMovies = self.movieCards.filter { movie in + movie.movieName.localizedCaseInsensitiveContains(text) + } + } + } + .store(in: &cancellables) + } +} diff --git a/week04/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift b/week04/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift index 7bd3f0a..9f1e358 100644 --- a/week04/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift +++ b/week04/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift @@ -149,11 +149,11 @@ struct MovieBookingView: View { dateButton(for: date) } } - } - // 극장이 선택되지 않았다면 전체적으로 반투명하게 처리 + } // 극장이 선택되지 않았다면 전체적으로 반투명하게 처리 .opacity(viewModel.isDateSelectionEnabled ? 1.0 : 0.4) // 극장이 선택되지 않았다면 터치 불가 .disabled(!viewModel.isDateSelectionEnabled) + } @@ -212,10 +212,10 @@ struct MovieBookingView: View { } } } - // 3가지 조건이 모두 충족되어야만 보이도록 처리 (애니메이션과 함께) - .opacity(viewModel.isAllSelected ? 1.0 : 0.0) - .animation(.easeInOut, value: viewModel.isAllSelected) - .disabled(!viewModel.isAllSelected) + // 'schedules 배열이 채워져있을때만 보이도록 + .opacity(!viewModel.schedules.isEmpty ? 1.0 : 0.0) + .animation(.easeInOut, value: !viewModel.schedules.isEmpty) + .disabled(viewModel.schedules.isEmpty) } //------------------------------------ @@ -251,9 +251,9 @@ struct MovieBookingView: View { private func dateButton(for date: Date) -> some View { - // 1. Button으로 감싸고 action을 정의합니다. + Button(action: { - // 2. 탭 했을 때 viewModel의 함수를 호출하는 것은 동일합니다. + viewModel.selectDate(date) }) { // 3. 기존 VStack은 Button의 Label(콘텐츠)이 됩니다. @@ -273,6 +273,8 @@ struct MovieBookingView: View { RoundedRectangle(cornerRadius: 12) .fill(viewModel.selectedDate == date ? .purple03: Color.clear) ) + + } .buttonStyle(.plain) @@ -294,10 +296,10 @@ struct MovieBookingView: View { } else if calendar.isDateInTomorrow(date) { return "내일" } else { - // "월", "화", "수"... 형식으로 변환 + let formatter = DateFormatter() formatter.locale = Locale(identifier: "ko_KR") - formatter.dateFormat = "E" // "E"는 요일을 한 글자로 표시 + formatter.dateFormat = "E" return formatter.string(from: date) } } From 94ca2ec53b4c7a1cea8c1be85f97325493b4142e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=B7=E1=84=8C=E1=85=B5=E1=84=8B?= =?UTF-8?q?=E1=85=AD=E1=86=BC?= Date: Sat, 1 Nov 2025 16:58:16 +0900 Subject: [PATCH 5/8] =?UTF-8?q?week05=EB=A1=9C=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Megabox.xcodeproj/project.pbxproj | 0 .../project.xcworkspace/contents.xcworkspacedata | 0 .../xcdebugger/Breakpoints_v2.xcbkptlist | 0 .../xcschemes/xcschememanagement.plist | 0 .../AccentColor.colorset/Contents.json | 0 .../AppIcon.appiconset/Contents.json | 0 .../Assets.xcassets/Apple.imageset/Apple.pdf | Bin .../Assets.xcassets/Apple.imageset/Contents.json | 0 .../Assets.xcassets/Button_1.imageset/Button_1.pdf | Bin .../Assets.xcassets/Button_1.imageset/Contents.json | 0 .../Megabox/Assets.xcassets/Contents.json | 0 .../Assets.xcassets/Kakao.imageset/Contents.json | 0 .../Assets.xcassets/Kakao.imageset/Kakao.pdf | Bin .../Assets.xcassets/Naver.imageset/Contents.json | 0 .../Assets.xcassets/Naver.imageset/LoginBtn.pdf | Bin .../Assets.xcassets/arrow.imageset/Contents.json | 0 .../Assets.xcassets/arrow.imageset/arrow.pdf | Bin .../Assets.xcassets/image 2.imageset/Contents.json | 0 .../Assets.xcassets/image 2.imageset/image 2.pdf | Bin .../Assets.xcassets/image 3.imageset/Contents.json | 0 .../Assets.xcassets/image 3.imageset/image 3.pdf | Bin .../Assets.xcassets/m-001.imageset/Contents.json | 0 ...210\230\352\260\200\354\227\206\353\213\244.pdf" | Bin .../Assets.xcassets/m-002.imageset/Contents.json | 0 .../Megabox/Assets.xcassets/m-002.imageset/f1.pdf | Bin .../Assets.xcassets/m-003.imageset/Contents.json | 0 ...251\270\354\235\230\354\271\274\353\202\240.pdf" | Bin .../Assets.xcassets/m-004.imageset/Contents.json | 0 .../m-004.imageset/\354\226\274\352\265\264.pdf" | Bin .../Assets.xcassets/m-005.imageset/Contents.json | 0 ...205\270\354\274\200\355\236\210\353\251\224.pdf" | Bin .../Assets.xcassets/m-006.imageset/Contents.json | 0 .../m-006.imageset/\353\263\264\354\212\244.pdf" | Bin .../Assets.xcassets/m-007.imageset/Contents.json | 0 .../m-007.imageset/\354\225\274\353\213\271.pdf" | Bin .../Assets.xcassets/m-008.imageset/Contents.json | 0 .../m-008.imageset/\353\241\234\354\246\210.pdf" | Bin .../meboxLogo 1.imageset/Contents.json | 0 .../meboxLogo 1.imageset/meboxLogo 1.pdf | Bin .../meboxLogo 2.imageset/Contents.json | 0 .../meboxLogo 2.imageset/meboxLogo 1.pdf | Bin .../Assets.xcassets/movie.imageset/Contents.json | 0 .../Assets.xcassets/movie.imageset/movie.pdf | Bin .../moviefeed.imageset/Contents.json | 0 .../moviefeed.imageset/moviefeed.pdf | Bin .../Assets.xcassets/sony.imageset/Contents.json | 0 .../Megabox/Assets.xcassets/sony.imageset/sony.pdf | Bin .../Assets.xcassets/umc 1.imageset/Contents.json | 0 .../Assets.xcassets/umc 1.imageset/umc 1.pdf | Bin .../Contents.json" | 0 ...236\245\353\263\204\354\230\210\353\247\244.pdf" | Bin .../Contents.json" | 0 ...260\224\354\235\274\354\230\244\353\215\224.pdf" | Bin .../Contents.json" | 0 ...231\224\353\263\204\354\230\210\353\247\244.pdf" | Bin .../Contents.json" | 0 ...263\204\352\264\200\354\230\210\353\247\244.pdf" | Bin .../Contents.json" | 0 ...12\244\355\204\260 \354\202\254\354\247\204.pdf" | Bin .../Megabox/EnumTypes/ChartType.swift | 0 {week04 => week05}/Megabox/EnumTypes/InfoType.swift | 0 .../Fonts/ColorSets.xcassets/Blue/Contents.json | 0 .../Blue/blue00.colorset/Contents.json | 0 .../Blue/blue01.colorset/Contents.json | 0 .../Blue/blue02.colorset/Contents.json | 0 .../Blue/blue03.colorset/Contents.json | 0 .../Blue/blue04.colorset/Contents.json | 0 .../Blue/blue05.colorset/Contents.json | 0 .../Blue/blue06.colorset/Contents.json | 0 .../Blue/blue07.colorset/Contents.json | 0 .../Blue/blue08.colorset/Contents.json | 0 .../Blue/blue09.colorset/Contents.json | 0 .../Megabox/Fonts/ColorSets.xcassets/Contents.json | 0 .../Fonts/ColorSets.xcassets/Etc/Contents.json | 0 .../Etc/tag.colorset/Contents.json | 0 .../Fonts/ColorSets.xcassets/Grey/Contents.json | 0 .../Grey/grey00.colorset/Contents.json | 0 .../Grey/grey01.colorset/Contents.json | 0 .../Grey/grey02.colorset/Contents.json | 0 .../Grey/grey03.colorset/Contents.json | 0 .../Grey/grey04.colorset/Contents.json | 0 .../Grey/grey05.colorset/Contents.json | 0 .../Grey/grey06.colorset/Contents.json | 0 .../Grey/grey07.colorset/Contents.json | 0 .../Grey/grey08.colorset/Contents.json | 0 .../Grey/grey09.colorset/Contents.json | 0 .../Fonts/ColorSets.xcassets/Purple/Contents.json | 0 .../Purple/purple00.colorset/Contents.json | 0 .../Purple/purple01.colorset/Contents.json | 0 .../Purple/purple02.colorset/Contents.json | 0 .../Purple/purple03.colorset/Contents.json | 0 .../Purple/purple04.colorset/Contents.json | 0 .../Purple/purple05.colorset/Contents.json | 0 .../Purple/purple06.colorset/Contents.json | 0 .../Purple/purple07.colorset/Contents.json | 0 .../Purple/purple08.colorset/Contents.json | 0 .../Purple/purple09.colorset/Contents.json | 0 .../WhiteBlack/Black.colorset/Contents.json | 0 .../ColorSets.xcassets/WhiteBlack/Contents.json | 0 .../WhiteBlack/White.colorset/Contents.json | 0 {week04 => week05}/Megabox/Fonts/Font.swift | 0 .../Megabox/Fonts/Pretendard-Black.otf | Bin .../Megabox/Fonts/Pretendard-Bold.otf | Bin .../Megabox/Fonts/Pretendard-ExtraBold.otf | Bin .../Megabox/Fonts/Pretendard-ExtraLight.otf | Bin .../Megabox/Fonts/Pretendard-Light.ttf | Bin .../Megabox/Fonts/Pretendard-Medium.ttf | Bin .../Megabox/Fonts/Pretendard-Regular.ttf | Bin .../Megabox/Fonts/Pretendard-SemiBold.ttf | Bin .../Megabox/Fonts/Pretendard-Thin.ttf | Bin .../Megabox/Fonts/PretendardVariable.ttf | Bin {week04 => week05}/Megabox/Info.plist | 0 {week04 => week05}/Megabox/JSON/MovieSchedule.json | 0 .../Megabox/LoginNavigation/ContentView.swift | 0 {week04 => week05}/Megabox/MegaboxApp.swift | 0 .../Megabox/Model/ColorExtension.swift | 0 .../Megabox/Model/DTO/APIResponseDTO.swift | 0 {week04 => week05}/Megabox/Model/LoginModel.swift | 0 {week04 => week05}/Megabox/Model/MovieCards.swift | 0 .../Megabox/Model/MovieDescription.swift | 0 {week04 => week05}/Megabox/Model/Theater.swift | 0 .../Megabox/ViewModels/LoginViewModel.swift | 0 .../MovieBookingViewModels/DataLogic.swift | 0 .../MovieBookingViewModel.swift | 0 .../MovieBookingViewModels/MovieDataService.swift | 0 .../MovieBookingViewModels/Subscriptions.swift | 0 .../Megabox/ViewModels/MovieCardsViewModel.swift | 0 .../Megabox/ViewModels/UserViewModel.swift | 0 .../Megabox/Views/SingleViews/InfoButtonView.swift | 0 .../Megabox/Views/SingleViews/LoginView.swift | 0 .../SingleViews/MovieView/MovieBookingView.swift | 0 .../Views/SingleViews/MovieView/MovieCardView.swift | 0 .../SingleViews/MovieView/MovieDetailView.swift | 0 .../SingleViews/MovieView/MovieSheetView.swift | 0 .../Megabox/Views/SingleViews/SplashView.swift | 0 .../Megabox/Views/SingleViews/UserInfoView.swift | 0 .../Megabox/Views/Tabviews/HomeView.swift | 0 .../Megabox/Views/Tabviews/ProfileView.swift | 0 .../Megabox/Views/Tabviews/Tabs.swift | 0 {week04 => week05}/MegaboxTests/MegaboxTests.swift | 0 .../MegaboxUITests/MegaboxUITests.swift | 0 .../MegaboxUITests/MegaboxUITestsLaunchTests.swift | 0 {week04 => week05}/keyword/.gitkeep | 0 {week04 => week05}/mission/.gitkeep | 0 144 files changed, 0 insertions(+), 0 deletions(-) rename {week04 => week05}/Megabox.xcodeproj/project.pbxproj (100%) rename {week04 => week05}/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) rename {week04 => week05}/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist (100%) rename {week04 => week05}/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist (100%) rename {week04 => week05}/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/Apple.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/Button_1.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/Kakao.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/Naver.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/arrow.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/image 2.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/image 3.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/m-001.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" => "week05/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" (100%) rename {week04 => week05}/Megabox/Assets.xcassets/m-002.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/m-002.imageset/f1.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/m-003.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" => "week05/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" (100%) rename {week04 => week05}/Megabox/Assets.xcassets/m-004.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" => "week05/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" (100%) rename {week04 => week05}/Megabox/Assets.xcassets/m-005.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" => "week05/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" (100%) rename {week04 => week05}/Megabox/Assets.xcassets/m-006.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" => "week05/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" (100%) rename {week04 => week05}/Megabox/Assets.xcassets/m-007.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" => "week05/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" (100%) rename {week04 => week05}/Megabox/Assets.xcassets/m-008.imageset/Contents.json (100%) rename "week04/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" => "week05/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" (100%) rename {week04 => week05}/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/movie.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/movie.imageset/movie.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/sony.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/sony.imageset/sony.pdf (100%) rename {week04 => week05}/Megabox/Assets.xcassets/umc 1.imageset/Contents.json (100%) rename {week04 => week05}/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf (100%) rename "week04/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" => "week05/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" (100%) rename "week04/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" => "week05/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" (100%) rename "week04/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" => "week05/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" (100%) rename "week04/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" => "week05/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" (100%) rename "week04/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" => "week05/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" (100%) rename "week04/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" => "week05/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" (100%) rename "week04/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" => "week05/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" (100%) rename "week04/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" => "week05/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" (100%) rename "week04/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" => "week05/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" (100%) rename "week04/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" => "week05/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" (100%) rename {week04 => week05}/Megabox/EnumTypes/ChartType.swift (100%) rename {week04 => week05}/Megabox/EnumTypes/InfoType.swift (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json (100%) rename {week04 => week05}/Megabox/Fonts/Font.swift (100%) rename {week04 => week05}/Megabox/Fonts/Pretendard-Black.otf (100%) rename {week04 => week05}/Megabox/Fonts/Pretendard-Bold.otf (100%) rename {week04 => week05}/Megabox/Fonts/Pretendard-ExtraBold.otf (100%) rename {week04 => week05}/Megabox/Fonts/Pretendard-ExtraLight.otf (100%) rename {week04 => week05}/Megabox/Fonts/Pretendard-Light.ttf (100%) rename {week04 => week05}/Megabox/Fonts/Pretendard-Medium.ttf (100%) rename {week04 => week05}/Megabox/Fonts/Pretendard-Regular.ttf (100%) rename {week04 => week05}/Megabox/Fonts/Pretendard-SemiBold.ttf (100%) rename {week04 => week05}/Megabox/Fonts/Pretendard-Thin.ttf (100%) rename {week04 => week05}/Megabox/Fonts/PretendardVariable.ttf (100%) rename {week04 => week05}/Megabox/Info.plist (100%) rename {week04 => week05}/Megabox/JSON/MovieSchedule.json (100%) rename {week04 => week05}/Megabox/LoginNavigation/ContentView.swift (100%) rename {week04 => week05}/Megabox/MegaboxApp.swift (100%) rename {week04 => week05}/Megabox/Model/ColorExtension.swift (100%) rename {week04 => week05}/Megabox/Model/DTO/APIResponseDTO.swift (100%) rename {week04 => week05}/Megabox/Model/LoginModel.swift (100%) rename {week04 => week05}/Megabox/Model/MovieCards.swift (100%) rename {week04 => week05}/Megabox/Model/MovieDescription.swift (100%) rename {week04 => week05}/Megabox/Model/Theater.swift (100%) rename {week04 => week05}/Megabox/ViewModels/LoginViewModel.swift (100%) rename {week04 => week05}/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift (100%) rename {week04 => week05}/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift (100%) rename {week04 => week05}/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift (100%) rename {week04 => week05}/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift (100%) rename {week04 => week05}/Megabox/ViewModels/MovieCardsViewModel.swift (100%) rename {week04 => week05}/Megabox/ViewModels/UserViewModel.swift (100%) rename {week04 => week05}/Megabox/Views/SingleViews/InfoButtonView.swift (100%) rename {week04 => week05}/Megabox/Views/SingleViews/LoginView.swift (100%) rename {week04 => week05}/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift (100%) rename {week04 => week05}/Megabox/Views/SingleViews/MovieView/MovieCardView.swift (100%) rename {week04 => week05}/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift (100%) rename {week04 => week05}/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift (100%) rename {week04 => week05}/Megabox/Views/SingleViews/SplashView.swift (100%) rename {week04 => week05}/Megabox/Views/SingleViews/UserInfoView.swift (100%) rename {week04 => week05}/Megabox/Views/Tabviews/HomeView.swift (100%) rename {week04 => week05}/Megabox/Views/Tabviews/ProfileView.swift (100%) rename {week04 => week05}/Megabox/Views/Tabviews/Tabs.swift (100%) rename {week04 => week05}/MegaboxTests/MegaboxTests.swift (100%) rename {week04 => week05}/MegaboxUITests/MegaboxUITests.swift (100%) rename {week04 => week05}/MegaboxUITests/MegaboxUITestsLaunchTests.swift (100%) rename {week04 => week05}/keyword/.gitkeep (100%) rename {week04 => week05}/mission/.gitkeep (100%) diff --git a/week04/Megabox.xcodeproj/project.pbxproj b/week05/Megabox.xcodeproj/project.pbxproj similarity index 100% rename from week04/Megabox.xcodeproj/project.pbxproj rename to week05/Megabox.xcodeproj/project.pbxproj diff --git a/week04/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/week05/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from week04/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to week05/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/week04/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/week05/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist similarity index 100% rename from week04/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist rename to week05/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist diff --git a/week04/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist b/week05/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 100% rename from week04/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist rename to week05/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/week04/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json b/week05/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json rename to week05/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json b/week05/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json rename to week05/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf b/week05/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf rename to week05/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf diff --git a/week04/Megabox/Assets.xcassets/Apple.imageset/Contents.json b/week05/Megabox/Assets.xcassets/Apple.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/Apple.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/Apple.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf b/week05/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf rename to week05/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf diff --git a/week04/Megabox/Assets.xcassets/Button_1.imageset/Contents.json b/week05/Megabox/Assets.xcassets/Button_1.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/Button_1.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/Button_1.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/Contents.json b/week05/Megabox/Assets.xcassets/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/Contents.json rename to week05/Megabox/Assets.xcassets/Contents.json diff --git a/week04/Megabox/Assets.xcassets/Kakao.imageset/Contents.json b/week05/Megabox/Assets.xcassets/Kakao.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/Kakao.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/Kakao.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf b/week05/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf rename to week05/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf diff --git a/week04/Megabox/Assets.xcassets/Naver.imageset/Contents.json b/week05/Megabox/Assets.xcassets/Naver.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/Naver.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/Naver.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf b/week05/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf rename to week05/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf diff --git a/week04/Megabox/Assets.xcassets/arrow.imageset/Contents.json b/week05/Megabox/Assets.xcassets/arrow.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/arrow.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/arrow.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf b/week05/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf rename to week05/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf diff --git a/week04/Megabox/Assets.xcassets/image 2.imageset/Contents.json b/week05/Megabox/Assets.xcassets/image 2.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/image 2.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/image 2.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf b/week05/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf rename to week05/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf diff --git a/week04/Megabox/Assets.xcassets/image 3.imageset/Contents.json b/week05/Megabox/Assets.xcassets/image 3.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/image 3.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/image 3.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf b/week05/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf rename to week05/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf diff --git a/week04/Megabox/Assets.xcassets/m-001.imageset/Contents.json b/week05/Megabox/Assets.xcassets/m-001.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/m-001.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/m-001.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" "b/week05/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" rename to "week05/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" diff --git a/week04/Megabox/Assets.xcassets/m-002.imageset/Contents.json b/week05/Megabox/Assets.xcassets/m-002.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/m-002.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/m-002.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/m-002.imageset/f1.pdf b/week05/Megabox/Assets.xcassets/m-002.imageset/f1.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/m-002.imageset/f1.pdf rename to week05/Megabox/Assets.xcassets/m-002.imageset/f1.pdf diff --git a/week04/Megabox/Assets.xcassets/m-003.imageset/Contents.json b/week05/Megabox/Assets.xcassets/m-003.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/m-003.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/m-003.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" "b/week05/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" rename to "week05/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" diff --git a/week04/Megabox/Assets.xcassets/m-004.imageset/Contents.json b/week05/Megabox/Assets.xcassets/m-004.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/m-004.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/m-004.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" "b/week05/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" rename to "week05/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" diff --git a/week04/Megabox/Assets.xcassets/m-005.imageset/Contents.json b/week05/Megabox/Assets.xcassets/m-005.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/m-005.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/m-005.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" "b/week05/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" rename to "week05/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" diff --git a/week04/Megabox/Assets.xcassets/m-006.imageset/Contents.json b/week05/Megabox/Assets.xcassets/m-006.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/m-006.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/m-006.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" "b/week05/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" rename to "week05/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" diff --git a/week04/Megabox/Assets.xcassets/m-007.imageset/Contents.json b/week05/Megabox/Assets.xcassets/m-007.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/m-007.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/m-007.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" "b/week05/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" rename to "week05/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" diff --git a/week04/Megabox/Assets.xcassets/m-008.imageset/Contents.json b/week05/Megabox/Assets.xcassets/m-008.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/m-008.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/m-008.imageset/Contents.json diff --git "a/week04/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" "b/week05/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" rename to "week05/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" diff --git a/week04/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json b/week05/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf b/week05/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf rename to week05/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf diff --git a/week04/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json b/week05/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf b/week05/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf rename to week05/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf diff --git a/week04/Megabox/Assets.xcassets/movie.imageset/Contents.json b/week05/Megabox/Assets.xcassets/movie.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/movie.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/movie.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/movie.imageset/movie.pdf b/week05/Megabox/Assets.xcassets/movie.imageset/movie.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/movie.imageset/movie.pdf rename to week05/Megabox/Assets.xcassets/movie.imageset/movie.pdf diff --git a/week04/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json b/week05/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf b/week05/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf rename to week05/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf diff --git a/week04/Megabox/Assets.xcassets/sony.imageset/Contents.json b/week05/Megabox/Assets.xcassets/sony.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/sony.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/sony.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/sony.imageset/sony.pdf b/week05/Megabox/Assets.xcassets/sony.imageset/sony.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/sony.imageset/sony.pdf rename to week05/Megabox/Assets.xcassets/sony.imageset/sony.pdf diff --git a/week04/Megabox/Assets.xcassets/umc 1.imageset/Contents.json b/week05/Megabox/Assets.xcassets/umc 1.imageset/Contents.json similarity index 100% rename from week04/Megabox/Assets.xcassets/umc 1.imageset/Contents.json rename to week05/Megabox/Assets.xcassets/umc 1.imageset/Contents.json diff --git a/week04/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf b/week05/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf similarity index 100% rename from week04/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf rename to week05/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf diff --git "a/week04/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" "b/week05/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" rename to "week05/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" diff --git "a/week04/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" "b/week05/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" rename to "week05/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" diff --git "a/week04/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" "b/week05/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" rename to "week05/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" diff --git "a/week04/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" "b/week05/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" rename to "week05/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" diff --git "a/week04/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" "b/week05/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" rename to "week05/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" diff --git "a/week04/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" "b/week05/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" rename to "week05/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" diff --git "a/week04/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" "b/week05/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" rename to "week05/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" diff --git "a/week04/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" "b/week05/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" rename to "week05/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" diff --git "a/week04/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" "b/week05/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" rename to "week05/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" diff --git "a/week04/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" "b/week05/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" similarity index 100% rename from "week04/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" rename to "week05/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" diff --git a/week04/Megabox/EnumTypes/ChartType.swift b/week05/Megabox/EnumTypes/ChartType.swift similarity index 100% rename from week04/Megabox/EnumTypes/ChartType.swift rename to week05/Megabox/EnumTypes/ChartType.swift diff --git a/week04/Megabox/EnumTypes/InfoType.swift b/week05/Megabox/EnumTypes/InfoType.swift similarity index 100% rename from week04/Megabox/EnumTypes/InfoType.swift rename to week05/Megabox/EnumTypes/InfoType.swift diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json diff --git a/week04/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json b/week05/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json similarity index 100% rename from week04/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json rename to week05/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json diff --git a/week04/Megabox/Fonts/Font.swift b/week05/Megabox/Fonts/Font.swift similarity index 100% rename from week04/Megabox/Fonts/Font.swift rename to week05/Megabox/Fonts/Font.swift diff --git a/week04/Megabox/Fonts/Pretendard-Black.otf b/week05/Megabox/Fonts/Pretendard-Black.otf similarity index 100% rename from week04/Megabox/Fonts/Pretendard-Black.otf rename to week05/Megabox/Fonts/Pretendard-Black.otf diff --git a/week04/Megabox/Fonts/Pretendard-Bold.otf b/week05/Megabox/Fonts/Pretendard-Bold.otf similarity index 100% rename from week04/Megabox/Fonts/Pretendard-Bold.otf rename to week05/Megabox/Fonts/Pretendard-Bold.otf diff --git a/week04/Megabox/Fonts/Pretendard-ExtraBold.otf b/week05/Megabox/Fonts/Pretendard-ExtraBold.otf similarity index 100% rename from week04/Megabox/Fonts/Pretendard-ExtraBold.otf rename to week05/Megabox/Fonts/Pretendard-ExtraBold.otf diff --git a/week04/Megabox/Fonts/Pretendard-ExtraLight.otf b/week05/Megabox/Fonts/Pretendard-ExtraLight.otf similarity index 100% rename from week04/Megabox/Fonts/Pretendard-ExtraLight.otf rename to week05/Megabox/Fonts/Pretendard-ExtraLight.otf diff --git a/week04/Megabox/Fonts/Pretendard-Light.ttf b/week05/Megabox/Fonts/Pretendard-Light.ttf similarity index 100% rename from week04/Megabox/Fonts/Pretendard-Light.ttf rename to week05/Megabox/Fonts/Pretendard-Light.ttf diff --git a/week04/Megabox/Fonts/Pretendard-Medium.ttf b/week05/Megabox/Fonts/Pretendard-Medium.ttf similarity index 100% rename from week04/Megabox/Fonts/Pretendard-Medium.ttf rename to week05/Megabox/Fonts/Pretendard-Medium.ttf diff --git a/week04/Megabox/Fonts/Pretendard-Regular.ttf b/week05/Megabox/Fonts/Pretendard-Regular.ttf similarity index 100% rename from week04/Megabox/Fonts/Pretendard-Regular.ttf rename to week05/Megabox/Fonts/Pretendard-Regular.ttf diff --git a/week04/Megabox/Fonts/Pretendard-SemiBold.ttf b/week05/Megabox/Fonts/Pretendard-SemiBold.ttf similarity index 100% rename from week04/Megabox/Fonts/Pretendard-SemiBold.ttf rename to week05/Megabox/Fonts/Pretendard-SemiBold.ttf diff --git a/week04/Megabox/Fonts/Pretendard-Thin.ttf b/week05/Megabox/Fonts/Pretendard-Thin.ttf similarity index 100% rename from week04/Megabox/Fonts/Pretendard-Thin.ttf rename to week05/Megabox/Fonts/Pretendard-Thin.ttf diff --git a/week04/Megabox/Fonts/PretendardVariable.ttf b/week05/Megabox/Fonts/PretendardVariable.ttf similarity index 100% rename from week04/Megabox/Fonts/PretendardVariable.ttf rename to week05/Megabox/Fonts/PretendardVariable.ttf diff --git a/week04/Megabox/Info.plist b/week05/Megabox/Info.plist similarity index 100% rename from week04/Megabox/Info.plist rename to week05/Megabox/Info.plist diff --git a/week04/Megabox/JSON/MovieSchedule.json b/week05/Megabox/JSON/MovieSchedule.json similarity index 100% rename from week04/Megabox/JSON/MovieSchedule.json rename to week05/Megabox/JSON/MovieSchedule.json diff --git a/week04/Megabox/LoginNavigation/ContentView.swift b/week05/Megabox/LoginNavigation/ContentView.swift similarity index 100% rename from week04/Megabox/LoginNavigation/ContentView.swift rename to week05/Megabox/LoginNavigation/ContentView.swift diff --git a/week04/Megabox/MegaboxApp.swift b/week05/Megabox/MegaboxApp.swift similarity index 100% rename from week04/Megabox/MegaboxApp.swift rename to week05/Megabox/MegaboxApp.swift diff --git a/week04/Megabox/Model/ColorExtension.swift b/week05/Megabox/Model/ColorExtension.swift similarity index 100% rename from week04/Megabox/Model/ColorExtension.swift rename to week05/Megabox/Model/ColorExtension.swift diff --git a/week04/Megabox/Model/DTO/APIResponseDTO.swift b/week05/Megabox/Model/DTO/APIResponseDTO.swift similarity index 100% rename from week04/Megabox/Model/DTO/APIResponseDTO.swift rename to week05/Megabox/Model/DTO/APIResponseDTO.swift diff --git a/week04/Megabox/Model/LoginModel.swift b/week05/Megabox/Model/LoginModel.swift similarity index 100% rename from week04/Megabox/Model/LoginModel.swift rename to week05/Megabox/Model/LoginModel.swift diff --git a/week04/Megabox/Model/MovieCards.swift b/week05/Megabox/Model/MovieCards.swift similarity index 100% rename from week04/Megabox/Model/MovieCards.swift rename to week05/Megabox/Model/MovieCards.swift diff --git a/week04/Megabox/Model/MovieDescription.swift b/week05/Megabox/Model/MovieDescription.swift similarity index 100% rename from week04/Megabox/Model/MovieDescription.swift rename to week05/Megabox/Model/MovieDescription.swift diff --git a/week04/Megabox/Model/Theater.swift b/week05/Megabox/Model/Theater.swift similarity index 100% rename from week04/Megabox/Model/Theater.swift rename to week05/Megabox/Model/Theater.swift diff --git a/week04/Megabox/ViewModels/LoginViewModel.swift b/week05/Megabox/ViewModels/LoginViewModel.swift similarity index 100% rename from week04/Megabox/ViewModels/LoginViewModel.swift rename to week05/Megabox/ViewModels/LoginViewModel.swift diff --git a/week04/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift b/week05/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift similarity index 100% rename from week04/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift rename to week05/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift diff --git a/week04/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift b/week05/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift similarity index 100% rename from week04/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift rename to week05/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift diff --git a/week04/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift b/week05/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift similarity index 100% rename from week04/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift rename to week05/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift diff --git a/week04/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift b/week05/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift similarity index 100% rename from week04/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift rename to week05/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift diff --git a/week04/Megabox/ViewModels/MovieCardsViewModel.swift b/week05/Megabox/ViewModels/MovieCardsViewModel.swift similarity index 100% rename from week04/Megabox/ViewModels/MovieCardsViewModel.swift rename to week05/Megabox/ViewModels/MovieCardsViewModel.swift diff --git a/week04/Megabox/ViewModels/UserViewModel.swift b/week05/Megabox/ViewModels/UserViewModel.swift similarity index 100% rename from week04/Megabox/ViewModels/UserViewModel.swift rename to week05/Megabox/ViewModels/UserViewModel.swift diff --git a/week04/Megabox/Views/SingleViews/InfoButtonView.swift b/week05/Megabox/Views/SingleViews/InfoButtonView.swift similarity index 100% rename from week04/Megabox/Views/SingleViews/InfoButtonView.swift rename to week05/Megabox/Views/SingleViews/InfoButtonView.swift diff --git a/week04/Megabox/Views/SingleViews/LoginView.swift b/week05/Megabox/Views/SingleViews/LoginView.swift similarity index 100% rename from week04/Megabox/Views/SingleViews/LoginView.swift rename to week05/Megabox/Views/SingleViews/LoginView.swift diff --git a/week04/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift b/week05/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift similarity index 100% rename from week04/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift rename to week05/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift diff --git a/week04/Megabox/Views/SingleViews/MovieView/MovieCardView.swift b/week05/Megabox/Views/SingleViews/MovieView/MovieCardView.swift similarity index 100% rename from week04/Megabox/Views/SingleViews/MovieView/MovieCardView.swift rename to week05/Megabox/Views/SingleViews/MovieView/MovieCardView.swift diff --git a/week04/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift b/week05/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift similarity index 100% rename from week04/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift rename to week05/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift diff --git a/week04/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift b/week05/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift similarity index 100% rename from week04/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift rename to week05/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift diff --git a/week04/Megabox/Views/SingleViews/SplashView.swift b/week05/Megabox/Views/SingleViews/SplashView.swift similarity index 100% rename from week04/Megabox/Views/SingleViews/SplashView.swift rename to week05/Megabox/Views/SingleViews/SplashView.swift diff --git a/week04/Megabox/Views/SingleViews/UserInfoView.swift b/week05/Megabox/Views/SingleViews/UserInfoView.swift similarity index 100% rename from week04/Megabox/Views/SingleViews/UserInfoView.swift rename to week05/Megabox/Views/SingleViews/UserInfoView.swift diff --git a/week04/Megabox/Views/Tabviews/HomeView.swift b/week05/Megabox/Views/Tabviews/HomeView.swift similarity index 100% rename from week04/Megabox/Views/Tabviews/HomeView.swift rename to week05/Megabox/Views/Tabviews/HomeView.swift diff --git a/week04/Megabox/Views/Tabviews/ProfileView.swift b/week05/Megabox/Views/Tabviews/ProfileView.swift similarity index 100% rename from week04/Megabox/Views/Tabviews/ProfileView.swift rename to week05/Megabox/Views/Tabviews/ProfileView.swift diff --git a/week04/Megabox/Views/Tabviews/Tabs.swift b/week05/Megabox/Views/Tabviews/Tabs.swift similarity index 100% rename from week04/Megabox/Views/Tabviews/Tabs.swift rename to week05/Megabox/Views/Tabviews/Tabs.swift diff --git a/week04/MegaboxTests/MegaboxTests.swift b/week05/MegaboxTests/MegaboxTests.swift similarity index 100% rename from week04/MegaboxTests/MegaboxTests.swift rename to week05/MegaboxTests/MegaboxTests.swift diff --git a/week04/MegaboxUITests/MegaboxUITests.swift b/week05/MegaboxUITests/MegaboxUITests.swift similarity index 100% rename from week04/MegaboxUITests/MegaboxUITests.swift rename to week05/MegaboxUITests/MegaboxUITests.swift diff --git a/week04/MegaboxUITests/MegaboxUITestsLaunchTests.swift b/week05/MegaboxUITests/MegaboxUITestsLaunchTests.swift similarity index 100% rename from week04/MegaboxUITests/MegaboxUITestsLaunchTests.swift rename to week05/MegaboxUITests/MegaboxUITestsLaunchTests.swift diff --git a/week04/keyword/.gitkeep b/week05/keyword/.gitkeep similarity index 100% rename from week04/keyword/.gitkeep rename to week05/keyword/.gitkeep diff --git a/week04/mission/.gitkeep b/week05/mission/.gitkeep similarity index 100% rename from week04/mission/.gitkeep rename to week05/mission/.gitkeep From 77d47197fb87a5505f0df5f27ea8baf92394c118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=B7=E1=84=8C=E1=85=B5=E1=84=8B?= =?UTF-8?q?=E1=85=AD=E1=86=BC?= Date: Sun, 9 Nov 2025 21:25:39 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=ED=82=A4=EC=B2=B4=EC=9D=B8,=20=EC=B9=B4?= =?UTF-8?q?=EC=B9=B4=EC=98=A4=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- week05/Megabox/MegaboxApp.swift | 20 --- .../Megabox/ViewModels/LoginViewModel.swift | 26 ---- week05/Megabox/ViewModels/UserViewModel.swift | 32 ----- .../Megabox.xcodeproj/project.pbxproj | 69 ++++++++++ .../contents.xcworkspacedata | 0 .../xcshareddata/swiftpm/Package.resolved | 24 ++++ .../xcdebugger/Breakpoints_v2.xcbkptlist | 0 .../xcschemes/xcschememanagement.plist | 0 .../AccentColor.colorset/Contents.json | 0 .../AppIcon.appiconset/Contents.json | 0 .../Assets.xcassets/Apple.imageset/Apple.pdf | Bin .../Apple.imageset/Contents.json | 0 .../Button_1.imageset/Button_1.pdf | Bin .../Button_1.imageset/Contents.json | 0 .../Megabox/Assets.xcassets/Contents.json | 0 .../Kakao.imageset/Contents.json | 0 .../Assets.xcassets/Kakao.imageset/Kakao.pdf | Bin .../Naver.imageset/Contents.json | 0 .../Naver.imageset/LoginBtn.pdf | Bin .../arrow.imageset/Contents.json | 0 .../Assets.xcassets/arrow.imageset/arrow.pdf | Bin .../image 2.imageset/Contents.json | 0 .../image 2.imageset/image 2.pdf | Bin .../image 3.imageset/Contents.json | 0 .../image 3.imageset/image 3.pdf | Bin .../m-001.imageset/Contents.json | 0 ...0\352\260\200\354\227\206\353\213\244.pdf" | Bin .../m-002.imageset/Contents.json | 0 .../Assets.xcassets/m-002.imageset/f1.pdf | Bin .../m-003.imageset/Contents.json | 0 ...0\354\235\230\354\271\274\353\202\240.pdf" | Bin .../m-004.imageset/Contents.json | 0 .../\354\226\274\352\265\264.pdf" | Bin .../m-005.imageset/Contents.json | 0 ...0\354\274\200\355\236\210\353\251\224.pdf" | Bin .../m-006.imageset/Contents.json | 0 .../\353\263\264\354\212\244.pdf" | Bin .../m-007.imageset/Contents.json | 0 .../\354\225\274\353\213\271.pdf" | Bin .../m-008.imageset/Contents.json | 0 .../\353\241\234\354\246\210.pdf" | Bin .../meboxLogo 1.imageset/Contents.json | 0 .../meboxLogo 1.imageset/meboxLogo 1.pdf | Bin .../meboxLogo 2.imageset/Contents.json | 0 .../meboxLogo 2.imageset/meboxLogo 1.pdf | Bin .../movie.imageset/Contents.json | 0 .../Assets.xcassets/movie.imageset/movie.pdf | Bin .../moviefeed.imageset/Contents.json | 0 .../moviefeed.imageset/moviefeed.pdf | Bin .../sony.imageset/Contents.json | 0 .../Assets.xcassets/sony.imageset/sony.pdf | Bin .../umc 1.imageset/Contents.json | 0 .../Assets.xcassets/umc 1.imageset/umc 1.pdf | Bin .../Contents.json" | 0 ...5\353\263\204\354\230\210\353\247\244.pdf" | Bin .../Contents.json" | 0 ...4\354\235\274\354\230\244\353\215\224.pdf" | Bin .../Contents.json" | 0 ...4\353\263\204\354\230\210\353\247\244.pdf" | Bin .../Contents.json" | 0 ...4\352\264\200\354\230\210\353\247\244.pdf" | Bin .../Contents.json" | 0 ...\355\204\260 \354\202\254\354\247\204.pdf" | Bin .../Megabox/EnumTypes/ChartType.swift | 0 .../Megabox/EnumTypes/InfoType.swift | 0 .../ColorSets.xcassets/Blue/Contents.json | 0 .../Blue/blue00.colorset/Contents.json | 0 .../Blue/blue01.colorset/Contents.json | 0 .../Blue/blue02.colorset/Contents.json | 0 .../Blue/blue03.colorset/Contents.json | 0 .../Blue/blue04.colorset/Contents.json | 0 .../Blue/blue05.colorset/Contents.json | 0 .../Blue/blue06.colorset/Contents.json | 0 .../Blue/blue07.colorset/Contents.json | 0 .../Blue/blue08.colorset/Contents.json | 0 .../Blue/blue09.colorset/Contents.json | 0 .../Fonts/ColorSets.xcassets/Contents.json | 0 .../ColorSets.xcassets/Etc/Contents.json | 0 .../Etc/tag.colorset/Contents.json | 0 .../ColorSets.xcassets/Grey/Contents.json | 0 .../Grey/grey00.colorset/Contents.json | 0 .../Grey/grey01.colorset/Contents.json | 0 .../Grey/grey02.colorset/Contents.json | 0 .../Grey/grey03.colorset/Contents.json | 0 .../Grey/grey04.colorset/Contents.json | 0 .../Grey/grey05.colorset/Contents.json | 0 .../Grey/grey06.colorset/Contents.json | 0 .../Grey/grey07.colorset/Contents.json | 0 .../Grey/grey08.colorset/Contents.json | 0 .../Grey/grey09.colorset/Contents.json | 0 .../ColorSets.xcassets/Purple/Contents.json | 0 .../Purple/purple00.colorset/Contents.json | 0 .../Purple/purple01.colorset/Contents.json | 0 .../Purple/purple02.colorset/Contents.json | 0 .../Purple/purple03.colorset/Contents.json | 0 .../Purple/purple04.colorset/Contents.json | 0 .../Purple/purple05.colorset/Contents.json | 0 .../Purple/purple06.colorset/Contents.json | 0 .../Purple/purple07.colorset/Contents.json | 0 .../Purple/purple08.colorset/Contents.json | 0 .../Purple/purple09.colorset/Contents.json | 0 .../WhiteBlack/Black.colorset/Contents.json | 0 .../WhiteBlack/Contents.json | 0 .../WhiteBlack/White.colorset/Contents.json | 0 {week05 => week06}/Megabox/Fonts/Font.swift | 0 .../Megabox/Fonts/Pretendard-Black.otf | Bin .../Megabox/Fonts/Pretendard-Bold.otf | Bin .../Megabox/Fonts/Pretendard-ExtraBold.otf | Bin .../Megabox/Fonts/Pretendard-ExtraLight.otf | Bin .../Megabox/Fonts/Pretendard-Light.ttf | Bin .../Megabox/Fonts/Pretendard-Medium.ttf | Bin .../Megabox/Fonts/Pretendard-Regular.ttf | Bin .../Megabox/Fonts/Pretendard-SemiBold.ttf | Bin .../Megabox/Fonts/Pretendard-Thin.ttf | Bin .../Megabox/Fonts/PretendardVariable.ttf | Bin {week05 => week06}/Megabox/Info.plist | 7 + .../Megabox/JSON/MovieSchedule.json | 0 .../Megabox/LoginNavigation/ContentView.swift | 0 week06/Megabox/MegaboxApp.swift | 27 ++++ .../Megabox/Model/ColorExtension.swift | 0 .../Megabox/Model/DTO/APIResponseDTO.swift | 0 week06/Megabox/Model/KeychainService.swift | 123 ++++++++++++++++++ .../Megabox/Model/LoginModel.swift | 0 .../Megabox/Model/MovieCards.swift | 0 .../Megabox/Model/MovieDescription.swift | 0 .../Megabox/Model/Theater.swift | 0 week06/Megabox/Model/TokenInfo.swift | 6 + .../Megabox/ViewModels/LoginViewModel.swift | 115 ++++++++++++++++ .../MovieBookingViewModels/DataLogic.swift | 0 .../MovieBookingViewModel.swift | 0 .../MovieDataService.swift | 0 .../Subscriptions.swift | 0 .../ViewModels/MovieCardsViewModel.swift | 0 week06/Megabox/ViewModels/UserViewModel.swift | 86 ++++++++++++ .../Views/SingleViews/InfoButtonView.swift | 0 .../Megabox/Views/SingleViews/LoginView.swift | 15 ++- .../MovieView/MovieBookingView.swift | 0 .../SingleViews/MovieView/MovieCardView.swift | 0 .../MovieView/MovieDetailView.swift | 0 .../MovieView/MovieSheetView.swift | 0 .../Views/SingleViews/SplashView.swift | 0 .../Views/SingleViews/UserInfoView.swift | 2 +- .../Megabox/Views/Tabviews/HomeView.swift | 0 .../Megabox/Views/Tabviews/ProfileView.swift | 10 +- .../Megabox/Views/Tabviews/Tabs.swift | 2 - .../MegaboxTests/MegaboxTests.swift | 0 .../MegaboxUITests/MegaboxUITests.swift | 0 .../MegaboxUITestsLaunchTests.swift | 0 {week05 => week06}/keyword/.gitkeep | 0 {week05 => week06}/mission/.gitkeep | 0 150 files changed, 479 insertions(+), 85 deletions(-) delete mode 100644 week05/Megabox/MegaboxApp.swift delete mode 100644 week05/Megabox/ViewModels/LoginViewModel.swift delete mode 100644 week05/Megabox/ViewModels/UserViewModel.swift rename {week05 => week06}/Megabox.xcodeproj/project.pbxproj (86%) rename {week05 => week06}/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata (100%) create mode 100644 week06/Megabox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved rename {week05 => week06}/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist (100%) rename {week05 => week06}/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist (100%) rename {week05 => week06}/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/Apple.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/Button_1.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/Kakao.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/Naver.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/arrow.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/image 2.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/image 3.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/m-001.imageset/Contents.json (100%) rename "week05/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" => "week06/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" (100%) rename {week05 => week06}/Megabox/Assets.xcassets/m-002.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/m-002.imageset/f1.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/m-003.imageset/Contents.json (100%) rename "week05/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" => "week06/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" (100%) rename {week05 => week06}/Megabox/Assets.xcassets/m-004.imageset/Contents.json (100%) rename "week05/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" => "week06/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" (100%) rename {week05 => week06}/Megabox/Assets.xcassets/m-005.imageset/Contents.json (100%) rename "week05/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" => "week06/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" (100%) rename {week05 => week06}/Megabox/Assets.xcassets/m-006.imageset/Contents.json (100%) rename "week05/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" => "week06/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" (100%) rename {week05 => week06}/Megabox/Assets.xcassets/m-007.imageset/Contents.json (100%) rename "week05/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" => "week06/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" (100%) rename {week05 => week06}/Megabox/Assets.xcassets/m-008.imageset/Contents.json (100%) rename "week05/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" => "week06/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" (100%) rename {week05 => week06}/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/movie.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/movie.imageset/movie.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/sony.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/sony.imageset/sony.pdf (100%) rename {week05 => week06}/Megabox/Assets.xcassets/umc 1.imageset/Contents.json (100%) rename {week05 => week06}/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf (100%) rename "week05/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" => "week06/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" (100%) rename "week05/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" => "week06/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" (100%) rename "week05/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" => "week06/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" (100%) rename "week05/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" => "week06/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" (100%) rename "week05/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" => "week06/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" (100%) rename "week05/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" => "week06/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" (100%) rename "week05/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" => "week06/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" (100%) rename "week05/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" => "week06/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" (100%) rename "week05/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" => "week06/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" (100%) rename "week05/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" => "week06/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" (100%) rename {week05 => week06}/Megabox/EnumTypes/ChartType.swift (100%) rename {week05 => week06}/Megabox/EnumTypes/InfoType.swift (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json (100%) rename {week05 => week06}/Megabox/Fonts/Font.swift (100%) rename {week05 => week06}/Megabox/Fonts/Pretendard-Black.otf (100%) rename {week05 => week06}/Megabox/Fonts/Pretendard-Bold.otf (100%) rename {week05 => week06}/Megabox/Fonts/Pretendard-ExtraBold.otf (100%) rename {week05 => week06}/Megabox/Fonts/Pretendard-ExtraLight.otf (100%) rename {week05 => week06}/Megabox/Fonts/Pretendard-Light.ttf (100%) rename {week05 => week06}/Megabox/Fonts/Pretendard-Medium.ttf (100%) rename {week05 => week06}/Megabox/Fonts/Pretendard-Regular.ttf (100%) rename {week05 => week06}/Megabox/Fonts/Pretendard-SemiBold.ttf (100%) rename {week05 => week06}/Megabox/Fonts/Pretendard-Thin.ttf (100%) rename {week05 => week06}/Megabox/Fonts/PretendardVariable.ttf (100%) rename {week05 => week06}/Megabox/Info.plist (74%) rename {week05 => week06}/Megabox/JSON/MovieSchedule.json (100%) rename {week05 => week06}/Megabox/LoginNavigation/ContentView.swift (100%) create mode 100644 week06/Megabox/MegaboxApp.swift rename {week05 => week06}/Megabox/Model/ColorExtension.swift (100%) rename {week05 => week06}/Megabox/Model/DTO/APIResponseDTO.swift (100%) create mode 100644 week06/Megabox/Model/KeychainService.swift rename {week05 => week06}/Megabox/Model/LoginModel.swift (100%) rename {week05 => week06}/Megabox/Model/MovieCards.swift (100%) rename {week05 => week06}/Megabox/Model/MovieDescription.swift (100%) rename {week05 => week06}/Megabox/Model/Theater.swift (100%) create mode 100644 week06/Megabox/Model/TokenInfo.swift create mode 100644 week06/Megabox/ViewModels/LoginViewModel.swift rename {week05 => week06}/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift (100%) rename {week05 => week06}/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift (100%) rename {week05 => week06}/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift (100%) rename {week05 => week06}/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift (100%) rename {week05 => week06}/Megabox/ViewModels/MovieCardsViewModel.swift (100%) create mode 100644 week06/Megabox/ViewModels/UserViewModel.swift rename {week05 => week06}/Megabox/Views/SingleViews/InfoButtonView.swift (100%) rename {week05 => week06}/Megabox/Views/SingleViews/LoginView.swift (95%) rename {week05 => week06}/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift (100%) rename {week05 => week06}/Megabox/Views/SingleViews/MovieView/MovieCardView.swift (100%) rename {week05 => week06}/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift (100%) rename {week05 => week06}/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift (100%) rename {week05 => week06}/Megabox/Views/SingleViews/SplashView.swift (100%) rename {week05 => week06}/Megabox/Views/SingleViews/UserInfoView.swift (97%) rename {week05 => week06}/Megabox/Views/Tabviews/HomeView.swift (100%) rename {week05 => week06}/Megabox/Views/Tabviews/ProfileView.swift (94%) rename {week05 => week06}/Megabox/Views/Tabviews/Tabs.swift (94%) rename {week05 => week06}/MegaboxTests/MegaboxTests.swift (100%) rename {week05 => week06}/MegaboxUITests/MegaboxUITests.swift (100%) rename {week05 => week06}/MegaboxUITests/MegaboxUITestsLaunchTests.swift (100%) rename {week05 => week06}/keyword/.gitkeep (100%) rename {week05 => week06}/mission/.gitkeep (100%) diff --git a/week05/Megabox/MegaboxApp.swift b/week05/Megabox/MegaboxApp.swift deleted file mode 100644 index b48eb5c..0000000 --- a/week05/Megabox/MegaboxApp.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// MegaboxApp.swift -// Megabox -// -// Created by 엄지용 on 9/19/25. -// - -import SwiftUI - -@main -struct MegaboxApp: App { - @State private var userViewModel = UserViewModel() // 이 객체 생성하고 State로 메모리에 유지 - var body: some Scene { - - WindowGroup { - SplashView() - .environment(userViewModel) - } - } -} diff --git a/week05/Megabox/ViewModels/LoginViewModel.swift b/week05/Megabox/ViewModels/LoginViewModel.swift deleted file mode 100644 index e606dfb..0000000 --- a/week05/Megabox/ViewModels/LoginViewModel.swift +++ /dev/null @@ -1,26 +0,0 @@ -// LoginViewModel.swift - -import Foundation -import SwiftUI - -@Observable -class LoginViewModel { - - private var userViewModel: UserViewModel - - init(userViewModel: UserViewModel) { - self.userViewModel = userViewModel - } - - // 로그인 성공 여부를 Bool 값으로 반환 - func login(username: String, password: String) { - if username == "Eom175" && password == "eom175" { - print("로그인 성공!") - // 로그인 성공 시, 공유 userViewModel의 상태를 변경 - userViewModel.username = username - userViewModel.isLoggedIn = true - } else { - print("로그인 실패: 아이디 또는 비밀번호가 다릅니다.") - } - } -} diff --git a/week05/Megabox/ViewModels/UserViewModel.swift b/week05/Megabox/ViewModels/UserViewModel.swift deleted file mode 100644 index d95f492..0000000 --- a/week05/Megabox/ViewModels/UserViewModel.swift +++ /dev/null @@ -1,32 +0,0 @@ -//여기서는 사용자 정보만 처리 -import Foundation -import SwiftUI - -@Observable -class UserViewModel { - var username: String = "" - var password: String = "" - var isLoggedIn: Bool = false - - private let usernameKey = "username" - private let passwordKey = "password" - - init() { - self.username = UserDefaults.standard.string(forKey: usernameKey) ?? "" - self.password = UserDefaults.standard.string(forKey: passwordKey) ?? "" - } - - func saveUsername(newUsername: String) { - UserDefaults.standard.set(newUsername, forKey: usernameKey) - self.username = newUsername - print("\(newUsername)으로 이름 변경 및 저장 완료") - } - - func saveCredentials(username: String, password: String) { - UserDefaults.standard.set(username, forKey: usernameKey) - UserDefaults.standard.set(password, forKey: passwordKey) - self.username = username - self.password = password - print("아이디와 비밀번호 저장 완료") - } -} diff --git a/week05/Megabox.xcodeproj/project.pbxproj b/week06/Megabox.xcodeproj/project.pbxproj similarity index 86% rename from week05/Megabox.xcodeproj/project.pbxproj rename to week06/Megabox.xcodeproj/project.pbxproj index 6794ff4..ec46856 100644 --- a/week05/Megabox.xcodeproj/project.pbxproj +++ b/week06/Megabox.xcodeproj/project.pbxproj @@ -6,6 +6,13 @@ objectVersion = 77; objects = { +/* Begin PBXBuildFile section */ + 2C1BA1012EC0B50B00271AFC /* KakaoSDKCommon in Frameworks */ = {isa = PBXBuildFile; productRef = 2C1BA1002EC0B50B00271AFC /* KakaoSDKCommon */; }; + 2C1BA1032EC0B51300271AFC /* KakaoSDKAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 2C1BA1022EC0B51300271AFC /* KakaoSDKAuth */; }; + 2C1BA1052EC0B51900271AFC /* KakaoSDKUser in Frameworks */ = {isa = PBXBuildFile; productRef = 2C1BA1042EC0B51900271AFC /* KakaoSDKUser */; }; + 2CA6BFBE2EBF98740073B32F /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 2CA6BFBD2EBF98740073B32F /* Alamofire */; }; +/* End PBXBuildFile section */ + /* Begin PBXContainerItemProxy section */ 2C80F02E2E7CE1EB00752AE4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -65,6 +72,10 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 2C1BA1052EC0B51900271AFC /* KakaoSDKUser in Frameworks */, + 2C1BA1012EC0B50B00271AFC /* KakaoSDKCommon in Frameworks */, + 2CA6BFBE2EBF98740073B32F /* Alamofire in Frameworks */, + 2C1BA1032EC0B51300271AFC /* KakaoSDKAuth in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -91,6 +102,7 @@ 2C80F0222E7CE1EB00752AE4 /* Megabox */, 2C80F0302E7CE1EB00752AE4 /* MegaboxTests */, 2C80F03A2E7CE1EB00752AE4 /* MegaboxUITests */, + 2CA6BFBB2EBF970A0073B32F /* Frameworks */, 2C80F0212E7CE1EB00752AE4 /* Products */, ); sourceTree = ""; @@ -105,6 +117,13 @@ name = Products; sourceTree = ""; }; + 2CA6BFBB2EBF970A0073B32F /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -125,6 +144,10 @@ ); name = Megabox; packageProductDependencies = ( + 2CA6BFBD2EBF98740073B32F /* Alamofire */, + 2C1BA1002EC0B50B00271AFC /* KakaoSDKCommon */, + 2C1BA1022EC0B51300271AFC /* KakaoSDKAuth */, + 2C1BA1042EC0B51900271AFC /* KakaoSDKUser */, ); productName = Megabox; productReference = 2C80F0202E7CE1EB00752AE4 /* Megabox.app */; @@ -208,6 +231,10 @@ ); mainGroup = 2C80F0172E7CE1EB00752AE4; minimizedProjectReferenceProxies = 1; + packageReferences = ( + 2CA6BFBC2EBF97820073B32F /* XCRemoteSwiftPackageReference "Alamofire" */, + 2CA6BFC12EC0AA040073B32F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */, + ); preferredProjectObjectVersion = 77; productRefGroup = 2C80F0212E7CE1EB00752AE4 /* Products */; projectDirPath = ""; @@ -573,6 +600,48 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 2CA6BFBC2EBF97820073B32F /* XCRemoteSwiftPackageReference "Alamofire" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Alamofire/Alamofire"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.10.2; + }; + }; + 2CA6BFC12EC0AA040073B32F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kakao/kakao-ios-sdk"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 2.25.0; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 2C1BA1002EC0B50B00271AFC /* KakaoSDKCommon */ = { + isa = XCSwiftPackageProductDependency; + package = 2CA6BFC12EC0AA040073B32F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; + productName = KakaoSDKCommon; + }; + 2C1BA1022EC0B51300271AFC /* KakaoSDKAuth */ = { + isa = XCSwiftPackageProductDependency; + package = 2CA6BFC12EC0AA040073B32F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; + productName = KakaoSDKAuth; + }; + 2C1BA1042EC0B51900271AFC /* KakaoSDKUser */ = { + isa = XCSwiftPackageProductDependency; + package = 2CA6BFC12EC0AA040073B32F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; + productName = KakaoSDKUser; + }; + 2CA6BFBD2EBF98740073B32F /* Alamofire */ = { + isa = XCSwiftPackageProductDependency; + package = 2CA6BFBC2EBF97820073B32F /* XCRemoteSwiftPackageReference "Alamofire" */; + productName = Alamofire; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 2C80F0182E7CE1EB00752AE4 /* Project object */; } diff --git a/week05/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/week06/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from week05/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to week06/Megabox.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/week06/Megabox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/week06/Megabox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..122bc24 --- /dev/null +++ b/week06/Megabox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,24 @@ +{ + "originHash" : "fcdb6d5dc76fef3126c97e3f42a1ae0bb40cd2c958e8591ac4547ce131a2698e", + "pins" : [ + { + "identity" : "alamofire", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Alamofire/Alamofire", + "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/week05/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/week06/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist similarity index 100% rename from week05/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist rename to week06/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist diff --git a/week05/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist b/week06/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 100% rename from week05/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist rename to week06/Megabox.xcodeproj/xcuserdata/eomjiyong.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/week05/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json b/week06/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json rename to week06/Megabox/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json b/week06/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json rename to week06/Megabox/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf b/week06/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf rename to week06/Megabox/Assets.xcassets/Apple.imageset/Apple.pdf diff --git a/week05/Megabox/Assets.xcassets/Apple.imageset/Contents.json b/week06/Megabox/Assets.xcassets/Apple.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/Apple.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/Apple.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf b/week06/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf rename to week06/Megabox/Assets.xcassets/Button_1.imageset/Button_1.pdf diff --git a/week05/Megabox/Assets.xcassets/Button_1.imageset/Contents.json b/week06/Megabox/Assets.xcassets/Button_1.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/Button_1.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/Button_1.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/Contents.json b/week06/Megabox/Assets.xcassets/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/Contents.json rename to week06/Megabox/Assets.xcassets/Contents.json diff --git a/week05/Megabox/Assets.xcassets/Kakao.imageset/Contents.json b/week06/Megabox/Assets.xcassets/Kakao.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/Kakao.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/Kakao.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf b/week06/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf rename to week06/Megabox/Assets.xcassets/Kakao.imageset/Kakao.pdf diff --git a/week05/Megabox/Assets.xcassets/Naver.imageset/Contents.json b/week06/Megabox/Assets.xcassets/Naver.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/Naver.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/Naver.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf b/week06/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf rename to week06/Megabox/Assets.xcassets/Naver.imageset/LoginBtn.pdf diff --git a/week05/Megabox/Assets.xcassets/arrow.imageset/Contents.json b/week06/Megabox/Assets.xcassets/arrow.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/arrow.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/arrow.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf b/week06/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf rename to week06/Megabox/Assets.xcassets/arrow.imageset/arrow.pdf diff --git a/week05/Megabox/Assets.xcassets/image 2.imageset/Contents.json b/week06/Megabox/Assets.xcassets/image 2.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/image 2.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/image 2.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf b/week06/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf rename to week06/Megabox/Assets.xcassets/image 2.imageset/image 2.pdf diff --git a/week05/Megabox/Assets.xcassets/image 3.imageset/Contents.json b/week06/Megabox/Assets.xcassets/image 3.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/image 3.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/image 3.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf b/week06/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf rename to week06/Megabox/Assets.xcassets/image 3.imageset/image 3.pdf diff --git a/week05/Megabox/Assets.xcassets/m-001.imageset/Contents.json b/week06/Megabox/Assets.xcassets/m-001.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/m-001.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/m-001.imageset/Contents.json diff --git "a/week05/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" "b/week06/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" similarity index 100% rename from "week05/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" rename to "week06/Megabox/Assets.xcassets/m-001.imageset/\354\226\264\354\251\224\354\210\230\352\260\200\354\227\206\353\213\244.pdf" diff --git a/week05/Megabox/Assets.xcassets/m-002.imageset/Contents.json b/week06/Megabox/Assets.xcassets/m-002.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/m-002.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/m-002.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/m-002.imageset/f1.pdf b/week06/Megabox/Assets.xcassets/m-002.imageset/f1.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/m-002.imageset/f1.pdf rename to week06/Megabox/Assets.xcassets/m-002.imageset/f1.pdf diff --git a/week05/Megabox/Assets.xcassets/m-003.imageset/Contents.json b/week06/Megabox/Assets.xcassets/m-003.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/m-003.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/m-003.imageset/Contents.json diff --git "a/week05/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" "b/week06/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" similarity index 100% rename from "week05/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" rename to "week06/Megabox/Assets.xcassets/m-003.imageset/\352\267\200\353\251\270\354\235\230\354\271\274\353\202\240.pdf" diff --git a/week05/Megabox/Assets.xcassets/m-004.imageset/Contents.json b/week06/Megabox/Assets.xcassets/m-004.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/m-004.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/m-004.imageset/Contents.json diff --git "a/week05/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" "b/week06/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" similarity index 100% rename from "week05/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" rename to "week06/Megabox/Assets.xcassets/m-004.imageset/\354\226\274\352\265\264.pdf" diff --git a/week05/Megabox/Assets.xcassets/m-005.imageset/Contents.json b/week06/Megabox/Assets.xcassets/m-005.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/m-005.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/m-005.imageset/Contents.json diff --git "a/week05/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" "b/week06/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" similarity index 100% rename from "week05/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" rename to "week06/Megabox/Assets.xcassets/m-005.imageset/\353\252\250\353\205\270\353\205\270\354\274\200\355\236\210\353\251\224.pdf" diff --git a/week05/Megabox/Assets.xcassets/m-006.imageset/Contents.json b/week06/Megabox/Assets.xcassets/m-006.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/m-006.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/m-006.imageset/Contents.json diff --git "a/week05/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" "b/week06/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" similarity index 100% rename from "week05/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" rename to "week06/Megabox/Assets.xcassets/m-006.imageset/\353\263\264\354\212\244.pdf" diff --git a/week05/Megabox/Assets.xcassets/m-007.imageset/Contents.json b/week06/Megabox/Assets.xcassets/m-007.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/m-007.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/m-007.imageset/Contents.json diff --git "a/week05/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" "b/week06/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" similarity index 100% rename from "week05/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" rename to "week06/Megabox/Assets.xcassets/m-007.imageset/\354\225\274\353\213\271.pdf" diff --git a/week05/Megabox/Assets.xcassets/m-008.imageset/Contents.json b/week06/Megabox/Assets.xcassets/m-008.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/m-008.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/m-008.imageset/Contents.json diff --git "a/week05/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" "b/week06/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" similarity index 100% rename from "week05/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" rename to "week06/Megabox/Assets.xcassets/m-008.imageset/\353\241\234\354\246\210.pdf" diff --git a/week05/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json b/week06/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/meboxLogo 1.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf b/week06/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf rename to week06/Megabox/Assets.xcassets/meboxLogo 1.imageset/meboxLogo 1.pdf diff --git a/week05/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json b/week06/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/meboxLogo 2.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf b/week06/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf rename to week06/Megabox/Assets.xcassets/meboxLogo 2.imageset/meboxLogo 1.pdf diff --git a/week05/Megabox/Assets.xcassets/movie.imageset/Contents.json b/week06/Megabox/Assets.xcassets/movie.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/movie.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/movie.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/movie.imageset/movie.pdf b/week06/Megabox/Assets.xcassets/movie.imageset/movie.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/movie.imageset/movie.pdf rename to week06/Megabox/Assets.xcassets/movie.imageset/movie.pdf diff --git a/week05/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json b/week06/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/moviefeed.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf b/week06/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf rename to week06/Megabox/Assets.xcassets/moviefeed.imageset/moviefeed.pdf diff --git a/week05/Megabox/Assets.xcassets/sony.imageset/Contents.json b/week06/Megabox/Assets.xcassets/sony.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/sony.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/sony.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/sony.imageset/sony.pdf b/week06/Megabox/Assets.xcassets/sony.imageset/sony.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/sony.imageset/sony.pdf rename to week06/Megabox/Assets.xcassets/sony.imageset/sony.pdf diff --git a/week05/Megabox/Assets.xcassets/umc 1.imageset/Contents.json b/week06/Megabox/Assets.xcassets/umc 1.imageset/Contents.json similarity index 100% rename from week05/Megabox/Assets.xcassets/umc 1.imageset/Contents.json rename to week06/Megabox/Assets.xcassets/umc 1.imageset/Contents.json diff --git a/week05/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf b/week06/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf similarity index 100% rename from week05/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf rename to week06/Megabox/Assets.xcassets/umc 1.imageset/umc 1.pdf diff --git "a/week05/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" "b/week06/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" similarity index 100% rename from "week05/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" rename to "week06/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/Contents.json" diff --git "a/week05/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" "b/week06/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" similarity index 100% rename from "week05/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" rename to "week06/Megabox/Assets.xcassets/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.imageset/\352\267\271\354\236\245\353\263\204\354\230\210\353\247\244.pdf" diff --git "a/week05/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" "b/week06/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" similarity index 100% rename from "week05/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" rename to "week06/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/Contents.json" diff --git "a/week05/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" "b/week06/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" similarity index 100% rename from "week05/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" rename to "week06/Megabox/Assets.xcassets/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.imageset/\353\252\250\353\260\224\354\235\274\354\230\244\353\215\224.pdf" diff --git "a/week05/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" "b/week06/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" similarity index 100% rename from "week05/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" rename to "week06/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/Contents.json" diff --git "a/week05/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" "b/week06/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" similarity index 100% rename from "week05/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" rename to "week06/Megabox/Assets.xcassets/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.imageset/\354\230\201\355\231\224\353\263\204\354\230\210\353\247\244.pdf" diff --git "a/week05/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" "b/week06/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" similarity index 100% rename from "week05/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" rename to "week06/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/Contents.json" diff --git "a/week05/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" "b/week06/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" similarity index 100% rename from "week05/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" rename to "week06/Megabox/Assets.xcassets/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.imageset/\355\212\271\353\263\204\352\264\200\354\230\210\353\247\244.pdf" diff --git "a/week05/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" "b/week06/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" similarity index 100% rename from "week05/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" rename to "week06/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/Contents.json" diff --git "a/week05/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" "b/week06/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" similarity index 100% rename from "week05/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" rename to "week06/Megabox/Assets.xcassets/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.imageset/\355\217\254\354\212\244\355\204\260 \354\202\254\354\247\204.pdf" diff --git a/week05/Megabox/EnumTypes/ChartType.swift b/week06/Megabox/EnumTypes/ChartType.swift similarity index 100% rename from week05/Megabox/EnumTypes/ChartType.swift rename to week06/Megabox/EnumTypes/ChartType.swift diff --git a/week05/Megabox/EnumTypes/InfoType.swift b/week06/Megabox/EnumTypes/InfoType.swift similarity index 100% rename from week05/Megabox/EnumTypes/InfoType.swift rename to week06/Megabox/EnumTypes/InfoType.swift diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Blue/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue00.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue01.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue02.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue03.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue04.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue05.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue06.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue07.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue08.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Blue/blue09.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Etc/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Etc/tag.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Grey/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey00.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey01.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey02.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey03.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey04.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey05.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey06.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey07.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey08.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Grey/grey09.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Purple/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple00.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple01.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple02.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple03.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple04.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple05.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple06.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple07.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple08.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/Purple/purple09.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Black.colorset/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/Contents.json diff --git a/week05/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json b/week06/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json similarity index 100% rename from week05/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json rename to week06/Megabox/Fonts/ColorSets.xcassets/WhiteBlack/White.colorset/Contents.json diff --git a/week05/Megabox/Fonts/Font.swift b/week06/Megabox/Fonts/Font.swift similarity index 100% rename from week05/Megabox/Fonts/Font.swift rename to week06/Megabox/Fonts/Font.swift diff --git a/week05/Megabox/Fonts/Pretendard-Black.otf b/week06/Megabox/Fonts/Pretendard-Black.otf similarity index 100% rename from week05/Megabox/Fonts/Pretendard-Black.otf rename to week06/Megabox/Fonts/Pretendard-Black.otf diff --git a/week05/Megabox/Fonts/Pretendard-Bold.otf b/week06/Megabox/Fonts/Pretendard-Bold.otf similarity index 100% rename from week05/Megabox/Fonts/Pretendard-Bold.otf rename to week06/Megabox/Fonts/Pretendard-Bold.otf diff --git a/week05/Megabox/Fonts/Pretendard-ExtraBold.otf b/week06/Megabox/Fonts/Pretendard-ExtraBold.otf similarity index 100% rename from week05/Megabox/Fonts/Pretendard-ExtraBold.otf rename to week06/Megabox/Fonts/Pretendard-ExtraBold.otf diff --git a/week05/Megabox/Fonts/Pretendard-ExtraLight.otf b/week06/Megabox/Fonts/Pretendard-ExtraLight.otf similarity index 100% rename from week05/Megabox/Fonts/Pretendard-ExtraLight.otf rename to week06/Megabox/Fonts/Pretendard-ExtraLight.otf diff --git a/week05/Megabox/Fonts/Pretendard-Light.ttf b/week06/Megabox/Fonts/Pretendard-Light.ttf similarity index 100% rename from week05/Megabox/Fonts/Pretendard-Light.ttf rename to week06/Megabox/Fonts/Pretendard-Light.ttf diff --git a/week05/Megabox/Fonts/Pretendard-Medium.ttf b/week06/Megabox/Fonts/Pretendard-Medium.ttf similarity index 100% rename from week05/Megabox/Fonts/Pretendard-Medium.ttf rename to week06/Megabox/Fonts/Pretendard-Medium.ttf diff --git a/week05/Megabox/Fonts/Pretendard-Regular.ttf b/week06/Megabox/Fonts/Pretendard-Regular.ttf similarity index 100% rename from week05/Megabox/Fonts/Pretendard-Regular.ttf rename to week06/Megabox/Fonts/Pretendard-Regular.ttf diff --git a/week05/Megabox/Fonts/Pretendard-SemiBold.ttf b/week06/Megabox/Fonts/Pretendard-SemiBold.ttf similarity index 100% rename from week05/Megabox/Fonts/Pretendard-SemiBold.ttf rename to week06/Megabox/Fonts/Pretendard-SemiBold.ttf diff --git a/week05/Megabox/Fonts/Pretendard-Thin.ttf b/week06/Megabox/Fonts/Pretendard-Thin.ttf similarity index 100% rename from week05/Megabox/Fonts/Pretendard-Thin.ttf rename to week06/Megabox/Fonts/Pretendard-Thin.ttf diff --git a/week05/Megabox/Fonts/PretendardVariable.ttf b/week06/Megabox/Fonts/PretendardVariable.ttf similarity index 100% rename from week05/Megabox/Fonts/PretendardVariable.ttf rename to week06/Megabox/Fonts/PretendardVariable.ttf diff --git a/week05/Megabox/Info.plist b/week06/Megabox/Info.plist similarity index 74% rename from week05/Megabox/Info.plist rename to week06/Megabox/Info.plist index 84b21d7..e3cf28c 100644 --- a/week05/Megabox/Info.plist +++ b/week06/Megabox/Info.plist @@ -2,6 +2,13 @@ + KAKAO_APP_KEY + kakao$e795673090d362bc069f906c37141855 + LSApplicationQueriesSchemes + + kakaokompassauth + kakaotalk + UIAppFonts Pretendard-Light.otf diff --git a/week05/Megabox/JSON/MovieSchedule.json b/week06/Megabox/JSON/MovieSchedule.json similarity index 100% rename from week05/Megabox/JSON/MovieSchedule.json rename to week06/Megabox/JSON/MovieSchedule.json diff --git a/week05/Megabox/LoginNavigation/ContentView.swift b/week06/Megabox/LoginNavigation/ContentView.swift similarity index 100% rename from week05/Megabox/LoginNavigation/ContentView.swift rename to week06/Megabox/LoginNavigation/ContentView.swift diff --git a/week06/Megabox/MegaboxApp.swift b/week06/Megabox/MegaboxApp.swift new file mode 100644 index 0000000..66f862f --- /dev/null +++ b/week06/Megabox/MegaboxApp.swift @@ -0,0 +1,27 @@ +// MegaboxApp.swift (수정) + +import SwiftUI +import KakaoSDKCommon +import KakaoSDKAuth + +@main +struct MegaboxApp: App { + @State private var userViewModel = UserViewModel() + + init(){ + KakaoSDK.initSDK(appKey: "e795673090d362bc069f906c37141855") + } + + var body: some Scene { + WindowGroup { + SplashView() // 👈 이 뷰가 userViewModel을 물려받음 + .environment(userViewModel) + // ✅ 2. [필수 추가] 카카오 로그인 콜백을 받기 위해 이 코드가 꼭 필요합니다. + .onOpenURL { url in + if (AuthApi.isKakaoTalkLoginUrl(url)) { + _ = AuthController.handleOpenUrl(url: url) + } + } + } + } +} diff --git a/week05/Megabox/Model/ColorExtension.swift b/week06/Megabox/Model/ColorExtension.swift similarity index 100% rename from week05/Megabox/Model/ColorExtension.swift rename to week06/Megabox/Model/ColorExtension.swift diff --git a/week05/Megabox/Model/DTO/APIResponseDTO.swift b/week06/Megabox/Model/DTO/APIResponseDTO.swift similarity index 100% rename from week05/Megabox/Model/DTO/APIResponseDTO.swift rename to week06/Megabox/Model/DTO/APIResponseDTO.swift diff --git a/week06/Megabox/Model/KeychainService.swift b/week06/Megabox/Model/KeychainService.swift new file mode 100644 index 0000000..e70e62d --- /dev/null +++ b/week06/Megabox/Model/KeychainService.swift @@ -0,0 +1,123 @@ +import Foundation +import Security + +//account가 아이디 +//service가 보여주는 페이지 + + +class KeychainService{ + + static let shared = KeychainService() //싱글톤으로 선언 + private init() {} + + //Token 인코딩 + func save(item: T, service: String, account: String){ + do{ + let data = try JSONEncoder().encode(item) + saveInfo(data: data, service: service, account: account) // 이 함수에 인코딩한 토큰 전달 + }catch { + print("Keychain 저장 실패 (Encoding): \(error.localizedDescription)") + } + + } + + // + func read(service: String, account: String, type: T.Type) -> T? { + // Keychain에서 Token가져오기 + guard let data = readInfo(service: service, account: account) else { + return nil + } + + // Data를 Codable 객체로 디코딩 + do { + let item = try JSONDecoder().decode(T.self, from: data) + return item + } catch { + print("Keychain 읽기 실패 (Decoding): \(error.localizedDescription)") + return nil + } + } + + // ⭐️ [추가] String을 위한 저장 함수 + func saveString(_ string: String, service: String, account: String) { + // String을 Data로 변환 + guard let data = string.data(using: .utf8) else { + print("Keychain String 저장 실패 (Data 변환)") + return + } + // 기존의 Data 저장 함수 호출 + saveInfo(data: data, service: service, account: account) + } + + // ⭐️ [추가] String을 위한 읽기 함수 + func readString(service: String, account: String) -> String? { + // 기존의 Data 읽기 함수 호출 + guard let data = readInfo(service: service, account: account) else { + return nil + } + // Data를 String으로 변환하여 반환 + return String(data: data, encoding: .utf8) + } + + + + //인코딩된 상태로 전달 + func saveInfo(data: Data, service: String, account: String){ + + deleteInfo(service: service, account: account) + + let query: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrService as String: service, + kSecAttrAccount as String: account, + kSecValueData as String: data + ] + + let status = SecItemAdd(query as CFDictionary, nil) //KeyChain에다가 저장 + + if status != errSecSuccess { + print("Keychain 저장 실패 (Status: \(status))") + } + } + + + func readInfo(service: String, account: String) -> Data?{ + + let query: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrService as String: service, + kSecAttrAccount as String: account, + kSecReturnData as String: true, + kSecMatchLimit as String: kSecMatchLimitOne + ] + + var result: AnyObject? + let status = SecItemCopyMatching(query as CFDictionary, &result) + + if status == errSecSuccess{ + return result as? Data + }else{ + // errSecItemNotFound는 실패가 아닌, '항목 없음'이므로 조용히 처리 + if status != errSecItemNotFound { + print("Keychain 읽기 실패 (Status: \(status))") + } + return nil + } + } + + func deleteInfo(service: String, account:String){ + + + let query: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrService as String: service, + kSecAttrAccount as String: account + ] + + let status = SecItemDelete(query as CFDictionary) + if status != errSecSuccess && status != errSecItemNotFound { + print("Keychain 삭제 실패 (Status: \(status))") + } + } + +} diff --git a/week05/Megabox/Model/LoginModel.swift b/week06/Megabox/Model/LoginModel.swift similarity index 100% rename from week05/Megabox/Model/LoginModel.swift rename to week06/Megabox/Model/LoginModel.swift diff --git a/week05/Megabox/Model/MovieCards.swift b/week06/Megabox/Model/MovieCards.swift similarity index 100% rename from week05/Megabox/Model/MovieCards.swift rename to week06/Megabox/Model/MovieCards.swift diff --git a/week05/Megabox/Model/MovieDescription.swift b/week06/Megabox/Model/MovieDescription.swift similarity index 100% rename from week05/Megabox/Model/MovieDescription.swift rename to week06/Megabox/Model/MovieDescription.swift diff --git a/week05/Megabox/Model/Theater.swift b/week06/Megabox/Model/Theater.swift similarity index 100% rename from week05/Megabox/Model/Theater.swift rename to week06/Megabox/Model/Theater.swift diff --git a/week06/Megabox/Model/TokenInfo.swift b/week06/Megabox/Model/TokenInfo.swift new file mode 100644 index 0000000..a7fbcd3 --- /dev/null +++ b/week06/Megabox/Model/TokenInfo.swift @@ -0,0 +1,6 @@ +struct TokenInfo: Codable{ + let accessToken: String + let refreshToken: String +} + +//여기다가 토큰 저장 diff --git a/week06/Megabox/ViewModels/LoginViewModel.swift b/week06/Megabox/ViewModels/LoginViewModel.swift new file mode 100644 index 0000000..34f32ae --- /dev/null +++ b/week06/Megabox/ViewModels/LoginViewModel.swift @@ -0,0 +1,115 @@ +// LoginViewModel.swift (수정) + +import Foundation +import SwiftUI + +import Alamofire +import KakaoSDKCommon +import KakaoSDKAuth +import KakaoSDKUser + +@Observable +class LoginViewModel { + + private var userViewModel: UserViewModel + private var loginAPIURL = " ff" //여기다가 실제 서버 API주소 연결 + + init(userViewModel: UserViewModel) { + self.userViewModel = userViewModel + } + + // 로그인 시도 함수 + func login(username: String, password: String) { + + //서버에 전달한 파라미터 + let parameters:[String : String] = [ + "username" : username, + "password" : password + ] + + AF.request(loginAPIURL, method: .post, parameters: parameters, encoder: JSONParameterEncoder.default) + .validate(statusCode: 200..<300) + .responseDecodable(of: TokenInfo.self){ + response in + switch response.result{ + case .success(let tokenInfo): + print("로그인 성공") + DispatchQueue.main.sync{ + self.userViewModel.loginSuccess(username: username, tokens: tokenInfo) + + + } + case .failure(let error): + print("로그인 실패: \(error.localizedDescription)") + } + } + } + + // --- 카카오 로그인 함수 (이 함수가 fetchKakaoUserInfo를 호출) --- + func loginWithKakao() { + if (UserApi.isKakaoTalkLoginAvailable()) { + UserApi.shared.loginWithKakaoTalk { (oauthToken, error) in + if let error = error { + print("카카오톡 로그인 실패: \(error)") + } else if let oauthToken = oauthToken { + print("카카오톡 로그인 성공!") + // 👇 [성공 시] 이 함수를 호출합니다. + self.fetchKakaoUserInfo(oauthToken: oauthToken) + } + } + } else { + UserApi.shared.loginWithKakaoAccount { (oauthToken, error) in + if let error = error { + print("카카오 계정 로그인 실패: \(error)") + } else if let oauthToken = oauthToken { + print("카카오 계정 로그인 성공!") + // 👇 [성공 시] 이 함수를 호출합니다. + self.fetchKakaoUserInfo(oauthToken: oauthToken) + } + } + } + } + + + // --- 👇 [요청하신] fetchKakaoUserInfo 전체 코드 --- + /** + 카카오 SDK에서 성공적으로 토큰을 받은 후, + 해당 사용자의 정보를 가져오기 위해 호출됩니다. + - Parameter oauthToken: 카카오 SDK가 전달해준 인증 토큰 + */ + private func fetchKakaoUserInfo(oauthToken: OAuthToken) { + + // 1. 카카오 서버에 '방금 로그인한 사용자가 누구인지' 물어봅니다. + UserApi.shared.me() { (user, error) in + if let error = error { + print("카카오 사용자 정보 가져오기 실패: \(error)") + } + else if let user = user { + print("카카오 사용자 정보 가져오기 성공") + + // 2. [필수] 카카오에서 받은 사용자 고유 ID + guard let kakaoID = user.id else { + print("카카오 사용자 ID가 없습니다.") + return + } + + // 3. 카카오에서 받은 토큰을 -> 우리가 만든 TokenInfo 모델로 변환 + // (자체 서버가 없으므로 카카오 토큰을 그대로 키체인에 저장) + let ourTokenInfo = TokenInfo( + accessToken: oauthToken.accessToken, + refreshToken: oauthToken.refreshToken + ) + + // 4. [핵심] UserViewModel의 loginSuccess 함수를 호출합니다. + // (UI 업데이트이므로 메인 스레드에서 실행) + DispatchQueue.main.async { + self.userViewModel.loginSuccess( + username: String(kakaoID), // 카카오 ID(숫자)를 String으로 변환 + tokens: ourTokenInfo + ) + } + + } + } + } + } diff --git a/week05/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift b/week06/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift similarity index 100% rename from week05/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift rename to week06/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift diff --git a/week05/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift b/week06/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift similarity index 100% rename from week05/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift rename to week06/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift diff --git a/week05/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift b/week06/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift similarity index 100% rename from week05/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift rename to week06/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift diff --git a/week05/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift b/week06/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift similarity index 100% rename from week05/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift rename to week06/Megabox/ViewModels/MovieBookingViewModels/Subscriptions.swift diff --git a/week05/Megabox/ViewModels/MovieCardsViewModel.swift b/week06/Megabox/ViewModels/MovieCardsViewModel.swift similarity index 100% rename from week05/Megabox/ViewModels/MovieCardsViewModel.swift rename to week06/Megabox/ViewModels/MovieCardsViewModel.swift diff --git a/week06/Megabox/ViewModels/UserViewModel.swift b/week06/Megabox/ViewModels/UserViewModel.swift new file mode 100644 index 0000000..04f8c84 --- /dev/null +++ b/week06/Megabox/ViewModels/UserViewModel.swift @@ -0,0 +1,86 @@ +// UserViewModel.swift (전체 수정) +import Foundation +import SwiftUI + +@Observable +class UserViewModel { + var username: String = "" + var isLoggedIn: Bool = false + + private var tokenInfo: TokenInfo? + + // --- Keychain 식별자 --- + // ⚠️ ".com"은 고유하지 않습니다. "com.eom175.myapp"처럼 실제 번들 ID 등으로 변경하세요. + private let tokenService = ".com" + private let tokenAccount = "userTokens" // 토큰 저장을 위한 키 + private let usernameAccount = "username" // ⭐️ 아이디 저장을 위한 키 (추가) + + // private let usernameKey = "username" // ⬅️ UserDefaults 키 삭제 + + init() { + // 1. ⭐️ Keychain에서 '아이디' 불러오기 + let loadedUsername = KeychainService.shared.readString( + service: tokenService, + account: usernameAccount + ) + + // 2. Keychain에서 '토큰' 불러오기 + let loadedTokens = KeychainService.shared.read( + service: tokenService, + account: tokenAccount, + type: TokenInfo.self + ) + + // 3. ⭐️ 아이디와 토큰이 '둘 다' 존재해야 자동 로그인 + if let username = loadedUsername, let tokens = loadedTokens { + self.username = username + self.tokenInfo = tokens + self.isLoggedIn = true // ⬅️ 자동 로그인 성공! + print("Keychain에서 아이디/토큰 로드 성공. 자동 로그인합니다.") + } else { + self.isLoggedIn = false + print("저장된 아이디 또는 토큰 없음. 로그인 화면으로 이동합니다.") + } + } + + func loginSuccess(username: String, tokens: TokenInfo) { + // 1. 토큰 정보를 Keychain에 (Codable로) 저장 + KeychainService.shared.save(item: tokens, service: tokenService, account: tokenAccount) + + // 2. ⭐️ 사용자 아이디를 Keychain에 (String으로) 저장 + KeychainService.shared.saveString(username, service: tokenService, account: usernameAccount) + + // 3. ViewModel 상태 업데이트 (UI 변경 트리거) + self.tokenInfo = tokens + self.username = username + self.isLoggedIn = true + + print("로그인 성공 및 토큰/아이디 저장 완료.") + } + + func logout() { + // 1. ⭐️ Keychain에서 토큰 삭제 + KeychainService.shared.deleteInfo(service: tokenService, account: tokenAccount) + + // 2. ⭐️ Keychain에서 아이디 삭제 + KeychainService.shared.deleteInfo(service: tokenService, account: usernameAccount) + + // 3. ViewModel 상태 초기화 + self.tokenInfo = nil + self.username = "" // 아이디도 초기화 + self.isLoggedIn = false + + print("로그아웃 및 토큰/아이디 삭제 완료.") + } + + func getAccessToken() -> String? { + // TODO: 실제로는 토큰 만료 여부 확인 및 갱신 로직 필요 + return tokenInfo?.accessToken + } + + func saveNewUserName(newUsername: String){ + + self.username = newUsername + + } +} diff --git a/week05/Megabox/Views/SingleViews/InfoButtonView.swift b/week06/Megabox/Views/SingleViews/InfoButtonView.swift similarity index 100% rename from week05/Megabox/Views/SingleViews/InfoButtonView.swift rename to week06/Megabox/Views/SingleViews/InfoButtonView.swift diff --git a/week05/Megabox/Views/SingleViews/LoginView.swift b/week06/Megabox/Views/SingleViews/LoginView.swift similarity index 95% rename from week05/Megabox/Views/SingleViews/LoginView.swift rename to week06/Megabox/Views/SingleViews/LoginView.swift index 7938afc..3e6ff41 100644 --- a/week05/Megabox/Views/SingleViews/LoginView.swift +++ b/week06/Megabox/Views/SingleViews/LoginView.swift @@ -1,11 +1,13 @@ import SwiftUI + struct LoginView: View { - @Environment(UserViewModel.self) private var userViewModel - //여기다가 먼저 저장한다음, 로그인이 될때 그 정보를 전역으로 전달 + + @State private var loginViewModel: LoginViewModel? + @Environment(UserViewModel.self) private var userViewModel @State private var usernameInput: String = "" @State private var passwordInput: String = "" @@ -126,7 +128,14 @@ struct LoginView: View { HStack(spacing:73){ Image("Naver") - Image("Kakao") + + Button { + loginViewModel?.loginWithKakao() + } label: { + Image("Kakao") + } + + Image("Apple") } diff --git a/week05/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift b/week06/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift similarity index 100% rename from week05/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift rename to week06/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift diff --git a/week05/Megabox/Views/SingleViews/MovieView/MovieCardView.swift b/week06/Megabox/Views/SingleViews/MovieView/MovieCardView.swift similarity index 100% rename from week05/Megabox/Views/SingleViews/MovieView/MovieCardView.swift rename to week06/Megabox/Views/SingleViews/MovieView/MovieCardView.swift diff --git a/week05/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift b/week06/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift similarity index 100% rename from week05/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift rename to week06/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift diff --git a/week05/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift b/week06/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift similarity index 100% rename from week05/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift rename to week06/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift diff --git a/week05/Megabox/Views/SingleViews/SplashView.swift b/week06/Megabox/Views/SingleViews/SplashView.swift similarity index 100% rename from week05/Megabox/Views/SingleViews/SplashView.swift rename to week06/Megabox/Views/SingleViews/SplashView.swift diff --git a/week05/Megabox/Views/SingleViews/UserInfoView.swift b/week06/Megabox/Views/SingleViews/UserInfoView.swift similarity index 97% rename from week05/Megabox/Views/SingleViews/UserInfoView.swift rename to week06/Megabox/Views/SingleViews/UserInfoView.swift index 58b46df..fb50f32 100644 --- a/week05/Megabox/Views/SingleViews/UserInfoView.swift +++ b/week06/Megabox/Views/SingleViews/UserInfoView.swift @@ -75,7 +75,7 @@ struct UserInfoView: View { Button(action: { print("변경") - userViewModel.saveUsername(newUsername: newUsername) +userViewModel.saveNewUserName(newUsername: newUsername) }) { Text("변경") diff --git a/week05/Megabox/Views/Tabviews/HomeView.swift b/week06/Megabox/Views/Tabviews/HomeView.swift similarity index 100% rename from week05/Megabox/Views/Tabviews/HomeView.swift rename to week06/Megabox/Views/Tabviews/HomeView.swift diff --git a/week05/Megabox/Views/Tabviews/ProfileView.swift b/week06/Megabox/Views/Tabviews/ProfileView.swift similarity index 94% rename from week05/Megabox/Views/Tabviews/ProfileView.swift rename to week06/Megabox/Views/Tabviews/ProfileView.swift index 5283d40..a5e7bdb 100644 --- a/week05/Megabox/Views/Tabviews/ProfileView.swift +++ b/week06/Megabox/Views/Tabviews/ProfileView.swift @@ -35,6 +35,7 @@ struct ProfileView: View { } + private var profileHeader: some View { VStack(alignment: .leading){ @@ -54,7 +55,14 @@ struct ProfileView: View { .background(Color.tag) .cornerRadius(6) - + Button(action: { + // 3. 버튼 클릭 시 logout 함수 호출 + userViewModel.logout() + }) { + Text("로그아웃") + .font(.headline) + .foregroundColor(.red) + } Spacer() NavigationLink { diff --git a/week05/Megabox/Views/Tabviews/Tabs.swift b/week06/Megabox/Views/Tabviews/Tabs.swift similarity index 94% rename from week05/Megabox/Views/Tabviews/Tabs.swift rename to week06/Megabox/Views/Tabviews/Tabs.swift index 7469da4..b931923 100644 --- a/week05/Megabox/Views/Tabviews/Tabs.swift +++ b/week06/Megabox/Views/Tabviews/Tabs.swift @@ -2,8 +2,6 @@ import SwiftUI struct Tabs: View { @State private var selectedTab = 0 - - // @Environment 프로퍼티는 그대로 유지합니다. @Environment(UserViewModel.self) private var userViewModel var body: some View { diff --git a/week05/MegaboxTests/MegaboxTests.swift b/week06/MegaboxTests/MegaboxTests.swift similarity index 100% rename from week05/MegaboxTests/MegaboxTests.swift rename to week06/MegaboxTests/MegaboxTests.swift diff --git a/week05/MegaboxUITests/MegaboxUITests.swift b/week06/MegaboxUITests/MegaboxUITests.swift similarity index 100% rename from week05/MegaboxUITests/MegaboxUITests.swift rename to week06/MegaboxUITests/MegaboxUITests.swift diff --git a/week05/MegaboxUITests/MegaboxUITestsLaunchTests.swift b/week06/MegaboxUITests/MegaboxUITestsLaunchTests.swift similarity index 100% rename from week05/MegaboxUITests/MegaboxUITestsLaunchTests.swift rename to week06/MegaboxUITests/MegaboxUITestsLaunchTests.swift diff --git a/week05/keyword/.gitkeep b/week06/keyword/.gitkeep similarity index 100% rename from week05/keyword/.gitkeep rename to week06/keyword/.gitkeep diff --git a/week05/mission/.gitkeep b/week06/mission/.gitkeep similarity index 100% rename from week05/mission/.gitkeep rename to week06/mission/.gitkeep From ee42ee3f043d5fc3022c28505180e140bcb3b728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=B7=E1=84=8C=E1=85=B5=E1=84=8B?= =?UTF-8?q?=E1=85=AD=E1=86=BC?= Date: Mon, 10 Nov 2025 13:09:44 +0900 Subject: [PATCH 7/8] =?UTF-8?q?LoginViewModel=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=97=B0=EC=8A=B5=EC=9A=A9=EB=AA=A8=EB=93=9C,=20=EC=8B=A4?= =?UTF-8?q?=EC=A0=9C=20API=EB=B0=9B=EB=8A=94=20=EB=B6=80=EB=B6=84=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=ED=95=B4=EC=84=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- week06/Megabox/Model/LoginModel.swift | 10 --- .../{ => LoginVM}/LoginViewModel.swift | 76 ++++++++++++------- .../{ => LoginVM}/UserViewModel.swift | 4 +- .../MovieCardsViewModel.swift | 0 4 files changed, 51 insertions(+), 39 deletions(-) delete mode 100644 week06/Megabox/Model/LoginModel.swift rename week06/Megabox/ViewModels/{ => LoginVM}/LoginViewModel.swift (63%) rename week06/Megabox/ViewModels/{ => LoginVM}/UserViewModel.swift (92%) rename week06/Megabox/ViewModels/{ => MovieBookingViewModels}/MovieCardsViewModel.swift (100%) diff --git a/week06/Megabox/Model/LoginModel.swift b/week06/Megabox/Model/LoginModel.swift deleted file mode 100644 index b2841c9..0000000 --- a/week06/Megabox/Model/LoginModel.swift +++ /dev/null @@ -1,10 +0,0 @@ -import Foundation -import SwiftUI - -struct LoginModel { - - @AppStorage("username") private var username: String = "" - @AppStorage("password") private var password: String = "" - - -} diff --git a/week06/Megabox/ViewModels/LoginViewModel.swift b/week06/Megabox/ViewModels/LoginVM/LoginViewModel.swift similarity index 63% rename from week06/Megabox/ViewModels/LoginViewModel.swift rename to week06/Megabox/ViewModels/LoginVM/LoginViewModel.swift index 34f32ae..64b6741 100644 --- a/week06/Megabox/ViewModels/LoginViewModel.swift +++ b/week06/Megabox/ViewModels/LoginVM/LoginViewModel.swift @@ -10,41 +10,65 @@ import KakaoSDKUser @Observable class LoginViewModel { - + private var userViewModel: UserViewModel - private var loginAPIURL = " ff" //여기다가 실제 서버 API주소 연결 + + // 1. 연습용 + private let isMockMode = true //실제 API가 생기면 false로 + + // 2. 실제 API 주소 (나중에 백엔드) + private var loginAPIURL = "https://api.my-server.com/login" - init(userViewModel: UserViewModel) { - self.userViewModel = userViewModel - } + init(userViewModel: UserViewModel) { + self.userViewModel = userViewModel + } - // 로그인 시도 함수 func login(username: String, password: String) { - - //서버에 전달한 파라미터 - let parameters:[String : String] = [ - "username" : username, - "password" : password - ] - AF.request(loginAPIURL, method: .post, parameters: parameters, encoder: JSONParameterEncoder.default) - .validate(statusCode: 200..<300) - .responseDecodable(of: TokenInfo.self){ - response in - switch response.result{ - case .success(let tokenInfo): - print("로그인 성공") - DispatchQueue.main.sync{ - self.userViewModel.loginSuccess(username: username, tokens: tokenInfo) - + if isMockMode { + + print("[Mock Mode] 로그인 성공을 시뮬레이션합니다.") + + // (가상) 2초 딜레이 (서버 응답 시간 척하기) + DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { + + // (가상) 서버로부터 받았다고 가정하는 가짜 토큰 + let mockTokenInfo = TokenInfo( + accessToken: "fake-access-token-for-\(username)", + refreshToken: "fake-refresh-token-12345" + ) + // UserViewModel의 loginSuccess 함수를 직접 호출 + self.userViewModel.loginSuccess(username: username, tokens: mockTokenInfo) + } + + } else { + //(실제 모드) isMockMode가 false일 때만 Alamofire 통신 + + print("🚀 [Real Mode] 실제 서버로 로그인을 요청합니다.") + + let parameters:[String : String] = [ + "username" : username, + "password" : password + ] + + //서버에서는 password맞는지 확인하고 다시 반환하지 않음, 대신에 토큰을 발급 + AF.request(loginAPIURL, method: .post, parameters: parameters, encoder: JSONParameterEncoder.default) + .validate(statusCode: 200..<300) + .responseDecodable(of: TokenInfo.self) { response in + switch response.result { + case .success(let tokenInfo): + print("로그인 성공") + + DispatchQueue.main.async { + self.userViewModel.loginSuccess(username: username, tokens: tokenInfo) + } + case .failure(let error): + print("로그인 실패: \(error.localizedDescription)") } - case .failure(let error): - print("로그인 실패: \(error.localizedDescription)") } - } + } } - // --- 카카오 로그인 함수 (이 함수가 fetchKakaoUserInfo를 호출) --- func loginWithKakao() { if (UserApi.isKakaoTalkLoginAvailable()) { diff --git a/week06/Megabox/ViewModels/UserViewModel.swift b/week06/Megabox/ViewModels/LoginVM/UserViewModel.swift similarity index 92% rename from week06/Megabox/ViewModels/UserViewModel.swift rename to week06/Megabox/ViewModels/LoginVM/UserViewModel.swift index 04f8c84..b29302a 100644 --- a/week06/Megabox/ViewModels/UserViewModel.swift +++ b/week06/Megabox/ViewModels/LoginVM/UserViewModel.swift @@ -9,8 +9,6 @@ class UserViewModel { private var tokenInfo: TokenInfo? - // --- Keychain 식별자 --- - // ⚠️ ".com"은 고유하지 않습니다. "com.eom175.myapp"처럼 실제 번들 ID 등으로 변경하세요. private let tokenService = ".com" private let tokenAccount = "userTokens" // 토큰 저장을 위한 키 private let usernameAccount = "username" // ⭐️ 아이디 저장을 위한 키 (추가) @@ -47,7 +45,7 @@ class UserViewModel { // 1. 토큰 정보를 Keychain에 (Codable로) 저장 KeychainService.shared.save(item: tokens, service: tokenService, account: tokenAccount) - // 2. ⭐️ 사용자 아이디를 Keychain에 (String으로) 저장 + // 2. 사용자 아이디를 Keychain에 (String으로) 저장 KeychainService.shared.saveString(username, service: tokenService, account: usernameAccount) // 3. ViewModel 상태 업데이트 (UI 변경 트리거) diff --git a/week06/Megabox/ViewModels/MovieCardsViewModel.swift b/week06/Megabox/ViewModels/MovieBookingViewModels/MovieCardsViewModel.swift similarity index 100% rename from week06/Megabox/ViewModels/MovieCardsViewModel.swift rename to week06/Megabox/ViewModels/MovieBookingViewModels/MovieCardsViewModel.swift From 48e4e600134b1bbe28175f81bceacf140f352842 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A5=E1=86=B7=E1=84=8C=E1=85=B5=E1=84=8B?= =?UTF-8?q?=E1=85=AD=E1=86=BC?= Date: Mon, 17 Nov 2025 13:12:54 +0900 Subject: [PATCH 8/8] =?UTF-8?q?API=20=EC=9A=94=EC=B2=AD=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EC=98=81=ED=99=94=20=EC=A0=95=EB=B3=B4=20=EA=B0=80=EC=A0=B8?= =?UTF-8?q?=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- week06/Megabox.xcodeproj/project.pbxproj | 84 ++-- .../xcshareddata/swiftpm/Package.resolved | 29 +- week06/Megabox/APIService/APIKey.swift | 7 + week06/Megabox/APIService/BaseTarget.swift | 22 + week06/Megabox/APIService/MovieInfoAPI.swift | 45 ++ week06/Megabox/APIService/MoyaProvider.swift | 16 + week06/Megabox/Info.plist | 2 + week06/Megabox/JSON/MovieSchedule.json | 385 ------------------ week06/Megabox/Model/DTO/APIResponseDTO.swift | 201 +++++---- week06/Megabox/Model/MovieCards.swift | 2 +- week06/Megabox/TMDBAPI.xcconfig | 1 + .../MovieBookingViewModels/DataLogic.swift | 58 +-- .../MovieBookingViewModel.swift | 77 ++-- .../MovieCardsViewModel.swift | 83 ++-- .../MovieDataService.swift | 55 --- .../MovieView/MovieBookingView.swift | 18 +- .../SingleViews/MovieView/MovieCardView.swift | 37 +- .../MovieView/MovieDetailView.swift | 16 +- .../MovieView/MovieSheetView.swift | 17 +- 19 files changed, 464 insertions(+), 691 deletions(-) create mode 100644 week06/Megabox/APIService/APIKey.swift create mode 100644 week06/Megabox/APIService/BaseTarget.swift create mode 100644 week06/Megabox/APIService/MovieInfoAPI.swift create mode 100644 week06/Megabox/APIService/MoyaProvider.swift delete mode 100644 week06/Megabox/JSON/MovieSchedule.json create mode 100644 week06/Megabox/TMDBAPI.xcconfig delete mode 100644 week06/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift diff --git a/week06/Megabox.xcodeproj/project.pbxproj b/week06/Megabox.xcodeproj/project.pbxproj index ec46856..aec64df 100644 --- a/week06/Megabox.xcodeproj/project.pbxproj +++ b/week06/Megabox.xcodeproj/project.pbxproj @@ -10,6 +10,8 @@ 2C1BA1012EC0B50B00271AFC /* KakaoSDKCommon in Frameworks */ = {isa = PBXBuildFile; productRef = 2C1BA1002EC0B50B00271AFC /* KakaoSDKCommon */; }; 2C1BA1032EC0B51300271AFC /* KakaoSDKAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 2C1BA1022EC0B51300271AFC /* KakaoSDKAuth */; }; 2C1BA1052EC0B51900271AFC /* KakaoSDKUser in Frameworks */ = {isa = PBXBuildFile; productRef = 2C1BA1042EC0B51900271AFC /* KakaoSDKUser */; }; + 2C37507F2ECACB4300342F7B /* CombineMoya in Frameworks */ = {isa = PBXBuildFile; productRef = 2C37507E2ECACB4300342F7B /* CombineMoya */; }; + 2C3750812ECACB4300342F7B /* Moya in Frameworks */ = {isa = PBXBuildFile; productRef = 2C3750802ECACB4300342F7B /* Moya */; }; 2CA6BFBE2EBF98740073B32F /* Alamofire in Frameworks */ = {isa = PBXBuildFile; productRef = 2CA6BFBD2EBF98740073B32F /* Alamofire */; }; /* End PBXBuildFile section */ @@ -31,6 +33,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 2C3750662ECA163000342F7B /* TMDBAPI.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = TMDBAPI.xcconfig; sourceTree = ""; }; 2C80F0202E7CE1EB00752AE4 /* Megabox.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Megabox.app; sourceTree = BUILT_PRODUCTS_DIR; }; 2C80F02D2E7CE1EB00752AE4 /* MegaboxTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MegaboxTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 2C80F0372E7CE1EB00752AE4 /* MegaboxUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MegaboxUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -74,7 +77,9 @@ files = ( 2C1BA1052EC0B51900271AFC /* KakaoSDKUser in Frameworks */, 2C1BA1012EC0B50B00271AFC /* KakaoSDKCommon in Frameworks */, + 2C3750812ECACB4300342F7B /* Moya in Frameworks */, 2CA6BFBE2EBF98740073B32F /* Alamofire in Frameworks */, + 2C37507F2ECACB4300342F7B /* CombineMoya in Frameworks */, 2C1BA1032EC0B51300271AFC /* KakaoSDKAuth in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -148,6 +153,8 @@ 2C1BA1002EC0B50B00271AFC /* KakaoSDKCommon */, 2C1BA1022EC0B51300271AFC /* KakaoSDKAuth */, 2C1BA1042EC0B51900271AFC /* KakaoSDKUser */, + 2C37507E2ECACB4300342F7B /* CombineMoya */, + 2C3750802ECACB4300342F7B /* Moya */, ); productName = Megabox; productReference = 2C80F0202E7CE1EB00752AE4 /* Megabox.app */; @@ -234,6 +241,7 @@ packageReferences = ( 2CA6BFBC2EBF97820073B32F /* XCRemoteSwiftPackageReference "Alamofire" */, 2CA6BFC12EC0AA040073B32F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */, + 2C374FE32EC9FC6C00342F7B /* XCRemoteSwiftPackageReference "Moya" */, ); preferredProjectObjectVersion = 77; productRefGroup = 2C80F0212E7CE1EB00752AE4 /* Products */; @@ -309,8 +317,9 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 2C80F03F2E7CE1EB00752AE4 /* Debug */ = { + 2C80F03F2E7CE1EB00752AE4 /* Relaese */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 2C3750662ECA163000342F7B /* TMDBAPI.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -371,10 +380,11 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; - name = Debug; + name = Relaese; }; - 2C80F0402E7CE1EB00752AE4 /* Release */ = { + 2C80F0402E7CE1EB00752AE4 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 2C3750662ECA163000342F7B /* TMDBAPI.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; @@ -428,9 +438,9 @@ SWIFT_COMPILATION_MODE = wholemodule; VALIDATE_PRODUCT = YES; }; - name = Release; + name = Debug; }; - 2C80F0422E7CE1EB00752AE4 /* Debug */ = { + 2C80F0422E7CE1EB00752AE4 /* Relaese */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -457,9 +467,9 @@ SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; - name = Debug; + name = Relaese; }; - 2C80F0432E7CE1EB00752AE4 /* Release */ = { + 2C80F0432E7CE1EB00752AE4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -486,9 +496,9 @@ SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; - name = Release; + name = Debug; }; - 2C80F0452E7CE1EB00752AE4 /* Debug */ = { + 2C80F0452E7CE1EB00752AE4 /* Relaese */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; @@ -505,9 +515,9 @@ TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Megabox.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Megabox"; }; - name = Debug; + name = Relaese; }; - 2C80F0462E7CE1EB00752AE4 /* Release */ = { + 2C80F0462E7CE1EB00752AE4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; @@ -524,9 +534,9 @@ TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Megabox.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Megabox"; }; - name = Release; + name = Debug; }; - 2C80F0482E7CE1EB00752AE4 /* Debug */ = { + 2C80F0482E7CE1EB00752AE4 /* Relaese */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; @@ -541,9 +551,9 @@ TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = Megabox; }; - name = Debug; + name = Relaese; }; - 2C80F0492E7CE1EB00752AE4 /* Release */ = { + 2C80F0492E7CE1EB00752AE4 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; @@ -558,7 +568,7 @@ TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = Megabox; }; - name = Release; + name = Debug; }; /* End XCBuildConfiguration section */ @@ -566,42 +576,50 @@ 2C80F01B2E7CE1EB00752AE4 /* Build configuration list for PBXProject "Megabox" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C80F03F2E7CE1EB00752AE4 /* Debug */, - 2C80F0402E7CE1EB00752AE4 /* Release */, + 2C80F03F2E7CE1EB00752AE4 /* Relaese */, + 2C80F0402E7CE1EB00752AE4 /* Debug */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Relaese; }; 2C80F0412E7CE1EB00752AE4 /* Build configuration list for PBXNativeTarget "Megabox" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C80F0422E7CE1EB00752AE4 /* Debug */, - 2C80F0432E7CE1EB00752AE4 /* Release */, + 2C80F0422E7CE1EB00752AE4 /* Relaese */, + 2C80F0432E7CE1EB00752AE4 /* Debug */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Relaese; }; 2C80F0442E7CE1EB00752AE4 /* Build configuration list for PBXNativeTarget "MegaboxTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C80F0452E7CE1EB00752AE4 /* Debug */, - 2C80F0462E7CE1EB00752AE4 /* Release */, + 2C80F0452E7CE1EB00752AE4 /* Relaese */, + 2C80F0462E7CE1EB00752AE4 /* Debug */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Relaese; }; 2C80F0472E7CE1EB00752AE4 /* Build configuration list for PBXNativeTarget "MegaboxUITests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2C80F0482E7CE1EB00752AE4 /* Debug */, - 2C80F0492E7CE1EB00752AE4 /* Release */, + 2C80F0482E7CE1EB00752AE4 /* Relaese */, + 2C80F0492E7CE1EB00752AE4 /* Debug */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; + defaultConfigurationName = Relaese; }; /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + 2C374FE32EC9FC6C00342F7B /* XCRemoteSwiftPackageReference "Moya" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/Moya/Moya"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 15.0.3; + }; + }; 2CA6BFBC2EBF97820073B32F /* XCRemoteSwiftPackageReference "Alamofire" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/Alamofire/Alamofire"; @@ -636,6 +654,16 @@ package = 2CA6BFC12EC0AA040073B32F /* XCRemoteSwiftPackageReference "kakao-ios-sdk" */; productName = KakaoSDKUser; }; + 2C37507E2ECACB4300342F7B /* CombineMoya */ = { + isa = XCSwiftPackageProductDependency; + package = 2C374FE32EC9FC6C00342F7B /* XCRemoteSwiftPackageReference "Moya" */; + productName = CombineMoya; + }; + 2C3750802ECACB4300342F7B /* Moya */ = { + isa = XCSwiftPackageProductDependency; + package = 2C374FE32EC9FC6C00342F7B /* XCRemoteSwiftPackageReference "Moya" */; + productName = Moya; + }; 2CA6BFBD2EBF98740073B32F /* Alamofire */ = { isa = XCSwiftPackageProductDependency; package = 2CA6BFBC2EBF97820073B32F /* XCRemoteSwiftPackageReference "Alamofire" */; diff --git a/week06/Megabox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/week06/Megabox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 122bc24..d347a95 100644 --- a/week06/Megabox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/week06/Megabox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "fcdb6d5dc76fef3126c97e3f42a1ae0bb40cd2c958e8591ac4547ce131a2698e", + "originHash" : "3533c5572a10f0f42dc3ce5cd8e2910aaf27946641326e7d371aad9bd73dd9f7", "pins" : [ { "identity" : "alamofire", @@ -18,6 +18,33 @@ "revision" : "e14a8d1fad75645fd5677a295a8b1956ebd14d3d", "version" : "2.25.0" } + }, + { + "identity" : "moya", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Moya/Moya", + "state" : { + "revision" : "c263811c1f3dbf002be9bd83107f7cdc38992b26", + "version" : "15.0.3" + } + }, + { + "identity" : "reactiveswift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ReactiveCocoa/ReactiveSwift.git", + "state" : { + "revision" : "c43bae3dac73fdd3cb906bd5a1914686ca71ed3c", + "version" : "6.7.0" + } + }, + { + "identity" : "rxswift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ReactiveX/RxSwift.git", + "state" : { + "revision" : "5004a18539bd68905c5939aa893075f578f4f03d", + "version" : "6.9.1" + } } ], "version" : 3 diff --git a/week06/Megabox/APIService/APIKey.swift b/week06/Megabox/APIService/APIKey.swift new file mode 100644 index 0000000..50ad010 --- /dev/null +++ b/week06/Megabox/APIService/APIKey.swift @@ -0,0 +1,7 @@ +import Foundation + +enum APIKey { + static var tmdb: String { + Bundle.main.object(forInfoDictionaryKey: "TMDB_API_KEY") as? String ?? "" + } +} diff --git a/week06/Megabox/APIService/BaseTarget.swift b/week06/Megabox/APIService/BaseTarget.swift new file mode 100644 index 0000000..8b8119d --- /dev/null +++ b/week06/Megabox/APIService/BaseTarget.swift @@ -0,0 +1,22 @@ +import Moya +import Foundation + +protocol BaseTarget: TargetType {} + +extension BaseTarget { + + // TMDB v3 movie base URL + var baseURL: URL { + URL(string: "https://api.themoviedb.org/3/movie")! + } + + // 샘플 데이터 (안 쓰면 빈 Data 반환) + var sampleData: Data { + Data() + } + + // 공통 헤더 (필요 없으면 nil) + var headers: [String : String]? { + nil + } +} diff --git a/week06/Megabox/APIService/MovieInfoAPI.swift b/week06/Megabox/APIService/MovieInfoAPI.swift new file mode 100644 index 0000000..33e46ed --- /dev/null +++ b/week06/Megabox/APIService/MovieInfoAPI.swift @@ -0,0 +1,45 @@ +import Moya +import Foundation + +enum MovieInfoAPI { + // page는 기본 1, region은 옵션 + case nowPlaying(page: Int = 1, region: String? = nil) +} + +extension MovieInfoAPI: BaseTarget { + + var path: String { + switch self { + case .nowPlaying: + return "/now_playing" + } + } + + var method: Moya.Method { + return .get + } + + var task: Task { + switch self { + case let .nowPlaying(page, region): + var params: [String: Any] = [ + "language": "ko-KR", + "page": page, + "region": region ?? "KR" // 👈 이 부분 수정 + ] + + + return .requestParameters( + parameters: params, + encoding: URLEncoding.queryString + ) + } + } + + var headers: [String : String]? { + [ + "Accept": "application/json", + "Authorization": "Bearer \(APIKey.tmdb)" + ] + } +} diff --git a/week06/Megabox/APIService/MoyaProvider.swift b/week06/Megabox/APIService/MoyaProvider.swift new file mode 100644 index 0000000..c9fa280 --- /dev/null +++ b/week06/Megabox/APIService/MoyaProvider.swift @@ -0,0 +1,16 @@ +import Moya + +extension MoyaProvider { + func asyncRequest(_ target: Target) async throws -> Response { + try await withCheckedThrowingContinuation { continuation in + self.request(target) { result in + switch result { + case .success(let response): + continuation.resume(returning: response) + case .failure(let error): + continuation.resume(throwing: error) + } + } + } + } +} diff --git a/week06/Megabox/Info.plist b/week06/Megabox/Info.plist index e3cf28c..bd95bcd 100644 --- a/week06/Megabox/Info.plist +++ b/week06/Megabox/Info.plist @@ -2,6 +2,8 @@ + TMDB_API_KEY + $(TMDB_API_KEY) KAKAO_APP_KEY kakao$e795673090d362bc069f906c37141855 LSApplicationQueriesSchemes diff --git a/week06/Megabox/JSON/MovieSchedule.json b/week06/Megabox/JSON/MovieSchedule.json deleted file mode 100644 index b95dbe7..0000000 --- a/week06/Megabox/JSON/MovieSchedule.json +++ /dev/null @@ -1,385 +0,0 @@ -{ - "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/week06/Megabox/Model/DTO/APIResponseDTO.swift b/week06/Megabox/Model/DTO/APIResponseDTO.swift index e648ffd..7737f0b 100644 --- a/week06/Megabox/Model/DTO/APIResponseDTO.swift +++ b/week06/Megabox/Model/DTO/APIResponseDTO.swift @@ -1,159 +1,144 @@ import Foundation import SwiftUI -struct APIResponseDTO: Codable{ - - let status: String - let message: String - let data: MovieData - - + +// MARK: - 최상위 응답 +struct APIResponseDTO: Codable { + // 기존 구조: status, message, data + // 변경 구조: dates, page, results(영화목록) + + let dates: DateRange? // dates 객체는 없을 수도 있으므로 Optional + let page: Int + let results: [MovieDTO] // 기존의 MovieData.movies 역할 + let totalPages: Int + let totalResults: Int + + enum CodingKeys: String, CodingKey { + case dates, page, results + case totalPages = "total_pages" + case totalResults = "total_results" + } } -struct MovieData: Codable{ - - let movies: [MovieDTO] - - - +// dates 객체 처리를 위한 구조체 추가 +struct DateRange: Codable { + let maximum: String + let minimum: String } -struct MovieDTO: Codable{ +// MARK: - 영화 상세 정보 (스크린샷 기반) +struct MovieDTO: Codable { + // 기존: id(String), title, age_rating, schedules + // 변경: id(Int), title, overview, poster_path 등등... - let id: String + let id: Int // API에서는 Int로 옴 let title: String - let age_rating: String - let schedules: [MovieInfoDTO] - - - + let originalTitle: String + let overview: String // 줄거리 (기존의 로컬 설명 대체 가능) + let posterPath: String? // 포스터 이미지 경로 + let releaseDate: String + let voteAverage: Double + let voteCount: Int // 👈 [추가] "vote_count"를 받기 위해 추가 + let adult: Bool + + // ⚠️ 주의: 스크린샷의 API에는 '상영 시간표(schedules)' 정보가 없습니다. + // 따라서 아래 구조체들은 이 API에서 파싱되지 않습니다. + // let schedules: [MovieInfoDTO] + + enum CodingKeys: String, CodingKey { + case id, title, overview, adult + case originalTitle = "original_title" + case posterPath = "poster_path" + case releaseDate = "release_date" + case voteAverage = "vote_average" + case voteCount = "vote_count" // 👈 [추가] JSON 키 매핑 + } } -struct MovieInfoDTO: Codable{ - - + +// ----------------------------------------------------------- +// ⚠️ 중요: 아래 구조체들(스케줄 관련)은 현재 스크린샷의 JSON에 포함되어 있지 않습니다. +// 다른 API(예: 예매 상세 API)를 호출할 때 사용하거나, 더미 데이터로 남겨두어야 합니다. +// 일단 에러 방지를 위해 코드는 남겨두지만, 위 APIResponseDTO에서 연결은 끊겨 있습니다. +// ----------------------------------------------------------- + +struct MovieInfoDTO: Codable { let date: String let areas: [MovieAreaDTO] - - - } -struct MovieAreaDTO: Codable{ + +struct MovieAreaDTO: Codable { let area: String let items: [MovieItemsDTO] - } -struct MovieItemsDTO: Codable{ - +struct MovieItemsDTO: Codable { let auditorium: String let format: String let showtimes: [ShowTimesDTO] - - } -struct ShowTimesDTO: Codable{ - + +struct ShowTimesDTO: Codable { let start: String let end: String let available: Int let total: Int - - - } -//----------------- + +// MARK: - Extensions (Domain Mapping) + +extension MovieDTO { + // MovieDTO(DTO) -> MovieCards(Domain) + func toDomainCard() -> MovieCards { + + // 포스터 이미지 URL 처리 + let imageBaseURL = "https://image.tmdb.org/t/p/w500" + var fullPosterURL: URL? = nil + if let posterPath = self.posterPath { + fullPosterURL = URL(string: imageBaseURL + posterPath) + } + + // DTO의 id는 Int, Domain은 String일 경우 형변환 필요 + return MovieCards( + id: String(self.id), + // image: Image(systemName: "film"), // 👈 [삭제] + posterURL: fullPosterURL, // 👈 [수정] 생성된 URL을 전달 + booking: true, // API에 없으므로 하드코딩 + movieName: self.title, + watchedStatus: "\(self.voteCount)명", // 👈 [수정] voteCount를 사용 + movieNameEn: self.originalTitle, + movieDescription: MovieDescription(details: [self.overview]) + ) + } +} + +// 아래 Extension들은 현재 API 응답에 데이터가 없으므로 실제로는 호출되지 않지만, +// 기존 코드 호환성을 위해 남겨둡니다. extension ShowTimesDTO { - // ShowTimesDTO(DTO) -> Time(Domain) func toDomain() -> Time { return Time( - startTime: self.start, endTime: "~\(self.end)", remainingSeats: self.available, totalSeats: self.total - ) + ) } } + extension MovieItemsDTO { - // MovieItemsDTO(DTO) -> ScreenSchedule(Domain) func toDomain() -> ScreenSchedule { return ScreenSchedule( - // id는 ScreenSchedule 모델이 자동으로 생성 - screenName: self.auditorium, // DTO의 auditorium -> Domain의 screenName + screenName: self.auditorium, format: self.format, - //(1번 함수 재사용) times: self.showtimes.map { $0.toDomain() } ) } } + extension MovieAreaDTO { - // MovieAreaDTO(DTO) -> TheaterSchedule(Domain) func toDomain() -> TheaterSchedule { return TheaterSchedule( - theaterName: self.area, screens: self.items.map { $0.toDomain() } ) } } - - -extension MovieDTO { - private func fetchLocalDescription(for movieID: String) -> MovieDescription { - - // 원래는 뷰모델에서 관리했는데 이 설명이 jSON에는 없는 데이터이므로 여기에서 관리 - - let localData: [String: MovieDescription] = [ - - "m-001": MovieDescription(details: [ - "어쩔 수 없는 상황에 처한", - "그들의 이야기" - ]), - "m-002": MovieDescription(details: [ - "귀멸의 칼날, 새로운 이야기", - "무한성에서의 최종 결전" - ]), - "m-003": MovieDescription(details: [ - "최고가 되지 못한 전설 VS 최고가 되고 싶은 루키", - "한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고", - "한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트).", - "그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게", - "레이싱 복귀를 제안받으며 최하위 팀인 APGXP에 합류한다." - ]), - "m-004": MovieDescription(details: [ - "얼굴" - ]), - "m-005": MovieDescription(details: [ - "히메" - ]), - "m-006": MovieDescription(details: [ - "보스" - ]), - "m-007": MovieDescription(details: [ - "야당" - ]), - "m-008": MovieDescription(details: [ - "장미" - ]), - - ] - - // movieID에 해당하는 설명을 반환하고, 없으면 빈 설명을 반환 - return localData[movieID] ?? MovieDescription(details: []) - } - // MovieDTO(DTO) -> MovieCards(Domain) - func toDomainCard() -> MovieCards { - let description = fetchLocalDescription(for: self.id) - return MovieCards( - id: self.id, - image: Image(self.id), - booking: true, - movieName: self.title, - watchedStatus: "01", - movieNameEn: "나중에", - movieDescription: description // 별도 정의한 description 사용 - ) - } - - -} diff --git a/week06/Megabox/Model/MovieCards.swift b/week06/Megabox/Model/MovieCards.swift index e040e9c..1bbba4c 100644 --- a/week06/Megabox/Model/MovieCards.swift +++ b/week06/Megabox/Model/MovieCards.swift @@ -5,7 +5,7 @@ import Foundation struct MovieCards: Identifiable{ let id : String - var image: Image + var posterURL: URL? var booking: Bool var movieName: String var watchedStatus: String diff --git a/week06/Megabox/TMDBAPI.xcconfig b/week06/Megabox/TMDBAPI.xcconfig new file mode 100644 index 0000000..357dbea --- /dev/null +++ b/week06/Megabox/TMDBAPI.xcconfig @@ -0,0 +1 @@ +TMDB_API_KEY = eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiI1NTUwYTg1YjE4ZjNkMzA1NzM2ZGVhMDMzZTczZWQ5MyIsIm5iZiI6MTc2MzI5NDM4NS43OCwic3ViIjoiNjkxOWJjYjFkYzdiNzNmNDdjMzFkNjAzIiwic2NvcGVzIjpbImFwaV9yZWFkIl0sInZlcnNpb24iOjF9.7OJGvLAb5lb57invNk94DXJ3fyY7v5G_5G8Ny0AN_wI diff --git a/week06/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift b/week06/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift index 2509d5e..dae6444 100644 --- a/week06/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift +++ b/week06/Megabox/ViewModels/MovieBookingViewModels/DataLogic.swift @@ -3,52 +3,58 @@ import Foundation // ViewModel 안에서의 데이터 처리 로직 extension MovieBookingViewModel { - func loadDatesForSelectedMovie() { // 1. 선택된 영화 ID로 DTO 찾기 + // [변경됨] MovieDTO의 id는 Int이므로 String 변환하여 비교 guard let movieID = selectedMovieID, - let movieDTO = allMovieDTOs.first(where: { $0.id == movieID })else { + let _ = allMovieDTOs.first(where: { String($0.id) == movieID }) else { self.weekDates = [] return } - let dateStrings = movieDTO.schedules.map { $0.date } - - let formatter = DateFormatter() - formatter.dateFormat = "yyyy-MM-dd" - formatter.locale = Locale(identifier: "ko_KR") // 한국 시간대 보장 + // [변경됨] API에 스케줄 정보가 없으므로, 오늘부터 7일간의 날짜를 자동으로 생성합니다. + let calendar = Calendar.current + let today = Date() + var dates: [Date] = [] + + for i in 0..<7 { + if let date = calendar.date(byAdding: .day, value: i, to: today) { + dates.append(date) + } + } - self.weekDates = dateStrings.compactMap { formatter.date(from: $0) } + self.weekDates = dates } func loadTimeData(movieID: String, theaters: [String], date: Date) { - guard let movieDTO = allMovieDTOs.first(where: { $0.id == movieID })else { + // [변경됨] MovieDTO id 타입 불일치 해결 (Int vs String) + guard let _ = allMovieDTOs.first(where: { String($0.id) == movieID }) else { self.schedules = [] return } - let formatter = DateFormatter() - formatter.dateFormat = "yyyy-MM-dd" - formatter.locale = Locale(identifier: "ko_KR") - let selectedDateString = formatter.string(from: date) - - guard let scheduleForDate = movieDTO.schedules.first(where: { $0.date == selectedDateString }) else { - // 해당 날짜에 상영 정보가 없는 경우 - self.schedules = theaters.map { TheaterSchedule(theaterName: $0, screens: []) } - return - } + // [변경됨] API에 스케줄 정보가 없으므로, 더미(가짜) 시간표 데이터를 생성하여 반환합니다. + // 실제 앱에서는 별도의 상영 시간표 API를 호출해야 합니다. var loadedSchedules: [TheaterSchedule] = [] - for theaterName in selectedTheaters { - if let areaDTO = scheduleForDate.areas.first(where: { $0.area == theaterName }) { - loadedSchedules.append(areaDTO.toDomain()) - } else { - // DTO에 해당 극장 정보가 없으면 빈 스케줄 추가 - loadedSchedules.append(TheaterSchedule(theaterName: theaterName, screens: [])) - } + for theaterName in theaters { + // 임의의 시간표 생성 로직 + let dummyTimes = [ + Time(startTime: "10:00", endTime: "~12:00", remainingSeats: 120, totalSeats: 200), + Time(startTime: "13:30", endTime: "~15:30", remainingSeats: 80, totalSeats: 200), + Time(startTime: "16:00", endTime: "~18:00", remainingSeats: 0, totalSeats: 200), // 매진 예시 + Time(startTime: "19:30", endTime: "~21:30", remainingSeats: 150, totalSeats: 200) + ] + + // 각 극장마다 2D, IMAX 등 임의 포맷 할당 + let screenFormat = (theaterName == "CGV 용산아이파크몰") ? "IMAX" : "2D" + + let screenSchedule = ScreenSchedule(screenName: "1관", format: screenFormat, times: dummyTimes) + + loadedSchedules.append(TheaterSchedule(theaterName: theaterName, screens: [screenSchedule])) } self.schedules = loadedSchedules diff --git a/week06/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift b/week06/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift index 895ffb2..5e1f95b 100644 --- a/week06/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift +++ b/week06/Megabox/ViewModels/MovieBookingViewModels/MovieBookingViewModel.swift @@ -1,7 +1,9 @@ -import Foundation import Combine import SwiftUI - +import Moya +import _Concurrency +let imageBaseURL = "https://image.tmdb.org/t/p/w500" +@MainActor class MovieBookingViewModel: ObservableObject { @Published var errorMessage: String? = nil @@ -26,17 +28,19 @@ class MovieBookingViewModel: ObservableObject { // MARK: - Properties var cancellables = Set() - private let dataService = MovieDataService() + + // Moya Provider 선언 + private let provider = MoyaProvider() var selectedMovie: MovieCards? { movieCards.first { $0.id == selectedMovieID } } - - + init() { - // DataService를 통해 데이터 로드 - loadInitialData() - + // 비동기 데이터 로드 시작 + _Concurrency.Task { + await self.loadInitialData() + } // 구독 설정 setupButtonStateSubscription() setupDateSelectionSubscription() @@ -44,34 +48,51 @@ class MovieBookingViewModel: ObservableObject { setupSearchSubscription() } - private func loadInitialData() { + @MainActor + private func loadInitialData() async { do { - // JSON 데이터를 받아옴 - let (loadedMovies, loadedDTOs) = try dataService.loadDataFromJSON() + // 1. Moya asyncRequest 호출 + let response = try await provider.asyncRequest(.nowPlaying(page: 1)) + + // 2. 디코딩 + let decodedData = try JSONDecoder().decode(APIResponseDTO.self, from: response.data) + + // 3. 원본 DTO 저장 (로직 처리를 위해) + self.allMovieDTOs = decodedData.results - - self.movieCards = loadedMovies - self.allMovieDTOs = loadedDTOs + self.movieCards = decodedData.results.map { dto in + + // 3. posterPath가 nil일 수도 있으므로 옵셔널 처리 + var fullURL: URL? = nil + if let posterPath = dto.posterPath { + fullURL = URL(string: imageBaseURL + posterPath) + } + + return MovieCards( + id: String(dto.id), + // image: Image(systemName: "play.rectangle.fill"), // 👈 기존 + posterURL: fullURL, // 👈 [수정] 조립된 URL 전달 + booking: true, + movieName: dto.title, + watchedStatus: "\(Int(dto.voteCount))명", // 관람객 수 + movieNameEn: dto.originalTitle, + movieDescription: MovieDescription(details: [dto.overview]) + ) + } } catch { - print("Failed to load movies: \(error)") - self.errorMessage = "영화 목록을 불러오는 데 실패했습니다." - if let movieError = error as? MovieLoadError { - switch movieError { - case .invalidData: - self.errorMessage = "영화 데이터가 유효하지 않음" - case .decodingFailed: - self.errorMessage = "영화를 불러오는 데 실패했습니다." - case .networkFailed(let specificError): - self.errorMessage = "네트워크 오류: \(specificError.localizedDescription)" - case .fileNotFound: - self.errorMessage = "영화 파일을 찾을 수 없습니다." - } + + // 에러 처리 + if let moyaError = error as? MoyaError { + self.errorMessage = "네트워크 오류: \(moyaError.localizedDescription)" + } else { + self.errorMessage = "알 수 없는 오류가 발생했습니다." } } } + // MARK: - User Actions func selectMovie(id: String?) { DispatchQueue.main.async { @@ -79,6 +100,7 @@ class MovieBookingViewModel: ObservableObject { self.selectedMovieID = id self.selectedDate = nil self.schedules = [] + // 날짜 로드 로직 호출 (이전 단계에서 수정한 DataLogic의 함수 사용) self.loadDatesForSelectedMovie() } } @@ -100,4 +122,3 @@ class MovieBookingViewModel: ObservableObject { } } } - diff --git a/week06/Megabox/ViewModels/MovieBookingViewModels/MovieCardsViewModel.swift b/week06/Megabox/ViewModels/MovieBookingViewModels/MovieCardsViewModel.swift index ba3a239..1af4d59 100644 --- a/week06/Megabox/ViewModels/MovieBookingViewModels/MovieCardsViewModel.swift +++ b/week06/Megabox/ViewModels/MovieBookingViewModels/MovieCardsViewModel.swift @@ -1,45 +1,56 @@ import SwiftUI +import Moya +import _Concurrency -import Foundation - +@MainActor @Observable -class MovieCardsViewModel{ - // 모델안에 모델을 넣는식 - // +class MovieCardsViewModel { var movieCards: [MovieCards] = [] + let imageBaseURL = "https://image.tmdb.org/t/p/w500" - init() { - let azzulDesc = MovieDescription(details: []) - let guikalDesc = MovieDescription(details: []) - let f1Desc = MovieDescription(details: [ - "최고가 되지 못한 전설 VS 최고가 싶은 루키", - "한때 주목받는 유망주였지만 끔찍한 사고로 F1에서 우승하지 못하고", - "한순간에 추락한 드라이버 ‘손; 헤이스'(브래드 피트).", - "그의 오랜 동료인 ‘루벤 세르반테스'(하비에르 바르뎀)에게", - "레이싱 복귀를 제안받으며 최하위 팀인 APXGP에 합류한다." - ]) - let faceDesc = MovieDescription(details: []) - let himeDesc = MovieDescription(details: []) - let bossDesc = MovieDescription(details: []) - let yadangDesc = MovieDescription(details: []) - let rosesDesc = MovieDescription(details: []) - - - - - let azzul = MovieCards(id: "m-001", image: Image("m-001"), booking: true, movieName: "어쩔수가없다",watchedStatus: "20만", movieNameEn: "Can't Help It", movieDescription: azzulDesc) - let f1 = MovieCards(id: "m-002", image: Image("m-002"),booking: true,movieName: "F1 더 무비", watchedStatus: "1", movieNameEn: "F1: The Movie", movieDescription: f1Desc) - let guikal = MovieCards(id: "m-003", image: Image("m-003"),booking: true, movieName: "극장판 귀멸의칼날",watchedStatus: "1", movieNameEn: "Demon Slayer", movieDescription: guikalDesc) - let face = MovieCards(id: "m-004", image: Image("m-004"),booking: true, movieName: "얼굴", watchedStatus: "20만", movieNameEn: "Face", movieDescription: faceDesc) - let hime = MovieCards(id: "m-005", image: Image("m-005"), booking: true, movieName: "모노노케히메", watchedStatus: "20만", movieNameEn: "Princess Mononoke", movieDescription: himeDesc) - let boss = MovieCards(id:"m-006", image: Image("m-006"), booking: true, movieName: "보스", watchedStatus: "20만", movieNameEn: "The boss", movieDescription: bossDesc) - let yadang = MovieCards(id:"m-007", image: Image("m-007"),booking: true, movieName: "야당", watchedStatus: "20만", movieNameEn: "Yadang", movieDescription: yadangDesc) - let roses = MovieCards(id:"m-008", image: Image("m-008"), booking: true, movieName: "The Roses", watchedStatus: "20만", movieNameEn: "The roses", movieDescription: rosesDesc) + // Moya Provider 생성, 에러확인용 플러그인 + private let provider = MoyaProvider(plugins: [NetworkLoggerPlugin()]) - self.movieCards = [azzul, guikal, f1, face, hime, boss, yadang, roses] - + init() { + // 초기화 시 비동기로 데이터 로드 시작 + _Concurrency.Task { + await loadMovies() + } } - - + @MainActor + func loadMovies() async { + do { + // 1. async/await를 사용하여 API 요청 + let response = try await provider.asyncRequest(.nowPlaying(page: 1)) + + // 2. JSON 디코딩 + let decodedResponse = try JSONDecoder().decode(APIResponseDTO.self, from: response.data) + + self.movieCards = decodedResponse.results.map { dto in + + // 3. posterPath가 nil일 수도 있으므로 옵셔널 처리 + var fullURL: URL? = nil + if let posterPath = dto.posterPath { + fullURL = URL(string: imageBaseURL + posterPath) + } + + return MovieCards( + id: String(dto.id), + // image: Image(systemName: "play.rectangle.fill"), // 👈 기존 + posterURL: fullURL, // 👈 [수정] 조립된 URL 전달 + booking: true, + movieName: dto.title, + watchedStatus: "\(Int(dto.voteCount))명", // 관람객 수 + movieNameEn: dto.originalTitle, + movieDescription: MovieDescription(details: [dto.overview]) + ) + } + + } catch { + print("영화 목록 로드 실패: \(error)") + // 에러 발생 시 빈 배열 혹은 에러 상태 처리 + self.movieCards = [] + } + } } diff --git a/week06/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift b/week06/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift deleted file mode 100644 index a51e22d..0000000 --- a/week06/Megabox/ViewModels/MovieBookingViewModels/MovieDataService.swift +++ /dev/null @@ -1,55 +0,0 @@ -import Foundation -import SwiftUI -enum MovieLoadError: Error, LocalizedError{ - - case invalidData - case decodingFailed(Error) - case networkFailed(Error) - case fileNotFound - - -} -class MovieDataService { - - - func loadDataFromJSON() throws -> (movies: [MovieCards], dtos: [MovieDTO]) { - - var allLoadedMovies: [MovieCards] = [] - var allLoadedDTOs: [MovieDTO] = [] - - // JSON 데이터 로드 및 디코딩 - if let url = Bundle.main.url(forResource: "MovieSchedule", withExtension: "json"), - let data = try? Data(contentsOf: url) { - - do { - let response = try JSONDecoder().decode(APIResponseDTO.self, from: data) - allLoadedDTOs = response.data.movies // DTO 저장 - - let jsonMovies = allLoadedDTOs.map { $0.toDomainCard() } - allLoadedMovies.append(contentsOf: jsonMovies) - - } catch { - throw MovieLoadError.decodingFailed(error) - } - } else { - throw MovieLoadError.fileNotFound - } - - // JSON파일에는 없는 데이터 추가 - let faceDesc = MovieDescription(details: []) - let himeDesc = MovieDescription(details: []) - let bossDesc = MovieDescription(details: []) - let yadangDesc = MovieDescription(details: []) - let rosesDesc = MovieDescription(details: []) - - let face = MovieCards(id: "m-004", image: Image("m-004"), booking: true, movieName: "얼굴", watchedStatus: "20만", movieNameEn: "Face", movieDescription: faceDesc) - let hime = MovieCards(id: "m-005", image: Image("m-005"), booking: true, movieName: "모노노케히메", watchedStatus: "20만", movieNameEn: "Princess Mononoke", movieDescription: himeDesc) - let boss = MovieCards(id: "m-006", image: Image("m-006"), booking: true, movieName: "보스", watchedStatus: "20만", movieNameEn: "The boss", movieDescription: bossDesc) - let yadang = MovieCards(id: "m-007", image: Image("m-007"), booking: true, movieName: "야당", watchedStatus: "20만", movieNameEn: "Yadang", movieDescription: yadangDesc) - let roses = MovieCards(id: "m-008", image: Image("m-008"), booking: true, movieName: "The Roses", watchedStatus: "20만", movieNameEn: "The roses", movieDescription: rosesDesc) - - allLoadedMovies.append(contentsOf: [face, hime, boss, yadang, roses]) - - return (movies: allLoadedMovies, dtos: allLoadedDTOs) - } -} diff --git a/week06/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift b/week06/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift index 9f1e358..67b0075 100644 --- a/week06/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift +++ b/week06/Megabox/Views/SingleViews/MovieView/MovieBookingView.swift @@ -112,11 +112,19 @@ struct MovieBookingView: View { ScrollView(.horizontal) { HStack(spacing: 8) { ForEach(viewModel.movieCards) { movie in - movie.image - .resizable() - .frame(width: 62, height: 89) - .cornerRadius(10) - .overlay( + // [수정] AsyncImage로 교체 + AsyncImage(url: movie.posterURL) { image in + image + .resizable() // 👈 기존 UI 수정자 유지 + .frame(width: 62, height: 89) // 👈 기존 UI 수정자 유지 + } placeholder: { + // 원본 프레임과 동일한 크기의 플레이스홀더 + RoundedRectangle(cornerRadius: 10) + .fill(Color.gray.opacity(0.1)) + .frame(width: 62, height: 89) + } + .cornerRadius(10) + .overlay( RoundedRectangle(cornerRadius: 10) .stroke(viewModel.selectedMovieID == movie.id ? .purple03 : Color.clear, lineWidth: 4) ) diff --git a/week06/Megabox/Views/SingleViews/MovieView/MovieCardView.swift b/week06/Megabox/Views/SingleViews/MovieView/MovieCardView.swift index cd4f1f9..f3845f2 100644 --- a/week06/Megabox/Views/SingleViews/MovieView/MovieCardView.swift +++ b/week06/Megabox/Views/SingleViews/MovieView/MovieCardView.swift @@ -1,29 +1,44 @@ -// MovieCardView.swift - import SwiftUI struct MovieCardView: View { - let movie: MovieCards + let movie: MovieCards // 이제 'movie.posterURL'을 사용합니다. var body: some View { VStack(alignment: .leading, spacing: 12) { - // 1. 영화 포스터 이미지 - movie.image - .resizable() - .scaledToFit() - .frame(width: 148, height: 212) - - + // 1. 영화 포스터 이미지 (AsyncImage로 수정) + AsyncImage(url: movie.posterURL) { image in + // 로드 성공 시 + image + .resizable() + .aspectRatio(contentMode: .fill) // 원본 비율 유지하며 프레임 채우기 + + } placeholder: { + // 로드 중이거나 URL이 nil일 때 + ZStack { + Color.gray.opacity(0.1) // 배경색 + Image(systemName: "film") // 기본 아이콘 + .font(.largeTitle) + .foregroundStyle(.gray.opacity(0.5)) + } + } + .frame(width: 148, height: 212) // 프레임 고정 + .clipShape(RoundedRectangle(cornerRadius: 8)) // 모서리 살짝 둥글게 + .overlay( + RoundedRectangle(cornerRadius: 8) // 테두리 추가 + .stroke(Color.gray.opacity(0.2), lineWidth: 1) + ) + // 2. 예매 버튼 bookingButton - + // 3. 영화 정보 텍스트 VStack(alignment: .leading, spacing: 2) { Text(movie.movieName) .font(.bold22) .foregroundColor(.black) + .lineLimit(1) // 한 줄로 제한 Text("누적관객수 \(movie.watchedStatus)") .font(.medium18) diff --git a/week06/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift b/week06/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift index 9c75138..24c6706 100644 --- a/week06/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift +++ b/week06/Megabox/Views/SingleViews/MovieView/MovieDetailView.swift @@ -109,9 +109,19 @@ struct MovieDetailView: View { private var detailsView: some View { HStack(alignment:.top, spacing: 16) { - movie.image// 상세 정보 포스터 이미지 이름 - .resizable() - .frame(width: 100, height: 120) + + // [수정] AsyncImage로 교체 + AsyncImage(url: movie.posterURL) { image in + image + .resizable() // 👈 기존 UI 수정자 유지 + .frame(width: 100, height: 120) // 👈 기존 UI 수정자 유지 + } placeholder: { + // 원본 프레임과 동일한 크기의 플레이스홀더 + RoundedRectangle(cornerRadius: 8) + .fill(Color.gray.opacity(0.1)) + .frame(width: 100, height: 120) + } + .cornerRadius(8) // 👈 플레이스홀더에도 적용하기 위해 밖으로 이동 VStack(alignment: .leading, spacing: 8) { Text("12세 이상 관람가") diff --git a/week06/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift b/week06/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift index a16aab4..9ff49ab 100644 --- a/week06/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift +++ b/week06/Megabox/Views/SingleViews/MovieView/MovieSheetView.swift @@ -96,10 +96,19 @@ struct MovieSheetView: View { LazyVGrid(columns:movieGridColumns, spacing: 36){ ForEach(movies) { movie in VStack{ - movie.image - .resizable() - .frame(width: 95, height: 135) - .padding(8) + // [수정] AsyncImage로 교체 + AsyncImage(url: movie.posterURL) { image in + image + .resizable() // 👈 기존 UI 수정자 유지 + .frame(width: 95, height: 135) // 👈 기존 UI 수정자 유지 + } placeholder: { + // 원본 프레임과 동일한 크기의 플레이스홀더 + RoundedRectangle(cornerRadius: 10) + .fill(Color.gray.opacity(0.1)) + .frame(width: 95, height: 135) + } + .cornerRadius(10) // 👈 플레이스홀더에도 적용하기 위해 밖으로 이동 + .padding(8) .overlay( RoundedRectangle(cornerRadius: 10) .stroke(viewModel.selectedMovieID == movie.id ? .purple03 : Color.clear, lineWidth: 4)