**Schema de base pour l'API REST de gestion de projets** ```sql -- Création de la base de données CREATE DATABASE projet_rest; -- Connexion à la base de données \c projet_rest -- Création de la table d'utilisateurs CREATE TABLE utilisateurs ( id SERIAL PRIMARY KEY, email VARCHAR(255) NOT NULL UNIQUE, mdp VARCHAR(255) NOT NULL, nom VARCHAR(255) NOT NULL, prenom VARCHAR(255) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); -- Création de la table de projets CREATE TABLE projets ( id SERIAL PRIMARY KEY, titre VARCHAR(255) NOT NULL, description TEXT, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); -- Création de la table de tâches CREATE TABLE taches ( id SERIAL PRIMARY KEY, titre VARCHAR(255) NOT NULL, description TEXT, projet_id INTEGER NOT NULL REFERENCES projets(id), created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); -- Création de la table de membres CREATE TABLE membres ( id SERIAL PRIMARY KEY, utilisateur_id INTEGER NOT NULL REFERENCES utilisateurs(id), projet_id INTEGER NOT NULL REFERENCES projets(id), created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, UNIQUE (utilisateur_id, projet_id) ); -- Création de l'index sur la table d'utilisateurs CREATE INDEX idx_users_email ON utilisateurs (email); -- Création de l'index sur la table de projets CREATE INDEX idx_projects_titre ON projets (titre); -- Création de l'index sur la table de tâches CREATE INDEX idx_tasks_projet_id ON taches (projet_id); -- Création de l'index sur la table de membres CREATE INDEX idx_membres_projet_id ON membres (projet_id); -- Insert des données de démo INSERT INTO utilisateurs (email, mdp, nom, prenom) VALUES ('john.doe@example.com', 'hashed_mdp', 'Doe', 'John'), ('jane.doe@example.com', 'hashed_mdp', 'Doe', 'Jane'), ('bob.smith@example.com', 'hashed_mdp', 'Smith', 'Bob'); INSERT INTO projets (titre, description) VALUES ('Projet 1', 'Projet 1'), ('Projet 2', 'Projet 2'), ('Projet 3', 'Projet 3'); INSERT INTO taches (titre, description, projet_id) VALUES ('Tâche 1', 'Tâche 1', 1), ('Tâche 2', 'Tâche 2', 2), ('Tâche 3', 'Tâche 3', 3); INSERT INTO membres (utilisateur_id, projet_id) VALUES (1, 1), (2, 2), (3, 3); ``` **API REST pour gestion de projets** ```php // Fichier de configuration $ayarlar = [ 'dbname' => 'projet_rest', 'username' => 'utilisateur', 'password' => 'mdp', 'host' => 'localhost', 'port' => 5432, ]; // Fichier de connexion à la base de données $dsn = "pgsql:host=$ayarlar[host];dbname=$ayarlar[dbname]"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new PDO($dsn, $ayarlar['username'], $ayarlar['password'], $options); // Fichier de modèle (Model) class Utilisateur { private $id; private $email; private $mdp; private $nom; private $prenom; public function __construct($id, $email, $mdp, $nom, $prenom) { $this->id = $id; $this->email = $email; $this->mdp = $mdp; $this->nom = $nom; $this->prenom = $prenom; } public function getId() { return $this->id; } public function getEmail() { return $this->email; } public function getMdp() { return $this->mdp; } public function getNom() { return $this->nom; } public function getPrenom() { return $this->prenom; } public function setDate($created_at, $updated_at) { $this->created_at = $created_at; $this->updated_at = $updated_at; } } class Projet { private $id; private $titre; private $description; public function __construct($id, $titre, $description) { $this->id = $id; $this->titre = $titre; $this->description = $description; } public function getId() { return $this->id; } public function getTitre() { return $this->titre; } public function getDescription() { return $this->description; } public function setDate($created_at, $updated_at) { $this->created_at = $created_at; $this->updated_at = $updated_at; } } class Tache { private $id; private $titre; private $description; private $projet_id; public function __construct($id, $titre, $description, $projet_id) { $this->id = $id; $this->titre = $titre; $this->description = $description; $this->projet_id = $projet_id; } public function getId() { return $this->id; } public function getTitre() { return $this->titre; } public function getDescription() { return $this->description; } public function getProjetId() { return $this->projet_id; } public function setDate($created_at, $updated_at) { $this->created_at = $created_at; $this->updated_at = $updated_at; } } class Membre { private $id; private $utilisateur_id; private $projet_id; public function __construct($id, $utilisateur_id, $projet_id) { $this->id = $id; $this->utilisateur_id = $utilisateur_id; $this