refactoring and added controller functions

This commit is contained in:
yannick.blanken@csc-online.eu 2022-06-01 09:05:02 +02:00
parent 1a49ae51a6
commit e146f672b7
27 changed files with 318 additions and 45 deletions

View File

@ -0,0 +1,9 @@
# SETUP
- Add following in settings.xml (MAVEN)
<profiles.active>...</profiles.active>
<mysql.user>root</mysql.user>
<mysql.password>0cscadmin1</mysql.password>

View File

@ -2,6 +2,7 @@ package eu.csc.ODPAppVehOwnServer.persistence.entity.customer;
import eu.csc.ODPAppVehOwnServer.persistence.entity.AbstractEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.UserEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.DeviceArticleEntity;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@ -24,4 +25,9 @@ public class CustomerDeviceEntity extends AbstractCustomerEntity {
@Column(name = "serialnumber", unique = true, nullable = false)
private String serialnumber;
public void fillData(DeviceArticleEntity item) {
this.serialnumber = item.getSerialNumber();
}
}

View File

@ -19,9 +19,16 @@ import javax.persistence.*;
public class CustomerVehicleEntity extends AbstractCustomerEntity {
@Column(nullable = false)
private String vin;
@Column(nullable = false)
private String brand;
@Column(nullable = false)
private String model;
@Column(name = "license_plate", nullable = false)
private String licensePlate;
@ManyToOne
@JoinColumn(nullable = true, name = "cd_id", insertable = false, updatable = false)

View File

@ -18,4 +18,5 @@ public interface DeviceArticleRepository extends JpaRepository<DeviceArticleEnti
int countAllByDevice_id(Long deviceId);
Optional<DeviceArticleEntity> findByDeviceDevicenumberAndSerialNumber(String devicenumber, String name);
Optional<DeviceArticleEntity> findBySerialNumber(String name);
}

View File

@ -22,6 +22,9 @@ public class CustomerService {
@Autowired
private UserRepository userRepository;
@Autowired
private DeviceService deviceService;
@Autowired
private CustomerVehicleRepository customerVehicleRepository;
@Autowired
@ -62,4 +65,21 @@ public class CustomerService {
return customerDeviceRepository.findAllByUser_id(userId);
}
public CustomerDeviceEntity registerDevice(Long userId, String serialnumber){
var deviceArticle = deviceService.findOrThrowBySerialnumber(serialnumber);
CustomerDeviceEntity entity = new CustomerDeviceEntity();
entity.fillData(deviceArticle);
entity.setUser_id(userId);
return customerDeviceRepository.save(entity);
}
public CustomerVehicleEntity registerVehicle(CustomerVehicleEntity item) {
return customerVehicleRepository.save(item);
}
}

View File

