-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMainMapViewController+Network.swift
More file actions
152 lines (134 loc) ยท 5.74 KB
/
Copy pathMainMapViewController+Network.swift
File metadata and controls
152 lines (134 loc) ยท 5.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
//
// MainMapViewController+Network.swift
// EATSSU
//
// Created by ํฉ์ํ on 10/4/25.
//
import Foundation
// MARK: - Network Requests
extension MainMapViewController {
/// ์ ์ฒด ์ ํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์บ์์ ์ ์ฅํ๊ณ , ํ์ฌ ๋ชจ๋์ ๋ง์ถฐ ๋ง์ปค๋ฅผ ํ์
func refreshAllPartnerships() {
NetworkService.shared.request(
PartnershipRouter.getAllPartnerships,
responseType: [PartnershipDTO].self,
useAuth: true
) { [weak self] result in
guard let self = self else { return }
switch result {
case .success(let partnerships):
self.cachedAllPartnerships = partnerships
self.applyCachedMarkers()
case .failure(let error):
print("์ ํด ์กฐํ ์คํจ: \(error.localizedDescription)")
self.cachedAllPartnerships = []
self.displayMarkers([])
}
#if DEBUG
// ์๋ฒ์ ์ ํด ๋ฐ์ดํฐ๊ฐ ์๋ ๋์ Mock์ผ๋ก ๋์ฒด (DEBUG ๋น๋ ์ ์ฉ)
if self.cachedAllPartnerships.isEmpty {
self.cachedAllPartnerships = PartnershipMockData.samples
self.applyCachedMarkers()
}
#endif
}
}
/// ์บ์๋ ๋ฐ์ดํฐ์์ ํ์ฌ ๋ชจ๋์ periodType๋ง ํํฐํด ๋ง์ปค ํ์
/// myOnly ๋ชจ๋๋ ๋ณ๋ API๋ฅผ ์ฐ๋ฏ๋ก ์ฌ๊ธฐ์ ์ฒ๋ฆฌํ์ง ์์
func applyCachedMarkers() {
let periodType: PartnershipPeriodType
switch currentMapMode {
case .festival: periodType = .festival
case .all: periodType = .normal
case .myOnly: return
}
let filtered = Self.filterPartnerships(cachedAllPartnerships, by: periodType)
displayMarkers(filtered)
}
private static func filterPartnerships(
_ partnerships: [PartnershipDTO],
by periodType: PartnershipPeriodType
) -> [PartnershipDTO] {
partnerships.compactMap { partnership in
let matchingInfos = partnership.partnershipInfos.filter { $0.periodType == periodType }
guard !matchingInfos.isEmpty else { return nil }
return PartnershipDTO(
storeName: partnership.storeName,
longitude: partnership.longitude,
latitude: partnership.latitude,
restaurantType: partnership.restaurantType,
naverMapUrl: partnership.naverMapUrl,
kakaoMapUrl: partnership.kakaoMapUrl,
partnershipInfos: matchingInfos
)
}
}
func fetchDepartmentAndUpdateButton(completion: (() -> Void)? = nil) {
NetworkService.shared.request(
MyRouter.getDepartment,
responseType: GetDepartmentResponse.self,
useAuth: true
) { [weak self] result in
guard let self = self else { return }
switch result {
case .success(let department):
let departmentName = department.departmentName
self.currentDepartmentName = departmentName
self.currentDepartmentId = department.departmentId
self.currentCollegeId = department.collegeId
let buttonTitle = departmentName.isEmpty ? TextLiteral.Map.myPartner : departmentName
self.root.myOnlyButton.setTitle(buttonTitle, for: .normal)
// Realm ๋ฐ์ดํฐ๋ ํจ๊ป ๋๊ธฐํํ์ฌ ์๋ฒ-ํด๋ผ์ด์ธํธ ๋ถ์ผ์น ๋ฐฉ์ง
if let userInfo = UserInfoManager.shared.getCurrentUserInfo() {
UserInfoManager.shared.updateDepartment(
for: userInfo,
collegeId: department.collegeId,
collegeName: department.collegeName,
departmentId: department.departmentId,
departmentName: department.departmentName
)
}
case .failure(let error):
print("ํ๊ณผ ์กฐํ ์คํจ: \(error.localizedDescription)")
self.currentDepartmentName = nil
self.currentDepartmentId = nil
self.currentCollegeId = nil
self.root.myOnlyButton.setTitle(TextLiteral.Map.myPartner, for: .normal)
// Realm ๋ฐ์ดํฐ๋ ํจ๊ป ๋๊ธฐํํ์ฌ ์๋ฒ-ํด๋ผ์ด์ธํธ ๋ถ์ผ์น ๋ฐฉ์ง
if let userInfo = UserInfoManager.shared.getCurrentUserInfo() {
UserInfoManager.shared.updateDepartment(
for: userInfo,
collegeId: nil,
collegeName: nil,
departmentId: nil,
departmentName: nil
)
}
}
completion?()
}
}
func fetchMyPartnerships() {
// ํ๊ณผ ์ ๋ณด๊ฐ ์์ผ๋ฉด API ํธ์ถํ์ง ์์ (์๋ฒ ์๋ฌ ๋ฐฉ์ง)
guard let departmentName = currentDepartmentName,
!departmentName.isEmpty else {
print("ํ๊ณผ ์ ๋ณด๊ฐ ์์ด ํ๊ณผ๋ณ ์ ํด ์กฐํ๋ฅผ ๊ฑด๋๋๋๋ค")
displayMarkers([])
return
}
NetworkService.shared.request(
MyRouter.getMyPartnerships,
responseType: [PartnershipDTO].self,
useAuth: true
) { [weak self] result in
switch result {
case .success(let partnerships):
let filtered = Self.filterPartnerships(partnerships, by: .normal)
self?.displayMarkers(filtered)
case .failure(let error):
print("๋ด ์ ํด ์กฐํ ์คํจ: \(error.localizedDescription)")
self?.displayMarkers([])
}
}
}
}