Update environment configuration and enhance user management features
- Changed VITE_SUPABASE_URL in .env.example for deployment consistency. - Added new user management functionality to reset user passwords in UserManagement component. - Updated supabase.ts to include first and last name fields in user profiles and added password reset functionality. - Enhanced DashboardLayout to include a user profile view and improved user display in TopNavbar. - Updated seed.sql to create additional users with roles for testing purposes.
This commit is contained in:
@@ -201,6 +201,57 @@ CREATE TABLE public.pecan_diameter_measurements (
|
||||
|
||||
**Purpose**: Individual pecan diameter measurements (up to 10 per phase).
|
||||
|
||||
### 3. Conductor Availability Management
|
||||
|
||||
#### `public.conductor_availability`
|
||||
```sql
|
||||
CREATE TABLE public.conductor_availability (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
user_id UUID NOT NULL REFERENCES public.user_profiles(id) ON DELETE CASCADE,
|
||||
available_from TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
available_to TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
notes TEXT, -- Optional notes about the availability
|
||||
status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'cancelled')),
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
created_by UUID NOT NULL REFERENCES public.user_profiles(id),
|
||||
|
||||
-- Ensure available_to is after available_from
|
||||
CONSTRAINT valid_time_range CHECK (available_to > available_from),
|
||||
|
||||
-- Ensure availability is in the future (can be modified if needed for past records)
|
||||
CONSTRAINT future_availability CHECK (available_from >= NOW() - INTERVAL '1 day')
|
||||
);
|
||||
```
|
||||
|
||||
**Purpose**: Stores conductor availability windows for experiment scheduling with overlap prevention.
|
||||
|
||||
#### `public.experiment_phase_assignments`
|
||||
```sql
|
||||
CREATE TABLE public.experiment_phase_assignments (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
experiment_id UUID NOT NULL REFERENCES public.experiments(id) ON DELETE CASCADE,
|
||||
repetition_id UUID NOT NULL REFERENCES public.experiment_repetitions(id) ON DELETE CASCADE,
|
||||
conductor_id UUID NOT NULL REFERENCES public.user_profiles(id) ON DELETE CASCADE,
|
||||
phase_name TEXT NOT NULL CHECK (phase_name IN ('pre-soaking', 'air-drying', 'cracking', 'shelling')),
|
||||
scheduled_start_time TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
scheduled_end_time TIMESTAMP WITH TIME ZONE NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'scheduled' CHECK (status IN ('scheduled', 'in-progress', 'completed', 'cancelled')),
|
||||
notes TEXT, -- Optional notes about the assignment
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
created_by UUID NOT NULL REFERENCES public.user_profiles(id),
|
||||
|
||||
-- Ensure scheduled_end_time is after scheduled_start_time
|
||||
CONSTRAINT valid_scheduled_time_range CHECK (scheduled_end_time > scheduled_start_time),
|
||||
|
||||
-- Ensure unique assignment per conductor per phase per repetition
|
||||
CONSTRAINT unique_conductor_phase_assignment UNIQUE (repetition_id, conductor_id, phase_name)
|
||||
);
|
||||
```
|
||||
|
||||
**Purpose**: Assigns conductors to specific experiment repetition phases with scheduled times for future scheduling functionality.
|
||||
|
||||
## Key Functions
|
||||
|
||||
### Authentication & Authorization
|
||||
@@ -218,6 +269,12 @@ CREATE TABLE public.pecan_diameter_measurements (
|
||||
### Data Validation
|
||||
- `validate_repetition_number()`: Ensures repetition numbers don't exceed experiment requirements
|
||||
- `public.check_repetition_lock_before_withdrawal()`: Prevents withdrawal of locked repetitions
|
||||
- `public.check_availability_overlap()`: Prevents overlapping availabilities for the same conductor
|
||||
- `public.adjust_overlapping_availability()`: Automatically adjusts overlapping availabilities (alternative approach)
|
||||
|
||||
### Availability Management
|
||||
- `public.get_available_conductors(start_time, end_time)`: Returns conductors available for a specific time range
|
||||
- `public.is_conductor_available(conductor_id, start_time, end_time)`: Checks if a conductor is available for a specific time range
|
||||
|
||||
### Timestamp Management
|
||||
- `public.handle_updated_at()`: Updates the updated_at timestamp
|
||||
@@ -227,7 +284,7 @@ CREATE TABLE public.pecan_diameter_measurements (
|
||||
|
||||
### Access Control Summary
|
||||
- **Admin**: Full access to all tables and operations
|
||||
- **Conductor**: Can manage experiments, experiment phases, and repetitions, view all data
|
||||
- **Conductor**: Can manage experiments, experiment phases, and repetitions, view all data, manage their own availability
|
||||
- **Analyst**: Read-only access to all data
|
||||
- **Data Recorder**: Can create and manage their own phase drafts and data
|
||||
|
||||
@@ -235,6 +292,8 @@ CREATE TABLE public.pecan_diameter_measurements (
|
||||
- All authenticated users can view experiments, experiment phases, and repetitions
|
||||
- Admin and conductor roles can manage experiment phases
|
||||
- Users can only modify their own phase drafts (unless admin)
|
||||
- Users can only manage their own availability (unless admin)
|
||||
- Conductors can view their own experiment phase assignments
|
||||
- Locked repetitions prevent draft modifications
|
||||
- Submitted drafts cannot be withdrawn if repetition is locked
|
||||
- Role-based access control for user management
|
||||
@@ -260,6 +319,10 @@ The database includes comprehensive indexing for performance:
|
||||
- Only one submitted draft per user per phase per repetition
|
||||
- Moisture percentages must be between 0-100
|
||||
- Weights and measurements must be non-negative
|
||||
- Conductor availabilities cannot overlap for the same user
|
||||
- Availability windows must have valid time ranges (end > start)
|
||||
- Only one conductor assignment per phase per repetition
|
||||
- Scheduled times must have valid ranges (end > start)
|
||||
|
||||
## Migration History
|
||||
|
||||
@@ -271,5 +334,6 @@ The schema has evolved through several migrations:
|
||||
5. **Data Entry System**: Phase-specific draft and data management
|
||||
6. **Constraint Fixes**: Refined business rules and constraints
|
||||
7. **Experiment Phases**: Added experiment grouping for better organization
|
||||
8. **Conductor Availability**: Added availability management and experiment phase assignments for scheduling
|
||||
|
||||
This schema supports a comprehensive pecan processing experiment management system with robust security, data integrity, and flexible role-based access control.
|
||||
|
||||
Reference in New Issue
Block a user