From d746841b4c2ab02e21681e2cdcc836ea38165cdc Mon Sep 17 00:00:00 2001 From: Ulises Gascon Date: Fri, 6 Dec 2024 23:10:12 +0100 Subject: [PATCH 1/2] feat: add migration script to create `compliance_checks_alerts` table --- ...3522019418_add_compliance_checks_alerts.js | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/database/migrations/1733522019418_add_compliance_checks_alerts.js diff --git a/src/database/migrations/1733522019418_add_compliance_checks_alerts.js b/src/database/migrations/1733522019418_add_compliance_checks_alerts.js new file mode 100644 index 0000000..be6bb6c --- /dev/null +++ b/src/database/migrations/1733522019418_add_compliance_checks_alerts.js @@ -0,0 +1,49 @@ +const severityLevels = ['critical', 'high', 'medium', 'low', 'info'] + +exports.up = async (knex) => { + await knex.schema.createTable('compliance_checks_alerts', (table) => { + table.increments('id').primary() // Primary key + table.text('title').notNullable() + table.text('description').notNullable() + table.enum('severity', severityLevels).notNullable() + + // Foreign key to 'compliance_checks' table + table + .integer('compliance_check_id') + .unsigned() + .references('id') + .inTable('compliance_checks') + .onDelete('CASCADE') // Deletes repository if the organization is deleted + .onUpdate('CASCADE') // Updates repository if the organization ID is updated + .notNullable() + + // Foreign key to 'projects' table + table + .integer('project_id') + .unsigned() + .references('id') + .inTable('projects') + .onDelete('CASCADE') // Deletes repository if the organization is deleted + .onUpdate('CASCADE') // Updates repository if the organization ID is updated + .notNullable() + + // Timestamps + table.timestamp('created_at').defaultTo(knex.fn.now()).notNullable() + table.timestamp('updated_at').defaultTo(knex.fn.now()).notNullable() + }) + + // Add trigger to automatically update the 'updated_at' column + await knex.raw(` + CREATE TRIGGER set_updated_at_compliance_checks_alerts + BEFORE UPDATE ON compliance_checks_alerts + FOR EACH ROW + EXECUTE FUNCTION update_updated_at_column(); + `) +} + +exports.down = async (knex) => { + // Drop trigger + await knex.raw('DROP TRIGGER IF EXISTS set_updated_at_compliance_checks_alerts ON compliance_checks_alerts;') + // Drop table + await knex.schema.dropTableIfExists('compliance_checks_alerts') +} From 1cfc73f501b4232fc3e72772080e62957d4b91be Mon Sep 17 00:00:00 2001 From: Ulises Gascon Date: Fri, 6 Dec 2024 23:10:59 +0100 Subject: [PATCH 2/2] chore: update database schema --- src/database/schema/schema.sql | 75 ++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/src/database/schema/schema.sql b/src/database/schema/schema.sql index aaacf37..d48270f 100644 --- a/src/database/schema/schema.sql +++ b/src/database/schema/schema.sql @@ -71,6 +71,43 @@ CREATE TABLE public.compliance_checks ( ); +-- +-- Name: compliance_checks_alerts; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.compliance_checks_alerts ( + id integer NOT NULL, + title text NOT NULL, + description text NOT NULL, + severity text NOT NULL, + compliance_check_id integer NOT NULL, + project_id integer NOT NULL, + created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + CONSTRAINT compliance_checks_alerts_severity_check CHECK ((severity = ANY (ARRAY['critical'::text, 'high'::text, 'medium'::text, 'low'::text, 'info'::text]))) +); + + +-- +-- Name: compliance_checks_alerts_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.compliance_checks_alerts_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: compliance_checks_alerts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.compliance_checks_alerts_id_seq OWNED BY public.compliance_checks_alerts.id; + + -- -- Name: compliance_checks_id_seq; Type: SEQUENCE; Schema: public; Owner: - -- @@ -372,6 +409,13 @@ ALTER SEQUENCE public.projects_id_seq OWNED BY public.projects.id; ALTER TABLE ONLY public.compliance_checks ALTER COLUMN id SET DEFAULT nextval('public.compliance_checks_id_seq'::regclass); +-- +-- Name: compliance_checks_alerts id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.compliance_checks_alerts ALTER COLUMN id SET DEFAULT nextval('public.compliance_checks_alerts_id_seq'::regclass); + + -- -- Name: github_organizations id; Type: DEFAULT; Schema: public; Owner: - -- @@ -407,6 +451,14 @@ ALTER TABLE ONLY public.knex_migrations_lock ALTER COLUMN index SET DEFAULT next ALTER TABLE ONLY public.projects ALTER COLUMN id SET DEFAULT nextval('public.projects_id_seq'::regclass); +-- +-- Name: compliance_checks_alerts compliance_checks_alerts_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.compliance_checks_alerts + ADD CONSTRAINT compliance_checks_alerts_pkey PRIMARY KEY (id); + + -- -- Name: compliance_checks compliance_checks_code_name_unique; Type: CONSTRAINT; Schema: public; Owner: - -- @@ -502,6 +554,13 @@ ALTER TABLE ONLY public.projects CREATE TRIGGER set_updated_at_compliance_checks BEFORE UPDATE ON public.compliance_checks FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column(); +-- +-- Name: compliance_checks_alerts set_updated_at_compliance_checks_alerts; Type: TRIGGER; Schema: public; Owner: - +-- + +CREATE TRIGGER set_updated_at_compliance_checks_alerts BEFORE UPDATE ON public.compliance_checks_alerts FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column(); + + -- -- Name: github_organizations set_updated_at_github_organizations; Type: TRIGGER; Schema: public; Owner: - -- @@ -523,6 +582,22 @@ CREATE TRIGGER set_updated_at_github_repositories BEFORE UPDATE ON public.github CREATE TRIGGER set_updated_at_projects BEFORE UPDATE ON public.projects FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column(); +-- +-- Name: compliance_checks_alerts compliance_checks_alerts_compliance_check_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.compliance_checks_alerts + ADD CONSTRAINT compliance_checks_alerts_compliance_check_id_foreign FOREIGN KEY (compliance_check_id) REFERENCES public.compliance_checks(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: compliance_checks_alerts compliance_checks_alerts_project_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.compliance_checks_alerts + ADD CONSTRAINT compliance_checks_alerts_project_id_foreign FOREIGN KEY (project_id) REFERENCES public.projects(id) ON UPDATE CASCADE ON DELETE CASCADE; + + -- -- Name: github_organizations github_organizations_project_id_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - --