fix: address code review feedback

- SettingsView: replace broken Toggle+constant with a Button that directly
  opens system notification settings (Toggle was bound to .constant(true)
  and onChange never fired)
- HTTPClient: append query parameters to URL for GET requests instead of
  putting them in the request body (body is ignored for GET)
- PushNotificationService: document why info-severity alerts skip Live Activities
- NotificationsViewModel: document polling page-reset behavior

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-03-13 23:05:53 +00:00
parent 1eb21c71ce
commit d642bffcaa
4 changed files with 20 additions and 7 deletions
+12 -2
View File
@@ -150,8 +150,18 @@ actor HTTPClient {
urlRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
}
if let body = endpoint.body, endpoint.method != "GET" {
urlRequest.httpBody = try? JSONSerialization.data(withJSONObject: body)
if let body = endpoint.body {
if endpoint.method == "GET" {
// Append query parameters to URL for GET requests
if var components = URLComponents(url: url, resolvingAgainstBaseURL: false) {
components.queryItems = body.map { key, value in
URLQueryItem(name: key, value: "\(value)")
}
urlRequest.url = components.url
}
} else {
urlRequest.httpBody = try? JSONSerialization.data(withJSONObject: body)
}
}
let (data, response): (Data, URLResponse)
@@ -76,6 +76,8 @@ class PushNotificationService: NSObject, ObservableObject, UNUserNotificationCen
let severityStr = attributes["severity"] as? String,
let severity = Severity(rawValue: severityStr) else { return }
// Info-level alerts don't warrant a persistent Live Activity they are low-priority
// and should only appear as a standard banner notification.
guard severity != .info else { return }
// Limit to 3 concurrent activities
@@ -70,6 +70,8 @@ class NotificationsViewModel: ObservableObject {
}
func startPolling() {
// Polling always reloads page 1 to pick up new notifications.
// Users who have scrolled to older pages will have the list reset on each interval.
pollingTask = Task {
while !Task.isCancelled {
try? await Task.sleep(for: .seconds(30))
+4 -5
View File
@@ -22,14 +22,13 @@ struct SettingsView: View {
showChangePassword = true
}
Toggle(isOn: .constant(true)) {
Label("Push-уведомления", systemImage: "bell.badge")
}
.onChange(of: true) { _, _ in
// Open system settings
Button {
if let url = URL(string: UIApplication.openNotificationSettingsURLString) {
UIApplication.shared.open(url)
}
} label: {
Label("Push-уведомления", systemImage: "bell.badge")
.foregroundStyle(.primary)
}
}