jakekinchen TrailMates .cursorrules file for Swift

# TrailMates UID Rules

## UID Types and Contexts

1. Firebase Auth UID (String)
   - Authentication identifier
   - Required for all users
   - Used for all real-time features
   - Used in security rules
   - Format: Custom Firebase string

2. SwiftData UUID
   - Primary key for local database
   - Used in Firestore document IDs
   - Used for model relationships
   - Format: Standard UUID string

## Service-Specific Usage

1. SwiftData & Firestore
   - Use SwiftData UUID for:
     - Local database primary keys
     - Model relationships
     - Firestore document IDs
     - Collection references
   - Example collections: users, events, landmarks

2. Firebase Realtime Database
   - Use Firebase Auth UID for EVERYTHING:
     - Path construction
     - Data references
     - Security rules
     - User identification
   - Example: locations/{id}/coordinates

3. Firebase Authentication
   - Use Firebase Auth UID only
   - Store in User model as non-optional

## Implementation Guidelines

1. Path Construction
   ```swift
   // Realtime Database - ALWAYS use Firebase UID
   rtdb.child("locations").child(user.id)
   
   // Firestore - ALWAYS use SwiftData UUID
   db.collection("users").document(user.id.uuidString)
   ```

2. Data Storage
   ```swift
   // Realtime Database data - ALWAYS use Firebase UID
   let locationData = [
       "userId": user.id,
       "coordinates": [lat, lon]
   ]
   
   // Firestore/SwiftData - ALWAYS use SwiftData UUID
   let eventData = [
       "creatorId": user.id.uuidString,
       "attendees": [user1.id.uuidString, user2.id.uuidString]
   ]
   ```

3. Security Rules
   ```javascript
   // Firebase rules ALWAYS use auth.uid
   "locations/{uid}": {
     ".read": "auth != null && auth.uid == uid"
   }
   ```

## Error Prevention

1. Never Cross Streams
   - Realtime Database: Firebase UID ONLY
   - Firestore/SwiftData: SwiftData UUID ONLY
   - No translation between systems needed

2. Type Safety
   - Firebase UID is non-optional String
   - SwiftData UUID is non-optional UUID
   - Use clear variable names (id vs id)

3. Error Handling
   - Validate Firebase UID on user creation
   - Ensure both IDs are present before operations
   - Clear error messages about which ID is missing

## Debugging Tips

1. Log Format
   ```swift
   print("Firebase UID: \(user.id)")
   print("SwiftData UUID: \(user.id)")
   ```

2. Validation Checks
   ```swift
   // Both IDs should always be present
   guard !user.id.isEmpty else {
       throw AuthError.missingid
   }
   ``` 
firebase
java
javascript
rest-api
swift

First Time Repository

Swift

Languages:

JavaScript: 1.9KB
Swift: 433.5KB
Created: 10/31/2024
Updated: 12/19/2024

All Repositories (1)