- Add .gitignore to exclude node_modules, dist, logs, and system files - Add comprehensive project documentation including README, deployment guide, and development setup - Add .kiro project specifications for amazon-product-bar-extension, appwrite-cloud-storage, appwrite-userid-repair, blacklist-feature, and enhanced-item-management - Add .kiro steering documents for product, structure, styling, and tech guidelines - Add VSCode settings configuration for consistent development environment - Add manifest.json and babel/vite configuration for extension build setup - Add complete source code implementation including AppWrite integration, storage managers, UI components, and services - Add comprehensive test suite with Jest configuration and 30+ test files covering all major modules - Add test HTML files for integration testing and validation - Add coverage reports and build validation scripts - Add AppWrite setup and repair documentation for database schema management - Add migration guides and responsive accessibility implementation documentation - Establish foundation for Amazon product bar extension with full feature set including blacklist management, enhanced item workflows, and real-time synchronization
208 lines
6.7 KiB
Markdown
208 lines
6.7 KiB
Markdown
# 🔧 AppWrite Collection Setup Guide
|
|
|
|
## Problem Identified ❌
|
|
|
|
Your AppWrite collections are missing the required `userId` attribute. The error shows:
|
|
```
|
|
Invalid query: Attribute not found in schema: userId
|
|
```
|
|
|
|
## Required Collections & Attributes ✅
|
|
|
|
You need to create these **exact** collections with **exact** attributes in your AppWrite console:
|
|
|
|
### 1. Collection: `amazon-ext-enhanced-items`
|
|
**Purpose**: Enhanced items with AI-generated titles
|
|
|
|
**Required Attributes**:
|
|
```
|
|
userId (string, required, 255 chars) - User identification
|
|
title (string, required, 500 chars) - Product title
|
|
url (string, required, 1000 chars) - Product URL
|
|
price (string, optional, 50 chars) - Product price
|
|
image (string, optional, 1000 chars) - Product image URL
|
|
brand (string, optional, 100 chars) - Product brand
|
|
aiTitle (string, optional, 500 chars) - AI-generated title
|
|
createdAt (datetime, required) - Creation timestamp
|
|
updatedAt (datetime, required) - Last update timestamp
|
|
```
|
|
|
|
### 2. Collection: `amazon-ext-saved-products`
|
|
**Purpose**: Basic saved products
|
|
|
|
**Required Attributes**:
|
|
```
|
|
userId (string, required, 255 chars) - User identification
|
|
title (string, required, 500 chars) - Product title
|
|
url (string, required, 1000 chars) - Product URL
|
|
price (string, optional, 50 chars) - Product price
|
|
image (string, optional, 1000 chars) - Product image URL
|
|
createdAt (datetime, required) - Creation timestamp
|
|
```
|
|
|
|
### 3. Collection: `amazon_ext_blacklist`
|
|
**Purpose**: Blacklisted brands per user
|
|
|
|
**Required Attributes**:
|
|
```
|
|
userId (string, required, 255 chars) - User identification
|
|
brand (string, required, 100 chars) - Brand name
|
|
createdAt (datetime, required) - Creation timestamp
|
|
```
|
|
|
|
### 4. Collection: `amazon-ext-enhanced-settings`
|
|
**Purpose**: User settings and API keys (encrypted)
|
|
|
|
**Required Attributes**:
|
|
```
|
|
userId (string, required, 255 chars) - User identification
|
|
settingKey (string, required, 100 chars) - Setting key name
|
|
settingValue (string, required, 2000 chars) - Setting value (encrypted for sensitive data)
|
|
isEncrypted (boolean, required) - Whether value is encrypted
|
|
updatedAt (datetime, required) - Last update timestamp
|
|
```
|
|
|
|
### 5. Collection: `amazon-ext-migration-status`
|
|
**Purpose**: Track data migration from localStorage
|
|
|
|
**Required Attributes**:
|
|
```
|
|
userId (string, required, 255 chars) - User identification
|
|
migrationType (string, required, 50 chars) - Type of migration
|
|
status (string, required, 20 chars) - 'pending', 'completed', 'failed'
|
|
itemCount (integer, optional) - Number of items migrated
|
|
errorMessage (string, optional, 1000 chars) - Error message if failed
|
|
completedAt (datetime, optional) - Completion timestamp
|
|
```
|
|
|
|
## Step-by-Step Setup Instructions 📋
|
|
|
|
### Step 1: Access AppWrite Console
|
|
1. Go to your AppWrite console: https://appwrite.webklar.com (or your AppWrite URL)
|
|
2. Login with your credentials
|
|
3. Select your project: `6963df38003b96dab5aa`
|
|
|
|
### Step 2: Navigate to Database
|
|
1. Click "Databases" in the left sidebar
|
|
2. Select database: `amazon-extension-db`
|
|
3. You should see your existing collections
|
|
|
|
### Step 3: Fix Each Collection
|
|
For **each collection** listed above:
|
|
|
|
1. **Click on the collection name**
|
|
2. **Go to "Attributes" tab**
|
|
3. **Check if `userId` attribute exists**
|
|
4. **If missing, click "Create Attribute"**:
|
|
- Type: `String`
|
|
- Key: `userId`
|
|
- Size: `255`
|
|
- Required: `Yes`
|
|
- Array: `No`
|
|
5. **Add any other missing attributes** from the lists above
|
|
|
|
### Step 4: Set Permissions
|
|
For each collection, go to "Settings" tab and set permissions:
|
|
|
|
**CRITICAL PERMISSIONS** (must be exact):
|
|
- **Create**: `users`
|
|
- **Read**: `user:$userId`
|
|
- **Update**: `user:$userId`
|
|
- **Delete**: `user:$userId`
|
|
|
|
**How to set permissions**:
|
|
1. Click on collection name
|
|
2. Click "Settings" tab (not "Attributes")
|
|
3. Scroll to "Permissions" section
|
|
4. For each permission type, click "Add a permission"
|
|
5. Select the appropriate permission from dropdown
|
|
6. Click "Update" to save
|
|
|
|
**What these permissions mean**:
|
|
- `users` = Any authenticated user
|
|
- `user:$userId` = Only the user whose ID matches the document's userId field
|
|
|
|
This ensures **data isolation** - users can only see their own data!
|
|
|
|
## Quick Fix Commands 🚀
|
|
|
|
If you have AppWrite CLI installed, you can run these commands:
|
|
|
|
```bash
|
|
# Add userId attribute to enhanced-items collection
|
|
appwrite databases createStringAttribute \
|
|
--databaseId amazon-extension-db \
|
|
--collectionId amazon-ext-enhanced-items \
|
|
--key userId \
|
|
--size 255 \
|
|
--required true
|
|
|
|
# Add userId attribute to saved-products collection
|
|
appwrite databases createStringAttribute \
|
|
--databaseId amazon-extension-db \
|
|
--collectionId amazon-ext-saved-products \
|
|
--key userId \
|
|
--size 255 \
|
|
--required true
|
|
|
|
# Add userId attribute to blacklist collection
|
|
appwrite databases createStringAttribute \
|
|
--databaseId amazon-extension-db \
|
|
--collectionId amazon_ext_blacklist \
|
|
--key userId \
|
|
--size 255 \
|
|
--required true
|
|
|
|
# Add userId attribute to settings collection
|
|
appwrite databases createStringAttribute \
|
|
--databaseId amazon-extension-db \
|
|
--collectionId amazon-ext-enhanced-settings \
|
|
--key userId \
|
|
--size 255 \
|
|
--required true
|
|
|
|
# Add userId attribute to migration-status collection
|
|
appwrite databases createStringAttribute \
|
|
--databaseId amazon-extension-db \
|
|
--collectionId amazon-ext-migration-status \
|
|
--key userId \
|
|
--size 255 \
|
|
--required true
|
|
```
|
|
|
|
## Verification ✅
|
|
|
|
After adding the attributes, test the extension:
|
|
|
|
1. **Reload the extension** in Chrome
|
|
2. **Go to Amazon** (amazon.de/s?k=smartphone)
|
|
3. **Check browser console** - should see no more "userId" errors
|
|
4. **Try Enhanced Items** - should work without errors
|
|
|
|
## Expected Console Messages ✅
|
|
|
|
After fixing the collections, you should see:
|
|
```
|
|
✅ AppWrite connection successful
|
|
✅ Collections accessible
|
|
✅ Real-time sync working
|
|
✅ No more "userId" errors
|
|
```
|
|
|
|
## If You Still See Errors ❌
|
|
|
|
1. **Double-check collection names** - they must match exactly
|
|
2. **Verify attribute names** - `userId` is case-sensitive
|
|
3. **Check permissions** - users must have read/write access
|
|
4. **Clear browser cache** - reload the extension completely
|
|
|
|
## Alternative: Recreate Collections 🔄
|
|
|
|
If adding attributes doesn't work, you can:
|
|
|
|
1. **Delete existing collections** (backup data first!)
|
|
2. **Create new collections** with all required attributes
|
|
3. **Set proper permissions**
|
|
4. **Test the extension**
|
|
|
|
This will give you a clean setup that matches the extension's expectations. |