added rest requests

This commit is contained in:
yannick.blanken@csc-online.eu 2022-05-27 11:10:24 +02:00
parent b8ed45f579
commit f6167336d2
20 changed files with 242 additions and 36 deletions

View File

@ -4,12 +4,16 @@ import eu.csc.ODPAppVehOwnServer.persistence.entity.AbstractEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.UserEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.DeviceEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.VehicleBrandEntity;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Column;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass;
@Getter
@Setter
@MappedSuperclass
public abstract class AbstractCustomerEntity extends AbstractEntity {
@ManyToOne

View File

@ -0,0 +1,15 @@
package eu.csc.ODPAppVehOwnServer.persistence.respository;
import eu.csc.ODPAppVehOwnServer.persistence.entity.customer.CustomerVehicleEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.PropulsionTypeEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface CustomerVehicleRepository extends JpaRepository<CustomerVehicleEntity, Long> {
List<CustomerVehicleEntity> findAllByUser_id(Long userId);
}

View File

@ -16,5 +16,5 @@ public interface DeviceArticleRepository extends JpaRepository<DeviceArticleEnti
int countAllByDeviceDevicenumber(String device);
Optional<DeviceArticleEntity> findByDeviceDevicenumberAndSerialNumber(String brand, String name);
Optional<DeviceArticleEntity> findByDeviceDevicenumberAndSerialNumber(String devicenumber, String name);
}

View File

