diff --git a/.gitea/workflows/publish.yaml b/.gitea/workflows/publish.yaml index ec7bdc4..5bf62e3 100644 --- a/.gitea/workflows/publish.yaml +++ b/.gitea/workflows/publish.yaml @@ -38,7 +38,10 @@ jobs: - name: Cache Maven packages uses: actions/cache@v4 with: - path: ~/.m2/repository + path: | + ~/.m2/repository + **/target/native-image-cache + **/target/reports key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- diff --git a/.gitea/workflows/test.yaml b/.gitea/workflows/test.yaml index 639cf30..c7e167f 100644 --- a/.gitea/workflows/test.yaml +++ b/.gitea/workflows/test.yaml @@ -30,7 +30,10 @@ jobs: - name: Cache Maven packages uses: actions/cache@v4 with: - path: ~/.m2/repository + path: | + ~/.m2/repository + **/target/native-image-cache + **/target/reports key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- @@ -46,10 +49,13 @@ jobs: apt-get install -y --no-install-recommends --no-install-suggests \ openjdk-25-jdk-headless docker-cli docker-buildx - - name: Build and Test all modules + - name: Build and Test all module + env: + TESTCONTAINERS_RYUK_DISABLED: true run: | - ./mvnw -B install \ - -Dquarkus.container-image.push=false -Pnative + ./mvnw -B clean install -Pnative \ + -Dquarkus.container-image.push=false \ + -Dquarkus.container-image.registry=git.demonkernel.io.vn - name: Publish Test Report uses: dorny/test-reporter@v3 diff --git a/account-service/pom.xml b/account-service/pom.xml index 1b44ac7..5f1e025 100644 --- a/account-service/pom.xml +++ b/account-service/pom.xml @@ -49,6 +49,20 @@ lib ${project.version} + + org.bitbucket.b_c + jose4j + 0.9.3 + + + io.quarkus + quarkus-messaging-kafka + + + io.quarkus + quarkus-test-kafka-companion + test + io.quarkus quarkus-jdbc-h2 diff --git a/account-service/src/main/docker/Dockerfile.jvm b/account-service/src/main/docker/Dockerfile.jvm index 6a6f0e5..49bfabc 100644 --- a/account-service/src/main/docker/Dockerfile.jvm +++ b/account-service/src/main/docker/Dockerfile.jvm @@ -80,7 +80,7 @@ # You can find more information about the UBI base runtime images and their configuration here: # https://rh-openjdk.github.io/redhat-openjdk-containers/ ### -FROM registry.access.redhat.com/ubi9/openjdk-21-runtime:1.24 +FROM registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24 ENV LANGUAGE='en_US:en' diff --git a/account-service/src/main/docker/Dockerfile.legacy-jar b/account-service/src/main/docker/Dockerfile.legacy-jar index 53dfe67..192280b 100644 --- a/account-service/src/main/docker/Dockerfile.legacy-jar +++ b/account-service/src/main/docker/Dockerfile.legacy-jar @@ -80,7 +80,7 @@ # You can find more information about the UBI base runtime images and their configuration here: # https://rh-openjdk.github.io/redhat-openjdk-containers/ ### -FROM registry.access.redhat.com/ubi9/openjdk-21-runtime:1.24 +FROM registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24 ENV LANGUAGE='en_US:en' diff --git a/account-service/src/main/java/com/drinkool/entities/ManagerEntity.java b/account-service/src/main/java/com/drinkool/entities/ManagerEntity.java index 1f7e2ea..6d4691d 100644 --- a/account-service/src/main/java/com/drinkool/entities/ManagerEntity.java +++ b/account-service/src/main/java/com/drinkool/entities/ManagerEntity.java @@ -8,24 +8,7 @@ import jakarta.persistence.*; @Table(name = Role.Manager) public class ManagerEntity extends UserModel { - public String eateryName; - - public boolean isVerified; - public ManagerEntity() { super(Role.Manager); } - - public void signup( - String name, - String phone, - String rawPassword, - String eateryName - ) { - this.eateryName = eateryName; - - this.isVerified = false; - - this.signup(name, phone, rawPassword); - } } diff --git a/account-service/src/main/java/com/drinkool/models/UserModel.java b/account-service/src/main/java/com/drinkool/models/UserModel.java index fcdb2d2..e3a1346 100644 --- a/account-service/src/main/java/com/drinkool/models/UserModel.java +++ b/account-service/src/main/java/com/drinkool/models/UserModel.java @@ -1,6 +1,6 @@ package com.drinkool.models; -import com.drinkool.entities.BaseEntity; +import com.drinkool.lib.entities.BaseEntity; import com.drinkool.utils.PhoneValidator; import com.fasterxml.jackson.annotation.JsonProperty; import com.password4j.Password; diff --git a/account-service/src/main/java/com/drinkool/services/AccountService.java b/account-service/src/main/java/com/drinkool/services/AccountService.java index 5c7cb22..a6c3002 100644 --- a/account-service/src/main/java/com/drinkool/services/AccountService.java +++ b/account-service/src/main/java/com/drinkool/services/AccountService.java @@ -7,7 +7,7 @@ import jakarta.inject.Inject; import jakarta.ws.rs.*; import jakarta.ws.rs.core.Response; -@Path("") +@Path("/") public class AccountService { @Inject diff --git a/account-service/src/main/java/com/drinkool/services/CustomerService.java b/account-service/src/main/java/com/drinkool/services/CustomerService.java index ea00033..c03301d 100644 --- a/account-service/src/main/java/com/drinkool/services/CustomerService.java +++ b/account-service/src/main/java/com/drinkool/services/CustomerService.java @@ -3,6 +3,7 @@ package com.drinkool.services; import com.drinkool.*; import com.drinkool.dtos.*; import com.drinkool.entities.CustomerEntity; + import jakarta.inject.Inject; import jakarta.transaction.Transactional; import jakarta.ws.rs.*; diff --git a/account-service/src/main/java/com/drinkool/services/ManagerService.java b/account-service/src/main/java/com/drinkool/services/ManagerService.java index f69f601..cffc147 100644 --- a/account-service/src/main/java/com/drinkool/services/ManagerService.java +++ b/account-service/src/main/java/com/drinkool/services/ManagerService.java @@ -2,13 +2,24 @@ package com.drinkool.services; import com.drinkool.*; import com.drinkool.dtos.*; +import com.drinkool.dtos.event.ManagerCreate; import com.drinkool.entities.ManagerEntity; +import jakarta.enterprise.context.ApplicationScoped; import jakarta.transaction.Transactional; import jakarta.ws.rs.*; import jakarta.ws.rs.core.*; +import org.eclipse.microprofile.reactive.messaging.*; @Path(Role.Manager) -public class ManagerService { +@ApplicationScoped +public class ManagerService extends BaseService { + + public ManagerService() { + super(ManagerEntity.class); + } + + @Channel("manager-out") + Emitter managerEmitter; @POST @Path(Url.Signup) @@ -16,12 +27,13 @@ public class ManagerService { public Response signup(ManagerSignup input) { ManagerEntity newManager = new ManagerEntity(); - newManager.signup( - input.name, - input.phone, - input.password, - input.eateryName - ); + newManager.signup(input.name, input.phone, input.password); + + ManagerCreate message = new ManagerCreate(); + message.id = newManager.id; + message.eateryName = input.eateryName; + + managerEmitter.send(message); return Response.status(Response.Status.CREATED) .header(InternalValue.userId, newManager.id.toString()) diff --git a/account-service/src/main/resources/application.properties b/account-service/src/main/resources/application.properties index af3a9a5..e26a74b 100644 --- a/account-service/src/main/resources/application.properties +++ b/account-service/src/main/resources/application.properties @@ -27,4 +27,13 @@ quarkus.index-dependency.lib.artifact-id=lib quarkus.native.container-build=true quarkus.native.remote-container-build=true quarkus.native.additional-build-args=--initialize-at-run-time=com.password4j.AlgorithmFinder,--future-defaults=all -quarkus.native.resources.includes=com/google/i18n/phonenumbers/data/**/* \ No newline at end of file +quarkus.native.resources.includes=com/google/i18n/phonenumbers/data/**/* + +# Kafka +%prod.mp.messaging.connector.smallrye-kafka.bootstrap.servers=${KAFKA_SERVICE_SERVICE_HOST:host.docker.internal}:9092 + +## Create restaurant topic +mp.messaging.outgoing.manager-out.connector=smallrye-kafka +mp.messaging.outgoing.manager-out.topic=create-restaurant +mp.messaging.outgoing.manager-out.value.serializer=io.quarkus.kafka.client.serialization.ObjectMapperSerializer +quarkus.messaging.kafka.serializer-generation.enabled=true \ No newline at end of file diff --git a/account-service/src/test/java/com/drinkool/services/AccountServiceTest.java b/account-service/src/test/java/com/drinkool/services/AccountServiceTest.java index c8880af..cf06231 100644 --- a/account-service/src/test/java/com/drinkool/services/AccountServiceTest.java +++ b/account-service/src/test/java/com/drinkool/services/AccountServiceTest.java @@ -4,6 +4,7 @@ import static io.restassured.RestAssured.*; import com.drinkool.*; import com.drinkool.dtos.*; + import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; diff --git a/account-service/src/test/java/com/drinkool/services/BaseServiceTest.java b/account-service/src/test/java/com/drinkool/services/BaseServiceTest.java index 2838545..4737e7e 100644 --- a/account-service/src/test/java/com/drinkool/services/BaseServiceTest.java +++ b/account-service/src/test/java/com/drinkool/services/BaseServiceTest.java @@ -5,6 +5,7 @@ import static org.hamcrest.CoreMatchers.*; import com.drinkool.*; import com.drinkool.dtos.*; + import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; diff --git a/account-service/src/test/java/com/drinkool/services/CustomerServiceTest.java b/account-service/src/test/java/com/drinkool/services/CustomerServiceTest.java index a823961..50d8459 100644 --- a/account-service/src/test/java/com/drinkool/services/CustomerServiceTest.java +++ b/account-service/src/test/java/com/drinkool/services/CustomerServiceTest.java @@ -1,12 +1,12 @@ package com.drinkool.services; import static io.restassured.RestAssured.*; -import static org.hamcrest.CoreMatchers.*; import static org.junit.jupiter.api.Assertions.*; import com.drinkool.*; import com.drinkool.dtos.*; import com.drinkool.entities.CustomerEntity; + import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import jakarta.inject.Inject; diff --git a/account-service/src/test/java/com/drinkool/services/ManagerServiceTest.java b/account-service/src/test/java/com/drinkool/services/ManagerServiceTest.java new file mode 100644 index 0000000..c2343a0 --- /dev/null +++ b/account-service/src/test/java/com/drinkool/services/ManagerServiceTest.java @@ -0,0 +1,122 @@ +package com.drinkool.services; + +import static io.restassured.RestAssured.*; +import static org.junit.jupiter.api.Assertions.*; + +import com.drinkool.*; +import com.drinkool.dtos.*; +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.kafka.*; +import io.restassured.http.ContentType; +import io.smallrye.reactive.messaging.kafka.companion.ConsumerTask; +import io.smallrye.reactive.messaging.kafka.companion.KafkaCompanion; +import java.time.Duration; +import org.eclipse.microprofile.config.inject.ConfigProperty; +import org.junit.jupiter.api.Test; + +@QuarkusTest +@QuarkusTestResource(KafkaCompanionResource.class) +public class ManagerServiceTest { + + @InjectKafkaCompanion + KafkaCompanion companion; + + @ConfigProperty(name = "mp.messaging.outgoing.manager-out.topic") + String topicName; + + @Test + void testSignupSuccessAndKafkaMessageSent() { + ManagerSignup input = new ManagerSignup(); + input.name = "Ho Van Quan"; + input.phone = Utils.generateRandomPhone(); + input.password = "strong_password"; + input.eateryName = "Quan Com Ngon"; + + ConsumerTask consumer = companion + .consumeStrings() + .fromTopics(topicName, 1); + + // 2. Gọi API POST /signup + var response = given() + .contentType("application/json") + .body(input) + .when() + .post(Role.Manager + Url.Signup) + .then() + .statusCode(201) + .header(InternalValue.userId, org.hamcrest.Matchers.notNullValue()) + .header(InternalValue.role, Role.Manager) + .extract(); + + String userId = response.header(InternalValue.userId); + + var records = consumer.awaitCompletion(Duration.ofSeconds(15)).getRecords(); + + assertEquals(1, records.size()); + String kafkaPayload = records.get(0).value(); + + assertTrue(kafkaPayload.contains(userId)); + assertTrue(kafkaPayload.contains("Quan Com Ngon")); + } + + @Test + void testLoginSuccess() { + // BƯỚC 1: Tạo user trước bằng signup + String phone = Utils.generateRandomPhone(); + ManagerSignup signupData = new ManagerSignup(); + signupData.name = "Login User"; + signupData.phone = phone; + signupData.password = "secure_pass"; + signupData.eateryName = "Test Eatery"; + + given() + .contentType(ContentType.JSON) + .body(signupData) + .post(Role.Manager + Url.Signup) + .then() + .statusCode(201); + + // BƯỚC 2: Thử đăng nhập + Login loginInput = new Login(); + loginInput.phone = phone; + loginInput.password = "secure_pass"; + + given() + .contentType(ContentType.JSON) + .body(loginInput) + .when() + .post(Role.Manager + Url.Login) + .then() + .statusCode(202); + } + + @Test + void testLoginFailWrongPassword() { + String phone = Utils.generateRandomPhone(); + ManagerSignup signupData = new ManagerSignup(); + signupData.name = "Wrong Pass User"; + signupData.phone = phone; + signupData.password = "correct_password"; + signupData.eateryName = "Test Eatery"; + + given() + .contentType(ContentType.JSON) + .body(signupData) + .post(Role.Manager + Url.Signup) + .then() + .statusCode(201); + + Login loginInput = new Login(); + loginInput.phone = phone; + loginInput.password = "wrong_password"; + + given() + .contentType(ContentType.JSON) + .body(loginInput) + .when() + .post(Role.Manager + Url.Login) + .then() + .statusCode(400); // BadRequestException + } +} diff --git a/eatery-service/pom.xml b/eatery-service/pom.xml index 60415e3..9f926e5 100644 --- a/eatery-service/pom.xml +++ b/eatery-service/pom.xml @@ -1,9 +1,5 @@ - - + + 4.0.0 @@ -20,11 +16,9 @@ 3.15.0 25 UTF-8 - UTF-8 + UTF-8 quarkus-bom - io.quarkus.platform + io.quarkus.platform 3.32.4 true 3.5.4 @@ -48,6 +42,20 @@ lib ${project.version} + + io.quarkus + quarkus-messaging-kafka + + + io.smallrye.reactive + smallrye-reactive-messaging-in-memory + test + + + org.bitbucket.b_c + jose4j + 0.9.3 + io.quarkus quarkus-jdbc-h2 @@ -114,8 +122,7 @@ @{argLine} - org.jboss.logmanager.LogManager + org.jboss.logmanager.LogManager ${maven.home} 1 @@ -137,10 +144,8 @@ @{argLine} - - ${project.build.directory}/${project.build.finalName}-runner - org.jboss.logmanager.LogManager + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager ${maven.home} diff --git a/eatery-service/src/main/docker/Dockerfile.jvm b/eatery-service/src/main/docker/Dockerfile.jvm index 23c1893..2431b4b 100644 --- a/eatery-service/src/main/docker/Dockerfile.jvm +++ b/eatery-service/src/main/docker/Dockerfile.jvm @@ -80,7 +80,7 @@ # You can find more information about the UBI base runtime images and their configuration here: # https://rh-openjdk.github.io/redhat-openjdk-containers/ ### -FROM registry.access.redhat.com/ubi9/openjdk-21-runtime:1.24 +FROM registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24 ENV LANGUAGE='en_US:en' diff --git a/eatery-service/src/main/docker/Dockerfile.legacy-jar b/eatery-service/src/main/docker/Dockerfile.legacy-jar index 5059b5c..735c308 100644 --- a/eatery-service/src/main/docker/Dockerfile.legacy-jar +++ b/eatery-service/src/main/docker/Dockerfile.legacy-jar @@ -80,7 +80,7 @@ # You can find more information about the UBI base runtime images and their configuration here: # https://rh-openjdk.github.io/redhat-openjdk-containers/ ### -FROM registry.access.redhat.com/ubi9/openjdk-21-runtime:1.24 +FROM registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24 ENV LANGUAGE='en_US:en' diff --git a/eatery-service/src/main/java/com/drinkool/entities/EateryEntity.java b/eatery-service/src/main/java/com/drinkool/entities/EateryEntity.java new file mode 100644 index 0000000..ae47d29 --- /dev/null +++ b/eatery-service/src/main/java/com/drinkool/entities/EateryEntity.java @@ -0,0 +1,37 @@ +package com.drinkool.entities; + +import com.drinkool.lib.entities.BaseEntity; +import jakarta.persistence.*; +import jakarta.transaction.Transactional; +import java.util.UUID; + +@Entity +@Table +public class EateryEntity extends BaseEntity { + + @Column(unique = true, nullable = false) + public UUID ownerId; + + @Column(unique = true, nullable = false) + public String name; + + @Column(nullable = false) + public boolean isVerified = false; + + public EateryEntity() {} + + @Transactional + public void create(UUID ownerId, String name) { + EateryEntity existedEatery = EateryEntity.find( + "ownerId", + ownerId + ).firstResult(); + + if (existedEatery != null) throw new RuntimeException("ExistedEatery"); + + this.ownerId = ownerId; + this.name = name; + + this.persist(); + } +} diff --git a/eatery-service/src/main/java/com/drinkool/entities/EateryInventoryItemEntity.java b/eatery-service/src/main/java/com/drinkool/entities/EateryInventoryItemEntity.java index 334655b..e428384 100644 --- a/eatery-service/src/main/java/com/drinkool/entities/EateryInventoryItemEntity.java +++ b/eatery-service/src/main/java/com/drinkool/entities/EateryInventoryItemEntity.java @@ -1,5 +1,6 @@ package com.drinkool.entities; +import com.drinkool.lib.entities.BaseEntity; import jakarta.persistence.*; import jakarta.transaction.Transactional; diff --git a/eatery-service/src/main/java/com/drinkool/entities/InventoryItemEntity.java b/eatery-service/src/main/java/com/drinkool/entities/InventoryItemEntity.java index d83d1d0..e85a8e1 100644 --- a/eatery-service/src/main/java/com/drinkool/entities/InventoryItemEntity.java +++ b/eatery-service/src/main/java/com/drinkool/entities/InventoryItemEntity.java @@ -1,5 +1,6 @@ package com.drinkool.entities; +import com.drinkool.lib.entities.BaseEntity; import jakarta.persistence.Entity; import jakarta.persistence.Table; import jakarta.transaction.Transactional; diff --git a/eatery-service/src/main/java/com/drinkool/entities/MenuItemEntity.java b/eatery-service/src/main/java/com/drinkool/entities/MenuItemEntity.java index 81da14b..efbd32a 100644 --- a/eatery-service/src/main/java/com/drinkool/entities/MenuItemEntity.java +++ b/eatery-service/src/main/java/com/drinkool/entities/MenuItemEntity.java @@ -1,5 +1,6 @@ package com.drinkool.entities; +import com.drinkool.lib.entities.BaseEntity; import jakarta.persistence.*; import jakarta.transaction.Transactional; import java.util.*; diff --git a/eatery-service/src/main/java/com/drinkool/entities/MenuItemIngredientEntity.java b/eatery-service/src/main/java/com/drinkool/entities/MenuItemIngredientEntity.java index 2c01f3c..17f7cd8 100644 --- a/eatery-service/src/main/java/com/drinkool/entities/MenuItemIngredientEntity.java +++ b/eatery-service/src/main/java/com/drinkool/entities/MenuItemIngredientEntity.java @@ -1,5 +1,6 @@ package com.drinkool.entities; +import com.drinkool.lib.entities.BaseEntity; import jakarta.persistence.*; @Entity diff --git a/eatery-service/src/main/java/com/drinkool/entities/ReviewEntity.java b/eatery-service/src/main/java/com/drinkool/entities/ReviewEntity.java index efd5e77..4477958 100644 --- a/eatery-service/src/main/java/com/drinkool/entities/ReviewEntity.java +++ b/eatery-service/src/main/java/com/drinkool/entities/ReviewEntity.java @@ -1,6 +1,6 @@ package com.drinkool.entities; -import com.drinkool.models.ReviewModel; +import com.drinkool.lib.models.ReviewModel; import jakarta.persistence.*; import jakarta.transaction.Transactional; import java.util.UUID; diff --git a/eatery-service/src/main/java/com/drinkool/services/EateryService.java b/eatery-service/src/main/java/com/drinkool/services/EateryService.java new file mode 100644 index 0000000..68844ef --- /dev/null +++ b/eatery-service/src/main/java/com/drinkool/services/EateryService.java @@ -0,0 +1,20 @@ +package com.drinkool.services; + +import com.drinkool.dtos.event.ManagerCreate; +import com.drinkool.entities.EateryEntity; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.transaction.Transactional; +import org.eclipse.microprofile.reactive.messaging.Incoming; + +@ApplicationScoped +public class EateryService { + + @Incoming("manager-in") + @Transactional + public void consumeManagerSignup(ManagerCreate input) { + EateryEntity eatery = new EateryEntity(); + + eatery.create(input.id, input.eateryName); + } +} diff --git a/eatery-service/src/main/resources/application.properties b/eatery-service/src/main/resources/application.properties index ff3d981..6652b84 100644 --- a/eatery-service/src/main/resources/application.properties +++ b/eatery-service/src/main/resources/application.properties @@ -3,7 +3,7 @@ quarkus.datasource.db-kind=postgresql quarkus.datasource.username=postgres quarkus.datasource.password=password -quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/eatery +quarkus.datasource.jdbc.url=jdbc:postgresql://host.docker.internal:5432/postgres ## Tự động tạo bảng từ Entity (chỉ dùng cho môi trường dev) quarkus.hibernate-orm.database.generation=update @@ -24,4 +24,13 @@ quarkus.index-dependency.lib.artifact-id=lib # Build quarkus.native.container-build=true quarkus.native.remote-container-build=true -quarkus.native.additional-build-args=--future-defaults=all \ No newline at end of file +quarkus.native.additional-build-args=--future-defaults=all + +# Kafka +mp.messaging.connector.smallrye-kafka.bootstrap.servers=${KAFKA_SERVICE_SERVICE_HOST:host.docker.internal}:9092 + +## Create restaurant topic +mp.messaging.incoming.manager-in.connector=smallrye-kafka +mp.messaging.incoming.manager-in.topic=create-restaurant +mp.messaging.incoming.manager-in.auto.offset.reset=earliest +quarkus.messaging.kafka.serializer-generation.enabled=true \ No newline at end of file diff --git a/eatery-service/src/test/java/com/drinkool/entities/ReviewEntityTest.java b/eatery-service/src/test/java/com/drinkool/entities/ReviewEntityTest.java index 956b795..9dedee1 100644 --- a/eatery-service/src/test/java/com/drinkool/entities/ReviewEntityTest.java +++ b/eatery-service/src/test/java/com/drinkool/entities/ReviewEntityTest.java @@ -1,6 +1,6 @@ package com.drinkool.entities; -import com.drinkool.models.ReviewModel; +import com.drinkool.lib.models.ReviewModel; import io.quarkus.test.junit.QuarkusTest; import jakarta.transaction.Transactional; import java.util.UUID; diff --git a/eatery-service/src/test/java/com/drinkool/services/EateryServiceTest.java b/eatery-service/src/test/java/com/drinkool/services/EateryServiceTest.java new file mode 100644 index 0000000..897be96 --- /dev/null +++ b/eatery-service/src/test/java/com/drinkool/services/EateryServiceTest.java @@ -0,0 +1,43 @@ +package com.drinkool.services; + +import com.drinkool.dtos.event.ManagerCreate; +import com.drinkool.entities.EateryEntity; +import io.quarkus.test.junit.QuarkusTest; +import io.smallrye.reactive.messaging.memory.InMemoryConnector; +import jakarta.enterprise.context.control.ActivateRequestContext; +import jakarta.enterprise.inject.Any; +import jakarta.inject.Inject; +import java.util.UUID; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +@QuarkusTest +public class EateryServiceTest { + + @Inject + @Any + InMemoryConnector connector; + + @Test + @ActivateRequestContext + void testConsumeManagerSignup() throws InterruptedException { + // 1. Chuẩn bị dữ liệu giả lập + ManagerCreate input = new ManagerCreate(); + input.id = UUID.randomUUID(); // Giả sử manager ID là 99 + input.eateryName = "Quan Bun Cha Test"; + + // 2. Đẩy tin nhắn vào channel "manager-in" bằng InMemoryConnector + connector.source("manager-in").send(input); + + Thread.sleep(1000); + + // 3. Kiểm tra kết quả trong Database + // Lưu ý: Vì xử lý Kafka là bất đồng bộ, đôi khi cần đợi vài miligiây + // nhưng với InMemoryConnector thì thường là tức thì. + + EateryEntity eatery = EateryEntity.find("ownerId", input.id).firstResult(); + + Assertions.assertNotNull(eatery, "Eatery should be created in DB"); + Assertions.assertEquals("Quan Bun Cha Test", eatery.name); + } +} diff --git a/eatery-service/src/test/java/com/drinkool/services/ReviewServiceTest.java b/eatery-service/src/test/java/com/drinkool/services/ReviewServiceTest.java index 69c5c34..5ed751e 100644 --- a/eatery-service/src/test/java/com/drinkool/services/ReviewServiceTest.java +++ b/eatery-service/src/test/java/com/drinkool/services/ReviewServiceTest.java @@ -5,7 +5,7 @@ import static org.junit.jupiter.api.Assertions.*; import com.drinkool.dtos.SendReview; import com.drinkool.entities.ReviewEntity; -import com.drinkool.models.ReviewModel; +import com.drinkool.lib.models.ReviewModel; import io.quarkus.test.junit.QuarkusTest; import io.restassured.http.ContentType; import java.util.Random; diff --git a/eatery-service/src/test/resources/application.properties b/eatery-service/src/test/resources/application.properties index 42128a9..f69780f 100644 --- a/eatery-service/src/test/resources/application.properties +++ b/eatery-service/src/test/resources/application.properties @@ -7,4 +7,7 @@ quarkus.http.host=0.0.0.0 %test.quarkus.datasource.jdbc.url=jdbc:h2:mem:test_db;DB_CLOSE_DELAY=-1 ## Orm -%test.quarkus.hibernate-orm.database.generation=drop-and-create \ No newline at end of file +%test.quarkus.hibernate-orm.database.generation=drop-and-create + +# Kafka +mp.messaging.incoming.manager-in.connector=smallrye-in-memory \ No newline at end of file diff --git a/gateway-service/src/main/docker/Dockerfile.jvm b/gateway-service/src/main/docker/Dockerfile.jvm index 5d81f84..fe587ea 100644 --- a/gateway-service/src/main/docker/Dockerfile.jvm +++ b/gateway-service/src/main/docker/Dockerfile.jvm @@ -80,7 +80,7 @@ # You can find more information about the UBI base runtime images and their configuration here: # https://rh-openjdk.github.io/redhat-openjdk-containers/ ### -FROM registry.access.redhat.com/ubi9/openjdk-21-runtime:1.24 +FROM registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24 ENV LANGUAGE='en_US:en' diff --git a/gateway-service/src/main/docker/Dockerfile.legacy-jar b/gateway-service/src/main/docker/Dockerfile.legacy-jar index 604f97d..15bc9a6 100644 --- a/gateway-service/src/main/docker/Dockerfile.legacy-jar +++ b/gateway-service/src/main/docker/Dockerfile.legacy-jar @@ -80,7 +80,7 @@ # You can find more information about the UBI base runtime images and their configuration here: # https://rh-openjdk.github.io/redhat-openjdk-containers/ ### -FROM registry.access.redhat.com/ubi9/openjdk-21-runtime:1.24 +FROM registry.access.redhat.com/ubi9/openjdk-25-runtime:1.24 ENV LANGUAGE='en_US:en' diff --git a/gateway-service/src/main/java/com/drinkool/controller/BaseController.java b/gateway-service/src/main/java/com/drinkool/controller/BaseController.java index c87ecb6..7937ab4 100644 --- a/gateway-service/src/main/java/com/drinkool/controller/BaseController.java +++ b/gateway-service/src/main/java/com/drinkool/controller/BaseController.java @@ -1,12 +1,13 @@ package com.drinkool.controller; -import com.drinkool.InternalValue; -import com.drinkool.Url; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.core.NewCookie; import org.jboss.resteasy.reactive.RestResponse; +import com.drinkool.InternalValue; +import com.drinkool.Url; + public abstract class BaseController { @POST diff --git a/gateway-service/src/main/java/com/drinkool/controller/ManagerController.java b/gateway-service/src/main/java/com/drinkool/controller/ManagerController.java new file mode 100644 index 0000000..6e3667f --- /dev/null +++ b/gateway-service/src/main/java/com/drinkool/controller/ManagerController.java @@ -0,0 +1,36 @@ +package com.drinkool.controller; + +import com.drinkool.*; +import com.drinkool.dtos.*; +import com.drinkool.services.ManagerService; +import io.smallrye.mutiny.Uni; +import jakarta.inject.Inject; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.Response; +import java.util.*; +import org.eclipse.microprofile.rest.client.inject.RestClient; + +@Path("/api/" + Role.Manager) +public class ManagerController extends BaseController { + + @Inject + @RestClient + ManagerService managerService; + + @POST + @Path(Url.Signup) + public Uni proxySignup(ManagerSignup input) { + return managerService.signup(input); + } + + @POST + @Path(Url.Login) + public Uni proxyLogin(Login input) { + return managerService.login(input); + } + + @GET + public Uni me(@HeaderParam(InternalValue.userId) UUID id) { + return managerService.me(id); + } +} diff --git a/gateway-service/src/main/java/com/drinkool/filters/InternalHeaderGatewayFilter.java b/gateway-service/src/main/java/com/drinkool/filters/InternalHeaderGatewayFilter.java index 99afa06..0cef877 100644 --- a/gateway-service/src/main/java/com/drinkool/filters/InternalHeaderGatewayFilter.java +++ b/gateway-service/src/main/java/com/drinkool/filters/InternalHeaderGatewayFilter.java @@ -1,6 +1,5 @@ package com.drinkool.filters; -import com.drinkool.InternalValue; import io.smallrye.mutiny.Uni; import jakarta.ws.rs.Priorities; import jakarta.ws.rs.container.*; @@ -16,6 +15,8 @@ import org.jose4j.jwt.consumer.JwtConsumer; import org.jose4j.jwt.consumer.JwtConsumerBuilder; import org.jose4j.keys.HmacKey; +import com.drinkool.InternalValue; + public class InternalHeaderGatewayFilter { @ConfigProperty(name = "gateway.jwt.secret") diff --git a/gateway-service/src/main/java/com/drinkool/services/BaseService.java b/gateway-service/src/main/java/com/drinkool/services/BaseService.java index 48a87a5..9b0828c 100644 --- a/gateway-service/src/main/java/com/drinkool/services/BaseService.java +++ b/gateway-service/src/main/java/com/drinkool/services/BaseService.java @@ -2,6 +2,7 @@ package com.drinkool.services; import com.drinkool.Url; import com.drinkool.dtos.SmsOtp; + import io.smallrye.mutiny.Uni; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; diff --git a/gateway-service/src/main/java/com/drinkool/services/CustomerService.java b/gateway-service/src/main/java/com/drinkool/services/CustomerService.java index 123d3f8..42147a6 100644 --- a/gateway-service/src/main/java/com/drinkool/services/CustomerService.java +++ b/gateway-service/src/main/java/com/drinkool/services/CustomerService.java @@ -1,7 +1,10 @@ package com.drinkool.services; -import com.drinkool.*; +import com.drinkool.InternalValue; +import com.drinkool.Role; +import com.drinkool.Url; import com.drinkool.dtos.*; + import io.smallrye.mutiny.Uni; import jakarta.ws.rs.*; import jakarta.ws.rs.core.Response; diff --git a/gateway-service/src/main/java/com/drinkool/services/ManagerService.java b/gateway-service/src/main/java/com/drinkool/services/ManagerService.java new file mode 100644 index 0000000..aeb0c3d --- /dev/null +++ b/gateway-service/src/main/java/com/drinkool/services/ManagerService.java @@ -0,0 +1,28 @@ +package com.drinkool.services; + +import com.drinkool.InternalValue; +import com.drinkool.Role; +import com.drinkool.Url; +import com.drinkool.dtos.*; + +import io.smallrye.mutiny.Uni; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.Response; +import java.util.*; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; + +@RegisterRestClient(configKey = "account") +@Path(Role.Manager) +public interface ManagerService { + @POST + @Path(Url.Signup) + Uni signup(ManagerSignup input); + + @POST + @Path(Url.Login) + Uni login(Login input); + + @GET + @Path(Url.Me) + Uni me(@HeaderParam(InternalValue.userId) UUID id); +} diff --git a/gateway-service/src/test/java/com/drinkool/controller/BaseControllerTest.java b/gateway-service/src/test/java/com/drinkool/controller/BaseControllerTest.java index 91c0680..3b04780 100644 --- a/gateway-service/src/test/java/com/drinkool/controller/BaseControllerTest.java +++ b/gateway-service/src/test/java/com/drinkool/controller/BaseControllerTest.java @@ -4,6 +4,7 @@ import static io.restassured.RestAssured.*; import static org.hamcrest.CoreMatchers.*; import com.drinkool.*; + import io.quarkus.test.junit.QuarkusTest; import org.junit.jupiter.api.Test; diff --git a/gateway-service/src/test/java/com/drinkool/filters/InternalHeaderGatewayFilterTest.java b/gateway-service/src/test/java/com/drinkool/filters/InternalHeaderGatewayFilterTest.java index 205c5b8..a53e7a2 100644 --- a/gateway-service/src/test/java/com/drinkool/filters/InternalHeaderGatewayFilterTest.java +++ b/gateway-service/src/test/java/com/drinkool/filters/InternalHeaderGatewayFilterTest.java @@ -4,7 +4,6 @@ import static io.restassured.RestAssured.*; import static org.hamcrest.CoreMatchers.*; import static org.junit.jupiter.api.Assertions.*; -import com.drinkool.InternalValue; import io.quarkus.test.junit.QuarkusTest; import io.restassured.response.Response; import org.eclipse.microprofile.config.inject.ConfigProperty; @@ -15,6 +14,8 @@ import org.jose4j.keys.HmacKey; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import com.drinkool.InternalValue; + @QuarkusTest public class InternalHeaderGatewayFilterTest { diff --git a/k8s.yaml b/k8s.yaml deleted file mode 100644 index 006c114..0000000 --- a/k8s.yaml +++ /dev/null @@ -1,208 +0,0 @@ -# 1. ACCOUNT SERVICE -apiVersion: apps/v1 -kind: Deployment -metadata: - name: account-deploy -spec: - replicas: 1 - selector: - matchLabels: - app: account - template: - metadata: - labels: - app: account - spec: - containers: - - name: account-pod - image: git.demonkernel.io.vn/foodsurf/account-service:1.5.10 - imagePullPolicy: IfNotPresent - ports: - - containerPort: 8080 - env: - - name: REDIS_SERVICE - value: "redis-service" - - name: QUARKUS_DATASOURCE_PASSWORD - valueFrom: - secretKeyRef: - name: postgres-credentials - key: password - - name: QUARKUS_DATASOURCE_USERNAME - valueFrom: - secretKeyRef: - name: postgres-credentials - key: username - - name: QUARKUS_DATASOURCE_JDBC_URL - valueFrom: - secretKeyRef: - name: postgres-credentials - key: url - resources: - requests: - memory: "32Mi" - cpu: "50m" - limits: - memory: "64Mi" - cpu: "250m" ---- -apiVersion: v1 -kind: Service -metadata: - name: account-service -spec: - selector: - app: account - ports: - - port: 80 - targetPort: 8080 ---- -# 2. EATERY SERVICE -apiVersion: apps/v1 -kind: Deployment -metadata: - name: eatery-deploy -spec: - replicas: 1 - selector: - matchLabels: - app: eatery - template: - metadata: - labels: - app: eatery - spec: - containers: - - name: eatery-pod - image: git.demonkernel.io.vn/foodsurf/eatery-service:1.5.10 - imagePullPolicy: IfNotPresent - ports: - - containerPort: 8080 - env: - - name: QUARKUS_DATASOURCE_PASSWORD - valueFrom: - secretKeyRef: - name: postgres-credentials - key: password - - name: QUARKUS_DATASOURCE_USERNAME - valueFrom: - secretKeyRef: - name: postgres-credentials - key: username - - name: QUARKUS_DATASOURCE_JDBC_URL - valueFrom: - secretKeyRef: - name: postgres-credentials - key: url - resources: - requests: - memory: "32Mi" - cpu: "50m" - limits: - memory: "64Mi" - cpu: "250m" ---- -apiVersion: v1 -kind: Service -metadata: - name: eatery-service -spec: - selector: - app: eatery - ports: - - port: 80 - targetPort: 8080 ---- -# 3. GATEWAY SERVICE -apiVersion: apps/v1 -kind: Deployment -metadata: - name: gateway-deploy -spec: - replicas: 1 - selector: - matchLabels: - app: gateway - template: - metadata: - labels: - app: gateway - spec: - containers: - - name: gateway-pod - image: git.demonkernel.io.vn/foodsurf/gateway-service:1.5.10 - imagePullPolicy: IfNotPresent - ports: - - containerPort: 8080 - env: - - name: QUARKUS_REST_CLIENT_ACCOUNT_URL - value: "http://account-service" - - name: GATEWAY_JWT_SECRET - valueFrom: - secretKeyRef: - name: jwt-secret - key: secret - resources: - requests: - memory: "32Mi" - cpu: "50m" - limits: - memory: "64Mi" - cpu: "250m" ---- -apiVersion: v1 -kind: Service -metadata: - name: gateway-service -spec: - type: NodePort - selector: - app: gateway - ports: - - port: 80 - targetPort: 8080 - nodePort: 32080 ---- -# 4. REDIS -apiVersion: apps/v1 -kind: Deployment -metadata: - name: redis-deploy -spec: - selector: - matchLabels: - app: redis - template: - metadata: - labels: - app: redis - spec: - containers: - - name: redis-pod - image: redis:alpine - ports: - - containerPort: 6379 - resources: - limits: - cpu: "100m" - memory: "128Mi" - requests: - cpu: "20m" - memory: "64Mi" - command: - [ - "redis-server", - "--maxmemory", - "96mb", - "--maxmemory-policy", - "allkeys-lru", - ] ---- -apiVersion: v1 -kind: Service -metadata: - name: redis-service -spec: - selector: - app: redis - ports: - - port: 6379 diff --git a/k8s/account.yaml b/k8s/account.yaml new file mode 100644 index 0000000..67bf1c5 --- /dev/null +++ b/k8s/account.yaml @@ -0,0 +1,58 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: account-deploy +spec: + replicas: 1 + selector: + matchLabels: + app: account + template: + metadata: + labels: + app: account + spec: + containers: + - name: account-pod + image: git.demonkernel.io.vn/foodsurf/account-service:1.5.10 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 + env: + - name: REDIS_SERVICE + value: "redis-service" + - name: KAFKA_SERVICE + value: "kafka-service" + - name: QUARKUS_DATASOURCE_PASSWORD + valueFrom: + secretKeyRef: + name: postgres-credentials + key: password + - name: QUARKUS_DATASOURCE_USERNAME + valueFrom: + secretKeyRef: + name: postgres-credentials + key: username + - name: QUARKUS_DATASOURCE_JDBC_URL + valueFrom: + secretKeyRef: + name: postgres-credentials + key: url + resources: + requests: + memory: "32Mi" + cpu: "50m" + limits: + memory: "64Mi" + cpu: "250m" +--- +apiVersion: v1 +kind: Service +metadata: + name: account-service +spec: + selector: + app: account + ports: + - port: 80 + targetPort: 8080 \ No newline at end of file diff --git a/k8s/eatery.yaml b/k8s/eatery.yaml new file mode 100644 index 0000000..62523f9 --- /dev/null +++ b/k8s/eatery.yaml @@ -0,0 +1,57 @@ + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: eatery-deploy +spec: + replicas: 1 + selector: + matchLabels: + app: eatery + template: + metadata: + labels: + app: eatery + spec: + containers: + - name: eatery-pod + image: git.demonkernel.io.vn/foodsurf/eatery-service:1.5.10 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 + env: + - name: KAFKA_SERVICE + value: "kafka-service" + - name: QUARKUS_DATASOURCE_PASSWORD + valueFrom: + secretKeyRef: + name: postgres-credentials + key: password + - name: QUARKUS_DATASOURCE_USERNAME + valueFrom: + secretKeyRef: + name: postgres-credentials + key: username + - name: QUARKUS_DATASOURCE_JDBC_URL + valueFrom: + secretKeyRef: + name: postgres-credentials + key: url + resources: + requests: + memory: "32Mi" + cpu: "50m" + limits: + memory: "64Mi" + cpu: "250m" +--- +apiVersion: v1 +kind: Service +metadata: + name: eatery-service +spec: + selector: + app: eatery + ports: + - port: 80 + targetPort: 8080 \ No newline at end of file diff --git a/k8s/gateway.yaml b/k8s/gateway.yaml new file mode 100644 index 0000000..d4bc419 --- /dev/null +++ b/k8s/gateway.yaml @@ -0,0 +1,48 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: gateway-deploy +spec: + replicas: 1 + selector: + matchLabels: + app: gateway + template: + metadata: + labels: + app: gateway + spec: + containers: + - name: gateway-pod + image: git.demonkernel.io.vn/foodsurf/gateway-service:1.5.10 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 + env: + - name: QUARKUS_REST_CLIENT_ACCOUNT_URL + value: "http://account-service" + - name: GATEWAY_JWT_SECRET + valueFrom: + secretKeyRef: + name: jwt-secret + key: secret + resources: + requests: + memory: "32Mi" + cpu: "50m" + limits: + memory: "64Mi" + cpu: "250m" +--- +apiVersion: v1 +kind: Service +metadata: + name: gateway-service +spec: + type: NodePort + selector: + app: gateway + ports: + - port: 80 + targetPort: 8080 + nodePort: 32080 \ No newline at end of file diff --git a/k8s/kafdrop.yaml b/k8s/kafdrop.yaml new file mode 100644 index 0000000..9e0a2ed --- /dev/null +++ b/k8s/kafdrop.yaml @@ -0,0 +1,35 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kafdrop +spec: + replicas: 1 + selector: + matchLabels: + app: kafdrop + template: + metadata: + labels: + app: kafdrop + spec: + containers: + - name: kafdrop + image: obsidiandynamics/kafdrop + ports: + - containerPort: 9000 + env: + - name: KAFKA_BROKERCONNECT + value: "kafka-service:9092" # Trỏ vào service Kafka của bạn +--- +apiVersion: v1 +kind: Service +metadata: + name: kafdrop-svc +spec: + type: NodePort + selector: + app: kafdrop + ports: + - protocol: TCP + port: 9000 + nodePort: 30900 \ No newline at end of file diff --git a/k8s/kafka.yaml b/k8s/kafka.yaml new file mode 100644 index 0000000..951ba58 --- /dev/null +++ b/k8s/kafka.yaml @@ -0,0 +1,52 @@ +apiVersion: v1 +kind: Service +metadata: + name: kafka-service +spec: + ports: + - port: 9092 + selector: + app: kafka +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kafka-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: kafka + template: + metadata: + labels: + app: kafka + spec: + containers: + - name: kafka + image: apache/kafka:latest + ports: + - containerPort: 9092 + env: + - name: KAFKA_NODE_ID + value: "1" + - name: KAFKA_PROCESS_ROLES + value: "broker,controller" + - name: KAFKA_LISTENERS + value: "PLAINTEXT://:9092,CONTROLLER://:9093" + - name: KAFKA_ADVERTISED_LISTENERS + value: "PLAINTEXT://kafka-service:9092" + - name: KAFKA_CONTROLLER_QUORUM_VOTERS + value: "1@127.0.0.1:9093" + - name: KAFKA_CONTROLLER_LISTENER_NAMES + value: "CONTROLLER" + - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP + value: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT" + - name: KAFKA_AUTO_CREATE_TOPICS_ENABLE + value: "true" + - name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR + value: "1" + - name: KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR + value: "1" + - name: KAFKA_TRANSACTION_STATE_LOG_MIN_ISR + value: "1" \ No newline at end of file diff --git a/k8s/redis.yaml b/k8s/redis.yaml new file mode 100644 index 0000000..1f11a6b --- /dev/null +++ b/k8s/redis.yaml @@ -0,0 +1,43 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis-deploy +spec: + selector: + matchLabels: + app: redis + template: + metadata: + labels: + app: redis + spec: + containers: + - name: redis-pod + image: redis:alpine + ports: + - containerPort: 6379 + resources: + limits: + cpu: "100m" + memory: "128Mi" + requests: + cpu: "20m" + memory: "64Mi" + command: + [ + "redis-server", + "--maxmemory", + "96mb", + "--maxmemory-policy", + "allkeys-lru", + ] +--- +apiVersion: v1 +kind: Service +metadata: + name: redis-service +spec: + selector: + app: redis + ports: + - port: 6379 \ No newline at end of file diff --git a/lib/pom.xml b/lib/pom.xml index 5446ca6..56ee628 100644 --- a/lib/pom.xml +++ b/lib/pom.xml @@ -26,6 +26,16 @@ jackson-annotations 2.15.2 + + io.quarkus + quarkus-kafka-client + + + org.projectlombok + lombok + 1.18.30 + provided + jakarta.persistence jakarta.persistence-api diff --git a/lib/src/main/java/com/drinkool/dtos/SendReview.java b/lib/src/main/java/com/drinkool/dtos/SendReview.java index 637f40b..c0fb899 100644 --- a/lib/src/main/java/com/drinkool/dtos/SendReview.java +++ b/lib/src/main/java/com/drinkool/dtos/SendReview.java @@ -1,6 +1,6 @@ package com.drinkool.dtos; -import com.drinkool.models.ReviewModel; +import com.drinkool.lib.models.ReviewModel; import java.util.UUID; public class SendReview { diff --git a/lib/src/main/java/com/drinkool/dtos/event/ManagerCreate.java b/lib/src/main/java/com/drinkool/dtos/event/ManagerCreate.java new file mode 100644 index 0000000..e337a6f --- /dev/null +++ b/lib/src/main/java/com/drinkool/dtos/event/ManagerCreate.java @@ -0,0 +1,17 @@ +package com.drinkool.dtos.event; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import java.util.UUID; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@RegisterForReflection +@Getter +@Setter +@NoArgsConstructor +public class ManagerCreate { + + public UUID id; + public String eateryName; +} diff --git a/lib/src/main/java/com/drinkool/entities/BaseEntity.java b/lib/src/main/java/com/drinkool/lib/entities/BaseEntity.java similarity index 88% rename from lib/src/main/java/com/drinkool/entities/BaseEntity.java rename to lib/src/main/java/com/drinkool/lib/entities/BaseEntity.java index 984cab9..0ee8e50 100644 --- a/lib/src/main/java/com/drinkool/entities/BaseEntity.java +++ b/lib/src/main/java/com/drinkool/lib/entities/BaseEntity.java @@ -1,4 +1,4 @@ -package com.drinkool.entities; +package com.drinkool.lib.entities; import io.quarkus.hibernate.orm.panache.PanacheEntityBase; import jakarta.persistence.*; diff --git a/lib/src/main/java/com/drinkool/models/ReviewModel.java b/lib/src/main/java/com/drinkool/lib/models/ReviewModel.java similarity index 87% rename from lib/src/main/java/com/drinkool/models/ReviewModel.java rename to lib/src/main/java/com/drinkool/lib/models/ReviewModel.java index 58c4279..6412d6f 100644 --- a/lib/src/main/java/com/drinkool/models/ReviewModel.java +++ b/lib/src/main/java/com/drinkool/lib/models/ReviewModel.java @@ -1,6 +1,6 @@ -package com.drinkool.models; +package com.drinkool.lib.models; -import com.drinkool.entities.BaseEntity; +import com.drinkool.lib.entities.BaseEntity; import jakarta.persistence.*; import java.time.LocalDateTime; diff --git a/scripts/build.sh b/scripts/build.sh index 17b5426..8f96807 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,3 +1,3 @@ -mvn clean package -DskipTests -Pnative \ +mvn clean package -DskipTests \ -Dquarkus.container-image.push=false \ - -Dquarkus.container-image.registry=git.demonkernel.io.vn + -Dquarkus.container-image.registry=git.demonkernel.io.vn diff --git a/scripts/publish.sh b/scripts/publish.sh index 1becc04..e15d5d6 100755 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -6,6 +6,6 @@ SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd) cd "$SCRIPT_DIR/.." kubectl delete all --all -n drinkool-backend -kubectl apply -f k8s.yaml -n drinkool-backend +kubectl apply -f k8s -n drinkool-backend cd "$CURRENT_DIR" \ No newline at end of file