Skip to content

Commit

Permalink
fix: BookCover Title 업데이트 오류 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
k2645 committed Dec 5, 2024
1 parent 143de4b commit 80acc86
Show file tree
Hide file tree
Showing 8 changed files with 34 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ final class BookViewController: UIViewController {
setup()
configureNavigationBar()
configureConstraints()
input.send(.loadBookTitle)
}

override func viewWillAppear(_ animated: Bool) {
Expand All @@ -56,8 +57,8 @@ final class BookViewController: UIViewController {
case .loadFirstPage(let page):
guard let page else { return }
self?.configureFirstPageViewController(firstPage: page)
case .moveToEdit(let bookID):
self?.presentEditBookView(bookID: bookID)
case .moveToEdit(let bookID, let bookTitle):
self?.presentEditBookView(bookID: bookID, bookTitle: bookTitle)
}
}
.store(in: &cancellables)
Expand Down Expand Up @@ -129,10 +130,10 @@ final class BookViewController: UIViewController {
}

// MARK: - PresentEditBookView
private func presentEditBookView(bookID: UUID) {
private func presentEditBookView(bookID: UUID, bookTitle: String) {
do {
let editBookViewModelFactory = try DIContainer.shared.resolve(EditBookViewModelFactory.self)
let editBookViewModel = editBookViewModelFactory.make(bookID: bookID)
let editBookViewModel = editBookViewModelFactory.make(bookID: bookID, bookTitle: bookTitle)
let editBookViewController = EditBookViewController(viewModel: editBookViewModel, mode: .modify)
navigationController?.pushViewController(editBookViewController, animated: true)
} catch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Combine

public final class BookViewModel: ViewModelType {
enum Input {
case loadBookTitle
case loadBook
case loadPreviousPage
case loadNextPage
Expand All @@ -13,7 +14,7 @@ public final class BookViewModel: ViewModelType {
enum Output {
case setBookTitle(with: String?)
case loadFirstPage(page: Page?)
case moveToEdit(bookID: UUID)
case moveToEdit(bookID: UUID, bookTitle: String)
}

private let fetchBookUseCase: FetchBookUseCase
Expand All @@ -22,21 +23,26 @@ public final class BookViewModel: ViewModelType {

let identifier: UUID
private var book: Book?
private let bookTitle: String
private var nowPageIndex: Int = 0
var previousPage: Page? { nowPageIndex > 0 ? book?.pages[nowPageIndex - 1] : nil }
var nextPage: Page? { nowPageIndex < (book?.pages.count ?? 0) - 1 ? book?.pages[nowPageIndex + 1] : nil }

init(
fetchBookUseCase: FetchBookUseCase,
identifier: UUID
identifier: UUID,
bookTitle: String
) {
self.fetchBookUseCase = fetchBookUseCase
self.identifier = identifier
self.bookTitle = bookTitle
}

func transform(input: AnyPublisher<Input, Never>) -> AnyPublisher<Output, Never> {
input.sink { [weak self] event in
switch event {
case .loadBookTitle:
self?.output.send(.setBookTitle(with: self?.bookTitle))
case .loadBook:
Task { try await self?.fetchBook() }
case .loadPreviousPage:
Expand All @@ -49,7 +55,7 @@ public final class BookViewModel: ViewModelType {
}
case .editBook:
guard let self else { return }
self.output.send(.moveToEdit(bookID: self.identifier))
self.output.send(.moveToEdit(bookID: self.identifier, bookTitle: bookTitle))
}
}
.store(in: &cancellables)
Expand All @@ -59,7 +65,6 @@ public final class BookViewModel: ViewModelType {

private func fetchBook() async throws {
book = try await fetchBookUseCase.execute(id: identifier)
output.send(.setBookTitle(with: book?.title))
output.send(.loadFirstPage(page: book?.pages[nowPageIndex]))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@ import MHDomain
public struct BookViewModelFactory {
private let fetchBookUseCase: FetchBookUseCase

public init(fetchBookUseCase: FetchBookUseCase) {
public init(
fetchBookUseCase: FetchBookUseCase
) {
self.fetchBookUseCase = fetchBookUseCase
}

public func make(bookID: UUID) -> BookViewModel {
public func make(bookID: UUID, bookTitle: String) -> BookViewModel {
BookViewModel(
fetchBookUseCase: fetchBookUseCase,
identifier: bookID
identifier: bookID,
bookTitle: bookTitle
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -228,8 +228,9 @@ final class BookCoverViewController: UIViewController {
// MARK: - Present EditBookViewController
private func presentEditBookView(bookID: UUID) {
do {
guard let bookTitle = bookTitleTextField.text else { return }
let editBookViewModelFactory = try DIContainer.shared.resolve(EditBookViewModelFactory.self)
let editBookViewModel = editBookViewModelFactory.make(bookID: bookID)
let editBookViewModel = editBookViewModelFactory.make(bookID: bookID, bookTitle: bookTitle)
let editBookViewController = EditBookViewController(viewModel: editBookViewModel)
navigationController?.pushViewController(editBookViewController, animated: true)
} catch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ final class EditBookViewController: UIViewController {

required init?(coder: NSCoder) {
guard let viewModel = try? DIContainer.shared.resolve(EditBookViewModelFactory.self) else { return nil }
self.viewModel = viewModel.make(bookID: .init())
self.viewModel = viewModel.make(bookID: .init(), bookTitle: "")
self.mode = .create

super.init(coder: coder)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ final class EditBookViewModel: ViewModelType {
private let fetchMediaUseCase: FetchMediaUseCase
private let deleteMediaUseCase: DeleteMediaUseCase
private let bookID: UUID
private var title: String = ""
private let bookTitle: String
private var editPageViewModels: [EditPageViewModel] = []
private var currentPageIndex = 0

Expand All @@ -47,7 +47,8 @@ final class EditBookViewModel: ViewModelType {
createMediaUseCase: CreateMediaUseCase,
fetchMediaUseCase: FetchMediaUseCase,
deleteMediaUseCase: DeleteMediaUseCase,
bookID: UUID
bookID: UUID,
bookTitle: String
) {
self.fetchBookUseCase = fetchBookUseCase
self.updateBookUseCase = updateBookUseCase
Expand All @@ -57,6 +58,7 @@ final class EditBookViewModel: ViewModelType {
self.fetchMediaUseCase = fetchMediaUseCase
self.deleteMediaUseCase = deleteMediaUseCase
self.bookID = bookID
self.bookTitle = bookTitle
}

// MARK: - Binding Method
Expand Down Expand Up @@ -86,7 +88,6 @@ final class EditBookViewModel: ViewModelType {
private func fetchBook() async {
do {
let book = try await fetchBookUseCase.execute(id: bookID)
title = book.title
editPageViewModels = book.pages.map { page in
let editPageViewModel = EditPageViewModel(
fetchMediaUseCase: fetchMediaUseCase,
Expand All @@ -97,7 +98,7 @@ final class EditBookViewModel: ViewModelType {
editPageViewModel.delegate = self
return editPageViewModel
}
output.send(.updateViewController(title: title))
output.send(.updateViewController(title: bookTitle))
} catch {
output.send(.error(message: "책을 가져오는데 실패했습니다."))
MHLogger.error(error.localizedDescription + #function)
Expand Down Expand Up @@ -154,7 +155,7 @@ final class EditBookViewModel: ViewModelType {

private func saveMediaAll() async {
let pages = editPageViewModels.map { $0.page }
let book = Book(id: bookID, title: title, pages: pages)
let book = Book(id: bookID, title: bookTitle, pages: pages)
let mediaList = pages.flatMap { $0.metadata.values }
do {
try await updateBookUseCase.execute(id: bookID, book: book)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public struct EditBookViewModelFactory {
self.deleteMediaUseCase = deleteMediaUseCase
}

func make(bookID: UUID) -> EditBookViewModel {
func make(bookID: UUID, bookTitle: String) -> EditBookViewModel {
EditBookViewModel(
fetchBookUseCase: fetchBookUseCase,
updateBookUseCase: updateBookUseCase,
Expand All @@ -37,7 +37,8 @@ public struct EditBookViewModelFactory {
createMediaUseCase: createMediaUseCase,
fetchMediaUseCase: fetchMediaUseCase,
deleteMediaUseCase: deleteMediaUseCase,
bookID: bookID
bookID: bookID,
bookTitle: bookTitle
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -302,10 +302,11 @@ extension HomeViewController: UICollectionViewDataSource {

private func bookCoverTapped(indexPath: IndexPath) {
let bookID = viewModel.currentBookCovers[indexPath.row].id
let bookTitle = viewModel.currentBookCovers[indexPath.row].title
guard let bookViewModelFactory = try? DIContainer.shared.resolve(BookViewModelFactory.self) else {
return
}
let bookViewModel = bookViewModelFactory.make(bookID: bookID)
let bookViewModel = bookViewModelFactory.make(bookID: bookID, bookTitle: bookTitle)
let bookViewController = BookViewController(viewModel: bookViewModel)
navigationController?.pushViewController(bookViewController, animated: true)
}
Expand Down

0 comments on commit 80acc86

Please sign in to comment.