Huge refactor for backend and client

This is barely functionnal, but at least it can display some data without crashing
Most other functionnalities other than displaying events are broken, and so are the relative date operations, they need to be fixed asap
This commit is contained in:
Alexis
2024-05-16 22:58:19 +02:00
parent 49e523485b
commit 67f5a270af
28 changed files with 247 additions and 303 deletions

View File

@@ -47,33 +47,41 @@ comment on table public.worlds is 'Worlds belonging to a single user ; a game ma
-- World Calendars
create table public.world_calendars (
id bigint generated by default as identity primary key,
months text array,
days_per_year int not null,
world_id bigint references public.worlds on delete cascade not null
);
comment on table public.world_calendars is 'Calendar settings and configuration attached to a single world.';
-- Calendar Months
create table public.calendar_months (
id bigint generated by default as identity primary key,
name text not null,
days int not null,
position int not null,
calendar_id bigint references public.world_calendars on delete cascade not null
);
comment on table public.calendar_months is 'A calendar month.';
-- Event categories
create table public.events_category (
create table public.calendar_events_category (
id bigint generated by default as identity primary key,
name text not null,
unique (name)
);
comment on table public.events_category is 'Categories describing events';
comment on table public.calendar_events_category is 'Categories describing events';
-- Events
create table public.events (
create table public.calendar_events (
id bigint generated by default as identity primary key,
title text not null,
description text,
start_date json not null,
end_date json,
category bigint references public.events_category on delete cascade,
category bigint references public.calendar_events_category on delete cascade,
hidden boolean,
wiki text,
calendar_id bigint references public.world_calendars on delete cascade not null
);
comment on table public.events is 'Events linked to a world';
comment on table public.calendar_events is 'Events linked to a world';
-- Character categories
create table public.characters_category (
@@ -121,11 +129,12 @@ alter table public.users enable row level security;
alter table public.user_roles enable row level security;
alter table public.role_permissions enable row level security;
alter table public.worlds enable row level security;
alter table public.world_calendars enable row level security;
alter table public.events_category enable row level security;
alter table public.characters_category enable row level security;
alter table public.characters enable row level security;
alter table public.events enable row level security;
alter table public.world_calendars enable row level security;
alter table public.calendar_months enable row level security;
alter table public.calendar_events enable row level security;
alter table public.calendar_events_category enable row level security;
-- User policies
create policy "Allow logged-in read access" on public.users for select using ( auth.role() = 'authenticated' );
@@ -158,23 +167,43 @@ create policy "Allow individual update access for GMs" on public.world_calendars
)
);
-- Month policies
create policy "Allow individual read access for GMs" on public.calendar_months for select using (
exists (
select 1 from world_calendars
where world_calendars.id = calendar_months.calendar_id
)
);
create policy "Allow individual insert access for GMs" on public.calendar_months for insert with check (
exists (
select 1 from world_calendars
where world_calendars.id = calendar_months.calendar_id
)
);
create policy "Allow individual update access for GMs" on public.calendar_months for update with check (
exists (
select 1 from world_calendars
where world_calendars.id = calendar_months.calendar_id
)
);
-- Event policies
create policy "Allow individual read access for GMs" on public.events for select using (
create policy "Allow individual read access for GMs" on public.calendar_events for select using (
exists (
select 1 from world_calendars
where world_calendars.id = events.calendar_id
where world_calendars.id = calendar_events.calendar_id
)
);
create policy "Allow individual insert access for GMs" on public.events for insert with check (
create policy "Allow individual insert access for GMs" on public.calendar_events for insert with check (
exists (
select 1 from world_calendars
where world_calendars.id = events.calendar_id
where world_calendars.id = calendar_events.calendar_id
)
);
create policy "Allow individual update access for GMs" on public.events for update with check (
create policy "Allow individual update access for GMs" on public.calendar_events for update with check (
exists (
select 1 from world_calendars
where world_calendars.id = events.calendar_id
where world_calendars.id = calendar_events.calendar_id
)
);
@@ -198,6 +227,10 @@ create policy "Allow individual update access for GMs" on public.characters for
)
);
-- Categories are public to view but not to insert
create policy "Allow logged-in read access" on public.calendar_events_category for select using ( auth.role() = 'authenticated' );
create policy "Allow logged-in read access" on public.characters_category for select using ( auth.role() = 'authenticated' );
-- Send "previous data" on change
alter table public.users replica identity full;

View File

@@ -2,24 +2,24 @@ insert into public.role_permissions (role, permission) values ('sa', 'events.see
insert into public.role_permissions (role, permission) values ('sa', 'users.ban');
-- Event categories
insert into public.events_category (name) values ('naissance');
insert into public.events_category (name) values ('mort');
insert into public.events_category (name) values ('catastrophe');
insert into public.events_category (name) values ('catastrophe naturelle');
insert into public.events_category (name) values ('inauguration');
insert into public.events_category (name) values ('religion');
insert into public.events_category (name) values ('invention');
insert into public.events_category (name) values ('science');
insert into public.events_category (name) values ('bénédiction');
insert into public.events_category (name) values ('joueurs');
insert into public.events_category (name) values ('découverte');
insert into public.events_category (name) values ('exploration');
insert into public.events_category (name) values ('construction');
insert into public.events_category (name) values ('arcanologie');
insert into public.events_category (name) values ('criminalité');
insert into public.events_category (name) values ('scandale');
insert into public.events_category (name) values ('commerce');
insert into public.events_category (name) values ('législation');
insert into public.calendar_events_category (name) values ('naissance');
insert into public.calendar_events_category (name) values ('mort');
insert into public.calendar_events_category (name) values ('catastrophe');
insert into public.calendar_events_category (name) values ('catastrophe naturelle');
insert into public.calendar_events_category (name) values ('inauguration');
insert into public.calendar_events_category (name) values ('religion');
insert into public.calendar_events_category (name) values ('invention');
insert into public.calendar_events_category (name) values ('science');
insert into public.calendar_events_category (name) values ('bénédiction');
insert into public.calendar_events_category (name) values ('joueurs');
insert into public.calendar_events_category (name) values ('découverte');
insert into public.calendar_events_category (name) values ('exploration');
insert into public.calendar_events_category (name) values ('construction');
insert into public.calendar_events_category (name) values ('arcanologie');
insert into public.calendar_events_category (name) values ('criminalité');
insert into public.calendar_events_category (name) values ('scandale');
insert into public.calendar_events_category (name) values ('commerce');
insert into public.calendar_events_category (name) values ('législation');
-- Character categories
insert into public.characters_category (name) values ('joueur');
@@ -39,10 +39,24 @@ insert into public.characters_category (name) values ('commerçant');
insert into public.worlds (name, description, color) values ('Léïm', 'Monde d''aventures et d''intrigues med-fan', 'black');
-- Worlds' calendars
insert into public.world_calendars (world_id, months, days_per_year) values (1, ARRAY['Jalen', 'Malsen', 'Verlys', 'Nalys', 'Verdore', 'Sidore', 'Lyllion', 'Rion', 'Farene', 'Dalvene'], 320);
insert into public.world_calendars (world_id) values (1);
-- Calendar's months
insert into public.calendar_months (calendar_id, name, days, position) values (1, 'Jalen', 32, 1);
insert into public.calendar_months (calendar_id, name, days, position) values (1, 'Malsen', 32, 2);
insert into public.calendar_months (calendar_id, name, days, position) values (1, 'Verlys', 32, 3);
insert into public.calendar_months (calendar_id, name, days, position) values (1, 'Nalys', 32, 4);
insert into public.calendar_months (calendar_id, name, days, position) values (1, 'Verdore', 32, 5);
insert into public.calendar_months (calendar_id, name, days, position) values (1, 'Sidore', 32, 6);
insert into public.calendar_months (calendar_id, name, days, position) values (1, 'Lyllion', 32, 7);
insert into public.calendar_months (calendar_id, name, days, position) values (1, 'Rion', 32, 8);
insert into public.calendar_months (calendar_id, name, days, position) values (1, 'Farene', 32, 9);
insert into public.calendar_months (calendar_id, name, days, position) values (1, 'Dalvene', 32, 10);
insert into public.calendar_months (calendar_id, name, days, position) values (1, 'Testos', 32, 11);
insert into public.calendar_months (calendar_id, name, days, position) values (1, 'Jalen2 le meilleur', 32, 12);
-- Events
insert into public.events (title, description, start_date, category, hidden, wiki, calendar_id) values (
insert into public.calendar_events (title, description, start_date, category, hidden, wiki, calendar_id) values (
'Laurdieu devient la première cité de l''empire de Kaliatos',
'L''empire de Kaliatos établi sa capitale dans la cité de Laurdieu, qui connaitra une prospérité nouvelle au sein d''Aldys.',
'{ "day": 3, "month": 4, "year": -1932 }',
@@ -51,7 +65,7 @@ insert into public.events (title, description, start_date, category, hidden, wik
'https://alexcreates.fr/leim/index.php/Laurdieu',
1
);
insert into public.events (title, description, start_date, category, hidden, wiki, calendar_id) values (
insert into public.calendar_events (title, description, start_date, category, hidden, wiki, calendar_id) values (
'Apparition d''Asménys',
'La défunte chanteuse Asménys apparaît à un barde pendant son jeune public, démarrant la religion des Prêtresses d''Asménys.',
'{ "day": 19, "month": 7, "year": -1358 }',
@@ -60,7 +74,7 @@ insert into public.events (title, description, start_date, category, hidden, wik
'https://alexcreates.fr/leim/index.php/Pr%C3%AAtresses_d%27Asm%C3%A9nys',
1
);
insert into public.events (title, description, start_date, end_date, category, hidden, wiki, calendar_id) values (
insert into public.calendar_events (title, description, start_date, end_date, category, hidden, wiki, calendar_id) values (
'La Rupture',
'Les Abysses se déversent à la surface de Léim, à travers plusieurs brèches. Plusieurs hordes de démons se rapprochent des villes, et ce qu''on appellera l''Âge des Abysses commencent alors sur la planète entière.',
'{ "day": 26, "month": 5, "year": -756 }',
@@ -70,7 +84,7 @@ insert into public.events (title, description, start_date, end_date, category, h
'https://alexcreates.fr/leim/index.php/Seconde_Rupture',
1
);
insert into public.events (title, description, start_date, end_date, category, hidden, wiki, calendar_id) values (
insert into public.calendar_events (title, description, start_date, end_date, category, hidden, wiki, calendar_id) values (
'Marche du sang',
'L''empereur de Kaliatos ordonne personnellement la traque de Jorhas Kirendre pour connivence avec les démons. Plusieurs bataillons sont affectés à la chasse de Jorhas, qui se terminera par son incarcération ainsi que la mort de plusieurs centaines de soldats.',
'{ "day": 18, "month": 9, "year": -420 }',
@@ -80,7 +94,7 @@ insert into public.events (title, description, start_date, end_date, category, h
'https://alexcreates.fr/leim/index.php/Jorhas_Kirendre',
1
);
insert into public.events (title, description, start_date, category, hidden, wiki, calendar_id) values (
insert into public.calendar_events (title, description, start_date, category, hidden, wiki, calendar_id) values (
'Exécution de Tyhos',
'Le léviathan Tyhos rend l''âme après un combat de plusieurs années contre Lystos, le dieu du Soleil.',
'{ "day": 1, "month": 0, "year": 0 }',
@@ -89,14 +103,14 @@ insert into public.events (title, description, start_date, category, hidden, wik
'https://alexcreates.fr/leim/index.php/Tyhos',
1
);
insert into public.events (title, start_date, category, wiki, calendar_id) values (
insert into public.calendar_events (title, start_date, category, wiki, calendar_id) values (
'Traité de Kadel',
'{ "day": 29, "month": 4, "year": 100 }',
5,
'https://alexcreates.fr/leim/index.php/Alliance_Kald%C3%A9lienne#Trait%C3%A9_de_Kadel',
1
);
insert into public.events (title, description, start_date, category, hidden, wiki, calendar_id) values (
insert into public.calendar_events (title, description, start_date, category, hidden, wiki, calendar_id) values (
'Découverte des Plaines de Poussières',
'Les troupes de la reconquête aldienne explorent le littoral d''une immense étendue grise et inerte.',
'{ "day": 17, "month": 7, "year": 305 }',