Skip to content

Commit 51fe140

Browse files
committed
Доработки на экране профиля
- Обновляем данные пользователя после действия с заявкой на добавление друга - Вынес логику для обновления списка заявок в друзья и заблокированных пользователей внутрь вьюмодели - Берем список заблокированных пользователей из UserDefaults, а не загружаем заново - Не показываю бейдж с 0 друзей - Мелкий рефактор
1 parent 660f4ea commit 51fe140

File tree

4 files changed

+25
-26
lines changed

4 files changed

+25
-26
lines changed

SwiftUI-WorkoutApp/Screens/Common/UsersList/UsersListViewModel.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ final class UsersListViewModel: ObservableObject {
2626
do {
2727
if try await APIService(with: defaults).respondToFriendRequest(from: userID, accept: accept) {
2828
friendRequests = defaults.friendRequestsList.map(UserModel.init)
29+
defaults.setUserNeedUpdate(true)
2930
}
3031
} catch {
3132
errorMessage = ErrorFilterService.message(from: error)
@@ -62,8 +63,10 @@ private extension UsersListViewModel {
6263
func makeBlacklist(refresh: Bool, with defaults: DefaultsProtocol) async {
6364
if !refresh { isLoading.toggle() }
6465
do {
65-
let blacklist = try await APIService(with: defaults).getBlacklist()
66-
users = blacklist.map(UserModel.init)
66+
if defaults.blacklistedUsers.isEmpty {
67+
try await APIService(with: defaults).getBlacklist()
68+
}
69+
users = defaults.blacklistedUsers.map(UserModel.init)
6770
} catch {
6871
errorMessage = ErrorFilterService.message(from: error)
6972
}

SwiftUI-WorkoutApp/Screens/Profile/Detail/UserDetailsView.swift

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,16 +193,18 @@ private extension UserDetailsView {
193193

194194
var friendsButton: some View {
195195
NavigationLink(destination: UsersListView(mode: .friends(userID: viewModel.user.id))) {
196-
HStack {
196+
HStack(spacing: 8) {
197197
Label("Друзья", systemImage: "person.3.sequence.fill")
198198
Spacer()
199199
if friendRequestsCount > .zero, isMainUser {
200200
Image(systemName: "\(friendRequestsCount).circle.fill")
201201
.foregroundColor(.red)
202-
.padding(.trailing, 8)
202+
}
203+
if viewModel.user.friendsCount > .zero {
204+
Text(viewModel.user.friendsCount.description)
205+
.foregroundColor(.secondary)
203206
}
204207
}
205-
.badge(viewModel.user.friendsCount.description)
206208
}
207209
}
208210

@@ -240,10 +242,6 @@ private extension UserDetailsView {
240242

241243
func askForUserInfo(refresh: Bool = false) async {
242244
await viewModel.makeUserInfo(refresh: refresh, with: defaults)
243-
if isMainUser {
244-
await viewModel.checkFriendRequests(with: defaults)
245-
await viewModel.checkBlacklist(with: defaults)
246-
}
247245
}
248246

249247
var messageSheet: some View {

SwiftUI-WorkoutApp/Screens/Profile/Detail/UserDetailsViewModel.swift

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,30 +32,22 @@ final class UserDetailsViewModel: ObservableObject {
3232
} else {
3333
await makeUserInfo(for: user.id, with: defaults)
3434
}
35+
await checkFriendRequests(with: defaults)
36+
await checkBlacklist(with: defaults)
3537
} else {
3638
if user.isFull, !refresh {
3739
isLoading.toggle()
3840
return
3941
}
4042
await makeUserInfo(for: user.id, with: defaults)
41-
friendActionOption = defaults.friendsIdsList.contains(user.id)
42-
? .removeFriend
43-
: .sendFriendRequest
44-
blacklistActionOption = defaults.blacklistedUsers.compactMap(\.userID).contains(user.id)
45-
? .remove
46-
: .add
43+
let isPersonInFriendList = defaults.friendsIdsList.contains(user.id)
44+
friendActionOption = isPersonInFriendList ? .removeFriend : .sendFriendRequest
45+
let isPersonBlocked = defaults.blacklistedUsers.compactMap(\.userID).contains(user.id)
46+
blacklistActionOption = isPersonBlocked ? .remove : .add
4747
}
4848
if !refresh { isLoading.toggle() }
4949
}
5050

51-
func checkFriendRequests(with defaults: DefaultsProtocol) async {
52-
try? await APIService(with: defaults).getFriendRequests()
53-
}
54-
55-
func checkBlacklist(with defaults: DefaultsProtocol) async {
56-
_ = try? await APIService(with: defaults).getBlacklist()
57-
}
58-
5951
func blacklistUser(with defaults: DefaultsProtocol) async {
6052
guard user.id != defaults.mainUserInfo?.userID else { return }
6153
if isLoading { return }
@@ -109,4 +101,12 @@ private extension UserDetailsViewModel {
109101
responseMessage = ErrorFilterService.message(from: error)
110102
}
111103
}
104+
105+
func checkFriendRequests(with defaults: DefaultsProtocol) async {
106+
try? await APIService(with: defaults).getFriendRequests()
107+
}
108+
109+
func checkBlacklist(with defaults: DefaultsProtocol) async {
110+
try? await APIService(with: defaults).getBlacklist()
111+
}
112112
}

SwiftUI-WorkoutApp/Services/APIService.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,10 @@ struct APIService {
142142
}
143143

144144
/// Загружает черный список пользователей, в случае успеха сохраняет в `defaults`
145-
@discardableResult
146-
func getBlacklist() async throws -> [UserResponse] {
145+
func getBlacklist() async throws {
147146
let endpoint = Endpoint.getBlacklist
148147
let result = try await makeResult([UserResponse].self, for: endpoint.urlRequest(with: baseUrlString))
149148
try await defaults.saveBlacklist(result)
150-
return result
151149
}
152150

153151
/// Отвечает на заявку для добавления в друзья

0 commit comments

Comments
 (0)