@ -1,8 +1,10 @@
package eu.csc.ODPAppVehOwnServer.persistence.services;
import eu.csc.ODPAppVehOwnServer.persistence.entity.UserEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.customer.CustomerVehicleEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.DeviceArticleEntity;
import eu.csc.ODPAppVehOwnServer.persistence.entity.data.DeviceEntity;
import eu.csc.ODPAppVehOwnServer.persistence.respository.CustomerVehicleRepository;
import eu.csc.ODPAppVehOwnServer.persistence.respository.DeviceArticleRepository;
import eu.csc.ODPAppVehOwnServer.persistence.respository.DeviceRepository;
import eu.csc.ODPAppVehOwnServer.persistence.respository.UserRepository;
@ -22,6 +24,9 @@ public class CustomerService {
@Autowired
private UserRepository userRepository;
@Autowired
private CustomerVehicleRepository customerVehicleRepository;
public List<UserEntity> findAll() {
@ -49,4 +54,9 @@ public class CustomerService {
}
public List<CustomerVehicleEntity> findAllVehicles(Long userId) {
return customerVehicleRepository.findAllByUser_id(userId);
}
}

View File

@ -63,9 +63,11 @@ public class DeviceService {
return entity;
}
public Optional<DeviceArticleEntity> findByDeviceAndSerialnumber(String brand, String name){
return deviceArticleRepository.findByDeviceDevicenumberAndSerialNumber(brand, name);
public Optional<DeviceArticleEntity> findByDeviceAndSerialnumber(String devicenumber, String name){
return deviceArticleRepository.findByDeviceDevicenumberAndSerialNumber(devicenumber, name);
}
public DeviceEntity addDevice(String brand, String name, String manufacturer) {
DeviceEntity item = new DeviceEntity();
@ -75,4 +77,8 @@ public Optional<DeviceArticleEntity> findByDeviceAndSerialnumber(String brand, S
return deviceRepository.save(item);
}
public Optional<DeviceEntity> findDeviceById(Long deviceId) {
return deviceRepository.findById(deviceId);
}
}

View File

@ -0,0 +1,29 @@
package eu.csc.ODPAppVehOwnServer.persistence.services;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.springframework.stereotype.Service;
import java.io.FileWriter;
import java.io.IOException;
@Service
public class GsonService {
private final Gson gson;
public GsonService() {
GsonBuilder builder = new GsonBuilder();
builder.setPrettyPrinting();
gson = builder.create();
}
public void exportJson(Object data, String filePath) throws IOException {
gson.toJson(data, new FileWriter(filePath));
}
}

View File

@ -1,11 +1,15 @@
package eu.csc.ODPAppVehOwnServer.persistence.services;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.springframework.stereotype.Service;
import java.util.Calendar;
@Service
public class UtilsService {
public String getSerialnumber (int size) {
int serialNo = 000 + 1 + size;
@ -18,4 +22,8 @@ public class UtilsService {
return ""+year + month + date + serialNo;
}
}

View File

@ -1,5 +1,6 @@
package eu.csc.ODPAppVehOwnServer.controller;
import eu.csc.ODPAppVehOwnServer.com.LoggedInWebUserDetails;
import eu.csc.ODPAppVehOwnServer.models.data.ErrorResultDto;
import org.apache.commons.io.IOUtils;
import org.springframework.core.io.Resource;
@ -7,6 +8,7 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ -27,8 +29,13 @@ public abstract class AbstractRestController {
return request.isUserInRole(role);
}
protected Authentication getLoggedInUser(){
return SecurityContextHolder.getContext().getAuthentication();
protected UsernamePasswordAuthenticationToken getLoggedInUser(){
return (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
}
protected LoggedInWebUserDetails getLoggedInWebUserDetails(){
return (LoggedInWebUserDetails) getLoggedInUser().getPrincipal();
}
//region ExceptionHandling

View File

@ -1,16 +1,15 @@
package eu.csc.ODPAppVehOwnServer.controller.data;
import eu.csc.ODPAppVehOwnServer.models.VehicleBrandDto;
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.DeviceService;
import eu.csc.ODPAppVehOwnServer.persistence.services.VehicleService;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.persistence.EntityNotFoundException;
import java.util.ArrayList;
import java.util.List;
@ -22,7 +21,6 @@ public class DeviceController {
private DeviceService deviceService;
@GetMapping
public ResponseEntity<List<DeviceDto>> showDevices() {
var items = new ArrayList<DeviceDto>();
@ -31,17 +29,39 @@ public class DeviceController {
) {
DeviceDto dto = new DeviceDto();
dto.setId(v.getId());
dto.setName(v.getName());
dto.setDevicenumber(v.getDevicenumber());
dto.setId(v.getId());
dto.setManufacturer(v.getManufacturer());
items.add(dto);
}
return ResponseEntity.ok(items);
}
@PostMapping()
@RequestMapping("/{deviceId}")
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){
generated =
deviceService.generateDeviceArticle(device.getDevicenumber());
}
else {
generated =
deviceService.generateDeviceArticle(device.getDevicenumber(), body.getSerialnumber());
}
return ResponseEntity.ok(generated);
}
}

View File

@ -2,6 +2,8 @@ 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.DeviceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
@ -26,4 +28,6 @@ public class DeviceRegistrationController extends AbstractRestController {
return ResponseEntity.ok().build();
}
}

View File

@ -40,9 +40,6 @@ public class RegistrationController {
user.setEmail(signUpDto.getEmail());
user.setPassword(passwordEncoder.encode(signUpDto.getPassword()));
userRepository.save(user);
return new ResponseEntity<>("User registered successfully", HttpStatus.OK);

View File

@ -1,7 +1,9 @@
package eu.csc.ODPAppVehOwnServer.controller.registration;
import eu.csc.ODPAppVehOwnServer.controller.AbstractRestController;
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;
@ -12,15 +14,16 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("reg/vehicles")
public class VehicleRegistrationController extends AbstractRestController {
@GetMapping
public ResponseEntity getUserVehicles(){
var user = getLoggedInUser();
@Autowired
private CustomerService customerService;
@GetMapping
public ResponseEntity getUserVehicles() {
var user = getLoggedInWebUserDetails();
return ResponseEntity.ok(user);
}
return ResponseEntity.ok(customerService.findAllVehicles(user.getUserId()));
}
}

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,7 @@
package eu.csc.ODPAppVehOwnServer.shell;
import eu.csc.ODPAppVehOwnServer.persistence.services.DeviceService;
import eu.csc.ODPAppVehOwnServer.persistence.services.GsonService;
import eu.csc.ODPAppVehOwnServer.persistence.services.VehicleService;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
@ -9,6 +11,14 @@ import org.springframework.shell.standard.ShellMethod;
@ShellComponent
public class InfoCommands extends BaseCommands{
@Autowired
private VehicleService vehicleService;
@Autowired
private DeviceService deviceService;
@Autowired
private GsonService gsonService;
@ShellMethod(value = "Info", key = {"info"})
public String info(){
@ -18,5 +28,15 @@ public class InfoCommands extends BaseCommands{
}
@ShellMethod(value = "export Vehicle", key = {"ex"})
public String doExport(){
var vehicles = vehicleService.findAllBrands();
return getMessageString();
}
}

View File

@ -7,15 +7,16 @@ import org.springframework.shell.standard.ShellComponent;
import org.springframework.shell.standard.ShellMethod;
@ShellComponent
public class VehicleCommands extends BaseCommands{
public class VehicleCommands extends BaseCommands {
@Autowired
private VehicleService vehicleService;
@ShellMethod(value = "list Vehicle", key = {"v_l"})
public String listVehicles(){
private VehicleService vehicleService;
for (var vehicle:vehicleService.findAllBrands()
) {
@ShellMethod(value = "list Vehicle", key = {"v_l"})
public String listVehicles() {
for (var vehicle : vehicleService.findAllBrands()
) {
addMessageString(vehicle.toString());
}
@ -24,30 +25,28 @@ private VehicleService vehicleService;
@ShellMethod(value = "add Vehicle", key = {"v_a", "v-a"})
public String addVehicle(String brand, String name){
public String addVehicle(String brand, String name) {
addMessageString(vehicleService.addVehicle(brand, name).toString());
return getMessageString();
}
@ShellMethod(value = "add Vehicle Model", key = {"v_am", "v-am"})
public String addVehicle(String brand, String model, String name ){
public String addVehicle(String brand, String model, String name) {
addMessageString(vehicleService.addVehicleModel(brand, model, name).toString());
return getMessageString();
}
@ShellMethod(value = "export Vehicle", key = {"v_ex", "v-ex"})
public String doExport(){
public String doExport() {
var vehicles = vehicleService.findAllBrands();
for (var vehicle:vehicles) {
for (var vehicle : vehicles) {
//toDo
}

View File

@ -27,6 +27,7 @@ public class VehOwnAppClient extends AbstractClient implements IDataClient {
this.clientService = ClientFactory.createService(url, ClientService.class);
}
public VehOwnAppClient(String url, String token) {
var builder = getRetrofitBuilder(url);
var interceptor = getTokenAuthenticationInterceptor(token);
@ -75,7 +76,6 @@ public class VehOwnAppClient extends AbstractClient implements IDataClient {
//region
//endregion

View File

@ -0,0 +1,31 @@
package eu.csc.ODPAppVehOwnServer.client.service;
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.data.PropulsionTypeDto;
import retrofit2.Call;
import retrofit2.http.GET;
import java.util.List;
public interface DataClientService {
//region Vehicle
@GET("/api/vehicles/brands")
Call<List<VehicleBrandDto>> listBrands();
@GET("/api/vehicles/models")
Call<List<VehicleModelDto>> listVehicleModels();
@GET("/api/vehicles/propulsiontypes")
Call<List<PropulsionTypeDto>> listPropulsionTypes();
//endregion
@GET("/api/devices/")
Call<List<DeviceDto>> listDevices();
}

View File

@ -0,0 +1,13 @@
package eu.csc.ODPAppVehOwnServer.models.base;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public abstract class AbstractServerDto {
private Long id;
}

View File

@ -0,0 +1,19 @@
package eu.csc.ODPAppVehOwnServer.models.regist;
import eu.csc.ODPAppVehOwnServer.models.base.AbstractServerDto;
import eu.csc.ODPAppVehOwnServer.models.data.DeviceDto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@NoArgsConstructor
@ToString
public class DeviceArticleDto extends AbstractServerDto {
private DeviceDto device;
private String serialnumber;
}