Skip to content

Commit

Permalink
#298: 검색추천화면 - 메인 화면 드랍유도 문구, 검색바 placeholder 서버에서 받아오도록 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
wendoei committed Aug 16, 2024
1 parent 8aa3b26 commit 2bf7e45
Show file tree
Hide file tree
Showing 14 changed files with 126 additions and 198 deletions.
11 changes: 3 additions & 8 deletions StreetDrop/StreetDrop.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,6 @@
6AAFD9AF2BCE567A001A6772 /* FetchingLevelPolicyUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAFD9AE2BCE567A001A6772 /* FetchingLevelPolicyUseCase.swift */; };
6AAFD9B12BCE56A6001A6772 /* DefaultFetchingLevelPolicyUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AAFD9B02BCE56A6001A6772 /* DefaultFetchingLevelPolicyUseCase.swift */; };
B46578C32B00BC060024B066 /* LeftAlignedCollectionViewFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = B46578C22B00BC060024B066 /* LeftAlignedCollectionViewFlowLayout.swift */; };
B4B9EE842ADBDFFB000A6507 /* RecommendMusicSearchCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4B9EE832ADBDFFB000A6507 /* RecommendMusicSearchCollectionView.swift */; };
B4B9EE862ADEB2AC000A6507 /* RecommendKeywordItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4B9EE852ADEB2AC000A6507 /* RecommendKeywordItemCell.swift */; };
C40008EA2A32012B00EA7FA9 /* Music.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40008E92A32012B00EA7FA9 /* Music.swift */; };
C419722E2ABD9D6F00211222 /* MyInfoUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C419722D2ABD9D6F00211222 /* MyInfoUseCase.swift */; };
Expand Down Expand Up @@ -211,7 +210,6 @@
C45BF3A62A1D19C600CEDE74 /* UserDefaultKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45BF3962A1D0ADF00CEDE74 /* UserDefaultKey.swift */; };
C45BF3A72A1D19CC00CEDE74 /* RecentMusicQueriesStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45BF3A22A1D179C00CEDE74 /* RecentMusicQueriesStorage.swift */; };
C45BF3A82A1D19D100CEDE74 /* RecentMusicQueryDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45BF3A02A1D133000CEDE74 /* RecentMusicQueryDTO.swift */; };
C45BF3AA2A1E11F200CEDE74 /* RecentMusicSearchScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45BF3A92A1E11F200CEDE74 /* RecentMusicSearchScrollView.swift */; };
C45BF3AC2A1EF64300CEDE74 /* RecentQueryButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45BF3AB2A1EF64300CEDE74 /* RecentQueryButton.swift */; };
C46410F42A629820009DD88F /* MusicAppButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46410F32A629820009DD88F /* MusicAppButton.swift */; };
C4685B362B725FF500F514C7 /* UserCircleRadiusResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4685B352B725FF500F514C7 /* UserCircleRadiusResponseDTO.swift */; };
Expand Down Expand Up @@ -273,6 +271,7 @@
F4C996AA2C1EEF0B00FF7B9A /* DefaultNoticeRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4C996A92C1EEF0B00FF7B9A /* DefaultNoticeRepository.swift */; };
F4C996AD2C1EEF2500FF7B9A /* NoticeRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4C996AC2C1EEF2500FF7B9A /* NoticeRepository.swift */; };
F4C996AF2C1EF6C100FF7B9A /* Notice.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4C996AE2C1EF6C100FF7B9A /* Notice.swift */; };
F4CBD7C02C6C181900A5FD91 /* GuideDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4CBD7BF2C6C181900A5FD91 /* GuideDetailView.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -422,7 +421,6 @@
6AAFD9AE2BCE567A001A6772 /* FetchingLevelPolicyUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchingLevelPolicyUseCase.swift; sourceTree = "<group>"; };
6AAFD9B02BCE56A6001A6772 /* DefaultFetchingLevelPolicyUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultFetchingLevelPolicyUseCase.swift; sourceTree = "<group>"; };
B46578C22B00BC060024B066 /* LeftAlignedCollectionViewFlowLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LeftAlignedCollectionViewFlowLayout.swift; sourceTree = "<group>"; };
B4B9EE832ADBDFFB000A6507 /* RecommendMusicSearchCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecommendMusicSearchCollectionView.swift; sourceTree = "<group>"; };
B4B9EE852ADEB2AC000A6507 /* RecommendKeywordItemCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecommendKeywordItemCell.swift; sourceTree = "<group>"; };
C40008E92A32012B00EA7FA9 /* Music.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Music.swift; sourceTree = "<group>"; };
C419722D2ABD9D6F00211222 /* MyInfoUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyInfoUseCase.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -472,7 +470,6 @@
C45BF39D2A1D113200CEDE74 /* UserDefaultsRecentMusicSearches.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsRecentMusicSearches.swift; sourceTree = "<group>"; };
C45BF3A02A1D133000CEDE74 /* RecentMusicQueryDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentMusicQueryDTO.swift; sourceTree = "<group>"; };
C45BF3A22A1D179C00CEDE74 /* RecentMusicQueriesStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentMusicQueriesStorage.swift; sourceTree = "<group>"; };
C45BF3A92A1E11F200CEDE74 /* RecentMusicSearchScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentMusicSearchScrollView.swift; sourceTree = "<group>"; };
C45BF3AB2A1EF64300CEDE74 /* RecentQueryButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentQueryButton.swift; sourceTree = "<group>"; };
C46410F32A629820009DD88F /* MusicAppButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicAppButton.swift; sourceTree = "<group>"; };
C4685B352B725FF500F514C7 /* UserCircleRadiusResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserCircleRadiusResponseDTO.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -529,6 +526,7 @@
F4C996A92C1EEF0B00FF7B9A /* DefaultNoticeRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultNoticeRepository.swift; sourceTree = "<group>"; };
F4C996AC2C1EEF2500FF7B9A /* NoticeRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoticeRepository.swift; sourceTree = "<group>"; };
F4C996AE2C1EF6C100FF7B9A /* Notice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notice.swift; sourceTree = "<group>"; };
F4CBD7BF2C6C181900A5FD91 /* GuideDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuideDetailView.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -1250,9 +1248,7 @@
children = (
C434A4C92A1796E400C63526 /* SearchingMusicViewController.swift */,
C434A4DB2A19CA6F00C63526 /* SearchingMusicTableViewCell.swift */,
C45BF3A92A1E11F200CEDE74 /* RecentMusicSearchScrollView.swift */,
C45BF3AB2A1EF64300CEDE74 /* RecentQueryButton.swift */,
B4B9EE832ADBDFFB000A6507 /* RecommendMusicSearchCollectionView.swift */,
B4B9EE852ADEB2AC000A6507 /* RecommendKeywordItemCell.swift */,
B46578C22B00BC060024B066 /* LeftAlignedCollectionViewFlowLayout.swift */,
);
Expand Down Expand Up @@ -1825,6 +1821,7 @@
18F76FAD2A04FF3D006CF9EF /* NetworkService.swift in Sources */,
082F171C2AB7455400174D98 /* DefaultEditCommentUseCase.swift in Sources */,
41A3DDEB2A58428F004CFA2F /* ToastView.swift in Sources */,
F4CBD7C02C6C181900A5FD91 /* GuideDetailView.swift in Sources */,
C4D16FCC2A1B98B0008B076F /* UILabel+LineHeight.swift in Sources */,
1876F04A2A66EDF10064B887 /* MyMusic.swift in Sources */,
C419724A2ABDC94A00211222 /* DefaultDeletingMusicUseCase.swift in Sources */,
Expand All @@ -1836,7 +1833,6 @@
C44A549A2BBC097E00354F8F /* FetchingPopUpInfomationUseCase.swift in Sources */,
41008EBA2A49B56F00FD4ABE /* ClaimModalViewController.swift in Sources */,
C45BF3AC2A1EF64300CEDE74 /* RecentQueryButton.swift in Sources */,
B4B9EE842ADBDFFB000A6507 /* RecommendMusicSearchCollectionView.swift in Sources */,
C45BF3972A1D0ADF00CEDE74 /* UserDefaultKey.swift in Sources */,
41A3DDF12A593ED4004CFA2F /* AlertViewController.swift in Sources */,
C47F02222A38633500F48884 /* SettingsViewController.swift in Sources */,
Expand Down Expand Up @@ -1998,7 +1994,6 @@
C4A445932A5EF265008279C1 /* DefaultFCMRepository.swift in Sources */,
41B953682A10E39D00BEC0AB /* SearchedMusicResponseDTO+Mapping.swift in Sources */,
C434A4CA2A1796E400C63526 /* SearchingMusicViewController.swift in Sources */,
C45BF3AA2A1E11F200CEDE74 /* RecentMusicSearchScrollView.swift in Sources */,
188D2C7B2A1E448C0088F49C /* DroppedMusicWithinAreaCollectionViewCell.swift in Sources */,
41396D9B2A4F1C5600B69341 /* OptionModalViewController.swift in Sources */,
C47C1D1F2A643C07007317EA /* SplashViewController.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ protocol MyInfoStorage {
func saveLauchedBefore(_ launchedBefore: Bool)
func fetchLastSeenNoticeId() -> Int?
func saveLastSeenNoticeId(_ noticeId: Int)
func fetchLastLaunchDate() -> Date?
func saveLastLaunchDate(_ lastLaunchDate: Date)
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,12 @@ extension UserDefaultsMyInfoStorage: MyInfoStorage {
func saveLastSeenNoticeId(_ noticeId: Int) {
userDefaults.set(noticeId, forKey: UserDefaultKey.lastSeenNoticeId)
}

func fetchLastLaunchDate() -> Date? {
userDefaults.object(forKey: UserDefaultKey.lastLaunchDate) as? Date
}

func saveLastLaunchDate(_ lastLaunchDate: Date) {
userDefaults.set(lastLaunchDate, forKey: UserDefaultKey.lastLaunchDate)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,4 +59,15 @@ final class DefaultMyInfoRepository: MyInfoRepository {
return Double(dto.distance)
}
}

func checkFirstLaunchToday() -> Bool {
let lastLaunchDate = myInfoStorage.fetchLastLaunchDate()
myInfoStorage.saveLastLaunchDate(Date())

if let lastLaunchDate {
return !Calendar.current.isDateInToday(lastLaunchDate)
} else {
return true
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ protocol MyInfoRepository {
func fetchMyMusicAppFromStorage() -> String?
func checkLaunchedBefore() -> Bool
func fetchUserCircleRadius() -> Single<Double>
func checkFirstLaunchToday() -> Bool
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,8 @@ final class DefaultMyInfoUseCase: MyInfoUseCase {
func checkLaunchedBefore() -> Bool {
return myInfoRepository.checkLaunchedBefore()
}

func checkFirstLaunchToday() -> Bool {
return myInfoRepository.checkFirstLaunchToday()
}
}
1 change: 1 addition & 0 deletions StreetDrop/StreetDrop/Domain/UseCase/MyInfoUseCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ protocol MyInfoUseCase {
func fetchMyInfo() -> Single<MyInfo>
func saveMyInfo(_ myInfo: MyInfo) -> Single<Void>
func checkLaunchedBefore() -> Bool
func checkFirstLaunchToday() -> Bool
}
Original file line number Diff line number Diff line change
Expand Up @@ -354,11 +354,11 @@ private extension MainViewController {

// MARK: - Bubble Comment View

view.addSubview(bubbleCommentView)
self.view.addSubview(bubbleCommentView)
bubbleCommentView.snp.makeConstraints {
$0.centerX.equalToSuperview()
$0.width.equalTo(148)
$0.height.equalTo(45)
$0.verticalEdges.greaterThanOrEqualTo(self.view.safeAreaLayoutGuide).inset(16)
$0.width.lessThanOrEqualTo(self.view.safeAreaLayoutGuide).inset(32)
$0.bottom.equalTo(musicDropButton.snp.top).offset(-10)
}
}
Expand Down Expand Up @@ -514,8 +514,9 @@ private extension MainViewController {
.disposed(by: disposeBag)

output.showFirstComment
.bind(with: self) { owner, _ in
.bind(with: self) { owner, prompt in
owner.bubbleCommentView.isHidden = false
owner.bubbleCommentView.configure(with: prompt)
}
.disposed(by: disposeBag)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ final class MainViewModel: ViewModel {
private let fetchingMusicWithinArea: FetchingMusicWithinArea
private let fetchingPopUpInfomationUseCase: FetchingPopUpInfomationUseCase
private let postingPopUpUserReadingUseCase: PostingPopUpUserReadingUseCase
private let recommendMusicUsecase: RecommendMusicUsecase

var locationManager = LocationManager()
private let locationUpdated = PublishRelay<Void>()
Expand All @@ -46,7 +47,8 @@ final class MainViewModel: ViewModel {
fetchingMusicWithinArea: FetchingMusicWithinArea = DefaultFetchingMusicWithinArea(),
fetchingSingleMusicUseCase: FetchingSingleMusicUseCase = DefaultFetchingSingleMusicUseCase(),
fetchingPopUpInfomationUseCase: FetchingPopUpInfomationUseCase = DefaultFetchingPopUpInfomationUseCase(),
postingPopUpUserReadingUseCase: PostingPopUpUserReadingUseCase = DefaultPostingPopUpUserReadingUseCase()
postingPopUpUserReadingUseCase: PostingPopUpUserReadingUseCase = DefaultPostingPopUpUserReadingUseCase(),
recommendMusicUsecase: RecommendMusicUsecase = DefaultRecommendMusicUsecase()
) {
self.userCircleRadius = userCircleRadius
self.myInfoUseCase = myInfoUseCase
Expand All @@ -55,6 +57,7 @@ final class MainViewModel: ViewModel {
self.fetchingMusicWithinArea = fetchingMusicWithinArea
self.fetchingPopUpInfomationUseCase = fetchingPopUpInfomationUseCase
self.postingPopUpUserReadingUseCase = postingPopUpUserReadingUseCase
self.recommendMusicUsecase = recommendMusicUsecase
self.locationManager.delegate = self
}
}
Expand All @@ -78,7 +81,7 @@ extension MainViewModel {
let musicWithinArea = BehaviorRelay<Musics>(value: [])
let cameraShouldGoCurrentLocation = PublishRelay<CLLocation>()
let tappedPOIIndex = PublishRelay<Int>()
let showFirstComment = PublishRelay<Void>()
let showFirstComment = PublishRelay<String>()
let presentSharedMusicView = PublishRelay<Int>()

let tipPopUpShowRelay: PublishRelay<PopUpInfomation> = .init()
Expand Down Expand Up @@ -110,7 +113,7 @@ extension MainViewModel {
owner.output.cameraShouldGoCurrentLocation.accept(self.location)
owner.fetchMusicWithArea(output: owner.output, disposedBag: disposedBag)
owner.fetchMyInfoAndSave(disposedBag: disposedBag)
owner.checkAppFirstLaunched(output: owner.output)
owner.fetchPromptOfTheDay(output: owner.output, disposedBag: disposedBag)
owner.checkUniversialLinkRemained(output: owner.output)
}
.disposed(by: disposedBag)
Expand All @@ -125,7 +128,6 @@ extension MainViewModel {
print(error.localizedDescription)
}
.disposed(by: disposedBag)

}
.disposed(by: disposedBag)

Expand Down Expand Up @@ -312,10 +314,22 @@ private extension MainViewModel {
.disposed(by: disposedBag)
}

func checkAppFirstLaunched(output: Output) {
let isLaunchedBefore = myInfoUseCase.checkLaunchedBefore()
if isLaunchedBefore == false {
output.showFirstComment.accept(Void())
func fetchPromptOfTheDay(output: Output, disposedBag: DisposeBag) {
recommendMusicUsecase.getPromptOfTheDay().subscribe { [weak self] result in
switch result {
case .success(let prompt):
self?.showPromptIfFirstLaunchedToday(prompt: prompt, output: output)
case .failure(let error):
print(error)
}
}
.disposed(by: disposedBag)
}

func showPromptIfFirstLaunchedToday(prompt: String, output: Output) {
let isFirstLaunchToday = myInfoUseCase.checkFirstLaunchToday()
if isFirstLaunchToday {
output.showFirstComment.accept(prompt)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
//
// GuideDetailView.swift
// StreetDrop
//
// Created by jihye kim on 13/08/2024.
//

import UIKit

class GuideDetailView: UIView {
private let text: String

private lazy var speechBubblePointImageView: UIImageView = {
let speechBubblePointImage = UIImage(named: "speechBubblePoint")
let imageView = UIImageView(image: speechBubblePointImage)

return imageView
}()

private lazy var guideLabel: UILabel = {
let label = UILabel()
label.text = self.text
label.font = .pretendard(size: 12, weightName: .medium)
label.numberOfLines = 0
label.textColor = .gray200

return label
}()

init(text: String) {
self.text = text
super.init(frame: .zero)
configureUI()
}

@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

private extension GuideDetailView {
func configureUI() {
self.backgroundColor = .gray600
self.layer.cornerRadius = 12
self.alpha = 0
self.isUserInteractionEnabled = false

[speechBubblePointImageView, guideLabel].forEach {
addSubview($0)
}

speechBubblePointImageView.snp.makeConstraints {
$0.trailing.equalToSuperview().inset(12)
$0.bottom.equalTo(self.snp.top)
$0.width.equalTo(10)
$0.height.equalTo(8)
}

guideLabel.snp.makeConstraints {
$0.leading.trailing.equalToSuperview().inset(16)
$0.top.bottom.equalToSuperview().inset(12)
}
}
}

This file was deleted.

Loading

0 comments on commit 2bf7e45

Please sign in to comment.