From e62350e12d4e7cd1a5b181bbae9c87dccfcd6614 Mon Sep 17 00:00:00 2001 From: Paulo Jr Date: Mon, 2 Mar 2020 09:49:01 -0300 Subject: [PATCH 1/2] QuotaHolder Controller with Update name --- .../controllers/QuotaHolderController.java | 12 ++++++++++ .../QuotaHolderControllerTest.java | 24 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/main/java/com/javadevzone/cotas/controllers/QuotaHolderController.java b/src/main/java/com/javadevzone/cotas/controllers/QuotaHolderController.java index 9372aac..6aa3cdf 100644 --- a/src/main/java/com/javadevzone/cotas/controllers/QuotaHolderController.java +++ b/src/main/java/com/javadevzone/cotas/controllers/QuotaHolderController.java @@ -7,10 +7,12 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import javax.validation.constraints.NotNull; import java.net.URI; import java.util.Objects; import static org.springframework.http.HttpStatus.CREATED; +import static org.springframework.http.HttpStatus.OK; @RestController @RequestMapping("/quotaHolder") @@ -28,4 +30,14 @@ public QuotaHolder create(@RequestBody QuotaHolder quotaHolder) { return quotaHolderRepository.save(quotaHolder); } + @PutMapping("/{id}") + @ResponseStatus(OK) + public QuotaHolder atualizar(@PathVariable @NotNull Long id, @RequestBody QuotaHolder quotaHolder) { + if (Objects.isNull(quotaHolder.getName())) + throw new RequiredAttributeException("O nome do Investidor é obrigatório"); + + quotaHolder.setId(id); + return quotaHolderRepository.save(quotaHolder); + } + } diff --git a/src/test/java/com/javadevzone/cotas/controllers/QuotaHolderControllerTest.java b/src/test/java/com/javadevzone/cotas/controllers/QuotaHolderControllerTest.java index 104020e..5760c53 100644 --- a/src/test/java/com/javadevzone/cotas/controllers/QuotaHolderControllerTest.java +++ b/src/test/java/com/javadevzone/cotas/controllers/QuotaHolderControllerTest.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.javadevzone.cotas.CotasApplication; import com.javadevzone.cotas.entity.QuotaHolder; +import com.javadevzone.cotas.repository.QuotaHolderRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -16,6 +17,7 @@ import static org.springframework.http.MediaType.APPLICATION_JSON; import static org.springframework.test.web.servlet.ResultMatcher.matchAll; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(SpringExtension.class) @@ -29,6 +31,9 @@ public class QuotaHolderControllerTest { @Autowired private MockMvc mockMvc; + @Autowired + private QuotaHolderRepository quotaHolderRepository; + @Test public void should_create_a_new_quota_holder() throws Exception { QuotaHolder mrs_lovely = QuotaHolder.builder().name("Mrs Lovely").build(); @@ -58,4 +63,23 @@ public void should_throw_exception_when_creating_new_quota_holder_without_name() } + @Test + public void should_update_quota_holder_name_then_return() throws Exception { + QuotaHolder savedQuotaHolder = quotaHolderRepository.save(QuotaHolder.builder().name("Mrs Lovely").build()); + + savedQuotaHolder.setName("Nequinho"); + MvcResult mvcResult = mockMvc.perform(put("/quotaHolder/" + savedQuotaHolder.getId()) + .contentType(APPLICATION_JSON) + .accept(APPLICATION_JSON) + .content(mapper.writeValueAsString(savedQuotaHolder))) + .andExpect(matchAll(status().isOk())) + .andReturn(); + + QuotaHolder investidor = mapper.readValue(mvcResult.getResponse().getContentAsString(), QuotaHolder.class); + + assertThat(investidor.getName()) + .isEqualTo(savedQuotaHolder.getName()); + + } + } From f6d4d34a3f33ca90feb3ae59c7d0ba45a5a9a463 Mon Sep 17 00:00:00 2001 From: Paulo Jr Date: Mon, 30 Mar 2020 09:06:55 -0300 Subject: [PATCH 2/2] :sparkles: Initiating Kafka configs --- README.md | 16 ++++++++ build.gradle | 7 +++- gradle/wrapper/gradle-wrapper.properties | 5 ++- src/main/resources/application.properties | 6 +++ .../resources/db/migration/clear_database.sql | 9 +++++ .../com/javadevzone/cotas/TestWebflux.java | 39 +++++++++++++++++++ 6 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/db/migration/clear_database.sql create mode 100644 src/test/java/com/javadevzone/cotas/TestWebflux.java diff --git a/README.md b/README.md index e469755..66d1ec7 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,22 @@ docker volume create cotas-mysql docker run -d --rm --name mysql-server -v cotas-mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=cotas mysql:8.0 ``` +``` +# Start Zookeeper and expose port 2181 for use by the host machine +docker run -d --name zookeeper -p 2181:2181 confluent/zookeeper + +# Start Kafka and expose port 9092 for use by the host machine +docker run -d --name kafka -p 9092:9092 --link zookeeper:zookeeper confluent/kafka + +# Start Schema Registry and expose port 8081 for use by the host machine +docker run -d --name schema-registry -p 8081:8081 --link zookeeper:zookeeper \ + --link kafka:kafka confluent/schema-registry + +# Start REST Proxy and expose port 8082 for use by the host machine +docker run -d --name rest-proxy -p 8082:8082 --link zookeeper:zookeeper \ + --link kafka:kafka --link schema-registry:schema-registry confluent/rest-proxy +``` + ## API Calls Examples [Postman Documentation](https://documenter.getpostman.com/view/984544/SWTG6bCs) diff --git a/build.gradle b/build.gradle index 3495451..fb7b8f5 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ plugins { - id 'org.springframework.boot' version '2.2.1.RELEASE' - id 'io.spring.dependency-management' version '1.0.8.RELEASE' + id 'org.springframework.boot' version '2.2.6.RELEASE' + id 'io.spring.dependency-management' version '1.0.9.RELEASE' id 'org.asciidoctor.convert' version '1.5.8' id 'java' id "org.flywaydb.flyway" version "6.1.0" @@ -46,6 +46,9 @@ dependencies { testCompile group: 'com.h2database', name: 'h2', version: '1.4.200' compile group: 'org.springframework.boot', name: 'spring-boot-devtools' compile group: 'com.zaxxer', name: 'HikariCP', version: '3.4.1' + compile group: 'org.springframework', name: 'spring-webflux', version: '5.2.4.RELEASE' + compile group: 'org.springframework.kafka', name: 'spring-kafka', version: '2.4.4.RELEASE' + compile group: 'org.springframework', name: 'spring-core', version: '5.2.5.RELEASE' } test { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4a6ebce..ae652f2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Sun Mar 29 19:53:19 BRT 2020 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.2.1-all.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.2.1-bin.zip -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index eefef52..926bd5b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -12,4 +12,10 @@ spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true #Logging +logging.level.root=ERROR +logging.level.com.javadevzone.cotas=INFO logging.level.com.zaxxer.hikari=INFO + +#Kafka +kafka.bootstrapAddress=localhost:9092 +kafka.investmentTopic=investmentUpdated diff --git a/src/main/resources/db/migration/clear_database.sql b/src/main/resources/db/migration/clear_database.sql new file mode 100644 index 0000000..6ad49f0 --- /dev/null +++ b/src/main/resources/db/migration/clear_database.sql @@ -0,0 +1,9 @@ +drop table asset_history; +drop table wallet_investments; +drop table investment; +drop table asset; +drop table wallet_history; +drop table wallet_quota_holders; +drop table quota_holder; +drop table wallet; +drop table flyway_schema_history; \ No newline at end of file diff --git a/src/test/java/com/javadevzone/cotas/TestWebflux.java b/src/test/java/com/javadevzone/cotas/TestWebflux.java new file mode 100644 index 0000000..550dc60 --- /dev/null +++ b/src/test/java/com/javadevzone/cotas/TestWebflux.java @@ -0,0 +1,39 @@ +package com.javadevzone.cotas; + +import reactor.core.publisher.Mono; + +public class TestWebflux { + + public Mono testandoUmaChamada() { + Mono httpSource = Mono.just(""); + + return httpSource; + } + + public Mono soma(Double x, Double y) { + Mono soma = Mono.just(x); + Mono valorSomado = soma.map(element -> { + System.out.println("Imprimindo"); + if (true) + throw new NullPointerException(""); + + return element / y; + }); + return valorSomado.doOnError(Throwable::printStackTrace); + } + + public static void main(String[] args) { + TestWebflux webflux = new TestWebflux(); + Mono soma = webflux.soma(10.0, Double.parseDouble("0")); + soma.subscribe(System.out::println); + +// Double block = soma.block(); +// System.out.println(block); + + // LAZY +// Usuario u = findByIdUsuario(1L); + + //u.getPermissoes(); + } + +}