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
23 changes: 23 additions & 0 deletions GAMSS/Sources/Data/Repository/DefaultMemberRepository.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//
// DefaultMemberRepository.swift
// GAMSS
//
// Created by 이건준 on 8/13/26.
//

import Foundation

final class DefaultMemberRepository: MemberRepository {
private let networkManager: NetworkRequesting
private let tokenStorage: TokenStorage

init(networkManager: NetworkRequesting, tokenStorage: TokenStorage) {
self.networkManager = networkManager
self.tokenStorage = tokenStorage
}

func deleteMember() async throws {
_ = try await networkManager.request(MemberEndpoint.deleteAccount, responseType: APIResponse<EmptyResponseDTO>.self)
try tokenStorage.deleteTokens()
}
}
12 changes: 12 additions & 0 deletions GAMSS/Sources/Domain/Repository/MemberRepository.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// MemberRepository.swift
// GAMSS
//
// Created by 이건준 on 8/13/26.
//

import Foundation

protocol MemberRepository {
func deleteMember() async throws
}
20 changes: 20 additions & 0 deletions GAMSS/Sources/Domain/UseCase/Auth/DefaultDeleteMemberUseCase.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//
// DefaultDeleteMemberUseCase.swift
// GAMSS
//
// Created by 이건준 on 8/13/26.
//

import Foundation

struct DefaultDeleteMemberUseCase: DeleteMemberUseCase {
private let memberRepository: MemberRepository

init(memberRepository: MemberRepository) {
self.memberRepository = memberRepository
}

func execute() async throws {
_ = try await memberRepository.deleteMember()
}
}
12 changes: 12 additions & 0 deletions GAMSS/Sources/Domain/UseCase/Auth/DeleteMemberUseCase.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// DeleteMemberUseCase.swift
// GAMSS
//
// Created by 이건준 on 8/13/26.
//

import Foundation

protocol DeleteMemberUseCase {
func execute() async throws
}
3 changes: 2 additions & 1 deletion GAMSS/Sources/Presentation/Setting/Account/AccountItem.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ enum AccountItem: CaseIterable, Identifiable {
enum Action {
case navigate
case logout
case withdraw
case none
}

Expand All @@ -52,7 +53,7 @@ enum AccountItem: CaseIterable, Identifiable {
case .logout:
.logout
case .withdraw:
.navigate
.withdraw
}
}
}
16 changes: 16 additions & 0 deletions GAMSS/Sources/Presentation/Setting/Account/AccountView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,16 @@ struct AccountView: View {

case .none:
row
case .withdraw:
Button {
Task {
await viewModel.deleteMember()
loginSession.value = .current
}
} label: {
row
}
.buttonStyle(.plain)
}
}

Expand All @@ -117,6 +127,12 @@ struct AccountView: View {
networkManager: NetworkManager.shared,
tokenStorage: TokenStorage.shared
)
),
deleteMemberUseCase: DefaultDeleteMemberUseCase(
memberRepository: DefaultMemberRepository(
networkManager: NetworkManager.shared,
tokenStorage: .shared
)
)
)
)
Expand Down
11 changes: 11 additions & 0 deletions GAMSS/Sources/Presentation/Setting/Account/AccountViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,29 @@ import Foundation
@MainActor
final class AccountViewModel: ObservableObject {
private let logoutUseCase: LogoutUseCase
private let deleteMemberUseCase: DeleteMemberUseCase
private let userManager: UserManager

@Published var errorMessage: String?

init(
logoutUseCase: LogoutUseCase,
deleteMemberUseCase: DeleteMemberUseCase,
userManager: UserManager = .shared
) {
self.logoutUseCase = logoutUseCase
self.deleteMemberUseCase = deleteMemberUseCase
self.userManager = userManager
}

func deleteMember() async {
do {
try await deleteMemberUseCase.execute()
} catch {
errorMessage = error.localizedDescription
}
}

func logout() async {
do {
try await logoutUseCase.logout()
Expand Down
6 changes: 6 additions & 0 deletions GAMSS/Sources/Presentation/Setting/SettingView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,12 @@ struct SettingView: View {
networkManager: NetworkManager.shared,
tokenStorage: TokenStorage.shared
)
),
deleteMemberUseCase: DefaultDeleteMemberUseCase(
memberRepository: DefaultMemberRepository(
networkManager: NetworkManager.shared,
tokenStorage: .shared
)
)
)
)
Expand Down
Loading