mirror of
https://github.com/xfarrow/blink
synced 2025-02-17 08:10:40 +01:00
118 lines
4.8 KiB
SQL
118 lines
4.8 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 ('WEEKLY', 'YEARLY');
|
|
|
|
-- 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,
|
|
description TEXT,
|
|
is_hiring BOOLEAN
|
|
);
|
|
|
|
-- 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_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
|
|
);
|