Skip to content
Snippets Groups Projects
Commit b759407c authored by Martin Weise's avatar Martin Weise
Browse files

refs #16, created first draft of endpoint interfaces based on ER-diagram

parent 1ccedaee
Branches
Tags
No related merge requests found
Showing
with 291 additions and 14 deletions
package at.tuwien.dto.table.columns;
public enum SiUnitDto {
SECOND, METER, KILOGRAM, AMPERE, KELVIN, MOLE, CANDELA
}
......@@ -10,7 +10,7 @@
</parent>
<artifactId>gateways</artifactId>
<version>${global.version}</version>
<version>0.0.1-SNAPSHOT</version>
<name>fda-database-managing-service-gateways</name>
<properties>
......@@ -22,7 +22,7 @@
<dependency>
<groupId>at.tuwien</groupId>
<artifactId>api</artifactId>
<version>${global.version}</version>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
......
package at.tuwien.clients;
import at.tuwien.dto.CreateDatabaseDTO;
import at.tuwien.dto.database.DatabaseCreateDto;
import at.tuwien.model.Database;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -20,14 +20,14 @@ public class FdaContainerManagingClient {
@Autowired
private WebClient.Builder webClientBuilder;
public boolean createDatabaseContainer(CreateDatabaseDTO dto) {
public boolean createDatabaseContainer(DatabaseCreateDto dto) {
LOGGER.debug("request fda-container-managing service for createDatabaseContainer");
ClientResponse clientResponse = webClientBuilder
.build()
.post()
.uri("http://fda-container-managing/at.tuwien.api/createDatabaseContainer")
.contentType(MediaType.APPLICATION_JSON)
.body(Mono.just(dto), CreateDatabaseDTO.class)
.body(Mono.just(dto), DatabaseCreateDto.class)
.exchange()
.block();
......
......@@ -10,7 +10,7 @@
<groupId>at.tuwien</groupId>
<artifactId>fda-database-managing-service</artifactId>
<version>${global.version}</version>
<version>0.0.1-SNAPSHOT</version>
<name>fda-database-managing-service</name>
<description>Demo project for Spring Boot</description>
......@@ -23,7 +23,6 @@
</modules>
<properties>
<global.version>0.0.1-SNAPSHOT</global.version>
<java.version>11</java.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<mapstruct.version>1.4.2.Final</mapstruct.version>
......
......@@ -10,14 +10,14 @@
</parent>
<artifactId>rest-service</artifactId>
<version>${global.version}</version>
<version>0.0.1-SNAPSHOT</version>
<name>fda-database-managing-service-rest-services</name>
<dependencies>
<dependency>
<groupId>at.tuwien</groupId>
<artifactId>services</artifactId>
<version>${global.version}</version>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
......
package at.tuwien.controller;
package at.tuwien.endpoints;
import at.tuwien.dto.CreateDatabaseDTO;
import at.tuwien.model.Database;
import at.tuwien.dto.database.DatabaseBriefDto;
import at.tuwien.dto.database.DatabaseCreateDto;
import at.tuwien.dto.database.DatabaseChangeDto;
import at.tuwien.dto.database.DatabaseDto;
import at.tuwien.service.DatabaseService;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/database")
@RequestMapping("/api")
public class DatabaseController {
private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseController.class);
private DatabaseService service;
private final DatabaseService databaseService;
@Autowired
public DatabaseController(DatabaseService service) {
this.service = service;
public DatabaseController(DatabaseService databaseService) {
this.databaseService = databaseService;
}
@PostMapping("/createDatabase")
@ApiOperation(value = "creating a new database")
public ResponseEntity createDatabase(@RequestBody CreateDatabaseDTO dto) {
@GetMapping("/database")
@ApiOperation(value = "List all databases", notes = "Currently a container supports only databases of the same image, e.g. there is one PostgreSQL engine running with multiple databases inside a container.")
public ResponseEntity<List<DatabaseBriefDto>> findAll() {
// LOGGER.debug("getting a list of created databases");
// return service.findAllCreatedDatabases();
return null;
}
@PostMapping("/database")
@ApiOperation(value = "Creates a new database", notes = "Creates a new database in a container")
public ResponseEntity<DatabaseDto> create(@RequestBody DatabaseCreateDto dto) {
// LOGGER.debug("creating new database");
// boolean succeed = service.createDatabase(dto);
// if (succeed) {
......@@ -40,16 +48,28 @@ public class DatabaseController {
// .status(Response.Status.INTERNAL_SERVER_ERROR)
// .type(MediaType.APPLICATION_JSON)
// .build();
return null;
return ResponseEntity.status(HttpStatus.CREATED)
.build();
}
@GetMapping("/listDatabases")
public List<Database> listDatabases() {
// LOGGER.debug("getting a list of created databases");
// return service.findAllCreatedDatabases();
@GetMapping("/database/{id}")
@ApiOperation(value = "Get all informations about a database")
public ResponseEntity<DatabaseDto> findById(@RequestParam String id) {
return null;
}
@PutMapping("/database/{id}")
@ApiOperation(value = "Change the state of a database")
public ResponseEntity<DatabaseDto> modify(@RequestParam String id, @RequestBody DatabaseChangeDto changeDto) {
return ResponseEntity.status(HttpStatus.ACCEPTED)
.build();
}
@DeleteMapping("/database/{id}")
@ApiOperation(value = "Delete a database")
public ResponseEntity delete(@RequestParam String id) {
return ResponseEntity.status(HttpStatus.OK)
.build();
}
}
package at.tuwien.endpoints;
import at.tuwien.dto.database.DatabaseChangeDto;
import at.tuwien.dto.database.DatabaseCreateDto;
import at.tuwien.dto.table.TableBriefDto;
import at.tuwien.dto.table.TableDto;
import at.tuwien.model.Database;
import at.tuwien.service.DatabaseService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/database/{id}")
public class TableController {
private final DatabaseService databaseService;
@Autowired
public TableController(DatabaseService databaseService) {
this.databaseService = databaseService;
}
@GetMapping("/table")
@ApiOperation(value = "List all database tables")
public ResponseEntity<List<TableBriefDto>> findAll(@RequestParam String id) {
return null;
}
@PostMapping("/table")
@ApiOperation(value = "Creates a new database table", notes = "Creates a new database table in a container")
public ResponseEntity create(@RequestParam String id, @RequestBody DatabaseCreateDto dto) {
// LOGGER.debug("creating new database");
// boolean succeed = service.createDatabase(dto);
// if (succeed) {
// return Response
// .status(Response.Status.CREATED)
// .entity("Database container successfully created and started!")
// .type(MediaType.APPLICATION_JSON)
// .build();
// }
// return Response
// .status(Response.Status.INTERNAL_SERVER_ERROR)
// .type(MediaType.APPLICATION_JSON)
// .build();
return ResponseEntity.status(HttpStatus.CREATED)
.build();
}
@GetMapping("/table/{tid}")
@ApiOperation(value = "Get all informations about a database table")
public ResponseEntity<TableDto> findById(@RequestParam String id, @RequestParam String tid) {
return null;
}
@PutMapping("/table/{tid}")
@ApiOperation(value = "Change the state of a database table")
public ResponseEntity<?> modify(@RequestParam String id, @RequestParam String tid, @RequestBody DatabaseChangeDto changeDto) {
return ResponseEntity.status(HttpStatus.ACCEPTED)
.build();
}
@DeleteMapping("/table/{tid}")
@ApiOperation(value = "Delete a database table")
public ResponseEntity delete(@RequestParam String id, @RequestParam String tid) {
return ResponseEntity.status(HttpStatus.OK)
.build();
}
}
......@@ -10,20 +10,20 @@
</parent>
<artifactId>services</artifactId>
<version>${global.version}</version>
<version>0.0.1-SNAPSHOT</version>
<name>fda-database-managing-service-services</name>
<dependencies>
<dependency>
<groupId>at.tuwien</groupId>
<artifactId>gateways</artifactId>
<version>${global.version}</version>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>at.tuwien</groupId>
<artifactId>api</artifactId>
<version>${global.version}</version>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
......
package at.tuwien.entity;
import lombok.*;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.time.Instant;
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@ToString(onlyExplicitlyIncluded = true)
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Auditable {
@Id
@EqualsAndHashCode.Include
@ToString.Include
@GeneratedValue(generator = "sequence-per-entity")
@GenericGenerator(
name = "sequence-per-entity",
strategy = "enhanced-sequence",
parameters = @Parameter(name = "prefer_sequence_per_entity", value = "true")
)
private Long id;
@Column(nullable = false, updatable = false)
@CreatedDate
private Instant created;
@Column
@LastModifiedDate
private Instant lastModified;
}
\ No newline at end of file
package at.tuwien.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import java.util.List;
@Entity
@Data
@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
@ToString(callSuper = true, onlyExplicitlyIncluded = true)
public class Database extends Auditable {
@Column(nullable = false)
private String containerId;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private Boolean isPublic;
@OneToOne
private View view;
@OneToMany
private List<Table> tables;
}
package at.tuwien.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import java.util.List;
@Entity
@Data
@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
@ToString(callSuper = true, onlyExplicitlyIncluded = true)
public class Table extends Auditable {
@OneToOne
private Database database;
}
package at.tuwien.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
import java.util.List;
@Entity
@Data
@EqualsAndHashCode(callSuper = true, onlyExplicitlyIncluded = true)
@ToString(callSuper = true, onlyExplicitlyIncluded = true)
public class View extends Auditable {
@Column
private String name;
@OneToMany
private List<Database> databases;
}
package at.tuwien.repository;
import at.tuwien.entity.Database;
import org.springframework.data.jpa.repository.JpaRepository;
public interface DatabaseRepository extends JpaRepository<Database, Long> {
}
package at.tuwien.service;
import at.tuwien.clients.FdaContainerManagingClient;
import at.tuwien.dto.CreateDatabaseDTO;
import at.tuwien.dto.database.DatabaseCreateDto;
import at.tuwien.model.Database;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -18,7 +18,7 @@ public class DatabaseService {
this.client = client;
}
public boolean createDatabase(CreateDatabaseDTO dto) {
public boolean createDatabase(DatabaseCreateDto dto) {
return client.createDatabaseContainer(dto);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment