From 49b3015a16287bb4486aa64c5c26f05f7c22089c Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Mon, 30 Jan 2023 22:22:59 +0000 Subject: refactor(web/server): Remove unnecessary service indirections This change removes the unnecessary service classes where they are only used to forward data from the resource to the entities. Furthermore, DTOs are now moved from the service layer to the resources. --- .../main/resources/db/migration/V1.0.0__core.sql | 156 -------------------- .../src/main/resources/db/migration/V3.0__core.sql | 160 +++++++++++++++++++++ .../main/resources/db/testing/V3.0.1__entities.sql | 24 ++++ 3 files changed, 184 insertions(+), 156 deletions(-) delete mode 100644 opendc-web/opendc-web-server/src/main/resources/db/migration/V1.0.0__core.sql create mode 100644 opendc-web/opendc-web-server/src/main/resources/db/migration/V3.0__core.sql create mode 100644 opendc-web/opendc-web-server/src/main/resources/db/testing/V3.0.1__entities.sql (limited to 'opendc-web/opendc-web-server/src/main/resources/db') diff --git a/opendc-web/opendc-web-server/src/main/resources/db/migration/V1.0.0__core.sql b/opendc-web/opendc-web-server/src/main/resources/db/migration/V1.0.0__core.sql deleted file mode 100644 index 1a0e4046..00000000 --- a/opendc-web/opendc-web-server/src/main/resources/db/migration/V1.0.0__core.sql +++ /dev/null @@ -1,156 +0,0 @@ --- Hibernate sequence for unique identifiers -create sequence hibernate_sequence start with 1 increment by 1; - --- Projects -create table projects -( - id bigint not null, - created_at timestamp not null, - name varchar(255) not null, - portfolios_created integer not null, - scenarios_created integer not null, - topologies_created integer not null, - updated_at timestamp not null, - primary key (id) -); - --- Project authorizations authorize users specific permissions to a project. -create table project_authorizations -( - project_id bigint not null, - user_id varchar(255) not null, - role integer not null, - primary key (project_id, user_id) -); - --- Topologies represent the datacenter designs created by users. -create table topologies -( - id bigint not null, - created_at timestamp not null, - name varchar(255) not null, - number integer not null, - rooms jsonb not null, - updated_at timestamp not null, - project_id bigint not null, - primary key (id) -); - --- Portfolios -create table portfolios -( - id bigint not null, - name varchar(255) not null, - number integer not null, - targets jsonb not null, - project_id bigint not null, - primary key (id) -); - -create table scenarios -( - id bigint not null, - name varchar(255) not null, - number integer not null, - phenomena jsonb not null, - scheduler_name varchar(255) not null, - sampling_fraction double precision not null, - job_id bigint, - portfolio_id bigint not null, - project_id bigint not null, - topology_id bigint not null, - trace_id varchar(255) not null, - primary key (id) -); - -create table jobs -( - id bigint not null, - created_by varchar(255) not null, - created_at timestamp not null, - repeats integer not null, - results jsonb, - state integer not null, - runtime integer not null, - updated_at timestamp not null, - primary key (id) -); - --- User accounting -create table user_accounting -( - user_id varchar(255) not null, - period_end date not null, - simulation_time integer not null, - simulation_time_budget integer not null, - primary key (user_id) -); - --- Workload traces available to the user. -create table traces -( - id varchar(255) not null, - name varchar(255) not null, - type varchar(255) not null, - primary key (id) -); - --- Relations -alter table project_authorizations - add constraint FK824hw0npe6gwiamwb6vohsu19 - foreign key (project_id) - references projects; - -create index fn_topologies_number on topologies (project_id, number); - -alter table topologies - add constraint UK2s5na63qtu2of4g7odocmwi2a unique (project_id, number); - -alter table topologies - add constraint FK1kpw87pylq7m2ct9lq0ed1u3b - foreign key (project_id) - references projects; - -create index fn_portfolios_number on portfolios (project_id, number); - -alter table portfolios - add constraint FK31ytuaxb7aboxueng9hq7owwa - foreign key (project_id) - references projects; - -alter table portfolios - add constraint UK56dtskxruwj22dvxny2hfhks1 unique (project_id, number); - -create index fn_scenarios_number on scenarios (project_id, number); - -alter table scenarios - add constraint UKd0bk6fmtw5qiu9ty7t3g9crqd unique (project_id, number); - -alter table scenarios - add constraint FK9utvg0i5uu8db9pa17a1d77iy - foreign key (job_id) - references jobs; - -alter table scenarios - add constraint FK181y5hv0uibhj7fpbpkdy90s5 - foreign key (portfolio_id) - references portfolios; - -alter table scenarios - add constraint FKbvwyh4joavs444rj270o3b8fr - foreign key (project_id) - references projects; - -alter table scenarios - add constraint FKrk6ltvaf9lp0aukp9dq3qjujj - foreign key (topology_id) - references topologies; - -alter table scenarios - add constraint FK5m05tqeekqjkbbsaj3ehl6o8n - foreign key (trace_id) - references traces; - --- Initial data -insert into traces (id, name, type) -values ('bitbrains-small', 'Bitbrains Small', 'vm'); diff --git a/opendc-web/opendc-web-server/src/main/resources/db/migration/V3.0__core.sql b/opendc-web/opendc-web-server/src/main/resources/db/migration/V3.0__core.sql new file mode 100644 index 00000000..40654b6b --- /dev/null +++ b/opendc-web/opendc-web-server/src/main/resources/db/migration/V3.0__core.sql @@ -0,0 +1,160 @@ +-- Hibernate sequence for unique identifiers +create sequence hibernate_sequence start with 1 increment by 1; + +-- Projects +create table projects +( + id bigint not null, + created_at timestamp not null, + name varchar(255) not null, + portfolios_created integer not null default 0, + scenarios_created integer not null default 0, + topologies_created integer not null default 0, + updated_at timestamp not null, + primary key (id) +); + +create type project_role as enum ('OWNER', 'EDITOR', 'VIEWER'); + +-- Project authorizations authorize users specific permissions to a project. +create table project_authorizations +( + project_id bigint not null, + user_id varchar(255) not null, + role project_role not null, + primary key (project_id, user_id) +); + +-- Topologies represent the datacenter designs created by users. +create table topologies +( + id bigint not null, + created_at timestamp not null, + name varchar(255) not null, + number integer not null, + rooms jsonb not null, + updated_at timestamp not null, + project_id bigint not null, + primary key (id) +); + +-- Portfolios +create table portfolios +( + id bigint not null, + name varchar(255) not null, + number integer not null, + targets jsonb not null, + project_id bigint not null, + primary key (id) +); + +create table scenarios +( + id bigint not null, + name varchar(255) not null, + number integer not null, + phenomena jsonb not null, + scheduler_name varchar(255) not null, + sampling_fraction double precision not null, + portfolio_id bigint not null, + project_id bigint not null, + topology_id bigint not null, + trace_id varchar(255) not null, + primary key (id) +); + +create type job_state as enum ('PENDING', 'CLAIMED', 'RUNNING', 'FINISHED', 'FAILED'); + +create table jobs +( + id bigint not null, + created_by varchar(255) not null, + created_at timestamp not null, + repeats integer not null, + results jsonb, + state job_state not null default 'PENDING', + runtime integer not null default 0, + updated_at timestamp not null, + scenario_id bigint not null, + primary key (id) +); + +-- User accounting +create table user_accounting +( + user_id varchar(255) not null, + period_end date not null, + simulation_time integer not null, + simulation_time_budget integer not null, + primary key (user_id) +); + +-- Workload traces available to the user. +create table traces +( + id varchar(255) not null, + name varchar(255) not null, + type varchar(255) not null, + primary key (id) +); + +-- Relations +alter table project_authorizations + add constraint fk_project_authorizations + foreign key (project_id) + references projects; + +create index ux_topologies_number on topologies (project_id, number); + +alter table topologies + add constraint uk_topologies_number unique (project_id, number); + +alter table topologies + add constraint fk_topologies_project + foreign key (project_id) + references projects; + +create index ux_portfolios_number on portfolios (project_id, number); + +alter table portfolios + add constraint fk_portfolios_project + foreign key (project_id) + references projects; + +alter table portfolios + add constraint uk_portfolios_number unique (project_id, number); + +create index ux_scenarios_number on scenarios (project_id, number); + +alter table scenarios + add constraint uk_scenarios_number unique (project_id, number); + +alter table scenarios + add constraint fk_scenarios_project + foreign key (project_id) + references projects; + +alter table scenarios + add constraint fk_scenarios_topology + foreign key (topology_id) + references topologies; + +alter table scenarios + add constraint fk_scenarios_portfolio + foreign key (portfolio_id) + references portfolios; + +alter table scenarios + add constraint fk_scenarios_trace + foreign key (trace_id) + references traces; + +alter table jobs + add constraint fk_scenarios_job + foreign key (scenario_id) + references scenarios; + +-- Initial data +insert into traces (id, name, type) +values ('bitbrains-small', 'Bitbrains Small', 'vm'); diff --git a/opendc-web/opendc-web-server/src/main/resources/db/testing/V3.0.1__entities.sql b/opendc-web/opendc-web-server/src/main/resources/db/testing/V3.0.1__entities.sql new file mode 100644 index 00000000..1b702f4e --- /dev/null +++ b/opendc-web/opendc-web-server/src/main/resources/db/testing/V3.0.1__entities.sql @@ -0,0 +1,24 @@ +-- Test entities + +alter sequence hibernate_sequence restart with 500; + +insert into projects (id, created_at, name, portfolios_created, scenarios_created, topologies_created, updated_at) +values (1, current_timestamp(), 'Test Project', 1, 2, 1, current_timestamp()); +insert into project_authorizations (project_id, user_id, role) +values (1, 'owner', 'OWNER'), + (1, 'editor', 'EDITOR'), + (1, 'viewer', 'VIEWER'); + +insert into portfolios (id, name, number, targets, project_id) +values (1, 'Test Portfolio', 1, '{ "metrics": [] }' format json, 1); + +insert into topologies (id, created_at, name, number, rooms, updated_at, project_id) +values (1, current_timestamp(), 'Test Topology', 1, '[]' format json, current_timestamp(), 1); + +insert into scenarios (id, name, number, phenomena, scheduler_name, sampling_fraction, portfolio_id, project_id, topology_id, trace_id) +values (1, 'Test Scenario', 1, '{ "failures": false, "interference": false }' format json, 'mem', 1.0, 1, 1, 1, 'bitbrains-small'), + (2, 'Test Scenario', 2, '{ "failures": false, "interference": false }' format json, 'mem', 1.0, 1, 1, 1, 'bitbrains-small'); + +insert into jobs (id, created_by, created_at, repeats, updated_at, scenario_id) +values (1, 'owner', current_timestamp(), 1, current_timestamp(), 1), + (2, 'owner', current_timestamp(), 1, current_timestamp(), 2); -- cgit v1.2.3