Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fix] #542 - /poke/friend 404 에러 처리 #543

Open
wants to merge 7 commits into
base: develop
Choose a base branch
from
11 changes: 10 additions & 1 deletion SOPT-iOS/Projects/Data/Sources/Repository/HomeRepository.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,21 @@ public class HomeRepository {
private let calendarService: CalendarService
private let userService: UserService
private let stampService: StampService
private let pokeService: PokeService

private let cancelBag = CancelBag()

public init(homeService: HomeService,
calendarService: CalendarService,
userService: UserService,
stampService: StampService
stampService: StampService,
pokeService: PokeService
) {
self.homeService = homeService
self.calendarService = calendarService
self.userService = userService
self.stampService = stampService
self.pokeService = pokeService
}
}

Expand Down Expand Up @@ -118,4 +121,10 @@ extension HomeRepository: HomeRepositoryInterface {
.map { $0.toDomain() }
.eraseToAnyPublisher()
}

public func checkPokeNewUser() -> AnyPublisher<Bool, any Error> {
pokeService.isNewUser()
.map{ $0.isNew }
.eraseToAnyPublisher()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,8 @@ extension AppDelegate {
homeService: DefaultHomeService(),
calendarService: DefaultCalendarService(),
userService: DefaultUserService(),
stampService: DefaultStampService()
stampService: DefaultStampService(),
pokeService: DefaultPokeService()
)
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ public protocol HomeRepositoryInterface {
func getCalendarDetail() -> AnyPublisher<[HomeCalendarDetailModel], Error>
func getAnnouncementPosts() -> AnyPublisher<[HomeAnnouncementModel], Error>
func getReportUrl() -> AnyPublisher<SoptampReportUrlModel, Error>
func checkPokeNewUser() -> AnyPublisher<Bool, Error>
}
10 changes: 10 additions & 0 deletions SOPT-iOS/Projects/Domain/Sources/UseCase/HomeUseCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public protocol HomeUseCase {
func getCalendarDetail() -> AnyPublisher<[HomeCalendarDetailModel], Never>
func getAnnouncementPosts() -> AnyPublisher<[HomeAnnouncementModel], Never>
func getReportURL()
func checkPokeNewUser() -> AnyPublisher<Bool, Never>
}

public class DefaultHomeUseCase {
Expand Down Expand Up @@ -118,4 +119,13 @@ extension DefaultHomeUseCase: HomeUseCase {
UserDefaultKeyList.Soptamp.reportUrl = resultModel.reportUrl
}.store(in: cancelBag)
}

public func checkPokeNewUser() -> AnyPublisher<Bool, Never> {
repository.checkPokeNewUser()
.catch { error in
print("HomeUseCase checkPokeNewUser에서 문제가 발생했습니다. \(error)")
return Empty<Bool, Never>()
}
.eraseToAnyPublisher()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public protocol HomeForMemberCoordinatable {
var onSettingButtonTapped: ((UserType) -> Void)? { get set }
var onNeedSignIn: (() -> Void)? { get set }
var onNetworkError: (() -> Void)? { get set }
var onPoke: ((_ isNewUser: Bool) -> Void)? { get set }
}
public typealias HomeForMemberViewModelType = ViewModelType & HomeForMemberCoordinatable
public typealias HomeForMemberPresentable = (vc: HomeForMemberViewControllable, vm: any HomeForMemberViewModelType)
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public enum HomeCoordinatorDestination {
case attendance
case soptlog
case calendar
case poke(isNewUser: Bool)

case webLink(url: String)
case deepLink(url: String)
Expand Down Expand Up @@ -103,6 +104,11 @@ public final class HomeCoordinator: DefaultHomeCoordinator {
homeForMember.vm.onNetworkError = {
AlertUtils.presentNetworkAlertVC()
}

homeForMember.vm.onPoke = { [weak self] isNewUser in
self?.requestCoordinating?(.poke(isNewUser: isNewUser))
}

rootViewController = homeForMember.vc.viewController

router.push(homeForMember.vc)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ public class HomeForMemberViewModel: HomeForMemberViewModelType {
public var onSettingButtonTapped: ((UserType) -> Void)?
public var onNeedSignIn: (() -> Void)?
public var onNetworkError: (() -> Void)?
public var onPoke: ((Bool) -> Void)?


// MARK: - initialization

Expand Down Expand Up @@ -159,7 +161,14 @@ extension HomeForMemberViewModel {
owner.onMainProductCellTapped?(model.product.serviceDomainLink)
owner.trackAmplitude(event: model.product.toAmplitudeEventTypeNew)
case .appService(let model):
owner.onAppServiceCellTapped?(model.deepLink)
if model.serviceName == "콕찌르기" {
owner.useCase.checkPokeNewUser()
.sink { isPokeNewUser in
owner.onPoke?(isPokeNewUser)
}.store(in: cancelBag)
} else {
owner.onAppServiceCellTapped?(model.deepLink)
}
default: break
}
}
Expand Down Expand Up @@ -190,6 +199,16 @@ extension HomeForMemberViewModel {

return output
}
}

// MARK: - Methods

extension HomeForMemberViewModel {
private func trackAmplitude(event: AmplitudeEventType?) {
if let event {
AmplitudeInstance.shared.trackWithUserType(event: event)
}
}

private func requestAuthorizationForNotification() {
guard self.userType != .visitor,
Expand All @@ -210,11 +229,3 @@ extension HomeForMemberViewModel {
}
}
}

extension HomeForMemberViewModel {
private func trackAmplitude(event: AmplitudeEventType?) {
if let event {
AmplitudeInstance.shared.trackWithUserType(event: event)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ extension PokeMainViewModel {
self?.useCase.getFriendRandomUser(randomType: .all, size: 2)
}.store(in: cancelBag)

// 콕찌르기 새 유저인지 판별, 새유저인 경우 PokeOnboardingVC로 전환한다.
// isRouteFromRoot == true일 때만 로직 실행, isRouteFromRoot는 딥링크를 통해 이동한 경우만 true (update.2025.04.08)
input.viewDidLoad
.map { [weak self] _ in
self?.isRouteFromRoot
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,8 @@ extension ApplicationCoordinator {
self?.handleWebLink(webLink: url)
case .calendar:
self?.showHomeCalendarDetail()
case .poke(let isNewUser):
_ = isNewUser ? self?.runPokeOnboardingFlow() : self?.runPokeFlow()
}
}
case .soptlog:
Expand Down Expand Up @@ -315,6 +317,8 @@ extension ApplicationCoordinator {
self?.handleWebLink(webLink: url)
case .calendar:
self?.showHomeCalendarDetail()
case .poke(let isNewUser):
isNewUser ? self?.runPokeOnboardingFlow() : self?.runPokeFlow()
}
}
addDependency(coordinator)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,8 @@ extension AppDelegate {
homeService: DefaultHomeService(),
calendarService: DefaultCalendarService(),
userService: DefaultUserService(),
stampService: DefaultStampService()
stampService: DefaultStampService(),
pokeService: DefaultPokeService()
)
}
)
Expand Down