iOS: Einzelstücke (UID/QR) + Scan öffnet das Stück; Seed ohne Modell-Kaufdatum
iOS-Parität zum Web: Item-Modell + API, Einzelstueck-Liste in der Produkt- Detailansicht (anlegen, je-Stueck Lagerort/Kaufdatum/Garantie/Bezugsquelle/Notiz aendern, entfernen mit Grund, QR je Stueck via CoreImage). Anlegen-Formular hat den Schalter "Einzelstuecke". Der Scanner erkennt Einzelstueck-QR (…/i/<UID>) und oeffnet direkt das Stueck. Seed: "Kaufdatum"/"Garantie bis" nicht mehr als Modell-Felder auf Elektronik - diese Angaben gehoeren je Einzelstueck ans Item, nicht ans Modell. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -152,6 +152,40 @@ actor APIClient {
|
||||
try await sendNoContent(try makeRequest("/products/\(id)/image", method: "DELETE"))
|
||||
}
|
||||
|
||||
// MARK: - Einzelstücke (Items mit UID/QR)
|
||||
|
||||
func items(productId: Int) async throws -> [Item] {
|
||||
try await send(try makeRequest("/products/\(productId)/items"), as: [Item].self)
|
||||
}
|
||||
|
||||
func createItems(productId: Int, _ payload: ItemCreateRequest) async throws -> [Item] {
|
||||
var request = try makeRequest("/products/\(productId)/items", method: "POST")
|
||||
try jsonBody(&request, payload)
|
||||
return try await send(request, as: [Item].self)
|
||||
}
|
||||
|
||||
/// QR-Auflösung: UID → Einzelstück.
|
||||
func itemByUid(uid: String) async throws -> Item {
|
||||
let escaped = uid.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? uid
|
||||
return try await send(try makeRequest("/items/by-uid/\(escaped)"), as: Item.self)
|
||||
}
|
||||
|
||||
func updateItem(id: Int, _ payload: ItemUpdateRequest) async throws -> Item {
|
||||
var request = try makeRequest("/items/\(id)", method: "PATCH")
|
||||
try jsonBody(&request, payload)
|
||||
return try await send(request, as: Item.self)
|
||||
}
|
||||
|
||||
func removeItem(id: Int, _ payload: ItemRemoveRequest) async throws {
|
||||
var request = try makeRequest("/items/\(id)/remove", method: "POST")
|
||||
try jsonBody(&request, payload)
|
||||
try await sendNoContent(request)
|
||||
}
|
||||
|
||||
func deleteItem(id: Int) async throws {
|
||||
try await sendNoContent(try makeRequest("/items/\(id)", method: "DELETE"))
|
||||
}
|
||||
|
||||
func groups() async throws -> [GroupItem] {
|
||||
try await send(try makeRequest("/groups"), as: [GroupItem].self)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user