Skip to content

Commit

Permalink
[feat] 피드 저장하기, 저장 삭제하기 API (#60)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jaewift committed Nov 15, 2024
1 parent 9993cdd commit 6b19180
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 32 deletions.
16 changes: 11 additions & 5 deletions PLUV/Component/SaveMoveView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ final class SaveMoveView: UIView {
var trasferButton = BlackButton()
var view: UIViewController

private var isOriginalColor = true
private var isOriginalColor: Bool = true

init(view: UIViewController) {
self.view = view
Expand Down Expand Up @@ -76,12 +76,18 @@ final class SaveMoveView: UIView {

@objc func saveButtonColor() {
if isOriginalColor {
saveButton.setImage(UIImage(named: "savebutton_icon"), for: .normal)
} else {
saveButton.setImage(UIImage(named: "savebutton_icon2"), for: .normal)
delegate?.setFeedSaveAPI()
} else {
saveButton.setImage(UIImage(named: "savebutton_icon"), for: .normal)
delegate?.deleteFeedSaveAPI()
}
isOriginalColor.toggle()

delegate?.deleteFeedSaveAPI()
}

func updateSaveButtonImage(isSaved: Bool) {
let imageName = isSaved ? "savebutton_icon" : "savebutton_icon2"
saveButton.setImage(UIImage(named: imageName), for: .normal)
isOriginalColor = isSaved
}
}
39 changes: 38 additions & 1 deletion PLUV/Feed/FeedDetailViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ import RxSwift
import RxCocoa

protocol SaveMoveViewDelegate: AnyObject {
func deleteFeedSaveAPI()
func setFeedSaveAPI()
func deleteFeedSaveAPI()
}

class FeedDetailViewController: UIViewController, SaveMoveViewDelegate {

private var viewModel = FeedViewModel()
private var saveViewModel = SaveViewModel()

private let scrollView = UIScrollView()
private let contentView = UIView()
Expand Down Expand Up @@ -53,6 +55,8 @@ class FeedDetailViewController: UIViewController, SaveMoveViewDelegate {
private var feedDetailTableViewHeightConstraint: Constraint?

private var saveMoveView = SaveMoveView(view: UIViewController())

private var saveCount: Int = 0

private let disposeBag = DisposeBag()

Expand All @@ -71,6 +75,7 @@ class FeedDetailViewController: UIViewController, SaveMoveViewDelegate {
setUI()
setPlaylistData()
setFeedDetailMusicItemAPI()
setSaveAPI()
}

// override func viewDidLayoutSubviews() {
Expand Down Expand Up @@ -258,6 +263,38 @@ class FeedDetailViewController: UIViewController, SaveMoveViewDelegate {
}
}
}

private func setSaveAPI() {
let loginToken = UserDefaults.standard.string(forKey: APIService.shared.loginAccessTokenKey)!
let url = EndPoint.feedSave.path

APIService().getWithAccessToken(of: APIResponse<[Feed]>.self, url: url, AccessToken: loginToken) { response in
switch response.code {
case 200:
self.saveViewModel.saveItems = Observable.just(response.data)
self.observeSaveItems()
default:
AlertController(message: response.msg).show()
}
}
}

private func observeSaveItems() {
guard let saveId = self.viewModel.selectFeedItem?.id else { return }
saveViewModel.saveItems
.map { saves in
saves.map { $0.id } // Feed 배열에서 id 값만 추출
}
.subscribe(onNext: { ids in
// 특정 id가 배열에 포함되어 있는지 확인
if ids.contains(saveId) {
self.saveMoveView.updateSaveButtonImage(isSaved: false)
} else {
self.saveMoveView.updateSaveButtonImage(isSaved: true)
}
})
.disposed(by: disposeBag)
}
}


Expand Down
37 changes: 11 additions & 26 deletions PLUV/Home/HomeViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -115,13 +115,13 @@ class HomeViewController: UIViewController {

setUI()
setMeAPI()
setSaveAPI()
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
/// 탭 바 표시하기
self.tabBarController?.tabBar.isHidden = false
setSaveAPI()
}
}

Expand Down Expand Up @@ -206,7 +206,6 @@ extension HomeViewController {
recentListButton.addTarget(self, action: #selector(clickRecentListButton), for: .touchUpInside)

self.recentListView.addSubview(recentPlayListCollectionView)
recentPlayListCollectionView.tag = 1
recentPlayListCollectionView.snp.makeConstraints { make in
make.top.equalTo(recentListLabel.snp.bottom).offset(24)
make.leading.trailing.equalToSuperview()
Expand Down Expand Up @@ -236,7 +235,6 @@ extension HomeViewController {
saveListButton.addTarget(self, action: #selector(clickSaveListButton), for: .touchUpInside)

self.saveListView.addSubview(savePlayListCollectionView)
savePlayListCollectionView.tag = 2
savePlayListCollectionView.snp.makeConstraints { make in
make.top.equalTo(saveListLabel.snp.bottom).offset(24)
make.leading.trailing.equalToSuperview()
Expand Down Expand Up @@ -289,8 +287,8 @@ extension HomeViewController {
}

private func setMeData() {
self.recentPlayListCollectionView.rx.setDelegate(self)
.disposed(by: disposeBag)
recentPlayListCollectionView.rx.setDelegate(self)
.disposed(by: disposeBag)

/// CollectionView에 들어갈 Cell에 정보 제공
self.meViewModel.meItems
Expand All @@ -299,14 +297,6 @@ extension HomeViewController {
cell.prepare(me: item)
}
.disposed(by: disposeBag)

/// 아이템 선택 시 다음으로 넘어갈 VC에 정보 제공
self.recentPlayListCollectionView.rx.modelSelected(Me.self)
.subscribe(onNext: { [weak self] recentItem in
guard let self = self else { return }
self.meViewModel.selectMeItem = recentItem
})
.disposed(by: disposeBag)
}

private func setMeAPI() {
Expand Down Expand Up @@ -334,7 +324,10 @@ extension HomeViewController {
}

private func setSaveData() {
self.savePlayListCollectionView.rx.setDelegate(self)
savePlayListCollectionView.delegate = nil
savePlayListCollectionView.dataSource = nil

savePlayListCollectionView.rx.setDelegate(self)
.disposed(by: disposeBag)

/// CollectionView에 들어갈 Cell에 정보 제공
Expand All @@ -344,14 +337,6 @@ extension HomeViewController {
cell.prepare(feed: item)
}
.disposed(by: disposeBag)

/// 아이템 선택 시 다음으로 넘어갈 VC에 정보 제공
self.savePlayListCollectionView.rx.modelSelected(Feed.self)
.subscribe(onNext: { [weak self] saveItem in
guard let self = self else { return }
self.saveViewModel.selectSaveItem = saveItem
})
.disposed(by: disposeBag)
}

private func setSaveAPI() {
Expand All @@ -365,11 +350,9 @@ extension HomeViewController {
self.savePlayListCollectionView.isHidden = true
self.setSaveEmptyLabel()
} else {
print(response.data)
self.savePlayListCollectionView.isHidden = false
self.saveEmptyLabel.removeFromSuperview()
let limitedData = Array(response.data.prefix(5))
self.saveViewModel.saveItems = Observable.just(limitedData)
self.saveViewModel.saveItems = Observable.just(response.data)
self.setSaveData()
self.view.layoutIfNeeded()
}
Expand All @@ -384,8 +367,10 @@ extension HomeViewController {
extension HomeViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

if collectionView.tag == 1 {
if collectionView == recentPlayListCollectionView {
return CGSize(width: 140, height: 140)
} else if collectionView == savePlayListCollectionView {
return CGSize(width: 100, height: 100)
} else {
return CGSize(width: 100, height: 100)
}
Expand Down

0 comments on commit 6b19180

Please sign in to comment.