Commit graph

2 commits

Author SHA1 Message Date
iskandarsulaili
7c1db78050 feat: Add UserMapping constraints and schema improvements
## Database Schema Enhancements

### Migration 19 - Fixed
- Removed invalid composite index on session(visitor_id, user_id)
- visitor_id column doesn't exist in session table
- Fixed migration to only create valid indexes

### Migration 20 - New Constraints (with rollback support)
- Added websiteId foreign key to UserMapping table
- Added foreign key constraint to Website table for referential integrity
- Added composite index on UserMapping(websiteId, userId) for query performance
- Added composite index on Session(websiteId, userId) for join optimization

### Schema Updates
- Updated UserMapping model with websiteId field
- Added foreign key relationship: UserMapping -> Website
- Added userMappings relation to Website model
- Added composite indexes for better query performance

## Files Changed

### Modified
- prisma/schema.prisma - Added foreign keys and composite indexes
- prisma/migrations/19_add_user_id_mapping/migration.sql - Fixed invalid index

### New
- prisma/migrations/20_add_user_mapping_constraints/migration.sql - Forward migration
- prisma/migrations/20_add_user_mapping_constraints/rollback.sql - Rollback script

## Benefits
-  Referential integrity enforced at database level
-  Optimized queries for Umami sync operations
-  Better join performance on Session table
-  Rollback capability for safe schema changes

## Breaking Changes
- UserMapping table now requires websiteId field
- Existing data will be migrated to use first available website_id

## Migration Notes
Run the migration with:
```bash
npx prisma migrate deploy
```

To rollback if needed:
```bash
psql -d umami -f prisma/migrations/20_add_user_mapping_constraints/rollback.sql
```
2025-11-06 22:04:57 +08:00
iskandarsulaili
5cf1e0c16a feat: Add user ID mapping migration for WordPress integration
Added Prisma migration to support user identification:

1. Session Table Enhancement
   - Added user_id column (VARCHAR(36)) to session table
   - Stores WordPress user ID for logged-in users
   - Indexed for efficient lookups

2. User Mapping Table
   - New table to track visitor_id to user_id relationships
   - Maps anonymous visitors to authenticated users
   - Tracks first_seen_at, last_seen_at, and session_count
   - Unique constraint on (visitor_id, user_id) pair

3. Indexes
   - idx_session_user_id - Fast user_id lookups
   - idx_session_visitor_user - Composite index for visitor+user queries
   - idx_user_mapping_visitor - Visitor ID lookups
   - idx_user_mapping_user - User ID lookups
   - idx_user_mapping_last_seen - Time-based queries

This migration enables unified user tracking across anonymous and authenticated sessions, supporting the WordPress plugin's user identification feature.
2025-11-06 19:53:33 +08:00