mirror of https://github.com/xfarrow/blink
152 lines
6.5 KiB
SQL
152 lines
6.5 KiB
SQL
CREATE TYPE Visibility AS ENUM ('NOBODY', 'THIS_INSTANCE', 'EVERYONE');
|
|
CREATE TYPE SalaryCurrency as ENUM ('EUR', 'USD', 'GBP');
|
|
CREATE TYPE RemotePosition as ENUM ('YES', 'NO', 'NOT_SPECIFIED', 'PARTIALLY');
|
|
CREATE TYPE ContractType as ENUM ('FULL-TIME','PART-TIME','INTERNSHIP','CONTRACT','FREELANCE','TEMPORARY','SEASONAL','APPRENTICESHIP','VOLUNTEER','ZERO-HOURS','FIXED-TERM','CASUAL','PROBATIONARY','SECONDMENT','JOB-SHARING');
|
|
CREATE TYPE ExperienceType as ENUM ('EDUCATION', 'WORK', 'VOLOUNTEER');
|
|
CREATE TYPE SalaryFrequency as ENUM ('HOURLY', 'WEEKLY', 'YEARLY');
|
|
CREATE TYPE InfoType AS ENUM ('EMAIL', 'PHONE', 'WEBSITE', 'GIT', 'MASTODON', 'YOUTUBE', 'FACEBOOK', 'INSTAGRAM', 'OTHER');
|
|
|
|
-- Table: Person
|
|
CREATE TABLE IF NOT EXISTS "Person" (
|
|
id SERIAL PRIMARY KEY,
|
|
email CHARACTER VARYING(128) NOT NULL UNIQUE,
|
|
password CHARACTER VARYING(128) NOT NULL,
|
|
display_name CHARACTER VARYING(128) NOT NULL,
|
|
date_of_birth date,
|
|
place_of_living CHARACTER VARYING(128),
|
|
about_me CHARACTER VARYING(4096),
|
|
qualification CHARACTER VARYING(64),
|
|
open_to_work BOOLEAN,
|
|
enabled BOOLEAN NOT NULL DEFAULT false,
|
|
visibility Visibility NOT NULL
|
|
);
|
|
|
|
-- Table: ActivationLink
|
|
CREATE TABLE IF NOT EXISTS "ActivationLink" (
|
|
identifier CHARACTER VARYING PRIMARY KEY,
|
|
person_id INTEGER NOT NULL,
|
|
CONSTRAINT "PersonActivationLinkFK" FOREIGN KEY (person_id) REFERENCES "Person" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
|
|
);
|
|
|
|
-- Table: Organization
|
|
CREATE TABLE IF NOT EXISTS "Organization" (
|
|
id SERIAL PRIMARY KEY,
|
|
name CHARACTER VARYING(128) NOT NULL,
|
|
location CHARACTER VARYING(256),
|
|
description CHARACTER VARYING(4096)
|
|
);
|
|
|
|
-- Table: OrganizationAdministrator
|
|
CREATE TABLE IF NOT EXISTS "OrganizationAdministrator" (
|
|
id_person INTEGER NOT NULL,
|
|
id_organization INTEGER NOT NULL,
|
|
CONSTRAINT "OrganizationAdministrator_pkey" PRIMARY KEY (id_organization, id_person),
|
|
CONSTRAINT "OrganizationAdministratorOrganizationId" FOREIGN KEY (id_organization) REFERENCES "Organization" (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE NOT VALID,
|
|
CONSTRAINT "OrganizationAdministratorUserId" FOREIGN KEY (id_person) REFERENCES "Person" (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE
|
|
);
|
|
|
|
-- Table: Tag
|
|
CREATE TABLE IF NOT EXISTS "Tag" (
|
|
id SERIAL PRIMARY KEY,
|
|
tag CHARACTER VARYING(256) NOT NULL
|
|
);
|
|
|
|
-- Table: JobOffer
|
|
CREATE TABLE IF NOT EXISTS "JobOffer" (
|
|
id SERIAL PRIMARY KEY,
|
|
organization_id INTEGER,
|
|
title CHARACTER VARYING(2048) NOT NULL,
|
|
description CHARACTER VARYING(4096),
|
|
salary int4range,
|
|
salary_frequency SalaryFrequency,
|
|
salary_currency SalaryCurrency,
|
|
location CHARACTER VARYING(256),
|
|
remote RemotePosition NOT NULL,
|
|
contract_type ContractType,
|
|
CONSTRAINT "OrganizationFK" FOREIGN KEY (organization_id) REFERENCES "Organization" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE NOT VALID
|
|
);
|
|
|
|
-- Table: JobOfferTag
|
|
-- This table allows to create a N-to-N map between Tag and JobOffer
|
|
CREATE TABLE IF NOT EXISTS "JobOfferTag" (
|
|
id SERIAL PRIMARY KEY,
|
|
job_offer_id INTEGER NOT NULL,
|
|
tag_id INTEGER NOT NULL,
|
|
CONSTRAINT "JobOfferFk" FOREIGN KEY (job_offer_id) REFERENCES "JobOffer" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE,
|
|
CONSTRAINT "TagFk" FOREIGN KEY (tag_id) REFERENCES "Tag" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
|
|
);
|
|
|
|
-- Table: Applicant
|
|
CREATE TABLE IF NOT EXISTS "Applicant" (
|
|
id SERIAL PRIMARY KEY,
|
|
person_id INTEGER NOT NULL,
|
|
job_offer_id INTEGER NOT NULL,
|
|
CONSTRAINT "PersonFk" FOREIGN KEY (person_id) REFERENCES "Person" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE,
|
|
CONSTRAINT "JobOfferFk" FOREIGN KEY (job_offer_id) REFERENCES "JobOffer" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
|
|
);
|
|
|
|
-- Table: Skills
|
|
CREATE TABLE IF NOT EXISTS "Skill" (
|
|
id SERIAL PRIMARY KEY,
|
|
person_id INTEGER NOT NULL,
|
|
tag_id INTEGER NOT NULL,
|
|
CONSTRAINT "PersonFk" FOREIGN KEY (person_id) REFERENCES "Person" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE,
|
|
CONSTRAINT "TagFk" FOREIGN KEY (tag_id) REFERENCES "Tag" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
|
|
);
|
|
|
|
-- Table: RequestResetPassword
|
|
CREATE TABLE IF NOT EXISTS "RequestResetPassword" (
|
|
id SERIAL,
|
|
email CHARACTER VARYING(128) NOT NULL,
|
|
secret CHARACTER VARYING NOT NULL,
|
|
time_of_request TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now(),
|
|
CONSTRAINT "RequestResetPassword_pkey" PRIMARY KEY (id)
|
|
);
|
|
|
|
-- Table: Experience
|
|
CREATE TABLE IF NOT EXISTS "Experience" (
|
|
id SERIAL PRIMARY KEY,
|
|
title CHARACTER VARYING(128) NOT NULL,
|
|
description TEXT NOT NULL,
|
|
organization CHARACTER VARYING(128) NOT NULL,
|
|
organization_id INTEGER,
|
|
date daterange NOT NULL,
|
|
person_id INTEGER NOT NULL,
|
|
type ExperienceType NOT NULL,
|
|
CONSTRAINT "OrganizationFk" FOREIGN KEY (organization_id) REFERENCES "Organization" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE SET NULL,
|
|
CONSTRAINT "PersonFk" FOREIGN KEY (person_id) REFERENCES "Person" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
|
|
);
|
|
|
|
-- Table: Message
|
|
CREATE TABLE IF NOT EXISTS "Message" (
|
|
id SERIAL PRIMARY KEY,
|
|
sender_id INTEGER NOT NULL,
|
|
sender_organization_id INTEGER NOT NULL,
|
|
receiver_id INTEGER,
|
|
receiver_organization_id INTEGER,
|
|
content CHARACTER VARYING(4096) NOT NULL,
|
|
timestamp TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
CONSTRAINT "SenderFK" FOREIGN KEY (sender_id) REFERENCES "Person" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE,
|
|
CONSTRAINT "ReceiverFK" FOREIGN KEY (receiver_id) REFERENCES "Person" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE,
|
|
CONSTRAINT "OrganizationSender" FOREIGN KEY (sender_organization_id) REFERENCES "Organization" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE,
|
|
CONSTRAINT "OrganizationReceiver" FOREIGN KEY (receiver_organization_id) REFERENCES "Organization" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
|
|
);
|
|
|
|
-- Table: PersonContactInfo
|
|
CREATE TABLE IF NOT EXISTS "PersonContactInfo" (
|
|
id SERIAL PRIMARY KEY,
|
|
person_id INTEGER NOT NULL,
|
|
info CHARACTER VARYING(128) NOT NULL,
|
|
info_type InfoType NOT NULL,
|
|
CONSTRAINT "PersonFK" FOREIGN KEY (person_id) REFERENCES "Person" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
|
|
);
|
|
|
|
-- Table: OrganizationContactInfo
|
|
CREATE TABLE IF NOT EXISTS "OrganizationContactInfo" (
|
|
id SERIAL PRIMARY KEY,
|
|
organization_id INTEGER NOT NULL,
|
|
info CHARACTER VARYING(128) NOT NULL,
|
|
info_type InfoType NOT NULL,
|
|
CONSTRAINT "OrganizationFK" FOREIGN KEY (organization_id) REFERENCES "Organization" (id) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
|
|
)
|