Skip to content
Open
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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Este repositório contem uma implementação de referência para auxiliar na con
O candidato DEVE realizar o clone da branch master, criar uma nova branch, realizar a implementação e para a entrega fazer o push e solicitar um pull request para a master.
- Padrão de nome da branch: `ft-yyyyMMdd-nome-completo`

## Diagrama de atividades
## Diagrama de atividades

O diagrama abaixo representa as atividades na implementação de um recurso REST de operação POST para manipulação de determinada representação (entidade carro, por exemplo).

Expand Down
22 changes: 22 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,28 @@
<generateModelDocumentation>false</generateModelDocumentation>
</configuration>
</execution>
<execution>
<id>api-generate-sources-car</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/swagger/api-car.yaml</inputSpec>
<language>spring</language>
<addCompileSourceRoot>false</addCompileSourceRoot>
<generateSupportingFiles>false</generateSupportingFiles>
<configOptions>
<dateLibrary>java8</dateLibrary>
<serializableModel>true</serializableModel>
<interfaceOnly>true</interfaceOnly>
</configOptions>
<output>${project.build.directory}/generated/swagger</output>
<modelPackage>br.com.grupomult.api.car.models</modelPackage>
<apiPackage>br.com.grupomult.api.car.controllers</apiPackage>
<generateModelDocumentation>false</generateModelDocumentation>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package br.com.grupomult.api.car.controllers;

import br.com.grupomult.api.car.models.Car;
import br.com.grupomult.api.car.models.ResponseGetCars;
import br.com.grupomult.api.car.models.ResponseGetCarsById;
import br.com.grupomult.flows.car.*;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

import static br.com.grupomult.constants.ApiConstants.*;
import static br.com.grupomult.constants.MessageConstants.ADD_CARS_VALUE;
import static br.com.grupomult.constants.MessageConstants.UPDATE_CARS_VALUE;

/**
* Created by leandro on 24/12/18.
*/
@RestController
public class CarsApiController implements CarsApi {

@Autowired
private ListCarsValidate listCarsFlow;

@Autowired
private ListCarsByIdValidate listCarsByIdFlow;

@Autowired
private AddCarValidate addCarFlow;

@Autowired
private UpdateCarValidate updateCarFlow;

@Autowired
private RemoveCarValidate removeCarFlow;

@Override
public ResponseEntity<ResponseGetCars> getCars() {
return listCarsFlow.execute();
}

@Override
public ResponseEntity<ResponseGetCarsById> getCarById(
@PathVariable(value = GET_LIST_CARS_BY_ID_PATH_ID, required = true) Long id,
@PathVariable(value = GET_LIST_CARS_BY_ID_PATH_TYPE, required = true) Long type) {
return listCarsByIdFlow.execute(id, type);
}

@Override
public ResponseEntity<ResponseGetCarsById> addCar(@ApiParam(value = ADD_CARS_VALUE) @Valid @RequestBody Car car) {
return addCarFlow.execute(car);
}

@Override
public ResponseEntity<ResponseGetCarsById> updateCar(@ApiParam(value = UPDATE_CARS_VALUE) @Valid @RequestBody Car car) {
return updateCarFlow.execute(car);
}

@Override
public ResponseEntity<Void> removeCar(
@PathVariable(value = REMOVE_CARS_BY_ID_PATH_ID, required = true) Long id,
@PathVariable(value = REMOVE_CARS_BY_ID_PATH_TYPE, required = true) Long type) {
return removeCarFlow.execute(id, type);
}
}
12 changes: 11 additions & 1 deletion src/main/java/br/com/grupomult/configurations/LoadDatabase.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import static br.com.grupomult.utils.DateUtils.ISO8601_COMPLETE_DATE;
import static br.com.grupomult.utils.DateUtils.stringToDate;

