diff --git a/README.md b/README.md index cf7d1c8..699fed9 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,9 @@ Os status disponíveis são `ABERTA`, `EM_ANDAMENTO`, `CONCLUIDA` e } ``` +Cada ordem também informa `criadaEm` e `atualizadaEm` em UTC. Esses campos +são preenchidos automaticamente e não precisam ser enviados nas requisições. + ## Respostas de erro Erros de validação retornam `400 Bad Request` no formato Problem Details, diff --git a/src/main/java/com/exemplo/ordem_servico/model/OrdemServico.java b/src/main/java/com/exemplo/ordem_servico/model/OrdemServico.java index 1d89cd5..c787352 100644 --- a/src/main/java/com/exemplo/ordem_servico/model/OrdemServico.java +++ b/src/main/java/com/exemplo/ordem_servico/model/OrdemServico.java @@ -2,6 +2,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.Instant; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -14,6 +15,8 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.PrePersist; +import jakarta.persistence.PreUpdate; import jakarta.persistence.Table; @Entity @@ -46,6 +49,11 @@ public class OrdemServico { @Enumerated(EnumType.STRING) @Column(length = 20) private StatusOrdemServico status = StatusOrdemServico.ABERTA; + + @Column(updatable = false) + private Instant criadaEm; + + private Instant atualizadaEm; public Long getId() { @@ -99,6 +107,26 @@ public void setStatus(StatusOrdemServico status) { this.status = status; } + public Instant getCriadaEm() { + return criadaEm; + } + + public Instant getAtualizadaEm() { + return atualizadaEm; + } + + @PrePersist + void registrarCriacao() { + Instant agora = Instant.now(); + criadaEm = agora; + atualizadaEm = agora; + } + + @PreUpdate + void registrarAtualizacao() { + atualizadaEm = Instant.now(); + } + public BigDecimal getValorMaoDeObra() { return horasServico.multiply(VALOR_HORA) .setScale(ESCALA_MONETARIA, RoundingMode.HALF_UP); diff --git a/src/test/java/com/exemplo/ordem_servico/model/OrdemServicoTests.java b/src/test/java/com/exemplo/ordem_servico/model/OrdemServicoTests.java index 50e1a48..b90aea9 100644 --- a/src/test/java/com/exemplo/ordem_servico/model/OrdemServicoTests.java +++ b/src/test/java/com/exemplo/ordem_servico/model/OrdemServicoTests.java @@ -1,8 +1,10 @@ package com.exemplo.ordem_servico.model; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import java.math.BigDecimal; +import java.time.Instant; import org.junit.jupiter.api.Test; @@ -15,6 +17,21 @@ void deveIniciarOrdemComStatusAberta() { assertEquals(StatusOrdemServico.ABERTA, ordem.getStatus()); } + @Test + void deveRegistrarDatasDeCriacaoEAtualizacao() { + OrdemServico ordem = new OrdemServico(); + + ordem.registrarCriacao(); + + assertEquals(ordem.getCriadaEm(), ordem.getAtualizadaEm()); + + Instant criadaEm = ordem.getCriadaEm(); + ordem.registrarAtualizacao(); + + assertEquals(criadaEm, ordem.getCriadaEm()); + assertFalse(ordem.getAtualizadaEm().isBefore(criadaEm)); + } + @Test void deveCalcularValoresMonetariosComPrecisaoDecimal() { OrdemServico ordem = new OrdemServico();