106 lines
3.3 KiB
Java
106 lines
3.3 KiB
Java
package enseirb.myinpulse.service.database;
|
|
|
|
import enseirb.myinpulse.model.Administrator;
|
|
import enseirb.myinpulse.model.Project;
|
|
import enseirb.myinpulse.repository.ProjectRepository;
|
|
|
|
import org.apache.logging.log4j.LogManager;
|
|
import org.apache.logging.log4j.Logger;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.web.server.ResponseStatusException;
|
|
|
|
import java.time.LocalDate;
|
|
import java.util.List;
|
|
import java.util.Optional;
|
|
|
|
@Service
|
|
public class ProjectService {
|
|
|
|
protected static final Logger logger = LogManager.getLogger();
|
|
|
|
private final ProjectRepository projectRepository;
|
|
|
|
@Autowired
|
|
ProjectService(ProjectRepository projectRepository) {
|
|
this.projectRepository = projectRepository;
|
|
}
|
|
|
|
public Iterable<Project> getAllProjects() {
|
|
return this.projectRepository.findAll();
|
|
}
|
|
|
|
public Project getProjectById(Long id) {
|
|
Optional<Project> project = this.projectRepository.findById(id);
|
|
if (project.isEmpty()) {
|
|
System.err.println("Project with id " + id + " not found");
|
|
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Ce projet n'existe pas");
|
|
}
|
|
return project.get();
|
|
}
|
|
|
|
public Iterable<Project> getProjectsByAdminId(Administrator administrator) {
|
|
return this.projectRepository.findByProjectAdministrator(administrator);
|
|
}
|
|
|
|
// TODO: validation
|
|
public Project addNewProject(Project project) {
|
|
return this.projectRepository.save(project);
|
|
}
|
|
|
|
public Project updateProject(
|
|
Long id,
|
|
String projectName,
|
|
byte[] logo,
|
|
LocalDate creationDate,
|
|
String projectStatus,
|
|
Administrator administrator) {
|
|
Optional<Project> project = this.projectRepository.findById(id);
|
|
|
|
if (project.isEmpty()) {
|
|
logger.error("Project with id {} not found.", id);
|
|
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Ce projet n'existe pas");
|
|
}
|
|
|
|
if (projectName != null) {
|
|
project.get().setProjectName(projectName);
|
|
}
|
|
|
|
if (logo != null) {
|
|
project.get().setLogo(logo);
|
|
}
|
|
|
|
if (creationDate != null) {
|
|
project.get().setCreationDate(creationDate);
|
|
}
|
|
|
|
if (projectStatus != null) {
|
|
if (!validateStatus(projectStatus)) {
|
|
System.err.println("updateProjectStatus: Invalid status " + projectStatus);
|
|
throw new ResponseStatusException(
|
|
HttpStatus.NOT_ACCEPTABLE, "Ce status n'est pas accepté");
|
|
}
|
|
project.get().setProjectStatus(projectStatus);
|
|
}
|
|
|
|
if (administrator != null) {
|
|
project.get().setAdministrator(administrator);
|
|
}
|
|
|
|
return this.projectRepository.save(project.get());
|
|
}
|
|
|
|
public Boolean validateStatus(String status) {
|
|
return List.of("PENDING", "ACTIVE", "ENDED").contains(status);
|
|
}
|
|
|
|
public Iterable<Project> getPendingProjects() {
|
|
return this.projectRepository.findByProjectStatus("PENDING");
|
|
}
|
|
|
|
public void deleteProjectById(Long id) {
|
|
this.projectRepository.deleteById(id);
|
|
}
|
|
}
|