import br.com.grupomult.entities.car.CarType;
import br.com.grupomult.repositories.CarTypeRepository;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand All @@ -20,16 +22,24 @@
public class LoadDatabase {

@Bean
public CommandLineRunner initDatabase(AnimalRepository repository) {
public CommandLineRunner initDatabase(AnimalRepository repository, CarTypeRepository carTypeRepository) {
return args -> {
log.info("Preloading " + repository.save(createAnimal("Janis", "2015-02-09", CANINE)).toString());
log.info("Preloading " + repository.save(createAnimal("Rocky", "2014-10-15", FELINE)).toString());

log.info("Preloading " + carTypeRepository.save(createCarType("CT001", "Sedan")).toString());
log.info("Preloading " + carTypeRepository.save(createCarType("CT002", "Hatch")).toString());
};
}


private static Animal createAnimal(String name, String dob, SpeciesEnum species) {
return Animal.builder().name(name).dob(stringToDate(dob, ISO8601_COMPLETE_DATE))
.species(Species.builder().code(species).build()).build();
}

private static CarType createCarType(String code, String description) {
return CarType.builder().code(code).description(description).build();
}

}
7 changes: 7 additions & 0 deletions src/main/java/br/com/grupomult/constants/ApiConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ public final class ApiConstants {

public static final String GET_LIST_ANIMALS_BY_ID_PATH_ID = "id";

public static final String GET_LIST_CARS_BY_ID_PATH_ID = "id";
public static final String REMOVE_CARS_BY_ID_PATH_ID = "id";

public static final String GET_LIST_CARS_BY_ID_PATH_TYPE = "type";
public static final String REMOVE_CARS_BY_ID_PATH_TYPE = "type";


private ApiConstants() {

}
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/br/com/grupomult/constants/MessageConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,20 @@ public final class MessageConstants {
public static final String ERROR_GET_ANIMALS_BY_ID_INVALID_ID = "Identificador inválido";
public static final String ERROR_GET_ANIMALS_BY_ID_NOT_FOUND = "Animal não encontrado";

public static final String ERROR_GET_CARS_BY_ID_NOT_FOUND = "Carro não encontrado";
public static final String ERROR_GET_CARS_BY_ID_INVALID_ID = "Identificador inválido";
public static final String ERROR_GET_CARS_BY_ID_INVALID_TYPE = "Tipo inválido";

public static final String ERROR_ADD_CAR_INVALID_ID = "Identificador inválido";
public static final String ERROR_ADD_CAR_INVALID_TYPE = "Tipo inválido";
public static final String ERROR_ADD_CAR_INVALID_CODE = "Codigo inválido";
public static final String ERROR_ADD_CAR_INVALID_DESCRIPTION = "Descriçao inválido";
public static final String ERROR_ADD_CAR_INVALID_VALUE = "Valor inválido";


public static final String ADD_CARS_VALUE = "Carro a ser adicionado ao sistema";
public static final String UPDATE_CARS_VALUE = "Carro a ser atualizado no sistema";

private MessageConstants() {

}
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/br/com/grupomult/converter/car/CarConverter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package br.com.grupomult.converter.car;

import br.com.grupomult.api.car.models.Car;
import br.com.grupomult.entities.car.CarId;
import br.com.grupomult.utils.DateUtils;

/**
* Created by leandro on 24/12/18.
*/
public class CarConverter {

public static Car convert(br.com.grupomult.entities.car.Car entity){
Car domain = new Car();

domain.setId(entity.getCarId().getId());
domain.setType(CarTypeConverter.convert(entity.getCarId().getType()));
domain.setCode(entity.getCode());
domain.setDescription(entity.getDescription());
domain.setValue(entity.getValue());
domain.setValueTax(entity.getValue() > 0 ? entity.getValue()*0.03 : 0d);
domain.setCreationDate(entity.getCreationDate() != null ? DateUtils.dateToString(entity.getCreationDate(), DateUtils.ISO8601_COMPLETE_DATE) : null);
domain.setUpdateDate(entity.getUpdateDate() != null ? DateUtils.dateToString(entity.getUpdateDate(), DateUtils.ISO8601_COMPLETE_DATE) : null);

return domain;

}

public static br.com.grupomult.entities.car.Car convert(Car domain){
br.com.grupomult.entities.car.Car entity = new br.com.grupomult.entities.car.Car();

entity.setCarId(new CarId(domain.getId(), CarTypeConverter.convert(domain.getType())));
entity.setCode(domain.getCode());
entity.setDescription(domain.getDescription());
entity.setValue(domain.getValue());
entity.setCreationDate(domain.getCreationDate() != null ? DateUtils.stringToDate(domain.getCreationDate(), DateUtils.ISO8601_COMPLETE_DATE) : null);
entity.setUpdateDate(domain.getUpdateDate() != null ? DateUtils.stringToDate(domain.getUpdateDate(), DateUtils.ISO8601_COMPLETE_DATE) : null);

return entity;

}

}
30 changes: 30 additions & 0 deletions src/main/java/br/com/grupomult/converter/car/CarTypeConverter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package br.com.grupomult.converter.car;

import br.com.grupomult.api.car.models.CarType;

/**
* Created by leandro on 24/12/18.
*/
public class CarTypeConverter {

public static CarType convert(br.com.grupomult.entities.car.CarType entity){
CarType domain = new CarType();

domain.setId(entity.getId());
domain.setCode(entity.getCode());
domain.setDescription(entity.getDescription());

return domain;
}

public static br.com.grupomult.entities.car.CarType convert(CarType domain){
br.com.grupomult.entities.car.CarType entity = new br.com.grupomult.entities.car.CarType();

entity.setId(domain.getId());
entity.setCode(domain.getCode());
entity.setDescription(domain.getDescription());

return entity;
}

}
38 changes: 38 additions & 0 deletions src/main/java/br/com/grupomult/entities/car/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package br.com.grupomult.entities.car;

import br.com.grupomult.entities.Species;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;

import javax.persistence.*;
import java.time.OffsetDateTime;
import java.util.Date;

/**
* Created by leandro on 24/12/18.
*/
@Getter
@Setter
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Car {

@EmbeddedId
private CarId carId;

private String code;

private String description;

private Double value;

@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;

@Temporal(TemporalType.TIMESTAMP)
private Date updateDate;

}
30 changes: 30 additions & 0 deletions src/main/java/br/com/grupomult/entities/car/CarId.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package br.com.grupomult.entities.car;

import lombok.*;

import javax.persistence.Embeddable;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.ManyToOne;
import java.io.Serializable;

/**
* Created by leandro on 24/12/18.
*/

@Getter
@Setter
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Embeddable
public class CarId implements Serializable {

@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;

@ManyToOne
private CarType type;

}
33 changes: 33 additions & 0 deletions src/main/java/br/com/grupomult/entities/car/CarType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package br.com.grupomult.entities.car;

import lombok.*;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

/**
* Created by leandro on 24/12/18.
*/

@Getter
@Setter
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class CarType {

@Id
@GeneratedValue
private Long id;

private String code;

private String description;

public CarType(Long id){
this.id = id;
}
}
21 changes: 21 additions & 0 deletions src/main/java/br/com/grupomult/flows/car/AddCarConverter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package br.com.grupomult.flows.car;

import br.com.grupomult.api.car.models.Car;
import br.com.grupomult.api.car.models.ResponseGetCarsById;
import br.com.grupomult.converter.car.CarConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;

/**
* Created by leandro on 25/12/18.
*/
public class AddCarConverter extends CarConverter {

@Autowired
private AddCarPersist persist;

public ResponseEntity<ResponseGetCarsById> execute(Car car) {
return persist.execute(convert(car));
}

}
Loading