@ -2,12 +2,8 @@ package eu.csc.ODPAppVehOwnServer.persistence.services;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.DeviceArticleEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.DeviceEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.VehicleBrandEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.VehicleModelEntity;
import eu.csc.ODPAppVehOwnServer.persistence.respository.DeviceArticleRepository;
import eu.csc.ODPAppVehOwnServer.persistence.respository.DeviceRepository;
import eu.csc.ODPAppVehOwnServer.persistence.respository.VehicleBrandRepository;
import eu.csc.ODPAppVehOwnServer.persistence.respository.VehicleModelRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -30,7 +26,7 @@ public class DeviceService {
return deviceRepository.findAll();
}
public DeviceArticleEntity generateDeviceArticle(String device){
public DeviceArticleEntity generateDeviceArticle(String device) {
DeviceArticleEntity entity = new DeviceArticleEntity();
@ -47,7 +43,7 @@ public class DeviceService {
}
public DeviceArticleEntity generateDeviceArticle(String device, String serialnumber){
public DeviceArticleEntity generateDeviceArticle(String device, String serialnumber) {
DeviceArticleEntity entity = new DeviceArticleEntity();
@ -63,9 +59,13 @@ public class DeviceService {
return entity;
}
public Optional<DeviceArticleEntity> findByDeviceAndSerialnumber(String devicenumber, String name){
public Optional<DeviceArticleEntity> findByDeviceAndSerialnumber(String devicenumber, String name) {
return deviceArticleRepository.findByDeviceDevicenumberAndSerialNumber(devicenumber, name);
}
}
public DeviceArticleEntity findOrThrowBySerialnumber( String serialnumber) {
return deviceArticleRepository.findBySerialNumber(serialnumber).orElseThrow();
}
public DeviceEntity addDevice(String devicenumber, String name, String manufacturer) {
@ -77,7 +77,8 @@ public Optional<DeviceArticleEntity> findByDeviceAndSerialnumber(String devicenu
return deviceRepository.save(item);
}
public DeviceArticleEntity generateNewDeviceArticle(Long deviceId){
public DeviceArticleEntity generateNewDeviceArticle(Long deviceId) {
var item = new DeviceArticleEntity();
item.setDevice(findDeviceById(deviceId).get());
@ -88,6 +89,7 @@ public Optional<DeviceArticleEntity> findByDeviceAndSerialnumber(String devicenu
return item;
}
public Optional<DeviceEntity> findDeviceById(Long deviceId) {
return deviceRepository.findById(deviceId);
}

View File

@ -118,7 +118,11 @@
<artifactId>asn</artifactId>
<version>${asncore.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>eu.csc.core</groupId>
<artifactId>asncore</artifactId>

View File

@ -3,8 +3,7 @@ spring.servlet.multipart.max-request-size=10MB
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/appvehownserver
spring.datasource.username=root
spring.datasource.password=0cscadmin1
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.show-sql=true

View File

@ -1,6 +1,7 @@
spring.profiles.active=ybdev
spring.datasource.username=@mysql.user@
spring.datasource.password=@mysql.password@
spring.datasource.hikari.maximum-pool-size=100
server.port=8081
spring.datasource.hikari.auto-commit=true

View File

@ -74,8 +74,23 @@
<resources>
<resource>
<directory>${project.basedir}/../resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<delimiters>
<delimiter>@</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -1,7 +1,7 @@
package eu.csc.ODPAppVehOwnServer.controller.data;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceDto;
import eu.csc.ODPAppVehOwnServer.models.regist.DeviceArticleDto;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceArticleDto;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.DeviceArticleEntity;
import eu.csc.ODPAppVehOwnServer.persistence.services.DeviceService;
import lombok.var;
@ -42,25 +42,22 @@ public class DeviceController {
}
@PostMapping()
@PostMapping
@RequestMapping("/{deviceId}")
public ResponseEntity registerNewDeviceArticle(@PathVariable Long deviceId, @RequestBody DeviceArticleDto body){
public ResponseEntity registerNewDeviceArticle(@PathVariable Long deviceId, @RequestBody DeviceArticleDto body) {
var device = deviceService.findDeviceById(deviceId).orElseThrow(() -> new EntityNotFoundException());
DeviceArticleEntity generated = null;
if(body == null||body.getSerialnumber() == null){
if (body == null || body.getSerialnumber() == null) {
generated =
deviceService.generateDeviceArticle(device.getDevicenumber());
}
else {
} else {
generated =
deviceService.generateDeviceArticle(device.getDevicenumber(), body.getSerialnumber());
}
return ResponseEntity.ok(generated);
}

View File

@ -2,8 +2,6 @@ package eu.csc.ODPAppVehOwnServer.controller.registration;
import eu.csc.ODPAppVehOwnServer.controller.AbstractRestController;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceDto;
import eu.csc.ODPAppVehOwnServer.models.regist.DeviceArticleDto;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.DeviceArticleEntity;
import eu.csc.ODPAppVehOwnServer.persistence.services.CustomerService;
import eu.csc.ODPAppVehOwnServer.persistence.services.DeviceService;
import lombok.var;

View File

@ -1,14 +1,17 @@
package eu.csc.ODPAppVehOwnServer.controller.registration;
import eu.csc.ODPAppVehOwnServer.controller.AbstractRestController;
import eu.csc.ODPAppVehOwnServer.models.regist.CustomerVehicleDto;
import eu.csc.ODPAppVehOwnServer.models.regist.UserVehicleRegistrationDto;
import eu.csc.ODPAppVehOwnServer.persistence.entity.customer.CustomerVehicleEntity;
import eu.csc.ODPAppVehOwnServer.persistence.services.CustomerService;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("reg/vehicles")
@ -22,15 +25,39 @@ public class VehicleRegistrationController extends AbstractRestController {
var user = getLoggedInWebUserDetails();
List<CustomerVehicleDto> result = new ArrayList<>();
return ResponseEntity.ok(customerService.findAllVehicles(user.getUserId()));
for (var userVehicle:
customerService.findAllVehicles(user.getUserId())
) {
var mapped = new CustomerVehicleDto();
mapped.setVin(userVehicle.getVin());
mapped.setBrandId(userVehicle.getBrand());
mapped.setModelId(userVehicle.getModel());
mapped.setLicensePlate(userVehicle.getLicensePlate());
result.add(mapped);
}
return ResponseEntity.ok(result);
}
@PostMapping
public ResponseEntity registerUserVehicle() {
public ResponseEntity registerUserVehicle(@RequestBody UserVehicleRegistrationDto body) {
var user = getLoggedInWebUserDetails();
throw new UnsupportedOperationException();
CustomerVehicleEntity entity = new CustomerVehicleEntity();
entity.setLicensePlate(body.getLicensePlate());
entity.setModel(body.getModelId());
entity.setBrand(body.getBrandId());
entity.setCd_id(user.getUserId());
entity = customerService.registerVehicle(entity);
return getSuccessResponse(entity);
}
}

View File

@ -71,8 +71,23 @@
<resources>
<resource>
<directory>${project.basedir}/../resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<delimiters>
<delimiter>@</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -32,8 +32,8 @@ public class DeviceCommands extends BaseCommands {
return getMessageString();
}
@ShellMethod(value = "add addDeviceArticle", key = {"d_aa", "d-aa"})
public String addDeviceArticle(String device, @ShellOption(defaultValue = ShellOption.NULL) String articlenumber) {
@ShellMethod(value = "generate a addDeviceArticle", key = {"d_ga", "d-ga"})
public String generateDeviceArticle(String device, @ShellOption(defaultValue = ShellOption.NULL) String articlenumber) {
if (articlenumber != null)
addMessageString(deviceService.generateDeviceArticle(device, articlenumber).toString());

View File

@ -38,6 +38,7 @@
<artifactId>dto</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,28 @@
package eu.csc.ODPAppVehOwnServer.mapper;
import eu.csc.ODPAppVehOwnServer.models.regist.CustomerVehicleDto;
import eu.csc.ODPAppVehOwnServer.persistence.entity.customer.CustomerVehicleEntity;
public class DtoMapper {
private static DtoMapper dtoMapper;
public static DtoMapper getInstance() {
return dtoMapper == null ? (dtoMapper = new DtoMapper()) : dtoMapper;
}
private DtoMapper() {
}
public CustomerVehicleDto mapCustomerVehicle(CustomerVehicleEntity item) {
throw new UnsupportedOperationException();
}
}

View File

@ -5,6 +5,9 @@ import eu.csc.ODPAppVehOwnServer.models.VehicleBrandDto;
import eu.csc.ODPAppVehOwnServer.models.VehicleModelDto;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceDto;
import eu.csc.ODPAppVehOwnServer.models.data.LanguageDto;
import eu.csc.ODPAppVehOwnServer.models.regist.CustomerDeviceDto;
import eu.csc.ODPAppVehOwnServer.models.regist.CustomerVehicleDto;
import eu.csc.ODPAppVehOwnServer.models.regist.UserVehicleRegistrationDto;
import java.io.IOException;
import java.util.List;
@ -20,4 +23,16 @@ public interface IDataClient {
List<VehicleModelDto> listVehicleModels() throws IOException;
List<VehicleModelDto> listVehicleModels(VehicleBrandDto brand) throws IOException;
//region Customer
List<CustomerVehicleDto> listCustomerVehicles() throws IOException;
CustomerVehicleDto registerCustomerVehicle(UserVehicleRegistrationDto body) throws IOException;
CustomerDeviceDto registerCustomerDevice(CustomerDeviceDto body) throws IOException;
List<CustomerDeviceDto> listCustomerDevices() throws IOException;
//endregion
}

View File

@ -2,13 +2,17 @@ package eu.csc.ODPAppVehOwnServer.client.clients;
import eu.csc.ODPAppVehOwnServer.client.ClientFactory;
import eu.csc.ODPAppVehOwnServer.client.exceptions.NotAuthenticatedException;
import eu.csc.ODPAppVehOwnServer.client.models.CallResponse;
import eu.csc.ODPAppVehOwnServer.client.service.ClientService;
import eu.csc.ODPAppVehOwnServer.client.service.CustomerService;
import eu.csc.ODPAppVehOwnServer.models.VehicleBrandDto;
import eu.csc.ODPAppVehOwnServer.models.VehicleModelDto;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceDto;
import eu.csc.ODPAppVehOwnServer.models.data.LanguageDto;
import lombok.var;
import eu.csc.ODPAppVehOwnServer.models.regist.CustomerDeviceDto;
import eu.csc.ODPAppVehOwnServer.models.regist.CustomerVehicleDto;
import eu.csc.ODPAppVehOwnServer.models.regist.UserVehicleRegistrationDto;
import java.io.IOException;
import java.util.List;
@ -19,26 +23,24 @@ public class VehOwnAppClient extends AbstractClient implements IDataClient {
private final ClientService clientService;
private final CustomerService customerService;
//region Constructors
public VehOwnAppClient(String url) {
this.customerService = null;
this.clientService = ClientFactory.createService(url, ClientService.class);
}
public VehOwnAppClient(String url, String token) {
var builder = getRetrofitBuilder(url);
var interceptor = getTokenAuthenticationInterceptor(token);
this.customerService = ClientFactory.createService(url, CustomerService.class, token);
this.clientService = ClientFactory.createService(url, ClientService.class, token);
}
public VehOwnAppClient(String url, String user, String password) {
var builder = getRetrofitBuilder(url);
var interceptor = getBasicAuthenticationInterceptor(user, password);
this.customerService = ClientFactory.createService(url, CustomerService.class, user, password);
this.clientService = ClientFactory.createService(url, ClientService.class, user, password);
}
@ -70,6 +72,32 @@ public class VehOwnAppClient extends AbstractClient implements IDataClient {
throw new UnsupportedOperationException();
}
@Override
public List<CustomerVehicleDto> listCustomerVehicles() throws IOException {
if(this.customerService == null)
throw new NotAuthenticatedException();
return executeCall(customerService.listCustomerVehicle()).getBody();
}
@Override
public CustomerVehicleDto registerCustomerVehicle(UserVehicleRegistrationDto body) throws IOException {
if(this.customerService == null)
throw new NotAuthenticatedException();
return executeCall(customerService.registerUserVehicle(body)).getBody();
}
@Override
public CustomerDeviceDto registerCustomerDevice(CustomerDeviceDto body) throws IOException {
return null;
}
@Override
public List<CustomerDeviceDto> listCustomerDevices() throws IOException {
return null;
}
//endregion

View File

@ -1,4 +1,4 @@
package eu.csc.odpconfigserver.client.exceptions;
package eu.csc.ODPAppVehOwnServer.client.exceptions;
public class ClientRequestException extends RuntimeException {
public ClientRequestException(Exception e) {

View File

@ -0,0 +1,14 @@
package eu.csc.ODPAppVehOwnServer.client.exceptions;
public class NotAuthenticatedException extends RuntimeException {
public NotAuthenticatedException() {
super("NOT AUTHENTICATED");
}
public NotAuthenticatedException(Exception e) {
super(e);
}
public NotAuthenticatedException(String toString) {
super(toString);
}
}

View File

@ -1,16 +1,16 @@
package eu.csc.ODPAppVehOwnServer.client.service;
import eu.csc.ODPAppVehOwnServer.models.JWTTokenResponse;
import eu.csc.ODPAppVehOwnServer.models.VehicleBrandDto;
import eu.csc.ODPAppVehOwnServer.models.VehicleModelDto;
import eu.csc.ODPAppVehOwnServer.models.auth.AuthenticationRequest;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceDto;
import eu.csc.ODPAppVehOwnServer.models.data.LanguageDto;
import eu.csc.ODPAppVehOwnServer.models.data.PropulsionTypeDto;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceArticleDto;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import java.util.List;
@ -28,12 +28,21 @@ public interface ClientService {
@GET("/api/vehicles/models")
Call<List<VehicleModelDto>> listVehicleModels();
@GET("/api/vehicles/models/{brand}")
Call<List<VehicleModelDto>> listVehicleModelsByBrand(@Path(value = "brand") String brand);
@GET("/api/vehicles/propulsiontypes")
Call<List<PropulsionTypeDto>> listPropulsionTypes();
//endregion
//region devices
@GET("/api/devices/")
Call<List<DeviceDto>> listDevices();
@POST("/api/devices/{deviceId}")
Call<DeviceArticleDto> generateDeviceArticle(@Path(value = "deviceId") Long deviceId, @Body DeviceArticleDto dto);
//endregion
}

View File

@ -1,9 +1,33 @@
package eu.csc.ODPAppVehOwnServer.client.service;
import eu.csc.ODPAppVehOwnServer.models.regist.CustomerDeviceDto;
import eu.csc.ODPAppVehOwnServer.models.regist.CustomerVehicleDto;
import eu.csc.ODPAppVehOwnServer.models.regist.UserVehicleRegistrationDto;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import java.util.List;
public interface CustomerService {
//region
//region registration
@GET("/api/reg/vehicles")
Call<List<CustomerVehicleDto>> listCustomerVehicle();
@POST("/api/reg/vehicles")
Call<CustomerVehicleDto> registerUserVehicle(@Body UserVehicleRegistrationDto body);
@GET("/api/reg/devices")
Call<List<CustomerDeviceDto>> listCustomerDevices();
@POST("/api/reg/devices")
Call<CustomerDeviceDto> registerCustomerDevices(@Body CustomerDeviceDto body);
//endregion

View File

@ -1,4 +1,4 @@
package eu.csc.ODPAppVehOwnServer.models.regist;
package eu.csc.ODPAppVehOwnServer.models.data;
import eu.csc.ODPAppVehOwnServer.models.base.AbstractServerDto;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceDto;

View File

@ -0,0 +1,17 @@
package eu.csc.ODPAppVehOwnServer.models.regist;
import eu.csc.ODPAppVehOwnServer.models.AbstractBaseDto;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceDto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class CustomerDeviceDto extends AbstractBaseDto {
private DeviceDto device;
private String serialnumber;
private String name;
}

View File

@ -0,0 +1,18 @@
package eu.csc.ODPAppVehOwnServer.models.regist;
import eu.csc.ODPAppVehOwnServer.models.AbstractBaseDto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class CustomerVehicleDto extends AbstractBaseDto {
private String vin;
private String licensePlate;
private String brandId;
private String modelId;
}

View File

@ -0,0 +1,18 @@
package eu.csc.ODPAppVehOwnServer.models.regist;
import eu.csc.ODPAppVehOwnServer.models.AbstractBaseDto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class UserVehicleRegistrationDto extends AbstractBaseDto {
private String vin;
private String licensePlate;
private String brandId;
private String modelId;
}