Compare commits

...

5 Commits

Author SHA1 Message Date
Sylvain 5327e66976 doc: Création du Readme 2026-09-23 13:17:44 +02:00
Sylvain 5c830c86ba fix: Autorisation des cross origin 2026-09-23 12:44:57 +02:00
Sylvain 561978e93f feat: Crud des projets 2026-09-07 22:24:07 +02:00
Sylvain 1c81385baf feat: CRUD des groupes de tâches 2026-09-07 19:44:37 +02:00
Sylvain 29a127e2f6 doc: documentation 2026-09-07 18:51:53 +02:00
17 changed files with 496 additions and 25 deletions
+7
View File
@@ -0,0 +1,7 @@
# My API
Une API personnelle généraliste permettant d'interroger une BDD self-hosted. Elle sera utilisée à terme par plusieurs applications différentes, dont Do It Earlier, une application de calendrier ou un tracker de films/séries/... .
# Stack
API réalisée en Sprinboot 4.1.1 interrogeant une base de données PostgreSQL.
@@ -0,0 +1,65 @@
package myapi.api.Controller;
import java.util.List;
import myapi.api.Model.Project;
import myapi.api.Service.Interfaces.ProjectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* Classe servant de point d'entrée pour les objets {@link Project}
*/
@RestController
@RequestMapping("/project")
@CrossOrigin
public class ProjectController {
@Autowired
private ProjectService projectService;
/**
* Récupère tous les projets de la bdd
* @return Une liste de Project
*/
@GetMapping
public List<Project> getAllProjects() {
return projectService.getAllProjects();
}
/**
* Ajoute un projet à la bdd
* @param project Le projet à ajouter
* @return Le projet ajouté
*/
@PostMapping("/add")
public Project addProject(@RequestBody Project project) {
return projectService.addProject(project);
}
/**
* Modifie un projet de la bdd
* @param project Le projet que l'on veut modifier. Il faut que son id soit déjà présent
* @return Le projet créé
*/
@PutMapping("/update")
public Project updateProject(@RequestBody Project project) {
return projectService.updateProject(project);
}
/**
* Supprime un projet de la bdd à partir de son identifiant
* @param idProject L'identifiant du projet à supprimer
*/
@DeleteMapping("/delete")
public void deleteProject(@RequestParam("id") int idProject) {
projectService.deleteProject(idProject);
}
}
@@ -2,43 +2,65 @@ package myapi.api.Controller;
import java.util.List; import java.util.List;
import myapi.api.Model.Task; import myapi.api.Model.Task;
import myapi.api.Repository.TaskRepository; import myapi.api.Service.Interfaces.TaskService;
import myapi.api.Service.TaskService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
/**
* Classe servant de point d'entrée pour les objets Tâches
*/
@RestController @RestController
@RequestMapping("/task") @RequestMapping("/task")
@CrossOrigin
public class TaskController { public class TaskController {
@Autowired @Autowired
private TaskService taskService; private TaskService taskService;
/**
* Récupère toutes les tâches de la bdd
* @return Une liste de Task
*/
@GetMapping @GetMapping
public List<Task> getAllTasks() { public List<Task> getAllTasks() {
return taskService.getAllTasks(); return taskService.getAllTasks();
} }
/**
* Ajoute une nouvelle tâche à la bdd
* @param task L'objet tâche que l'on veut ajouter
* @return La tâche créée
*/
@PostMapping("/add") @PostMapping("/add")
public Task addTask(@RequestBody Task task) { public Task addTask(@RequestBody Task task) {
return taskService.addTask(task); return taskService.addTask(task);
} }
/**
* Modifie une tâche de la bdd
* @param task La tâche que l'on veut modifier. Il faut que son id soit déjà présent
* @return La tâche créée
*/
@PutMapping("/update") @PutMapping("/update")
public Task updateTask(@RequestBody Task task) { public Task updateTask(@RequestBody Task task) {
return taskService.updateTask(task); return taskService.updateTask(task);
} }
@DeleteMapping("/delete/{id}") /**
public void deleteTask(@PathVariable("id") int idTask) { * Supprime une tâche de la bdd
* @param idTask L'id de la tâche
*/
@DeleteMapping("/delete")
public void deleteTask(@RequestParam("id") int idTask) {
taskService.deleteTask(idTask); taskService.deleteTask(idTask);
} }
} }
@@ -0,0 +1,65 @@
package myapi.api.Controller;
import java.util.List;
import myapi.api.Model.TaskGroup;
import myapi.api.Service.Interfaces.TaskGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* Classe servant de point d'entrée pour les objets TaskGroup
*/
@RestController
@RequestMapping("/group")
@CrossOrigin
public class TaskGroupController {
@Autowired
private TaskGroupService taskGroupService;
/**
* Récupère tous les groupes de la bdd
* @return Une liste de {@link TaskGroup}
*/
@GetMapping
public List<TaskGroup> getAllGroups() {
return taskGroupService.getAllGroups();
}
/**
* Ajoute un nouveau groupe à la bdd
* @param group L'objet que l'on veut ajouter
* @return Le groupe ajouté
*/
@PostMapping("/add")
public TaskGroup addGroup(@RequestBody TaskGroup group) {
return taskGroupService.addGroup(group);
}
/**
* Modifie un groupe de la bdd
* @param group Le groupe que l'on veut modifier. Il faut que son id soit déjà présent
* @return Le groupe modifié
*/
@PutMapping("/update")
public TaskGroup updateGroup(@RequestBody TaskGroup group) {
return taskGroupService.updateGroup(group);
}
/**
* Supprime un groupe de la bdd
* @param idGroup L'identifiant du groupe
*/
@DeleteMapping("/delete")
public void deleteGroup(@RequestParam("id") int idGroup) {
taskGroupService.deleteGroup(idGroup);
}
}
@@ -1,7 +1,11 @@
package myapi.api.Model.Enums; package myapi.api.Model.Enums;
public enum Status{ /**
EnCours, * Enumération des différents status possibles pour une tâche
* Status
*/
public enum Status {
En_cours,
Termine, Termine,
EnRetard En_retard,
} }
@@ -0,0 +1,40 @@
package myapi.api.Model;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import org.hibernate.annotations.Audited.Table;
/**
* Classe mappée à la table project de la bdd
* Project
*/
@Entity
@Table(name = "project")
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id_project;
private String name_project;
/* --- GETTERS ET SETTERS --- */
public int getId_project() {
return id_project;
}
public void setId_project(int id_project) {
this.id_project = id_project;
}
public String getName_project() {
return name_project;
}
public void setName_project(String name_project) {
this.name_project = name_project;
}
}
+8 -4
View File
@@ -1,15 +1,18 @@
package myapi.api.Model; package myapi.api.Model;
import java.util.Date;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType; import jakarta.persistence.GenerationType;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import java.util.Date;
/**
* Classe mappée à la table task de la bdd
* Task
*/
@Entity @Entity
@Table(name="task") @Table(name = "task")
public class Task { public class Task {
@Id @Id
@@ -22,6 +25,7 @@ public class Task {
private Integer priority_task; private Integer priority_task;
private Integer id_group; private Integer id_group;
/* --- GETTERS ET SETTER --- */
public int getId_task() { public int getId_task() {
return id_task; return id_task;
@@ -71,7 +75,7 @@ public class Task {
this.id_group = id_group; this.id_group = id_group;
} }
public String toString(){ public String toString() {
return "id : " + this.id_group; return "id : " + this.id_group;
} }
} }
@@ -0,0 +1,49 @@
package myapi.api.Model;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
/**
* Classe mappée à la table task_group de la bdd
* TaskGroup
*/
@Entity
@Table(name = "task_group")
public class TaskGroup {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id_group;
private String name_group;
private Integer id_project;
/* --- GETTERS ET SETTERS --- */
public int getId_group() {
return id_group;
}
public void setId_group(int id_group) {
this.id_group = id_group;
}
public String getName_group() {
return name_group;
}
public void setName_group(String name_group) {
this.name_group = name_group;
}
public Integer getId_project() {
return id_project;
}
public void setId_project(Integer id_project) {
this.id_project = id_project;
}
}
@@ -0,0 +1,12 @@
package myapi.api.Repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import myapi.api.Model.Project;
/**
* Repository Jpa permettant la persistance
*/
@Repository
public interface ProjectRepository extends JpaRepository<Project, Integer> {}
@@ -0,0 +1,11 @@
package myapi.api.Repository;
import myapi.api.Model.TaskGroup;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* Repository Jpa permettant la persistance
*/
@Repository
public interface TaskGroupRepository extends JpaRepository<TaskGroup, Integer> {}
@@ -4,5 +4,8 @@ import myapi.api.Model.Task;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
/**
* Repository Jpa permettant la persistance
*/
@Repository @Repository
public interface TaskRepository extends JpaRepository<Task, Integer> {} public interface TaskRepository extends JpaRepository<Task, Integer> {}
@@ -0,0 +1,53 @@
package myapi.api.Service.Implementations;
import java.util.List;
import myapi.api.Model.Project;
import myapi.api.Repository.ProjectRepository;
import myapi.api.Service.Interfaces.ProjectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ProjectServiceImpl implements ProjectService {
@Autowired
private ProjectRepository projectRepository;
/** (non-Javadoc)
* @see myapi.api.Service.Interfaces.ProjectService#getAllProjects()
*/
@Override
public List<Project> getAllProjects() {
return projectRepository.findAll();
}
/** (non-Javadoc)
*
* @see myapi.api.Service.Interfaces.ProjectService#addProject(myapi.api.Model.Project)
*/
@Override
public Project addProject(Project project) {
return projectRepository.save(project);
}
/**(non-Javadoc)
*
* @see myapi.api.Service.Interfaces.ProjectService#updateProject(myapi.api.Model.Project)
*/
@Override
public Project updateProject(Project project) {
Project dbProject = projectRepository.findById(project.getId_project()).get();
dbProject.setId_project(project.getId_project());
dbProject.setName_project(project.getName_project());
return projectRepository.save(dbProject);
}
/**(non-Javadoc)
*
* @see myapi.api.Service.Interfaces.ProjectService#deleteProject(int)
*/
@Override
public void deleteProject(int idProject) {
projectRepository.deleteById(idProject);
}
}
@@ -0,0 +1,53 @@
package myapi.api.Service.Implementations;
import java.util.List;
import myapi.api.Model.TaskGroup;
import myapi.api.Repository.TaskGroupRepository;
import myapi.api.Service.Interfaces.TaskGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class TaskGroupServiceImpl implements TaskGroupService {
@Autowired
private TaskGroupRepository taskGroupRepository;
/** (non-Javadoc)
* @see myapi.api.Service.Interfaces.TaskGroupService#getAllGroups()
*/
@Override
public List<TaskGroup> getAllGroups() {
return taskGroupRepository.findAll();
}
/** (non-Javadoc)
* @see myapi.api.Service.Interfaces.TaskGroupService#addGroup(myapi.api.Model.TaskGroup)
*/
@Override
public TaskGroup addGroup(TaskGroup group) {
return taskGroupRepository.save(group);
}
/** (non-Javadoc)
*
* @see myapi.api.Service.Interfaces.TaskGroupService#updateGroup(myapi.api.Model.TaskGroup)
*/
@Override
public TaskGroup updateGroup(TaskGroup group) {
TaskGroup dbGroup = taskGroupRepository.findById(group.getId_group()).get();
dbGroup.setName_group(group.getName_group());
dbGroup.setId_group(group.getId_group());
dbGroup.setId_project(group.getId_project());
return taskGroupRepository.save(dbGroup);
}
/** (non-Javadoc)
*
* @see myapi.api.Service.Interfaces.TaskGroupService#deleteGroup(java.lang.Integer)
*/
@Override
public void deleteGroup(Integer idGroup) {
taskGroupRepository.deleteById(idGroup);
}
}
@@ -1,9 +1,9 @@
package myapi.api.Service; package myapi.api.Service.Implementations;
import java.util.List; import java.util.List;
import java.util.Objects;
import myapi.api.Model.Task; import myapi.api.Model.Task;
import myapi.api.Repository.TaskRepository; import myapi.api.Repository.TaskRepository;
import myapi.api.Service.Interfaces.TaskService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -13,16 +13,25 @@ public class TaskServiceImpl implements TaskService {
@Autowired @Autowired
private TaskRepository taskRepository; private TaskRepository taskRepository;
/** (non-Javadoc)
* @see myapi.api.Service.Interfaces.TaskService#getAllTasks()
*/
@Override @Override
public List<Task> getAllTasks() { public List<Task> getAllTasks() {
return taskRepository.findAll(); return taskRepository.findAll();
} }
/** (non-Javadoc)
* @see myapi.api.Service.Interfaces.TaskService#addTask(myapi.api.Model.Task)
*/
@Override @Override
public Task addTask(Task task) { public Task addTask(Task task) {
return taskRepository.save(task); return taskRepository.save(task);
} }
/** (non-Javadoc)
* @see myapi.api.Service.Interfaces.TaskService#updateTask(myapi.api.Model.Task)
*/
@Override @Override
public Task updateTask(Task task) { public Task updateTask(Task task) {
Task dbTask = taskRepository.findById(task.getId_task()).get(); Task dbTask = taskRepository.findById(task.getId_task()).get();
@@ -35,8 +44,11 @@ public class TaskServiceImpl implements TaskService {
return taskRepository.save(dbTask); return taskRepository.save(dbTask);
} }
/** (non-Javadoc)
* @see myapi.api.Service.Interfaces.TaskService#deleteTask(int)
*/
@Override @Override
public void deleteTask(int taskId) { public void deleteTask(int idTask) {
taskRepository.deleteById(taskId); taskRepository.deleteById(idTask);
} }
} }
@@ -0,0 +1,36 @@
package myapi.api.Service.Interfaces;
import java.util.List;
import myapi.api.Model.Project;
/**
* Interface pour les services de project
* ProjectService
*/
public interface ProjectService {
/**
* Récupère tous les projets de la database
* @return Une liste de projets
*/
List<Project> getAllProjects();
/**
* Ajoute un nouveau projet
* @param project Le nouveau projet
* @return Le projet nouvellement créé
*/
Project addProject(Project project);
/**
* Modifie un projet déjà existant
* @param project Le projet à modifier. Il faut que son id existe déjà dans la database
* @return Le projet modifié
*/
Project updateProject(Project project);
/**
* Supprime un projet à partir de son identifiant
* @param idProject L'identifiant du projet
*/
void deleteProject(int idProject);
}
@@ -0,0 +1,35 @@
package myapi.api.Service.Interfaces;
import java.util.List;
import myapi.api.Model.TaskGroup;
/**
* Interface pour les services de groupe de task
*/
public interface TaskGroupService {
/**
* Récupère tous les groupes de tâches de la database
* @return Une liste de groupe de tâches
*/
List<TaskGroup> getAllGroups();
/**
* Ajoute un nouveau groupe de tâche
* @param group Le nouveau groupe
* @return Le groupe créé
*/
TaskGroup addGroup(TaskGroup group);
/**
* Modifie un groupe déjà existant
* @param group Le groupe à modifier. Il faut que son id existe déjà dans la database
* @return Le groupe modifié
*/
TaskGroup updateGroup(TaskGroup group);
/**
* Supprime un groupe de tâche déjà existant à partir de son identifiant
* @param idGroup L'identifiant du groupe
*/
void deleteGroup(Integer idGroup);
}
@@ -1,11 +1,11 @@
package myapi.api.Service; package myapi.api.Service.Interfaces;
import java.util.List; import java.util.List;
import org.springframework.stereotype.Service;
import myapi.api.Model.Task; import myapi.api.Model.Task;
/**
* Interface pour les services de task
*/
public interface TaskService { public interface TaskService {
/** /**
* Récupère toutes les tâches de la database * Récupère toutes les tâches de la database
@@ -29,7 +29,7 @@ public interface TaskService {
/** /**
* Supprime une tâche existante à partir de son identifiant * Supprime une tâche existante à partir de son identifiant
* @param taskId L'id de la tâche à supprimer * @param idTask L'id de la tâche à supprimer
*/ */
void deleteTask(int taskId); void deleteTask(int idTask);
} }