diff --git a/back-end/src/main/java/com/example/demo/repository/PositionRepository.java b/back-end/src/main/java/com/example/demo/repository/PositionRepository.java index 6dcc8e7..60f77e8 100644 --- a/back-end/src/main/java/com/example/demo/repository/PositionRepository.java +++ b/back-end/src/main/java/com/example/demo/repository/PositionRepository.java @@ -2,7 +2,13 @@ import com.example.demo.entity.Position; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.Optional; public interface PositionRepository extends JpaRepository { + @Query(value = "SELECT p FROM Position p WHERE p.name = :name") + Optional findByName(@Param("name") String name); } diff --git a/back-end/src/main/java/com/example/demo/rest/handler/PositionHandler.java b/back-end/src/main/java/com/example/demo/rest/handler/PositionHandler.java index 5346404..eeb5e30 100644 --- a/back-end/src/main/java/com/example/demo/rest/handler/PositionHandler.java +++ b/back-end/src/main/java/com/example/demo/rest/handler/PositionHandler.java @@ -14,11 +14,13 @@ import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import java.net.URI; import java.util.List; +import java.util.Optional; @Component @AllArgsConstructor @@ -38,6 +40,10 @@ public ResponseEntity getAll(Integer page, Integer size) { } public ResponseEntity save(PositionDto dto) { + Optional existingName = positionService.getByName(dto.getName()); + if (existingName.isPresent()) { + return ResponseEntity.status(HttpStatus.CONFLICT).build(); + } Position position = positionMapper.toEntity(dto); positionService.save(position); PositionDto positionDto = positionMapper.toDto(position); @@ -47,6 +53,10 @@ public ResponseEntity save(PositionDto dto) { public ResponseEntity update(Integer id, PositionDto dto){ Position position = positionService.getById(id). orElseThrow(() -> new ResourceNotFoundException(Position.class.getSimpleName(), id)); + Optional existingName = positionService.getByName(dto.getName()); + if (existingName.isPresent() && existingName.get().getId().equals(id)) { + return ResponseEntity.status(HttpStatus.CONFLICT).build(); + } positionMapper.updateEntityFromDto(dto, position); positionService.update(position); return ResponseEntity.ok().build(); diff --git a/back-end/src/main/java/com/example/demo/service/PositionService.java b/back-end/src/main/java/com/example/demo/service/PositionService.java index 1e74f78..e53a4f8 100644 --- a/back-end/src/main/java/com/example/demo/service/PositionService.java +++ b/back-end/src/main/java/com/example/demo/service/PositionService.java @@ -39,4 +39,8 @@ public void delete(Position position) { public Optional getById(Integer id) { return positionRepository.findById(id); } + + public Optional getByName(String name) { + return positionRepository.findByName(name); + } } \ No newline at end of file