Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions ByeBoo-iOS/ByeBoo-iOS/App/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -75,24 +75,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {

extension AppDelegate: MessagingDelegate {

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
guard let fcmToken else {
return
}

guard let notificationRepository = DIContainer.shared.resolve(type: DefaultNotificationRepository.self) else {
return
}

Task {
do {
try await notificationRepository.updateToken(token: fcmToken)
} catch (let error) {
ByeBooLogger.error(error)
}
}
}

func application(
_ application: UIApplication,
didFailToRegisterForRemoteNotificationsWithError error: Error
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ enum UserDefaultsKey: String, CaseIterable {
case journeyStatus
case fcmToken
case hasEnterMyPage
case alarmEnabled
}
20 changes: 19 additions & 1 deletion ByeBoo-iOS/ByeBoo-iOS/Data/Repository/UsersRepository.swift
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ struct DefaultUsersRepository: UsersInterface {
let _ = userDefaultsService.save(result.name, key: .userName)
let _ = userDefaultsService.save(true, key: .isOnboardingCompleted)
let _ = userDefaultsService.save(false, key: .hasEnterMyPage)
let _ = userDefaultsService.save(false, key: .alarmEnabled)

ByeBooLogger.debug("유저 정보 저장 완료")
return result.toEntity()
}
Expand Down Expand Up @@ -111,7 +113,10 @@ struct DefaultUsersRepository: UsersInterface {
UsersAPI.updateNotificationPermission,
decodingType: AlarmEnabledResponseDTO.self
)
return result.alarmEnabled
let alarmEnabled = result.alarmEnabled
let _ = userDefaultsService.save(alarmEnabled, key: .alarmEnabled)

return alarmEnabled
}

func checkHasEnterMyPage() -> Bool {
Expand All @@ -124,6 +129,15 @@ struct DefaultUsersRepository: UsersInterface {
}
return hasEnterMyPage
}

var alarmEnabled: Bool {
get {
guard let alarmEnabled: Bool = userDefaultsService.load(key: .alarmEnabled) else {
return false
}
return alarmEnabled
}
}
}

