campingmontagut/deploy/booking.sql
jordi fita mas d945f55096 Add “part” of the bookings’ management
“Part”, because it is not possible to add or actually manage any
booking yet, but it has the export feature that we need to validate the
project.
2024-01-18 21:05:30 +01:00

65 lines
1.6 KiB
PL/PgSQL

-- Deploy camper:booking to pg
-- requires: roles
-- requires: schema_camper
-- requires: company
-- requires: user_profile
-- requires: campsite_type
-- requires: booking_status
begin;
set search_path to camper, public;
create table booking (
booking_id integer generated by default as identity primary key,
company_id integer not null references company,
slug uuid not null unique default gen_random_uuid(),
campsite_type_id integer not null references campsite_type,
holder_name text not null constraint holder_name_not_empty check (length(trim(holder_name)) > 0),
arrival_date date not null,
departure_date date not null constraint departure_after_arrival check (departure_date > arrival_date),
number_dogs integer not null constraint number_dogs_nonnegative check (number_dogs >= 0),
acsi_card boolean not null,
booking_status text not null default 'created' references booking_status,
created_at timestamptz not null default current_timestamp
);
grant select, insert, update on table booking to employee;
grant select, insert, update, delete on table booking to admin;
alter table booking enable row level security;
create policy select_from_company
on booking
for select
using (
company_id in (select company_id from user_profile)
)
;
create policy insert_to_company
on booking
for insert
with check (
company_id in (select company_id from user_profile)
)
;
create policy update_company
on booking
for update
using (
company_id in (select company_id from user_profile)
)
;
create policy delete_from_company
on booking
for delete
using (
company_id in (select company_id from user_profile)
)
;
commit;