Refactor patch test system and add booking edit requests
- Replace patch_test_duration_hours on services with separate patch_tests table - Add user_patch_tests table to track user patch test records - Add booking edit request system: users can request time changes - Add admin handlers to list, approve, and reject edit requests - Add validation to prevent editing completed/cancelled bookings - Add overlap and closed-day checks for booking edits
This commit is contained in:
@@ -150,6 +150,38 @@ CREATE INDEX idx_verification_codes_code ON verification_codes (code);
|
||||
CREATE INDEX idx_verification_codes_user_purpose ON verification_codes (user_id, purpose) WHERE used_at IS NULL;
|
||||
CREATE INDEX idx_verification_codes_expires ON verification_codes (expires_at) WHERE used_at IS NULL;
|
||||
|
||||
-- =======================================
|
||||
-- PATCH TESTS TABLE
|
||||
-- =======================================
|
||||
|
||||
CREATE TABLE patch_tests (
|
||||
id CHAR(12) PRIMARY KEY DEFAULT generate_service_id(),
|
||||
name VARCHAR(100) NOT NULL,
|
||||
description TEXT,
|
||||
notice_duration_hours INT NOT NULL DEFAULT 24,
|
||||
expiry_months INT NOT NULL DEFAULT 6,
|
||||
service_ids CHAR(12)[] DEFAULT '{}',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_patch_tests_name ON patch_tests(name);
|
||||
|
||||
-- =======================================
|
||||
-- USER PATCH TESTS TABLE
|
||||
-- =======================================
|
||||
|
||||
CREATE TABLE user_patch_tests (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
user_id CHAR(12) NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
patch_test_id CHAR(12) NOT NULL REFERENCES patch_tests(id) ON DELETE CASCADE,
|
||||
tested_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
notes TEXT,
|
||||
UNIQUE (user_id, patch_test_id)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_user_patch_tests_user ON user_patch_tests(user_id);
|
||||
CREATE INDEX idx_user_patch_tests_tested_at ON user_patch_tests(tested_at);
|
||||
|
||||
-- =======================================
|
||||
-- SERVICES TABLE
|
||||
-- =======================================
|
||||
@@ -161,7 +193,6 @@ CREATE TABLE services (
|
||||
price NUMERIC(10,2) NOT NULL,
|
||||
duration_minutes INT NOT NULL,
|
||||
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
||||
patch_test_duration_hours INT NOT NULL DEFAULT 0,
|
||||
minimum_age_required INT NOT NULL DEFAULT 16,
|
||||
requires_manual_pricing BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
requires_manual_duration BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
@@ -171,16 +202,6 @@ CREATE TABLE services (
|
||||
|
||||
CREATE INDEX idx_services_name ON services(name);
|
||||
|
||||
CREATE TABLE user_service_patch_tests (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
user_id CHAR(12) NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
service_id CHAR(12) NOT NULL REFERENCES services(id) ON DELETE CASCADE,
|
||||
last_time TIMESTAMPTZ NOT NULL,
|
||||
UNIQUE (user_id, service_id)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_service_patch_tests_userid ON user_service_patch_tests(user_id);
|
||||
|
||||
-- =======================================
|
||||
-- BOOKINGS TABLE
|
||||
-- =======================================
|
||||
|
||||
Reference in New Issue
Block a user