SQL création de la DB - IchikyOtsu/Dev-Web-2024-InterimApp GitHub Wiki

-- Table des utilisateurs
CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  username VARCHAR(255) UNIQUE NOT NULL,
  email VARCHAR(255) UNIQUE NOT NULL,
  password_hash VARCHAR(255) NOT NULL,
  role VARCHAR(20) NOT NULL CHECK (role IN ('user', 'enterprise', 'admin')),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Table des entreprises
CREATE TABLE enterprises (
  id SERIAL PRIMARY KEY,
  user_id INTEGER UNIQUE NOT NULL REFERENCES users(id),
  name VARCHAR(255) NOT NULL,
  description TEXT,
  logo_url VARCHAR(255),
  website_url VARCHAR(255),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Table des annonces
CREATE TABLE adverts (
  id SERIAL PRIMARY KEY,
  enterprise_id INTEGER NOT NULL REFERENCES enterprises(id),
  title VARCHAR(255) NOT NULL,
  description TEXT NOT NULL,
  location VARCHAR(255) NOT NULL,
  start_date DATE NOT NULL,
  end_date DATE NOT NULL,
  salary DECIMAL(10, 2) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Table des candidatures
CREATE TABLE applications (
  id SERIAL PRIMARY KEY,
  user_id INTEGER NOT NULL REFERENCES users(id),
  advert_id INTEGER NOT NULL REFERENCES adverts(id),
  status VARCHAR(20) NOT NULL CHECK (status IN ('pending', 'accepted', 'rejected')),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Table des messages du chat
CREATE TABLE chat_messages (
  id SERIAL PRIMARY KEY,
  sender_id INTEGER NOT NULL REFERENCES users(id),
  recipient_id INTEGER NOT NULL REFERENCES users(id),
  content TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Table des plannings
CREATE TABLE schedules (
  id SERIAL PRIMARY KEY,
  user_id INTEGER NOT NULL REFERENCES users(id),
  advert_id INTEGER NOT NULL REFERENCES adverts(id),
  start_time TIMESTAMP NOT NULL,
  end_time TIMESTAMP NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Table des notifications
CREATE TABLE notifications (
  id SERIAL PRIMARY KEY,
  user_id INTEGER NOT NULL REFERENCES users(id),
  content TEXT NOT NULL,
  is_read BOOLEAN DEFAULT FALSE,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE user_info (
    id SERIAL PRIMARY KEY,
    user_id INTEGER NOT NULL REFERENCES users(id),
    first_name TEXT,
    last_name TEXT,
    email TEXT,
    postal_code TEXT,
    city TEXT,
    address TEXT
);

-- Données pour la table users
INSERT INTO users (username, email, password_hash, role) VALUES
  ('john_doe', '[email protected]', '$2a$10$xKLBw9gqGMo4R.Rt/DNJCOU5Z5O5O5O5O5O5O5O5O5O5', 'user'),
  ('jane_smith', '[email protected]', '$2a$10$4m8I6eYJY1q1q1q1q1q1q1tIeNwM6Q6Q6Q6Q6Q6Q6Q6', 'user'),
  ('acme_inc', '[email protected]', '$2a$10$SgzfuE91DJgGgGgGgGgGgGI7EIj50505050505050505', 'enterprise'),
  ('admin', '[email protected]', '$2a$10$jzjzjzjzjzjzjzjzjzjzjzZFZpVp1p1p1p1p1p1p1p1', 'admin');

-- Données pour la table enterprises
INSERT INTO enterprises (user_id, name, description, logo_url, website_url) VALUES
  (3, 'Acme Inc.', 'Lorem ipsum dolor sit amet', 'https://example.com/acme-logo.png', 'https://acme.com');

-- Données pour la table adverts
INSERT INTO adverts (enterprise_id, title, description, location, start_date, end_date, salary) VALUES
  (1, 'Développeur Web', 'Nous recherchons un développeur web expérimenté', 'Paris', '2023-07-01', '2023-12-31', 3500.00),
  (1, 'Designer UX/UI', 'Rejoignez notre équipe de design pour créer des expériences utilisateur exceptionnelles', 'Lyon', '2023-08-15', '2024-02-15', 4000.00);

-- Données pour la table applications
INSERT INTO applications (user_id, advert_id, status) VALUES
  (1, 1, 'pending'),
  (2, 1, 'accepted'),
  (1, 2, 'rejected');

-- Données pour la table chat_messages
INSERT INTO chat_messages (sender_id, recipient_id, content) VALUES
  (1, 3, 'Bonjour, je suis intéressé par le poste de développeur web'),
  (3, 1, 'Merci pour votre intérêt, pouvez-vous nous en dire plus sur votre expérience ?'),
  (2, 3, 'J''ai postulé pour le poste de développeur web, quand puis-je espérer une réponse ?');

-- Données pour la table schedules
INSERT INTO schedules (user_id, advert_id, start_time, end_time) VALUES
  (2, 1, '2023-07-01 09:00:00', '2023-07-01 17:00:00'),
  (2, 1, '2023-07-02 09:00:00', '2023-07-02 17:00:00'),
  (2, 1, '2023-07-03 09:00:00', '2023-07-03 17:00:00');

-- Données pour la table notifications
INSERT INTO notifications (user_id, content) VALUES
  (1, 'Votre candidature pour le poste de développeur web a été reçue'),
  (2, 'Félicitations, votre candidature pour le poste de développeur web a été acceptée !'),
  (1, 'Malheureusement, votre candidature pour le poste de designer UX/UI a été rejetée');

ALTER TABLE users
ADD COLUMN enterprise_id INTEGER REFERENCES enterprises(id);

UPDATE users
SET enterprise_id = CASE
    WHEN id = 3 THEN 1
    ELSE NULL
END;