feat: add database migration for front-office tables
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -32,6 +32,7 @@ Thumbs.db
|
|||||||
# Base de datos local
|
# Base de datos local
|
||||||
*.sql
|
*.sql
|
||||||
!scripts bd/**/*.sql
|
!scripts bd/**/*.sql
|
||||||
|
!backend/hotel_hacienda/src/db/migrations/*.sql
|
||||||
|
|
||||||
# Archivos de respaldo
|
# Archivos de respaldo
|
||||||
*.bak
|
*.bak
|
||||||
|
|||||||
@@ -0,0 +1,172 @@
|
|||||||
|
-- 001_front_office_tables.sql
|
||||||
|
|
||||||
|
-- Add status column to existing rooms table
|
||||||
|
ALTER TABLE rooms ADD COLUMN IF NOT EXISTS status VARCHAR(20) DEFAULT 'available';
|
||||||
|
ALTER TABLE rooms ADD COLUMN IF NOT EXISTS floor INTEGER DEFAULT 1;
|
||||||
|
|
||||||
|
-- Guests
|
||||||
|
CREATE TABLE IF NOT EXISTS guests (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
first_name VARCHAR(100) NOT NULL,
|
||||||
|
last_name VARCHAR(100) NOT NULL,
|
||||||
|
email VARCHAR(255),
|
||||||
|
phone VARCHAR(50),
|
||||||
|
id_type VARCHAR(50),
|
||||||
|
id_number VARCHAR(100),
|
||||||
|
nationality VARCHAR(100),
|
||||||
|
address TEXT,
|
||||||
|
notes TEXT,
|
||||||
|
created_at TIMESTAMP DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMP DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Reservations
|
||||||
|
CREATE TABLE IF NOT EXISTS reservations (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
room_id INTEGER NOT NULL,
|
||||||
|
guest_id INTEGER NOT NULL REFERENCES guests(id),
|
||||||
|
check_in DATE NOT NULL,
|
||||||
|
check_out DATE NOT NULL,
|
||||||
|
status VARCHAR(20) DEFAULT 'pending',
|
||||||
|
channel VARCHAR(50) DEFAULT 'direct',
|
||||||
|
total_amount DECIMAL(12,2),
|
||||||
|
adults INTEGER DEFAULT 1,
|
||||||
|
children INTEGER DEFAULT 0,
|
||||||
|
notes TEXT,
|
||||||
|
created_by INTEGER,
|
||||||
|
created_at TIMESTAMP DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMP DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_reservations_status ON reservations(status);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_reservations_dates ON reservations(check_in, check_out);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_reservations_room ON reservations(room_id);
|
||||||
|
|
||||||
|
-- Guest Stay History
|
||||||
|
CREATE TABLE IF NOT EXISTS guest_stays (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
guest_id INTEGER NOT NULL REFERENCES guests(id),
|
||||||
|
reservation_id INTEGER REFERENCES reservations(id),
|
||||||
|
room_id INTEGER NOT NULL,
|
||||||
|
check_in TIMESTAMP,
|
||||||
|
check_out TIMESTAMP,
|
||||||
|
total_charged DECIMAL(12,2),
|
||||||
|
rating INTEGER CHECK (rating >= 1 AND rating <= 5),
|
||||||
|
feedback TEXT,
|
||||||
|
created_at TIMESTAMP DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Room Status Audit Log
|
||||||
|
CREATE TABLE IF NOT EXISTS room_status_log (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
room_id INTEGER NOT NULL,
|
||||||
|
previous_status VARCHAR(20),
|
||||||
|
new_status VARCHAR(20),
|
||||||
|
changed_by INTEGER,
|
||||||
|
changed_at TIMESTAMP DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Housekeeping Tasks
|
||||||
|
CREATE TABLE IF NOT EXISTS housekeeping_tasks (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
room_id INTEGER NOT NULL,
|
||||||
|
assigned_to INTEGER,
|
||||||
|
priority VARCHAR(10) DEFAULT 'normal',
|
||||||
|
type VARCHAR(20) NOT NULL,
|
||||||
|
status VARCHAR(20) DEFAULT 'pending',
|
||||||
|
notes TEXT,
|
||||||
|
started_at TIMESTAMP,
|
||||||
|
completed_at TIMESTAMP,
|
||||||
|
created_at TIMESTAMP DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_housekeeping_status ON housekeeping_tasks(status);
|
||||||
|
|
||||||
|
-- Menu Items (Room Service)
|
||||||
|
CREATE TABLE IF NOT EXISTS menu_items (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
name VARCHAR(200) NOT NULL,
|
||||||
|
name_es VARCHAR(200),
|
||||||
|
description TEXT,
|
||||||
|
description_es TEXT,
|
||||||
|
price DECIMAL(10,2) NOT NULL,
|
||||||
|
category VARCHAR(50),
|
||||||
|
available BOOLEAN DEFAULT TRUE,
|
||||||
|
created_at TIMESTAMP DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Room Service Orders
|
||||||
|
CREATE TABLE IF NOT EXISTS room_service_orders (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
room_id INTEGER NOT NULL,
|
||||||
|
guest_id INTEGER REFERENCES guests(id),
|
||||||
|
status VARCHAR(20) DEFAULT 'pending',
|
||||||
|
total DECIMAL(10,2),
|
||||||
|
notes TEXT,
|
||||||
|
created_at TIMESTAMP DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMP DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Order Items
|
||||||
|
CREATE TABLE IF NOT EXISTS order_items (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
order_id INTEGER NOT NULL REFERENCES room_service_orders(id) ON DELETE CASCADE,
|
||||||
|
menu_item_id INTEGER NOT NULL REFERENCES menu_items(id),
|
||||||
|
quantity INTEGER NOT NULL DEFAULT 1,
|
||||||
|
price DECIMAL(10,2) NOT NULL,
|
||||||
|
notes TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Venues
|
||||||
|
CREATE TABLE IF NOT EXISTS venues (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
name VARCHAR(200) NOT NULL,
|
||||||
|
capacity INTEGER,
|
||||||
|
area_sqm DECIMAL(8,2),
|
||||||
|
price_per_hour DECIMAL(10,2),
|
||||||
|
amenities JSONB DEFAULT '[]',
|
||||||
|
description TEXT,
|
||||||
|
status VARCHAR(20) DEFAULT 'available',
|
||||||
|
created_at TIMESTAMP DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Events
|
||||||
|
CREATE TABLE IF NOT EXISTS events (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
venue_id INTEGER NOT NULL REFERENCES venues(id),
|
||||||
|
name VARCHAR(200) NOT NULL,
|
||||||
|
organizer VARCHAR(200),
|
||||||
|
event_date DATE NOT NULL,
|
||||||
|
start_time TIME NOT NULL,
|
||||||
|
end_time TIME NOT NULL,
|
||||||
|
guest_count INTEGER,
|
||||||
|
status VARCHAR(20) DEFAULT 'confirmed',
|
||||||
|
notes TEXT,
|
||||||
|
total_amount DECIMAL(12,2),
|
||||||
|
created_at TIMESTAMP DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Employee Schedules
|
||||||
|
CREATE TABLE IF NOT EXISTS employee_schedules (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
employee_id INTEGER NOT NULL,
|
||||||
|
schedule_date DATE NOT NULL,
|
||||||
|
shift_type VARCHAR(20) NOT NULL,
|
||||||
|
start_time TIME,
|
||||||
|
end_time TIME,
|
||||||
|
notes TEXT,
|
||||||
|
UNIQUE(employee_id, schedule_date)
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Refresh Tokens (JWT)
|
||||||
|
CREATE TABLE IF NOT EXISTS refresh_tokens (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
user_id INTEGER NOT NULL,
|
||||||
|
token VARCHAR(500) NOT NULL,
|
||||||
|
expires_at TIMESTAMP NOT NULL,
|
||||||
|
revoked BOOLEAN DEFAULT FALSE,
|
||||||
|
created_at TIMESTAMP DEFAULT NOW()
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_refresh_tokens_token ON refresh_tokens(token);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_refresh_tokens_user ON refresh_tokens(user_id);
|
||||||
Reference in New Issue
Block a user