Skip to content

New SQL code création

Ichiky_Otsu edited this page May 5, 2024 · 11 revisions

-- Table des entreprises
CREATE TABLE enterprises (
    id SERIAL PRIMARY KEY,
    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 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,
    first_name TEXT DEFAULT '',
    last_name TEXT DEFAULT '',
    role VARCHAR(20) NOT NULL CHECK (role IN ('user', 'enterprise', 'admin')),
    enterprise_id INTEGER REFERENCES enterprises(id),
    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,
    status VARCHAR(20) NOT NULL CHECK (status IN ('open', 'closed', 'expired')),
    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
);

-- Table des informations utilisateur
CREATE TABLE user_info (
    id SERIAL PRIMARY KEY,
    user_id INTEGER NOT NULL UNIQUE REFERENCES users(id),
    postal_code TEXT,
    city TEXT,
    address TEXT
);

-- Trigger pour insérer automatiquement une entrée dans la table user_info lors de la création d'un utilisateur
CREATE OR REPLACE FUNCTION insert_user_info() RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO user_info (user_id) VALUES (NEW.id);
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trigger_insert_user_info
AFTER INSERT ON users
FOR EACH ROW
EXECUTE FUNCTION insert_user_info();

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

-- Données pour la table users
INSERT INTO users (username, email, password_hash, first_name, last_name, role, enterprise_id) VALUES
    ('john_doe', '[email protected]', '$2a$10$xKLBw9gqGMo4R.Rt/DNJCOU5Z5O5O5O5O5O5O5O5O5', 'John', 'Doe', 'user', NULL),
    ('jane_smith', '[email protected]', '$2a$10$4m8I6eYJY1q1q1q1q1q1q1tIeNwM6Q6Q6Q6Q6Q6Q6Q6', 'Jane', 'Smith', 'user', NULL),
    ('acme_inc', '[email protected]', '$2a$10$SgzfuE91DJgGgGgGgGgGgGI7EIj50505050505050505', '', '', 'enterprise', 1),
    ('admin', '[email protected]', '$2b$10$5UJD/Dqj.rTNeFbzwqzwu.7brP5p3VVo8W7Zk11JgIRUFOCj1WbKa', 'Admin', 'User', 'admin', NULL);

-- Données pour la table adverts
INSERT INTO adverts (enterprise_id, title, description, location, start_date, end_date, salary, status) VALUES
    (1, 'Développeur Web', 'Nous recherchons un développeur web expérimenté', 'Paris', '2023-07-01', '2023-12-31', 3500.00, 'open'),
    (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, 'open');

-- 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');