ReadKeep/readeck/UI/Settings/SettingsViewModel.swift
Ilyas Hallak 98a914cb2e feat: Implementierung der Readeck API mit kompletter Architektur
- API-Klasse mit allen CRUD-Operationen für Bookmarks
  - Login/Authentifizierung mit Bearer Token
  - Bookmarks abrufen (Liste und Details)
  - Artikel-Inhalt abrufen
- DTO-Strukturen in separate Dateien aufgeteilt
  - UserDto für Authentifizierung
  - BookmarkDto für Bookmark-Listen
  - BookmarkDetailDto mit vollständigen Metadaten
- MVVM-Architektur mit @Observable
  - SettingsViewModel für Anmeldung
  - BookmarksViewModel für Bookmark-Verwaltung
- SwiftUI Views mit modernem Design
  - SettingsView mit Eingabefeldern und Validierung
  - BookmarksView mit Pull-to-Refresh und Leerzustand
  - MainTabView als Navigation
- Use Case Pattern implementiert
  - LoginUseCase für Authentifizierung
  - GetBookmarksUseCase für Datenabfrage
  - DefaultUseCaseFactory für Dependency Injection
- Fehlerbehandlung und Loading States
- Protocol-basierte Architektur für bessere Testbarkeit
2025-06-11 11:02:19 +02:00

38 lines
903 B
Swift

import Foundation
@Observable
class SettingsViewModel {
enum State {
case `default`, error, success
}
var username: String = "admin"
var password: String = "Diggah123"
var endpoint: String = ""
var isLoading: Bool = false
var state: State = .default
var showAlert: Bool = false
private let loginUseCase = DefaultUseCaseFactory.shared.makeLoginUseCase()
var isLoginDisabled: Bool {
username.isEmpty || password.isEmpty || isLoading
}
@MainActor
func login() async {
isLoading = true
do {
let userResult = try await loginUseCase.execute(username: username, password: password)
state = userResult.token.isEmpty ? .error : .success
isLoading = false
} catch {
state = .error
isLoading = false
}
}
}