diff --git a/src/.DS_Store b/src/.DS_Store index 9d6a566..7b0d367 100644 Binary files a/src/.DS_Store and b/src/.DS_Store differ diff --git a/src/main/.DS_Store b/src/main/.DS_Store index d381763..55c1fcb 100644 Binary files a/src/main/.DS_Store and b/src/main/.DS_Store differ diff --git a/src/main/java/.DS_Store b/src/main/java/.DS_Store index 35a54bf..2b615a7 100644 Binary files a/src/main/java/.DS_Store and b/src/main/java/.DS_Store differ diff --git a/src/main/java/com/example/rest/Services/ProjectService.java b/src/main/java/com/example/rest/Services/ProjectService.java new file mode 100644 index 0000000..e8980ed --- /dev/null +++ b/src/main/java/com/example/rest/Services/ProjectService.java @@ -0,0 +1,18 @@ +package com.example.rest.Services; + +import com.example.rest.entities.Project; + +public interface ProjectService { + + // para crear projectos + Project createProject(Project project); + + // para editar projectos + Project editProject(Long id, Project project); + + // para eliminar projectos + void deleteProject(Long id); + + // para obtener projecto por id + Project getProjectById(Long id); +} diff --git a/src/main/java/com/example/rest/Services/ProjectServiceImpl.java b/src/main/java/com/example/rest/Services/ProjectServiceImpl.java new file mode 100644 index 0000000..1eb2287 --- /dev/null +++ b/src/main/java/com/example/rest/Services/ProjectServiceImpl.java @@ -0,0 +1,75 @@ +package com.example.rest.Services; + +import com.example.rest.entities.Project; +import com.example.rest.entities.projectStatus; +import com.example.rest.repositories.ProjectRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.Optional; + +@Service +public class ProjectServiceImpl implements ProjectService { + + private final ProjectRepository projectRepository; + + @Autowired + public ProjectServiceImpl(ProjectRepository projectRepository) { + this.projectRepository = projectRepository; + } + + @Override + public Project createProject(Project project) { + + // Chequear que el projecto no sea nulo y tenga un nombre + if (project == null || project.getName() == null || project.getName().isEmpty()) { + throw new IllegalArgumentException("Invalid project details"); + } + + // Aregarle los atributos por defecto + project.setStatus(projectStatus.ACTIVE); + project.setCreateDate(LocalDateTime.now()); + + // Guardar (?) Preguntar + return projectRepository.save(project); + } + + + @Override + public Project editProject(Long id, Project project) { + + Optional optionalProject = projectRepository.findById(id); + + if (optionalProject.isPresent()) { + + projectRepository.save(project); + + return project; + } else { + throw new RuntimeException("El proyecto no existe"); // Cambiar por exp personalizada + } + } + + @Override + public void deleteProject(Long id) { + Optional projectOptional = projectRepository.findById(id); + if(projectOptional.isPresent()){ + projectRepository.deleteById(id); + } else { + throw new RuntimeException("Proyecto con el id: " + id + " no existe."); + } + } + + @Override + public Project getProjectById(Long id) { + Optional projectOptional = projectRepository.findById(id); + if(projectOptional.isPresent()) { + return projectOptional.get(); + } else { + throw new RuntimeException("Proyecto con el id: " + id + " no existe."); + } + } + +} + diff --git a/src/main/java/com/example/rest/Services/ProjectoService.java b/src/main/java/com/example/rest/Services/ProjectoService.java deleted file mode 100644 index 52ced68..0000000 --- a/src/main/java/com/example/rest/Services/ProjectoService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.example.rest.Services; - -import org.springframework.stereotype.Service; - -@Service -public class ProjectoService { - - -} diff --git a/src/main/java/com/example/rest/controllers/ProjectController.java b/src/main/java/com/example/rest/controllers/ProjectController.java index 650e831..5857685 100644 --- a/src/main/java/com/example/rest/controllers/ProjectController.java +++ b/src/main/java/com/example/rest/controllers/ProjectController.java @@ -1,6 +1,6 @@ package com.example.rest.controllers; -import com.example.rest.Services.ProjectoService; +import com.example.rest.Services.ProjectServiceImpl; import com.example.rest.entities.Project; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -8,43 +8,49 @@ import java.net.URI; + @RestController @RequestMapping("/v1/projects") public class ProjectController { // Injeccion del servicio - private final ProjectoService projectoService; + private ProjectServiceImpl projectService ; @Autowired - public ProjectController(ProjectoService projectoService) { - this.projectoService = projectoService; + public ProjectController(ProjectServiceImpl projectService) { + this.projectService = projectService; } //POST -> /v1/projects crear un Project @PostMapping - public ResponseEntity crearProjecto(@RequestBody Project project) { - Project projectoCreado = projectoService.crearProjecto(project); + public ResponseEntity createProject(@RequestBody Project project) { + Project projectoCreado = projectService.createProject(project); return ResponseEntity.created(URI.create("/v1/projects" + projectoCreado.getId())) .body(projectoCreado); } // PUT -> /v1/projects/{id} editar un Project @PutMapping("/{id}") - public ResponseEntity editarProjecto(@PathVariable("id") Long id, + public ResponseEntity editProject(@PathVariable("id") Long id, @RequestBody Project project) { - + Project proyectoEditado = projectService.editProject(id, project); + return ResponseEntity.created(URI.create("/v1/projects" + proyectoEditado.getId())) + .body(proyectoEditado); } // DELETE -> /v1/projects/{id} eliminar un Project public ResponseEntity eliminarProjecto(@PathVariable("id") Long id) { - + projectService.deleteProject(id); + return ResponseEntity.noContent() + .build(); } - // GET -> /v1/projects/{id} obtener un Project por i + // GET -> /v1/projects/{id} obtener un Project por id @GetMapping("/{id}") public ResponseEntity obtenerProjecto(@PathVariable("id") Long id) { - + Project project = projectService.getProjectById(id); + return ResponseEntity.ok(project); } diff --git a/src/main/java/com/example/rest/entities/Project.java b/src/main/java/com/example/rest/entities/Project.java index 927e1cd..c72708c 100644 --- a/src/main/java/com/example/rest/entities/Project.java +++ b/src/main/java/com/example/rest/entities/Project.java @@ -3,9 +3,11 @@ import jakarta.persistence.*; import lombok.*; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; + @Setter @Getter @Builder @@ -22,6 +24,76 @@ public class Project { @Column(name = "nombre") private String name; + @Column(name = "descripcion") + private String description; + + @Column(name = "status") + private projectStatus status; + + @Column(name = "fecha_creacion") + private LocalDateTime createDate; + + @Column(name = "fecha_actualizacion") + private LocalDateTime lastUpdatedDate; + @OneToMany(mappedBy = "project", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) private List userProyectList = new ArrayList<>(); + + + public Project(Long id, String name, String description, LocalDateTime createDate, LocalDateTime lastUpdatedDate, List userProyectList) { + this.id = id; + this.name = name; + this.description = description; + this.createDate = createDate; + this.lastUpdatedDate = lastUpdatedDate; + this.userProyectList = userProyectList; + } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public LocalDateTime getCreateDate() { + return createDate; + } + + public LocalDateTime getLastUpdatedDate() { + return lastUpdatedDate; + } + + public List getUserProyectList() { + return userProyectList; + } + + public void setId(Long id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setCreateDate(LocalDateTime createDate) { + this.createDate = createDate; + } + + public void setLastUpdatedDate(LocalDateTime lastUpdatedDate) { + this.lastUpdatedDate = lastUpdatedDate; + } + + public void setUserProyectList(List userProyectList) { + this.userProyectList = userProyectList; + } } diff --git a/src/main/java/com/example/rest/entities/projectStatus.java b/src/main/java/com/example/rest/entities/projectStatus.java new file mode 100644 index 0000000..b344813 --- /dev/null +++ b/src/main/java/com/example/rest/entities/projectStatus.java @@ -0,0 +1,7 @@ +package com.example.rest.entities; + +public enum projectStatus { + ACTIVE, + INACTIVE, + PAUSED +} diff --git a/src/main/java/com/example/rest/repositories/ProjectRepository.java b/src/main/java/com/example/rest/repositories/ProjectRepository.java index 1321642..38d622b 100644 --- a/src/main/java/com/example/rest/repositories/ProjectRepository.java +++ b/src/main/java/com/example/rest/repositories/ProjectRepository.java @@ -1,4 +1,12 @@ package com.example.rest.repositories; -public interface ProjectRepository { +import com.example.rest.entities.Project; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ProjectRepository extends JpaRepository { + + Project findByName(String name); + Project findProjectById(Long id); }