final class MockUserRepository: UsersInterface {
Expand Down Expand Up @@ -208,6 +222,10 @@ final class MockUserRepository: UsersInterface {
func checkHasEnterMyPage() -> Bool {
return true
}

var alarmEnabled: Bool {
return true
}
}


4 changes: 4 additions & 0 deletions ByeBoo-iOS/ByeBoo-iOS/Domain/DomainDependencyAssembler.swift
Original file line number Diff line number Diff line change
Expand Up @@ -151,5 +151,9 @@ struct DomainDependencyAssembler: DependencyAssembler {
DIContainer.shared.register(type: CheckHasEnterMyPageUseCase.self) { _ in
return DefaultCheckHasEnterMyPageUseCase(repository: userRepository)
}

DIContainer.shared.register(type: CheckAlarmEnabledUseCase.self) { _ in
return DefaultCheckAlarmEnabledUseCase(repository: userRepository)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ protocol UsersInterface {
func getLastJourneyType() -> JourneyType
func updateNotificationPermission() async throws -> Bool
func checkHasEnterMyPage() -> Bool
var alarmEnabled: Bool { get }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//
// CheckAlarmEnabledUseCase.swift
// ByeBoo-iOS
//
// Created by APPLE on 12/2/25.
//

protocol CheckAlarmEnabledUseCase {
func execute() -> Bool
}

struct DefaultCheckAlarmEnabledUseCase: CheckAlarmEnabledUseCase {

private let repository: UsersInterface

init(repository: UsersInterface) {
self.repository = repository
}

func execute() -> Bool {
repository.alarmEnabled
}
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

좋네요 !!!

Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ extension MyPageViewController {
bindWithdrawResult()
bindNotificationResult()
bindHasEnterMyPage()
bindAlarmEnabled()
}

private func bindUserResult() {
Expand Down Expand Up @@ -177,35 +178,29 @@ extension MyPageViewController {
self?.rootView.noticeView.noticeSwitch.setOn(false, animated: false)
return
}
self?.checkNoticeAuthorizationWhenFirst()
case .failure:
break
self?.viewModel.action(.checkAlarmEnabled)
case .failure(let error) :
ByeBooLogger.error(error)
}
}
.store(in: &cancellables)
}
}

extension MyPageViewController {

@objc
private func checkNoticeAuthorizationWhenFirst() {
UNUserNotificationCenter.current().getNotificationSettings { [weak self] settings in
guard let self else { return }

let isOn: Bool
switch settings.authorizationStatus {
case .authorized, .provisional, .ephemeral:
isOn = true
default:
isOn = false
}
beforeNotificationStatus = isOn
DispatchQueue.main.async {
self.rootView.noticeView.noticeSwitch.setOn(isOn, animated: false)
private func bindAlarmEnabled() {
viewModel.output.alarmEnabledResult
.sink { [weak self] result in
switch result {
case .success(let alarmEnabled):
self?.rootView.noticeView.noticeSwitch.setOn(alarmEnabled, animated: true)
case .failure(let error) :
ByeBooLogger.error(error)
}
}
}
.store(in: &cancellables)
}
}

extension MyPageViewController {

@objc
private func checkNoticeAuthorizationWhenBack() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,34 +16,39 @@ final class MyPageViewModel: ViewModelType {
private var withdrawResultSubject: PassthroughSubject<Result<Void, ByeBooError>, Never> = .init()
private var notificationResultSubject: PassthroughSubject<Result<Bool, ByeBooError>, Never> = .init()
private var hasEnterMyPageResultSubject: PassthroughSubject<Result<Bool, ByeBooError>, Never> = .init()
private var alarmEnabledResultSubject: PassthroughSubject<Result<Bool, ByeBooError>, Never> = .init()

private(set) var output: Output

private let getUserNameUseCase: GetUserNameUseCase
private let logoutUseCase: LogoutUseCase
private let withdrawUseCase: WithdrawUseCase
private let checkHasEnterMyPageUseCase: CheckHasEnterMyPageUseCase
private let changeNotificationPermissionUseCase: ChangeNotificationPermissionUseCase
private let checkHasEnterMyPageUseCase: CheckHasEnterMyPageUseCase
private let checkAlarmEnabledUseCase: CheckAlarmEnabledUseCase

init(
getUserNameUseCase: GetUserNameUseCase,
logoutUseCase: LogoutUseCase,
withdrawUseCase: WithdrawUseCase,
changeNotificationPermissionUseCase: ChangeNotificationPermissionUseCase,
checkHasEnterMyPageUseCase: CheckHasEnterMyPageUseCase
checkHasEnterMyPageUseCase: CheckHasEnterMyPageUseCase,
checkAlarmEnabledUseCase: CheckAlarmEnabledUseCase
) {
self.getUserNameUseCase = getUserNameUseCase
self.logoutUseCase = logoutUseCase
self.withdrawUseCase = withdrawUseCase
self.changeNotificationPermissionUseCase = changeNotificationPermissionUseCase
self.checkHasEnterMyPageUseCase = checkHasEnterMyPageUseCase
self.checkAlarmEnabledUseCase = checkAlarmEnabledUseCase

output = Output(
userResult: userResultSubject.eraseToAnyPublisher(),
logoutResult: logoutResultSubject.eraseToAnyPublisher(),
withdrawResult: withdrawResultSubject.eraseToAnyPublisher(),
notificationResult: notificationResultSubject.eraseToAnyPublisher(),
hasEnterMyPageResult: hasEnterMyPageResultSubject.eraseToAnyPublisher()
hasEnterMyPageResult: hasEnterMyPageResultSubject.eraseToAnyPublisher(),
alarmEnabledResult: alarmEnabledResultSubject.eraseToAnyPublisher()
)
}

Expand All @@ -59,6 +64,8 @@ final class MyPageViewModel: ViewModelType {
changeNotificationPermission()
case .checkHasEnterMyPage:
checkHasEnterMyPage()
case .checkAlarmEnabled:
checkAlarmEnabled()
}
}
}
Expand All @@ -70,6 +77,7 @@ extension MyPageViewModel {
case withdrawActionButtonDidTap
case notificationSwitchDidTap
case checkHasEnterMyPage
case checkAlarmEnabled
}

struct Output {
Expand All @@ -78,6 +86,7 @@ extension MyPageViewModel {
let withdrawResult: AnyPublisher<Result<Void, ByeBooError>, Never>
let notificationResult: AnyPublisher<Result<Bool, ByeBooError>, Never>
let hasEnterMyPageResult: AnyPublisher<Result<Bool, ByeBooError>, Never>
let alarmEnabledResult: AnyPublisher<Result<Bool, ByeBooError>, Never>
}
}

Expand Down Expand Up @@ -136,4 +145,9 @@ extension MyPageViewModel {
let result = checkHasEnterMyPageUseCase.execute()
hasEnterMyPageResultSubject.send(.success(result))
}

private func checkAlarmEnabled() {
let result = checkAlarmEnabledUseCase.execute()
alarmEnabledResultSubject.send(.success(result))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,8 @@ struct PresentationDependencyAssembler: DependencyAssembler {
let logoutUseCase = container.resolve(type: LogoutUseCase.self),
let withdrawUseCase = container.resolve(type: WithdrawUseCase.self),
let changeNotificationPermissionUseCase = container.resolve(type: ChangeNotificationPermissionUseCase.self),
let checkHasEnterMyPageUseCase = container.resolve(type: CheckHasEnterMyPageUseCase.self)
let checkHasEnterMyPageUseCase = container.resolve(type: CheckHasEnterMyPageUseCase.self),
let checkAlarmEnabledUseCase = container.resolve(type: CheckAlarmEnabledUseCase.self)
else {
ByeBooLogger.error(ByeBooError.DIFailedError)
return
Expand All @@ -164,7 +165,8 @@ struct PresentationDependencyAssembler: DependencyAssembler {
logoutUseCase: logoutUseCase,
withdrawUseCase: withdrawUseCase,
changeNotificationPermissionUseCase: changeNotificationPermissionUseCase,
checkHasEnterMyPageUseCase: checkHasEnterMyPageUseCase
checkHasEnterMyPageUseCase: checkHasEnterMyPageUseCase,
checkAlarmEnabledUseCase: checkAlarmEnabledUseCase
)
}

Expand Down