From 51238e1dd1ece1e2b3b7802a4ad8783a391f4629 Mon Sep 17 00:00:00 2001 From: Choyoungjun Date: Tue, 12 Nov 2024 20:14:49 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat=20::=20[#119]=20=EA=B0=84=ED=8E=B8=20?= =?UTF-8?q?=EA=B3=B5=EC=A7=80=20=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Projects/Data/Sources/API/NoticeAPI.swift | 6 +++--- Projects/Data/Sources/DI/UseCaseAssembly.swift | 3 +++ .../Sources/DataSource/NoticeDataSource.swift | 6 ++++++ .../Repository/NoticeRepositoryImpl.swift | 6 ++++++ .../Sources/Repository/NoticeRepository.swift | 1 + .../Notice/FetchSimpleNoticeListUseCase.swift | 16 ++++++++++++++++ .../Sources/DI/PresentationAssembly.swift | 2 +- 7 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 Projects/Domain/Sources/UseCase/Notice/FetchSimpleNoticeListUseCase.swift diff --git a/Projects/Data/Sources/API/NoticeAPI.swift b/Projects/Data/Sources/API/NoticeAPI.swift index 0a9921bd..dbfce84f 100644 --- a/Projects/Data/Sources/API/NoticeAPI.swift +++ b/Projects/Data/Sources/API/NoticeAPI.swift @@ -7,8 +7,8 @@ import Domain import AppNetwork public enum NoticeAPI { - case fetchTodayNoticeList case fetchNoticeList + case fetchSimpleNoticeList case fetchDetailNotice(id: UUID) } @@ -21,10 +21,10 @@ extension NoticeAPI: PiCKAPI { public var urlPath: String { switch self { - case .fetchTodayNoticeList: - return "/today" case .fetchNoticeList: return "/simple" + case .fetchSimpleNoticeList: + return "/today" case .fetchDetailNotice(let id): return "/\(id)" } diff --git a/Projects/Data/Sources/DI/UseCaseAssembly.swift b/Projects/Data/Sources/DI/UseCaseAssembly.swift index 424d7c41..4ceb1725 100644 --- a/Projects/Data/Sources/DI/UseCaseAssembly.swift +++ b/Projects/Data/Sources/DI/UseCaseAssembly.swift @@ -114,6 +114,9 @@ public final class UseCaseAssembly: Assembly { container.register(FetchNoticeListUseCase.self) { resolver in FetchNoticeListUseCase(repository: resolver.resolve(NoticeRepository.self)!) } + container.register(FetchSimpleNoticeListUseCase.self) { resolver in + FetchSimpleNoticeListUseCase(repository: resolver.resolve(NoticeRepository.self)!) + } container.register(FetchDetailNoticeUseCase.self) { resolver in FetchDetailNoticeUseCase(repository: resolver.resolve(NoticeRepository.self)!) } diff --git a/Projects/Data/Sources/DataSource/NoticeDataSource.swift b/Projects/Data/Sources/DataSource/NoticeDataSource.swift index a7165ffc..e041b726 100644 --- a/Projects/Data/Sources/DataSource/NoticeDataSource.swift +++ b/Projects/Data/Sources/DataSource/NoticeDataSource.swift @@ -9,6 +9,7 @@ import Domain protocol NoticeDataSource { func fetchNoticeList() -> Single + func fetchSimpleNoticeList() -> Single func fetchDetailNotice(id: UUID) -> Single } @@ -18,6 +19,11 @@ class NoticeDataSourceImpl: BaseDataSource, NoticeDataSource { .filterSuccessfulStatusCodes() } + func fetchSimpleNoticeList() -> Single { + return request(.fetchSimpleNoticeList) + .filterSuccessfulStatusCodes() + } + func fetchDetailNotice(id: UUID) -> Single { return request(.fetchDetailNotice(id: id)) .filterSuccessfulStatusCodes() diff --git a/Projects/Data/Sources/Repository/NoticeRepositoryImpl.swift b/Projects/Data/Sources/Repository/NoticeRepositoryImpl.swift index 128c9946..829a1085 100644 --- a/Projects/Data/Sources/Repository/NoticeRepositoryImpl.swift +++ b/Projects/Data/Sources/Repository/NoticeRepositoryImpl.swift @@ -17,6 +17,12 @@ class NoticeRepositoryImpl: NoticeRepository { .map { $0.toDomain() } } + func fetchSimpleNoticeList() -> Single { + return remoteDataSource.fetchSimpleNoticeList() + .map(NoticeListDTO.self) + .map { $0.toDomain() } + } + func fetchDetailNotice(id: UUID) -> Single { return remoteDataSource.fetchDetailNotice(id: id) .map(DetailNoticeDTO.self) diff --git a/Projects/Domain/Sources/Repository/NoticeRepository.swift b/Projects/Domain/Sources/Repository/NoticeRepository.swift index 809e96dc..53d0aa9a 100644 --- a/Projects/Domain/Sources/Repository/NoticeRepository.swift +++ b/Projects/Domain/Sources/Repository/NoticeRepository.swift @@ -4,5 +4,6 @@ import RxSwift public protocol NoticeRepository { func fetchNoticeList() -> Single + func fetchSimpleNoticeList() -> Single func fetchDetailNotice(id: UUID) -> Single } diff --git a/Projects/Domain/Sources/UseCase/Notice/FetchSimpleNoticeListUseCase.swift b/Projects/Domain/Sources/UseCase/Notice/FetchSimpleNoticeListUseCase.swift new file mode 100644 index 00000000..8b1c8ab6 --- /dev/null +++ b/Projects/Domain/Sources/UseCase/Notice/FetchSimpleNoticeListUseCase.swift @@ -0,0 +1,16 @@ +import Foundation + +import RxSwift + +public class FetchSimpleNoticeListUseCase { + let repository: NoticeRepository + + public init(repository: NoticeRepository) { + self.repository = repository + } + + public func execute() -> Single { + return repository.fetchSimpleNoticeList() + } + +} diff --git a/Projects/Presentation/Sources/DI/PresentationAssembly.swift b/Projects/Presentation/Sources/DI/PresentationAssembly.swift index c6a0b3a3..fa25e70e 100644 --- a/Projects/Presentation/Sources/DI/PresentationAssembly.swift +++ b/Projects/Presentation/Sources/DI/PresentationAssembly.swift @@ -40,7 +40,7 @@ public final class PresentationAssembly: Assembly { fetchWeekendMealPeriodUseCase: resolver.resolve(FetchWeekendMealPeriodUseCase.self)!, timeTableUseCase: resolver.resolve(FetchTodayTimeTableUseCase.self)!, schoolMealUseCase: resolver.resolve(FetchSchoolMealUseCase.self)!, - noticeListUseCase: resolver.resolve(FetchNoticeListUseCase.self)!, + noticeListUseCase: resolver.resolve(FetchSimpleNoticeListUseCase.self)!, selfStudyUseCase: resolver.resolve(FetchSelfStudyUseCase.self)!, fetchOutingPassUseCase: resolver.resolve(FetchOutingPassUseCase.self)!, fetchEarlyLeavePassUseCase: resolver.resolve(FetchEarlyLeavePassUseCase.self)!, From ecac61f5aa958cf77114c4f100ed2ebab7ab1bb1 Mon Sep 17 00:00:00 2001 From: Choyoungjun Date: Tue, 12 Nov 2024 20:16:05 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refact=20::=20[#119]=20=ED=99=88=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/DataSource/HomeDataSource.swift | 5 ----- .../Sources/Scene/Home/HomeViewController.swift | 11 +++++++---- .../Sources/Scene/Home/HomeViewModel.swift | 17 ++++++++--------- .../Home/View/PiCKHomeSelfStudyBannerView.swift | 2 -- .../Notice/Cell/NoticeCollectionViewCell.swift | 4 +++- 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/Projects/Data/Sources/DataSource/HomeDataSource.swift b/Projects/Data/Sources/DataSource/HomeDataSource.swift index d8a07b3e..cdd77699 100644 --- a/Projects/Data/Sources/DataSource/HomeDataSource.swift +++ b/Projects/Data/Sources/DataSource/HomeDataSource.swift @@ -24,11 +24,6 @@ class HomeDataSourceImpl: WebSocketDelegate, HomeDataSource { connectSocket() } - deinit { - socket?.disconnect() - socket?.delegate = nil - } - func connectSocket() { let url = URL(string: "\(URLUtil.socketBaseURL)/main") var request = URLRequest(url: url!) diff --git a/Projects/Presentation/Sources/Scene/Home/HomeViewController.swift b/Projects/Presentation/Sources/Scene/Home/HomeViewController.swift index 1b498176..c864e49c 100644 --- a/Projects/Presentation/Sources/Scene/Home/HomeViewController.swift +++ b/Projects/Presentation/Sources/Scene/Home/HomeViewController.swift @@ -140,7 +140,6 @@ public class HomeViewController: BaseViewController { output.viewMode.asObservable() .withUnretained(self) .bind { owner, data in - owner.setupViewType(type: data) owner.homeViewType = data }.disposed(by: disposeBag) @@ -195,6 +194,13 @@ public class HomeViewController: BaseViewController { output.noticeListData .asObservable() + .do(onNext: { + if $0.isEmpty { + self.noticeStackView.isHidden = true + } else { + self.noticeStackView.isHidden = false + } + }) .bind(to: noticeCollectionView.rx.items( cellIdentifier: NoticeCollectionViewCell.identifier, cellType: NoticeCollectionViewCell.self @@ -255,9 +261,6 @@ public class HomeViewController: BaseViewController { output.noticeViewHeight.asObservable() .withUnretained(self) .bind { owner, height in - if height == 0 { - owner.noticeStackView.isHidden = true - } owner.noticeCollectionView.snp.remakeConstraints { $0.height.equalTo(height) } diff --git a/Projects/Presentation/Sources/Scene/Home/HomeViewModel.swift b/Projects/Presentation/Sources/Scene/Home/HomeViewModel.swift index f307d127..95c7df64 100644 --- a/Projects/Presentation/Sources/Scene/Home/HomeViewModel.swift +++ b/Projects/Presentation/Sources/Scene/Home/HomeViewModel.swift @@ -17,7 +17,7 @@ public class HomeViewModel: BaseViewModel, Stepper { private let fetchWeekendMealPeriodUseCase: FetchWeekendMealPeriodUseCase private let timeTableUseCase: FetchTodayTimeTableUseCase private let schoolMealUseCase: FetchSchoolMealUseCase - private let noticeListUseCase: FetchNoticeListUseCase + private let noticeListUseCase: FetchSimpleNoticeListUseCase private let selfStudyUseCase: FetchSelfStudyUseCase private let fetchOutingPassUseCase: FetchOutingPassUseCase private let fetchEarlyLeavePassUseCase: FetchEarlyLeavePassUseCase @@ -29,7 +29,7 @@ public class HomeViewModel: BaseViewModel, Stepper { fetchWeekendMealPeriodUseCase: FetchWeekendMealPeriodUseCase, timeTableUseCase: FetchTodayTimeTableUseCase, schoolMealUseCase: FetchSchoolMealUseCase, - noticeListUseCase: FetchNoticeListUseCase, + noticeListUseCase: FetchSimpleNoticeListUseCase, selfStudyUseCase: FetchSelfStudyUseCase, fetchOutingPassUseCase: FetchOutingPassUseCase, fetchEarlyLeavePassUseCase: FetchEarlyLeavePassUseCase, @@ -63,7 +63,7 @@ public class HomeViewModel: BaseViewModel, Stepper { let weekendMealPeriodData: Signal let timetableData: Driver<[TimeTableEntityElement]> let schoolMealData: Driver<[(Int, String, MealEntityElement)]> - let noticeListData: Driver + let noticeListData: Signal let selfStudyData: Driver let outingPassData: Signal let timeTableHeight: Driver @@ -78,7 +78,7 @@ public class HomeViewModel: BaseViewModel, Stepper { private let timetableData = BehaviorRelay<[TimeTableEntityElement]>(value: []) private let schoolMealData = BehaviorRelay<[(Int, String, MealEntityElement)]>(value: []) private let outingPassData = PublishRelay() - private let noticeListData = BehaviorRelay(value: []) + private let noticeListData = PublishRelay() private let selfStudyData = BehaviorRelay(value: []) private let timeTableHeight = BehaviorRelay(value: 0) private let schoolMealHeight = BehaviorRelay(value: 0) @@ -171,10 +171,9 @@ public class HomeViewModel: BaseViewModel, Stepper { return .never() } } - .subscribe(onNext: { [weak self] noticeData in - let value = Array(noticeData.prefix(5)) - self?.noticeListData.accept(value) - let height = CGFloat(value.count) + .subscribe(onNext: { [weak self] data in + self?.noticeListData.accept(data) + let height = CGFloat(data.count) self?.noticeViewHeight.accept(height * 86) }).disposed(by: disposeBag) @@ -246,7 +245,7 @@ public class HomeViewModel: BaseViewModel, Stepper { weekendMealPeriodData: weekendMealPeriodData.asSignal(), timetableData: timetableData.asDriver(), schoolMealData: schoolMealData.asDriver(), - noticeListData: noticeListData.asDriver(), + noticeListData: noticeListData.asSignal(), selfStudyData: selfStudyData.asDriver(), outingPassData: outingPassData.asSignal(), timeTableHeight: timeTableHeight.asDriver(), diff --git a/Projects/Presentation/Sources/Scene/Home/View/PiCKHomeSelfStudyBannerView.swift b/Projects/Presentation/Sources/Scene/Home/View/PiCKHomeSelfStudyBannerView.swift index 5b76f850..5cb24468 100644 --- a/Projects/Presentation/Sources/Scene/Home/View/PiCKHomeSelfStudyBannerView.swift +++ b/Projects/Presentation/Sources/Scene/Home/View/PiCKHomeSelfStudyBannerView.swift @@ -38,8 +38,6 @@ public class PiCKHomeSelfStudyBannerView: BaseView { selfStudyTeacherData: SelfStudyEntity ) { if selfStudyTeacherData.isEmpty { -// self.floorStackView.isHidden = true -// self.teacherStackView.isHidden = true self.explainLabel.isHidden = true self.emptySelfStudyLabel.isHidden = false } else { diff --git a/Projects/Presentation/Sources/Scene/Notice/Cell/NoticeCollectionViewCell.swift b/Projects/Presentation/Sources/Scene/Notice/Cell/NoticeCollectionViewCell.swift index 89db4952..aea7e1e3 100644 --- a/Projects/Presentation/Sources/Scene/Notice/Cell/NoticeCollectionViewCell.swift +++ b/Projects/Presentation/Sources/Scene/Notice/Cell/NoticeCollectionViewCell.swift @@ -44,7 +44,9 @@ public class NoticeCollectionViewCell: BaseCollectionViewCell