# Products Collection Schema Diese Datei beschreibt alle Attribute, die in der `products` Collection benötigt werden, damit das Programm funktioniert. ## Collection: `products` **Collection ID:** `products` (oder über `VITE_APPWRITE_PRODUCTS_COLLECTION_ID` konfiguriert) ## Erforderliche Attribute ### 1. `product_account_id` (String, Required) - **Typ:** String - **Required:** Ja - **Verwendung:** - Filterung nach Account (Query.equal) - Verknüpfung zu Accounts-Collection - **Beispiel:** `"account_123"` ### 2. `product_platform` (Enum, Required) - **Typ:** Enum - **Required:** Ja - **Werte:** `["amazon", "ebay"]` - **Verwendung:** - Speichert die Plattform (aktuell nur "ebay" wird verwendet) - **Beispiel:** `"ebay"` ### 3. `product_platform_market` (String, Required) - **Typ:** String - **Required:** Ja - **Verwendung:** - Speichert den Marktplatz (z.B. "DE", "US", "UK") - Wird aus Account abgeleitet - **Beispiel:** `"DE"`, `"US"`, `"UK"` ### 4. `product_platform_product_id` (String, Required, Unique) - **Typ:** String - **Required:** Ja - **Unique:** Ja (für Duplikat-Prüfung) - **Verwendung:** - Eindeutige Produkt-ID von der Plattform (z.B. eBay Item-ID) - Wird für Duplikat-Prüfung verwendet - Wird für Mapping zwischen Extension und Datenbank verwendet - **Beispiel:** `"123456789"` (eBay Item-ID) ### 5. `product_title` (String, Optional) - **Typ:** String - **Required:** Nein - **Verwendung:** - Produkttitel - Wird für Anzeige in UI verwendet - Wird für Suchfilter verwendet (client-side) - **Beispiel:** `"iPhone 13 Pro Max 256GB"` ### 6. `product_price` (Float, Optional) - **Typ:** Float - **Required:** Nein - **Verwendung:** - Produktpreis - Wird für KPI-Berechnungen verwendet (Durchschnittspreis) - Wird für Price Spread Insights verwendet - **Beispiel:** `99.99` ### 7. `product_currency` (String, Optional) - **Typ:** String - **Required:** Nein - **Verwendung:** - Währung (z.B. "EUR", "USD", "GBP") - Wird aus Market abgeleitet, falls nicht vorhanden - **Beispiel:** `"EUR"`, `"USD"`, `"GBP"` ### 8. `product_url` (String, Optional) - **Typ:** String - **Required:** Nein - **Verwendung:** - URL zum Produkt auf der Plattform - **Beispiel:** `"https://www.ebay.de/itm/123456789"` ### 9. `product_status` (Enum, Optional) - **Typ:** Enum - **Required:** Nein - **Werte:** `["active", "ended", "unknown"]` - **Verwendung:** - Status des Produkts - Wird für Filterung verwendet (Overview KPIs, Products Page) - Wird für Status-Filter in UI verwendet - **Default:** `"unknown"` - **Beispiel:** `"active"`, `"ended"`, `"unknown"` ### 10. `product_category` (String, Optional) - **Typ:** String - **Required:** Nein - **Verwendung:** - Produktkategorie - Wird für Category Share Insights verwendet - **Default:** `"unknown"` - **Beispiel:** `"Electronics"`, `"Clothing"` ### 11. `product_condition` (String, Optional) - **Typ:** String - **Required:** Nein - **Verwendung:** - Zustand des Produkts (z.B. "New", "Used") - **Default:** `"unknown"` - **Beispiel:** `"New"`, `"Used"`, `"Refurbished"` ## Standard-Appwrite-Felder Diese Felder werden automatisch von Appwrite bereitgestellt: - **`$id`** (String, Required) - Eindeutige Dokument-ID - **`$createdAt`** (DateTime, Required) - Erstellungsdatum (wird für Sortierung verwendet) - **`$updatedAt`** (DateTime, Required) - Aktualisierungsdatum ## Indexes (Empfohlen) Für bessere Performance sollten folgende Indexes erstellt werden: 1. **Index auf `product_account_id`** (für Filterung) - Attribute: `product_account_id` - Typ: Key 2. **Index auf `product_platform_product_id`** (für Duplikat-Prüfung) - Attribute: `product_platform_product_id` - Typ: Unique Key 3. **Index auf `product_account_id` + `$createdAt`** (für Sortierung) - Attribute: `product_account_id`, `$createdAt` - Typ: Composite ## Berechtigungen Die Collection benötigt folgende Berechtigungen: - **Read:** Authenticated Users - **Create:** Authenticated Users - **Update:** Authenticated Users - **Delete:** Authenticated Users (optional, falls Löschen benötigt wird) ## Appwrite CLI Befehle zum Erstellen ```bash # Collection erstellen appwrite databases createCollection \ --database-id eship-db \ --collection-id products \ --name "Products" # Attribute erstellen appwrite databases createStringAttribute \ --database-id eship-db \ --collection-id products \ --key product_account_id \ --required true \ --size 255 appwrite databases createEnumAttribute \ --database-id eship-db \ --collection-id products \ --key product_platform \ --elements amazon ebay \ --required true appwrite databases createStringAttribute \ --database-id eship-db \ --collection-id products \ --key product_platform_market \ --required true \ --size 10 appwrite databases createStringAttribute \ --database-id eship-db \ --collection-id products \ --key product_platform_product_id \ --required true \ --size 255 appwrite databases createStringAttribute \ --database-id eship-db \ --collection-id products \ --key product_title \ --required false \ --size 500 appwrite databases createFloatAttribute \ --database-id eship-db \ --collection-id products \ --key product_price \ --required false appwrite databases createStringAttribute \ --database-id eship-db \ --collection-id products \ --key product_currency \ --required false \ --size 10 appwrite databases createStringAttribute \ --database-id eship-db \ --collection-id products \ --key product_url \ --required false \ --size 1000 appwrite databases createEnumAttribute \ --database-id eship-db \ --collection-id products \ --key product_status \ --elements active ended unknown \ --required false appwrite databases createStringAttribute \ --database-id eship-db \ --collection-id products \ --key product_category \ --required false \ --size 255 appwrite databases createStringAttribute \ --database-id eship-db \ --collection-id products \ --key product_condition \ --required false \ --size 100 # Indexes erstellen appwrite databases createIndex \ --database-id eship-db \ --collection-id products \ --key idx_account_id \ --type key \ --attributes product_account_id appwrite databases createIndex \ --database-id eship-db \ --collection-id products \ --key idx_platform_product_id \ --type unique \ --attributes product_platform_product_id appwrite databases createIndex \ --database-id eship-db \ --collection-id products \ --key idx_account_created \ --type key \ --attributes product_account_id $createdAt ``` ## Zusammenfassung **Erforderliche Attribute (Required):** 1. `product_account_id` (String) 2. `product_platform` (Enum: ["amazon", "ebay"]) 3. `product_platform_market` (String) 4. `product_platform_product_id` (String, Unique) **Optionale Attribute:** 5. `product_title` (String) 6. `product_price` (Float) 7. `product_currency` (String) 8. `product_url` (String) 9. `product_status` (Enum: ["active", "ended", "unknown"]) 10. `product_category` (String) 11. `product_condition` (String) **Standard-Felder (automatisch):** - `$id` (String) - `$createdAt` (DateTime) - `$updatedAt` (DateTime)