Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
28 changes: 28 additions & 0 deletions src/main/java/com/exemplo/ordem_servico/model/OrdemServico.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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();
Expand Down
Loading