diff --git a/ApiService/pom.xml b/ApiService/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..8f1348038c4eb20e9f9e4965c5f6b4b1709bc17c --- /dev/null +++ b/ApiService/pom.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-parent</artifactId> + <version>2.7.1</version> + <relativePath/> + <!-- lookup parent from repository --> + </parent> + + <groupId>org.fairkom</groupId> + <artifactId>ApiService</artifactId> + <version>1.0-SNAPSHOT</version> + + <dependencies> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <scope>provided</scope> + </dependency> + + </dependencies> + + + + <build> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>11</source> + <target>11</target> + </configuration> + </plugin> + </plugins> + </build> + +</project> \ No newline at end of file diff --git a/ApiService/src/main/java/apiservice/ApiServiceApp.java b/ApiService/src/main/java/apiservice/ApiServiceApp.java new file mode 100644 index 0000000000000000000000000000000000000000..0d7275574e44d41494820932252b5394626c20d3 --- /dev/null +++ b/ApiService/src/main/java/apiservice/ApiServiceApp.java @@ -0,0 +1,18 @@ +package apiservice; + +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ApiServiceApp implements CommandLineRunner { + + public static void main(String [] args) { + SpringApplication.run(ApiServiceApp.class, args); + } + + @Override + public void run(String... args) { + + } +} diff --git a/ApiService/src/main/java/apiservice/model/Asset.java b/ApiService/src/main/java/apiservice/model/Asset.java new file mode 100644 index 0000000000000000000000000000000000000000..771c73fbfc9a57e315042c4b214cc9bea899a902 --- /dev/null +++ b/ApiService/src/main/java/apiservice/model/Asset.java @@ -0,0 +1,56 @@ +package apiservice.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.Map; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class Asset { + String title; + String registrar; + String description; + String attribution; + String publisher; + String creation_date; + String type; + String license; + String license_dual; + String license_addons; + String license_DALICC; + String identifier; + String IPFS; + String NFT; + String filename; + String hash; + String hash_sha; + String hash_sha512; + String revocation_date; + String revocation_reason; + String registration_date; + String tags; + String relation; + String supersedes; + String counter; + String publishing_date; + String grid; + String public_certificate; + String language; + String visibility; + Map<String, String> attributes; + String customkey0; + String customkey1; + String customkey2; + String customkey3; + String customkey4; + String customkey5; + String customkey6; + String customkey7; + String customkey8; + String customkey9; +} diff --git a/ApiService/src/main/java/apiservice/repo/AssetRepo.java b/ApiService/src/main/java/apiservice/repo/AssetRepo.java new file mode 100644 index 0000000000000000000000000000000000000000..0a42aa1dda2e815bf31e2ef88f6ff73fa1192cb5 --- /dev/null +++ b/ApiService/src/main/java/apiservice/repo/AssetRepo.java @@ -0,0 +1,24 @@ +package apiservice.repo; + +import apiservice.model.Asset; +import org.springframework.stereotype.Repository; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Repository +public class AssetRepo implements IAssetRepo<Asset> { + + private final Map<String, List<Asset>> repository = new HashMap<>(); + @Override + public List<Asset> findAllByUid(String uid) { + return repository.get(uid); + } + + @Override + public Asset save(Asset asset, String uid) { + repository.get(uid).add(asset); + return asset; + } +} diff --git a/ApiService/src/main/java/apiservice/repo/IAssetRepo.java b/ApiService/src/main/java/apiservice/repo/IAssetRepo.java new file mode 100644 index 0000000000000000000000000000000000000000..d4e58e0fb01089f53a960c9c5acd35d1ec78e680 --- /dev/null +++ b/ApiService/src/main/java/apiservice/repo/IAssetRepo.java @@ -0,0 +1,9 @@ +package apiservice.repo; + +import java.util.List; + +public interface IAssetRepo<Asset> { + List<Asset> findAllByUid(String uid); + + Asset save(Asset asset, String uid); +} diff --git a/ApiService/src/main/java/apiservice/service/ApiController.java b/ApiService/src/main/java/apiservice/service/ApiController.java new file mode 100644 index 0000000000000000000000000000000000000000..d6267d1a25176959b678e52db7d587e59c8aef45 --- /dev/null +++ b/ApiService/src/main/java/apiservice/service/ApiController.java @@ -0,0 +1,36 @@ +package apiservice.service; + +import apiservice.model.Asset; +import apiservice.service.ApiService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/assets/") +public class ApiController { + + private final ApiService service; + + @Autowired + public ApiController(ApiService service) { + this.service = service; + } + + @GetMapping(produces = {MediaType.APPLICATION_JSON_VALUE}) + public ResponseEntity<List<Asset>> getAssets(@RequestParam(name ="uid") String uid) { + + List<Asset> assets = service.getAssets(uid); + + return new ResponseEntity<>(assets, HttpStatus.OK); + } + + @PostMapping(produces = {MediaType.APPLICATION_JSON_VALUE}) + public void postAsset(@RequestBody() Asset asset, @RequestParam(name = "uid") String uid) { + service.saveAsset(asset,uid); + } +} diff --git a/ApiService/src/main/java/apiservice/service/ApiService.java b/ApiService/src/main/java/apiservice/service/ApiService.java new file mode 100644 index 0000000000000000000000000000000000000000..08b013bac708f8a829156f5660c4b9fb9ed25df6 --- /dev/null +++ b/ApiService/src/main/java/apiservice/service/ApiService.java @@ -0,0 +1,27 @@ +package apiservice.service; + +import apiservice.repo.IAssetRepo; +import apiservice.model.Asset; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class ApiService { + + private final IAssetRepo repo; + + @Autowired + public ApiService(IAssetRepo repo) { + this.repo = repo; + } + + public List<Asset> getAssets(String uid) { + return repo.findAllByUid(uid); + } + + public void saveAsset(Asset asset, String uid) { + repo.save(asset,uid); + } +} diff --git a/ApiService/src/test/java/apiservice/ApiControllerTest.java b/ApiService/src/test/java/apiservice/ApiControllerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..4b31804a1b58e834ee863d8477c57afdc75d9dd9 --- /dev/null +++ b/ApiService/src/test/java/apiservice/ApiControllerTest.java @@ -0,0 +1,78 @@ +package apiservice; + +import apiservice.model.Asset; +import apiservice.repo.AssetRepo; +import apiservice.service.ApiController; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.*; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import java.util.Map; + +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@WebMvcTest(ApiController.class) +class ApiControllerTest { + + @Autowired + MockMvc mockMvc; + + @Autowired + ObjectMapper mapper; + + @MockBean + ApiController apiController; + + @MockBean + AssetRepo assetRepo; + + @Test + public void contextLoads() { + assert (apiController != null); + } + + + @Test + void postAsset() throws Exception { + + Asset asset = new Asset(); + asset.setTitle("test title"); + asset.setAttributes(Map.ofEntries(Map.entry("test attribute", "blue"))); + + Mockito.when(assetRepo.save(asset, "1")).thenReturn(asset); + + MockHttpServletRequestBuilder mockRequest = MockMvcRequestBuilders.post("/assets/") + .contentType(MediaType.APPLICATION_JSON_VALUE) + .accept(MediaType.APPLICATION_JSON_VALUE) + .content(this.mapper.writeValueAsString(asset)) + .param("uid", "1"); + + mockMvc.perform(mockRequest) + .andExpect(status().isOk()); + } + + @Test + void getAssets() throws Exception { + + mockMvc.perform(MockMvcRequestBuilders + .get("/assets/").param("uid", "1") + .contentType(MediaType.APPLICATION_JSON_VALUE)) + .andExpect(status().isOk()); + } + +} + + + + + + + +