ReadKeep/readeck/Data/DTOs/BookmarkDetailDto.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

82 lines
2.1 KiB
Swift

import Foundation
struct BookmarkDetailDto: Codable {
let id: String
let href: String
let created: String
let updated: String
let state: Int
let loaded: Bool
let url: String
let title: String
let siteName: String
let site: String
let authors: [String]
let lang: String
let textDirection: String
let documentType: String
let type: String
let hasArticle: Bool
let description: String
let isDeleted: Bool
let isMarked: Bool
let isArchived: Bool
let labels: [String]
let readProgress: Int
let resources: Resources
let links: [Link]
let wordCount: Int
let readingTime: Int
enum CodingKeys: String, CodingKey {
case id, href, created, updated, state, loaded, url, title
case siteName = "site_name"
case site, authors, lang
case textDirection = "text_direction"
case documentType = "document_type"
case type
case hasArticle = "has_article"
case description
case isDeleted = "is_deleted"
case isMarked = "is_marked"
case isArchived = "is_archived"
case labels
case readProgress = "read_progress"
case resources, links
case wordCount = "word_count"
case readingTime = "reading_time"
}
struct Resources: Codable {
let article: Resource
let icon: ResourceWithDimensions
let image: ResourceWithDimensions
let log: Resource
let props: Resource
let thumbnail: ResourceWithDimensions
}
struct Resource: Codable {
let src: String
}
struct ResourceWithDimensions: Codable {
let src: String
let width: Int
let height: Int
}
struct Link: Codable {
let url: String
let domain: String
let title: String
let isPage: Bool
let contentType: String
enum CodingKeys: String, CodingKey {
case url, domain, title
case isPage = "is_page"
case contentType = "content_type"
}
}
}