diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/CultureController.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/CultureController.java index 41d723f..03bc807 100644 --- a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/CultureController.java +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/CultureController.java @@ -3,11 +3,10 @@ import br.edu.utfpr.ProjetoIDRAPI.entity.crud.CrudController; import br.edu.utfpr.ProjetoIDRAPI.entity.culture.dto.CultureDto; import org.modelmapper.ModelMapper; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import br.edu.utfpr.ProjetoIDRAPI.entity.crud.CrudService; @@ -32,7 +31,7 @@ protected CrudService getService() { protected ModelMapper getModelMapper() { return this.modelMapper; } - + @GetMapping("/findName/{name}") public ResponseEntity findByName(@PathVariable String name){ Culture entity = cultureService.findByName(name); @@ -43,4 +42,5 @@ public ResponseEntity findByName(@PathVariable String name){ return ResponseEntity.noContent().build(); } } + } diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/CultureFilter.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/CultureFilter.java new file mode 100644 index 0000000..ec834f7 --- /dev/null +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/CultureFilter.java @@ -0,0 +1,12 @@ +package br.edu.utfpr.ProjetoIDRAPI.entity.culture; + +import br.edu.utfpr.ProjetoIDRAPI.enums.CultureType; +import lombok.Data; + + +@Data +public class CultureFilter { + private String cultureName; // filtro por nome + private CultureType cultureType; // filtro por tipo + +} diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/CultureService.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/CultureService.java index 6a64a96..0db6dbd 100644 --- a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/CultureService.java +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/CultureService.java @@ -2,7 +2,11 @@ import br.edu.utfpr.ProjetoIDRAPI.entity.crud.CrudService; import br.edu.utfpr.ProjetoIDRAPI.entity.culture.Culture; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; public interface CultureService extends CrudService { Culture findByName(String name); + Page search(CultureFilter filter, Pageable pageable); + } diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/dto/CultureDto.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/dto/CultureDto.java index 9b7a8d6..d5a8ccd 100644 --- a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/dto/CultureDto.java +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/dto/CultureDto.java @@ -2,6 +2,9 @@ import br.edu.utfpr.ProjetoIDRAPI.entity.culture.Culture; import br.edu.utfpr.ProjetoIDRAPI.enums.CultureType; +import jakarta.persistence.Column; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import lombok.Data; @Data @@ -18,6 +21,8 @@ public Culture toCulture() { return cult; } + @Column(name = "culture_type") + @Enumerated(EnumType.STRING) private CultureType cultureType; private float ms; diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/impl/CultureServiceImpl.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/impl/CultureServiceImpl.java index f701d1e..bc7c51e 100644 --- a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/impl/CultureServiceImpl.java +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/culture/impl/CultureServiceImpl.java @@ -2,8 +2,12 @@ import br.edu.utfpr.ProjetoIDRAPI.entity.crud.impl.CrudServiceImpl; import br.edu.utfpr.ProjetoIDRAPI.entity.culture.Culture; +import br.edu.utfpr.ProjetoIDRAPI.entity.culture.CultureFilter; import br.edu.utfpr.ProjetoIDRAPI.entity.culture.CultureRepository; import br.edu.utfpr.ProjetoIDRAPI.entity.culture.CultureService; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.domain.Specification; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.stereotype.Service; @@ -21,6 +25,25 @@ public Culture findByName(String name) { return cultureRepository.findByCultureName(name); } + @Override + public Page search(CultureFilter filter, Pageable pageable) { + Specification spec = Specification.where(null); + + if (filter.getCultureName() != null && !filter.getCultureName().isEmpty()) { + spec = spec.and((root, query, cb) -> + cb.like(cb.lower(root.get("cultureName")), "%" + filter.getCultureName().toLowerCase() + "%") + ); + } + + if (filter.getCultureType() != null) { + spec = spec.and((root, query, cb) -> + cb.equal(root.get("cultureType"), filter.getCultureType()) + ); + } + + return cultureRepository.findAll(spec, pageable); + } + @Override protected JpaRepository getRepository() { return this.cultureRepository; diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibility.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibility.java index 19249f0..fbc6fe6 100644 --- a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibility.java +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibility.java @@ -1,7 +1,7 @@ package br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility; -import java.math.BigInteger; import java.time.LocalDate; +import java.math.BigDecimal; import br.edu.utfpr.ProjetoIDRAPI.entity.property.Property; import jakarta.persistence.*; @@ -18,32 +18,32 @@ @AllArgsConstructor public class ForageDisponibility { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - - private LocalDate date; - - private String forage; - - private Float entry; - - private Float residue; - - private Float kg; - - private Float picketArea; - - private Float efficiency; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + private LocalDate date; + + private String forage; + private Double averageCost; + private Long usefulLife; + private String growthCycle; + private String observation; + private String ownershipType; + private Double entry; + private Double residue; + private Double kg; + private Double picketArea; + private Double efficiency; @Column(precision = 20, scale = 0) - private java.math.BigDecimal numCows; + private BigDecimal numCows; - private Float kgCows; + private Double kgCows; - @NotNull - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "property_id") - private Property property; + @NotNull + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "property_id") + private Property property; -} +} \ No newline at end of file diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibilityController.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibilityController.java index 9ac765f..e0c99a4 100644 --- a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibilityController.java +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibilityController.java @@ -2,13 +2,16 @@ import br.edu.utfpr.ProjetoIDRAPI.entity.crud.CrudController; import br.edu.utfpr.ProjetoIDRAPI.entity.crud.CrudService; +import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.dto.ForageCreateDto; import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.dto.ForageDisponibilityDto; +import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.dto.ForageUpdateDto; +import jakarta.validation.Valid; import org.modelmapper.ModelMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -17,6 +20,8 @@ public class ForageDisponibilityController extends CrudController { + private static final Logger log = LoggerFactory.getLogger(ForageDisponibilityController.class); + private final ForageDisponibilityService forageService; private final ModelMapper modelMapper; @@ -36,16 +41,45 @@ protected ModelMapper getModelMapper() { return this.modelMapper; } - /** - * Endpoint para buscar todas as ForageDisponibility de uma propriedade - * @param propertyId ID da propriedade - * @return Lista de ForageDisponibilityDto compatível com o frontend - */ + @Override + @RequestMapping(method = RequestMethod.POST, value = "/_ignored_") + @Deprecated + public ResponseEntity create(ForageDisponibilityDto dto) { + throw new UnsupportedOperationException("O endpoint de criação de foragem usa o método customizado 'createForageForProperty'."); + } + @GetMapping public ResponseEntity> getByProperty(@PathVariable Long propertyId) { List dtos = forageService.findByPropertyId(propertyId); return ResponseEntity.ok(dtos); } + @PostMapping // Endpoint: POST /properties/{propertyId}/forages + public ResponseEntity createForageForProperty( + @PathVariable Long propertyId, + @RequestBody @Valid ForageCreateDto createDto) { + try { + ForageDisponibility createdForage = forageService.createForage(propertyId, createDto); + ForageDisponibilityDto responseDto = modelMapper.map(createdForage, ForageDisponibilityDto.class); + return new ResponseEntity<>(responseDto, HttpStatus.CREATED); + } catch (Exception e) { + log.error("Erro na criação da Foragem: {}", e.getMessage(), e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); + } + } + + @PatchMapping("/{forageId}") + public ResponseEntity updateForage( + @PathVariable Long propertyId, + @PathVariable Long forageId, + @RequestBody @Valid ForageUpdateDto updateDto) { + forageService.updateForage(propertyId, forageId, updateDto); + return ResponseEntity.noContent().build(); // status 204 + } + @GetMapping("/{id}/details") + public ResponseEntity findById(@PathVariable Long id) { + ForageDisponibilityDto forageDto = forageService.findDtoById(id); + return ResponseEntity.ok(forageDto); + } } diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibilityRepository.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibilityRepository.java index 3fb193c..171ab55 100644 --- a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibilityRepository.java +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibilityRepository.java @@ -1,14 +1,14 @@ package br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility; -import org.springframework.data.domain.Limit; -import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import org.springframework.data.jpa.repository.QueryHints; // Import necessário +import jakarta.persistence.QueryHint; // Import necessário -import java.util.Collection; import java.util.List; +import java.util.Optional; public interface ForageDisponibilityRepository extends JpaRepository, @@ -19,4 +19,9 @@ public interface ForageDisponibilityRepository extends List findByProperty_Id(Long propertyId); -} + Optional findByIdAndPropertyId(Long id, Long propertyId); + + @Query("SELECT f FROM ForageDisponibility f WHERE f.id = :id") + @QueryHints({@QueryHint(name = "org.hibernate.cacheable", value = "false")}) + Optional findByIdNoCache(@Param("id") Long id); +} \ No newline at end of file diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibilityService.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibilityService.java index d031616..6687ed4 100644 --- a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibilityService.java +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/ForageDisponibilityService.java @@ -1,12 +1,15 @@ package br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility; import br.edu.utfpr.ProjetoIDRAPI.entity.crud.CrudService; +import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.dto.ForageCreateDto; import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.dto.ForageDisponibilityDto; +import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.dto.ForageUpdateDto; import java.util.List; public interface ForageDisponibilityService extends CrudService { List findByPropertyId(Long propertyId); - - + ForageDisponibility createForage(Long propertyId, ForageCreateDto createDto); + void updateForage(Long propertyId, Long forageId, ForageUpdateDto updateDto); + ForageDisponibilityDto findDtoById(Long id); } diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/dto/ForageCreateDto.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/dto/ForageCreateDto.java new file mode 100644 index 0000000..39e5ac5 --- /dev/null +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/dto/ForageCreateDto.java @@ -0,0 +1,30 @@ +package br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.dto; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.time.LocalDate; + +@Data +public class ForageCreateDto { + @NotNull + private Double area; + @NotNull + private Double averageCost; + @NotNull + private Long usefulLife; + @NotNull + private LocalDate formation; + @NotNull + private String growthCycle; + private String observation; + @NotNull + private String ownershipType; + private String cultivation; + private Double entry; + private Double residue; + private Double kg; + private Double efficiency; + private Long numCows; + private Double kgCows; +} diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/dto/ForageDisponibilityDto.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/dto/ForageDisponibilityDto.java index 9cecd52..3766e25 100644 --- a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/dto/ForageDisponibilityDto.java +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/dto/ForageDisponibilityDto.java @@ -3,25 +3,29 @@ import br.edu.utfpr.ProjetoIDRAPI.entity.property.dto.PropertyDto; import lombok.Data; +import java.time.LocalDate; + @Data public class ForageDisponibilityDto { private Long id; private String cultivation; // antes era forage - private String area; // caso precise, converta de picketArea ou outra propriedade - private String averageCost; // mapear se tiver campo equivalente no backend - private String usefulLife; // mapear se tiver campo equivalente - private String formation; // antes era date (converta para string YYYY-MM-DD) - private String ownershipType; // antes era propriedade do tipo PropertyDto ou enum - private String growthCycle; // antes era propriedade do tipo enum - private String observation; // opcional, mapear se tiver campo - private Float entry; - private Float residue; - private Float kg; - private Float picketArea; - private Float efficiency; - private Long numCows; // converter BigInteger para Long - private Float kgCows; + private String area; + private String averageCost; + private String usefulLife; + private LocalDate formation; // antes era date + private String ownershipType; + private String growthCycle; + private String observation; // opcional + private Double entry; + private Double residue; + private Double kg; + private Double picketArea; + private Double efficiency; + private Long numCows; + private Double kgCows; + + private PropertyDto property; + - private PropertyDto property; // se quiser manter o PropertyDto, ok } diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/dto/ForageUpdateDto.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/dto/ForageUpdateDto.java new file mode 100644 index 0000000..2f63db7 --- /dev/null +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/dto/ForageUpdateDto.java @@ -0,0 +1,17 @@ +package br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.dto; + +import lombok.Data; +import jakarta.validation.constraints.NotNull; + +import java.time.LocalDate; + +@Data +public class ForageUpdateDto { + + private String cultivation; + private String area; + private String averageCost; + private String usefulLife; + private LocalDate formation; + private String growthCycle; +} diff --git a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/impl/ForageDisponibilityServiceImpl.java b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/impl/ForageDisponibilityServiceImpl.java index ca6458e..534fc02 100644 --- a/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/impl/ForageDisponibilityServiceImpl.java +++ b/src/main/java/br/edu/utfpr/ProjetoIDRAPI/entity/foragedisponibility/impl/ForageDisponibilityServiceImpl.java @@ -1,17 +1,22 @@ package br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.impl; import br.edu.utfpr.ProjetoIDRAPI.entity.crud.impl.CrudServiceImpl; -import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.ForageDisponibility; -import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.ForageDisponibilityRepository; -import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.ForageDisponibilityService; +import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.*; +import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.dto.ForageCreateDto; import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.dto.ForageDisponibilityDto; -import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.dto.ForageSearchRequest; +import br.edu.utfpr.ProjetoIDRAPI.entity.foragedisponibility.dto.ForageUpdateDto; +import br.edu.utfpr.ProjetoIDRAPI.entity.property.Property; +import br.edu.utfpr.ProjetoIDRAPI.entity.property.PropertyRepository; +import jakarta.persistence.EntityManager; import jakarta.transaction.Transactional; import org.modelmapper.ModelMapper; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; +import org.springframework.web.server.ResponseStatusException; +import org.springframework.http.HttpStatus; -import java.time.format.DateTimeFormatter; +import java.math.BigDecimal; +import java.time.LocalDate; import java.util.List; @Service @@ -20,11 +25,17 @@ public class ForageDisponibilityServiceImpl extends CrudServiceImpl getRepository() { return this.forageRepository; } + @Override + public ForageDisponibility createForage(Long propertyId, ForageCreateDto createDto) { + Property property = propertyRepository.findById(propertyId) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, + "Propriedade não encontrada com ID: " + propertyId)); + ForageDisponibility forage = modelMapper.map(createDto, ForageDisponibility.class); + forage.setForage(createDto.getCultivation()); + forage.setPicketArea(createDto.getArea()); + forage.setDate(createDto.getFormation()); + if (createDto.getNumCows() != null) { + forage.setNumCows(BigDecimal.valueOf(createDto.getNumCows())); + } + forage.setProperty(property); + return forageRepository.save(forage); + } @Override public List findByPropertyId(Long propertyId) { List list = forageRepository.findByPropertyIdWithProperty(propertyId); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + // REMOVIDO: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); return list.stream() .map(f -> { ForageDisponibilityDto dto = modelMapper.map(f, ForageDisponibilityDto.class); - - // Converter date para String if (f.getDate() != null) { - dto.setFormation(f.getDate().format(formatter)); + dto.setFormation(f.getDate()); } - // Converter BigInteger para Long if (f.getNumCows() != null) { dto.setNumCows(f.getNumCows().longValue()); } - // Mapear forage para cultivation dto.setCultivation(f.getForage()); - // Mapear picketArea para area, se fizer sentido dto.setArea(f.getPicketArea() != null ? f.getPicketArea().toString() : null); return dto; }) .toList(); } + @Override + public void updateForage(Long propertyId, Long forageId, ForageUpdateDto updateDto) { + ForageDisponibility forage = forageRepository.findByIdAndPropertyId(forageId, propertyId) + .orElseThrow(() -> new ResponseStatusException( + HttpStatus.NOT_FOUND, + "Forrageira não encontrada para esta propriedade" + )); + if (updateDto.getCultivation() != null) { + forage.setForage(updateDto.getCultivation()); + } + if (updateDto.getArea() != null) { + try { + forage.setPicketArea(Double.valueOf(updateDto.getArea())); + } catch (NumberFormatException e) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Área inválida"); + } + } + if (updateDto.getAverageCost() != null) { + try { + forage.setAverageCost(Double.valueOf(updateDto.getAverageCost())); + } catch (NumberFormatException e) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Custo médio inválido"); + } + } + if (updateDto.getUsefulLife() != null) { + try { + forage.setUsefulLife(Long.valueOf(updateDto.getUsefulLife())); + } catch (NumberFormatException e) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Vida útil inválida"); + } + } + if (updateDto.getFormation() != null) { + forage.setDate(updateDto.getFormation()); + } + if (updateDto.getGrowthCycle() != null) { + forage.setGrowthCycle(updateDto.getGrowthCycle()); + } + forageRepository.save(forage); + } - -} + @Override + public ForageDisponibilityDto findDtoById(Long id) { + ForageDisponibility forageEntity = forageRepository.findById(id) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Registro não encontrado com ID: " + id)); + this.entityManager.refresh(forageEntity); + ForageDisponibilityDto dto = modelMapper.map(forageEntity, ForageDisponibilityDto.class); + dto.setCultivation(forageEntity.getForage()); + if (forageEntity.getDate() != null) { + dto.setFormation(forageEntity.getDate()); + } + dto.setArea(forageEntity.getPicketArea() != null ? forageEntity.getPicketArea().toString() : null); + if (forageEntity.getNumCows() != null) { + dto.setNumCows(forageEntity.getNumCows().longValue()); + } + return dto; + } +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 458e279..8386075 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,25 +1,25 @@ server.port=${SERVER_PORT:8080} spring.config.name=Projeto_IDR_API -# Database Config +# Configurações do banco de dados spring.datasource.driver-class-name=org.postgresql.Driver -spring.datasource.url=${DATABASE_URL:jdbc:postgresql://localhost:5432/idr} -spring.datasource.username=${DATABASE_USERNAME:postgres} -spring.datasource.password=${DATABASE_PASSWORD:postgres} +spring.datasource.url=jdbc:postgresql://localhost:5432/IDR-API +spring.datasource.username=postgres +spring.datasource.password=1234 -# Hibernate and JPA config +# Configuração do Hibernate e JPA spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.show-sql=true -# Email config -spring.mail.host=${MAIL_SMTP:smtp.gmail.com} -spring.mail.port=${MAIL_PORT:587} -spring.mail.username=${MAIL_USERNAME:mail@gmail.com} -spring.mail.password=${MAIL_PASSWORD:P4ssword} +# Configurações de e-mail +spring.mail.host=smtp.gmail.com +spring.mail.port=587 +spring.mail.username=danieli.marialefchak@gmail.com +spring.mail.password=senhaGerada spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 -spring.datasource.hikari.idle-timeout=30000 \ No newline at end of file +spring.datasource.hikari.idle-timeout=30000