Skip to content

Commit a8819e2

Browse files
committed
[#234] 사용자가 학과를 기입했는지 여부에 따른 안내 비즈니스 로직 설계 완료
1 parent 73a66cf commit a8819e2

File tree

5 files changed

+56
-42
lines changed

5 files changed

+56
-42
lines changed

EATSSU/App/Sources/Data/Network/Router/UserDepartmentRouter.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ enum UserDepartmentRouter {
2121
///
2222
/// - Parameter departmentName: 추가할 부서의 이름
2323
case addDepartment(departmentName: String)
24-
24+
2525
/// 부서 검증 API 요청
2626
case validateDepartment
2727
}
@@ -68,9 +68,9 @@ extension UserDepartmentRouter: TargetType, AccessTokenAuthorizable {
6868
"departmentName": departmentName,
6969
]
7070
return .requestParameters(parameters: params, encoding: JSONEncoding.default)
71-
71+
7272
case .validateDepartment:
73-
return .requestPlain // 파라미터 없이 단순 GET 요청
73+
return .requestPlain
7474
}
7575
}
7676

EATSSU/App/Sources/Data/Network/ServiceLayer/UserDepartmentService.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,14 @@ final class UserDepartmentService {
6060
///
6161
/// - Parameter completion: 요청 완료 후 호출되는 클로저.
6262
/// 성공 시 서버의 응답 문자열을 반환하고, 실패 시 에러를 반환합니다.
63-
func validateDepartment(completion: @escaping (Result<String, Error>) -> Void) {
63+
func validateDepartment(completion: @escaping (Result<Bool, Error>) -> Void) {
6464
provider.request(.validateDepartment) { result in
6565
switch result {
6666
case let .success(response):
6767
do {
68-
let decodedData = try JSONDecoder().decode(BaseResponseWithoutResult.self, from: response.data)
68+
let decodedData = try JSONDecoder().decode(BaseResponse<Bool>.self, from: response.data)
6969
if decodedData.isSuccess {
70-
completion(.success(decodedData.message))
70+
completion(.success(decodedData.result))
7171
} else {
7272
let error = NSError(
7373
domain: "UserDepartmentService",

EATSSU/App/Sources/Presentation/TabBar/RootTabBarViewController.swift

+40-25
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,34 @@ import EATSSUDesign
1111
import EATSSUKit
1212

1313
class RootTabBarViewController: UITabBarController {
14+
private let userDepartmentService = UserDepartmentService()
15+
1416
override func viewDidLoad() {
1517
super.viewDidLoad()
1618
delegate = self
1719
setupTabBar()
1820
}
1921

20-
// RootTabBarViewController.swift 수정 내용 (setupTabBar 메서드 내)
2122
private func setupTabBar() {
22-
// 탭바 인스턴스를 ESTabBar로 교체
23+
// 기존 탭바를 커스텀 탭바로 교체
2324
tabBar.removeFromSuperview()
2425
let estTabBar = ESTabBar()
25-
// KVC를 사용하여 탭바 교체, 프레임워크에서 제공하는 탭바를 제거하고 커스텀 탭바를 컨트롤러에 등록
26-
// forKey 값의 tabBar는 탭바를 변경하기 위한 프레임워크에서 예약된 키값
2726
setValue(estTabBar, forKey: "tabBar")
2827

29-
// 기존 코드 유지
30-
let homeViewController = HomeViewController()
31-
let searchViewController = MapViewController()
32-
let mypageViewController = MyPageViewController(hasAccessToken: RealmService.shared.isAccessTokenPresent())
28+
// 각 탭에 해당하는 뷰 컨트롤러 생성 및 네비게이션 컨트롤러 래핑
29+
let homeVC = HomeViewController()
30+
let mapVC = MapViewController()
31+
let mypageVC = MyPageViewController(hasAccessToken: RealmService.shared.isAccessTokenPresent())
3332

34-
let homeNav = UINavigationController(rootViewController: homeViewController)
35-
let mapNav = UINavigationController(rootViewController: searchViewController)
36-
let mypageNav = UINavigationController(rootViewController: mypageViewController)
33+
let homeNav = UINavigationController(rootViewController: homeVC)
34+
let mapNav = UINavigationController(rootViewController: mapVC)
35+
let mypageNav = UINavigationController(rootViewController: mypageVC)
3736

3837
homeNav.tabBarItem = UITabBarItem(title: "학식", image: UIImage(systemName: "fork.knife"), tag: 0)
3938
mapNav.tabBarItem = UITabBarItem(title: "지도", image: UIImage(systemName: "map.fill"), tag: 1)
4039
mypageNav.tabBarItem = UITabBarItem(title: "마이", image: UIImage(systemName: "person.fill"), tag: 2)
4140

4241
viewControllers = [homeNav, mapNav, mypageNav]
43-
4442
tabBar.tintColor = EATSSUDesignAsset.Color.Main.primary.color
4543
tabBar.backgroundColor = .white
4644
}
@@ -61,28 +59,48 @@ extension RootTabBarViewController: UITabBarControllerDelegate {
6159
#if DEBUG
6260
print("홈 탭이 선택되었습니다.")
6361
#endif
62+
6463
case 1:
6564
#if DEBUG
6665
print("제휴지도 탭이 선택되었습니다.")
6766
#endif
6867

69-
if userEnteredDepartmentInfo() {
70-
// 학과 정보가 입력된 경우 기존 로직 수행
71-
} else {
72-
// 학과 정보가 입력되지 않은 경우 모달 시트 표시
73-
presentDepartmentInfoModal()
68+
// 비동기적으로 학과 정보 입력 여부 확인
69+
userEnteredDepartmentInfo { [weak self] isEntered in
70+
DispatchQueue.main.async {
71+
if isEntered {
72+
// 학과 정보가 입력된 경우, 기존 로직 실행
73+
// 예: 해당 탭의 뷰 컨트롤러로 전환 등 추가 로직
74+
} else {
75+
self?.presentDepartmentInfoModal()
76+
}
77+
}
7478
}
79+
7580
case 2:
7681
#if DEBUG
7782
print("마이페이 탭이 선택되었습니다.")
7883
#endif
7984
handleMyPageTabSelected()
85+
8086
default:
8187
fatalError("선택될 수 없는 탭이 선택됨.")
8288
}
8389
}
8490

85-
/// 학과 정보 입력 여부에 따라 모달 시트를 표시하는 메서드
91+
/// 학과 정보 입력 여부를 비동기적으로 확인하는 메서드
92+
private func userEnteredDepartmentInfo(completion: @escaping (Bool) -> Void) {
93+
userDepartmentService.validateDepartment { result in
94+
switch result {
95+
case let .success(isEntered):
96+
completion(isEntered)
97+
case .failure:
98+
completion(false)
99+
}
100+
}
101+
}
102+
103+
/// 학과 정보 입력이 되어있지 않은 경우 모달 시트를 표시하는 메서드
86104
private func presentDepartmentInfoModal() {
87105
let modalVC = DepartmentInfoRequestModalViewController()
88106
modalVC.modalPresentationStyle = .pageSheet
@@ -103,12 +121,7 @@ extension RootTabBarViewController: UITabBarControllerDelegate {
103121
present(modalVC, animated: true)
104122
}
105123

106-
/// 사용자가 학과 정보를 입력했는지 확인 (임시 로직)
107-
private func userEnteredDepartmentInfo() -> Bool {
108-
// TODO: 서버에서 사용자의 학과 정보 조회 로직 설계
109-
false
110-
}
111-
124+
/// 마이 페이지 탭 선택 시 로그인 여부에 따라 로직을 분기하는 메서드
112125
private func handleMyPageTabSelected() {
113126
if RealmService.shared.isAccessTokenPresent() {
114127
#if DEBUG
@@ -118,7 +131,8 @@ extension RootTabBarViewController: UITabBarControllerDelegate {
118131
presentLoginAlert()
119132
}
120133
}
121-
134+
135+
/// 로그인이 필요한 경우 확인 알림을 표시하는 메서드
122136
private func presentLoginAlert() {
123137
AlertControllerHelper.showConfirmOnlyAlert(
124138
title: "로그인이 필요한 서비스입니다.",
@@ -130,6 +144,7 @@ extension RootTabBarViewController: UITabBarControllerDelegate {
130144
}
131145
}
132146

147+
/// 로그인 뷰 컨트롤러로 전환하는 메서드
133148
private func changeIntoLoginVC() {
134149
let loginViewController = LoginViewController()
135150
WindowManageHelper.replaceWindowViewControllerWith(loginViewController)

EATSSU/Tests/UnitTests/UserDepartmentRouterNetworkTests.swift

+10-10
Original file line numberDiff line numberDiff line change
@@ -118,37 +118,37 @@ final class UserDepartmentRouterNetworkTests: XCTestCase {
118118
let expectation = expectation(description: "부서 추가 서비스")
119119
let service = UserDepartmentService()
120120
let testDepartmentName = "컴퓨터학부"
121-
121+
122122
service.addDepartment(departmentName: testDepartmentName) { result in
123123
switch result {
124-
case .success(let message):
124+
case let .success(message):
125125
XCTAssertFalse(message.isEmpty, "응답 메시지가 비어있습니다.")
126126
print("📌 Success Message: \(message)")
127127
expectation.fulfill()
128-
case .failure(let error):
128+
case let .failure(error):
129129
XCTFail("부서 추가 실패: \(error.localizedDescription)")
130130
}
131131
}
132-
132+
133133
waitForExpectations(timeout: 5.0, handler: nil)
134134
}
135-
135+
136136
/// UserDepartmentService를 사용한 부서 검증 테스트
137137
func testValidateDepartmentWithService() {
138138
let expectation = expectation(description: "부서 검증 서비스")
139139
let service = UserDepartmentService()
140-
140+
141141
service.validateDepartment { result in
142142
switch result {
143-
case .success(let message):
143+
case let .success(message):
144144
XCTAssertFalse(message.isEmpty, "응답 메시지가 비어있습니다.")
145145
print("📌 Validation Message: \(message)")
146146
expectation.fulfill()
147-
case .failure(let error):
147+
case let .failure(error):
148148
XCTFail("부서 검증 실패: \(error.localizedDescription)")
149149
}
150150
}
151-
151+
152152
waitForExpectations(timeout: 5.0, handler: nil)
153-
}
153+
}
154154
}
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-

0 commit comments

Comments
 (0)