diff --git a/eatery-service/pom.xml b/eatery-service/pom.xml
index c5cddb1..94f324f 100644
--- a/eatery-service/pom.xml
+++ b/eatery-service/pom.xml
@@ -26,6 +26,8 @@
3.32.4
true
3.5.4
+ 1.6.3
+ 1.18.46
@@ -54,9 +56,19 @@
org.projectlombok
lombok
- 1.18.46
+ ${org.projectlombok.version}
provided
+
+ io.quarkiverse.mapstruct
+ quarkus-mapstruct
+ 1.1.0
+
+
+ org.mapstruct
+ mapstruct
+ ${org.mapstruct.version}
+
net.datafaker
datafaker
@@ -140,10 +152,15 @@
true
+
+ org.mapstruct
+ mapstruct-processor
+ ${org.mapstruct.version}
+
org.projectlombok
lombok
- 1.18.46
+ ${org.projectlombok.version}
diff --git a/eatery-service/src/main/java/com/drinkool/dtos/DtoMapper.java b/eatery-service/src/main/java/com/drinkool/dtos/DtoMapper.java
new file mode 100644
index 0000000..ea734ed
--- /dev/null
+++ b/eatery-service/src/main/java/com/drinkool/dtos/DtoMapper.java
@@ -0,0 +1,18 @@
+package com.drinkool.dtos;
+
+import com.drinkool.entities.MenuItemEntity;
+import org.mapstruct.BeanMapping;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingTarget;
+import org.mapstruct.NullValuePropertyMappingStrategy;
+
+@Mapper(componentModel = "cdi")
+public interface DtoMapper {
+ @BeanMapping(
+ nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE
+ )
+ void updateMenuItemToEntity(
+ UpdateMenuItem input,
+ @MappingTarget MenuItemEntity entity
+ );
+}
diff --git a/eatery-service/src/main/java/com/drinkool/dtos/UpdateMenuItem.java b/eatery-service/src/main/java/com/drinkool/dtos/UpdateMenuItem.java
new file mode 100644
index 0000000..4c95eb1
--- /dev/null
+++ b/eatery-service/src/main/java/com/drinkool/dtos/UpdateMenuItem.java
@@ -0,0 +1,21 @@
+package com.drinkool.dtos;
+
+import com.drinkool.interfaces.EntityInterface;
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import java.util.UUID;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.eclipse.microprofile.graphql.Input;
+
+@Input
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@RegisterForReflection
+public class UpdateMenuItem extends AddMenuItem implements EntityInterface {
+
+ UUID id;
+}
diff --git a/eatery-service/src/main/java/com/drinkool/services/EateryService.java b/eatery-service/src/main/java/com/drinkool/services/EateryService.java
index 26d088a..6dcf5ee 100644
--- a/eatery-service/src/main/java/com/drinkool/services/EateryService.java
+++ b/eatery-service/src/main/java/com/drinkool/services/EateryService.java
@@ -3,6 +3,8 @@ package com.drinkool.services;
import com.drinkool.InternalValue;
import com.drinkool.Role;
import com.drinkool.dtos.AddMenuItem;
+import com.drinkool.dtos.DtoMapper;
+import com.drinkool.dtos.UpdateMenuItem;
import com.drinkool.dtos.event.ManagerCreate;
import com.drinkool.entities.EateryEntity;
import com.drinkool.entities.MenuItemEntity;
@@ -23,6 +25,9 @@ import org.eclipse.microprofile.reactive.messaging.Incoming;
@GraphQLApi
public class EateryService {
+ @Inject
+ DtoMapper dtoMapper;
+
@Inject
HttpServerRequest request;
@@ -58,6 +63,23 @@ public class EateryService {
return item;
}
+ @Mutation("updateMenuItem")
+ @RolesAllowed(Role.Manager)
+ @Transactional
+ public MenuItemEntity updateMenuItem(
+ @Name("menuItem") UpdateMenuItem menuItem
+ ) {
+ MenuItemEntity item = MenuItemEntity.findById(menuItem.getId());
+
+ if (item == null) return null;
+
+ dtoMapper.updateMenuItemToEntity(menuItem, item);
+
+ item.persist();
+
+ return item;
+ }
+
@Query("menuItemsByEatery")
public List getMenuItemsByEatery(
@Name("eateryId") UUID eateryId
diff --git a/eatery-service/src/test/java/com/drinkool/services/EateryServiceTest.java b/eatery-service/src/test/java/com/drinkool/services/EateryServiceTest.java
index ae16091..ddc4e24 100644
--- a/eatery-service/src/test/java/com/drinkool/services/EateryServiceTest.java
+++ b/eatery-service/src/test/java/com/drinkool/services/EateryServiceTest.java
@@ -271,4 +271,42 @@ public class EateryServiceTest {
.statusCode(200)
.body("data.menuItemsByEatery", hasSize(0)); // Phải trả về List rỗng như code bạn viết
}
+
+ @Test
+ public void testUpdateMenuItem_Success() {
+ String mutation = """
+ mutation updateMenuItem($menuItem: UpdateMenuItemInput!) {
+ updateMenuItem(menuItem: $menuItem) {
+ id
+ name
+ price
+ }
+ }
+ """;
+
+ String newValue = "Phở Bò";
+
+ Map menuItemData = new HashMap<>();
+ menuItemData.put("id", lastSavedName);
+ menuItemData.put("name", newValue);
+
+ Map variables = new HashMap<>();
+ variables.put("menuItem", menuItemData);
+
+ Map requestBody = new HashMap<>();
+ requestBody.put("query", mutation);
+ requestBody.put("variables", variables);
+
+ given()
+ .contentType(ContentType.JSON)
+ .header(InternalValue.role, Role.Customer)
+ .header(InternalValue.userId, lastOwnerId)
+ .body(requestBody)
+ .when()
+ .post("/graphql")
+ .then()
+ .body("data.updateMenuItem.name", is(newValue))
+ .body("data.updateMenuItem.id", is(lastSavedId))
+ .statusCode(200);
+ }
}
diff --git a/lib/pom.xml b/lib/pom.xml
index c85939a..f5d8d22 100644
--- a/lib/pom.xml
+++ b/lib/pom.xml
@@ -1,8 +1,8 @@
-
+
4.0.0
@@ -63,4 +63,4 @@
test
-
\ No newline at end of file
+
diff --git a/lib/src/main/java/com/drinkool/interfaces/EateryInterface.java b/lib/src/main/java/com/drinkool/interfaces/EateryInterface.java
new file mode 100644
index 0000000..2afd36a
--- /dev/null
+++ b/lib/src/main/java/com/drinkool/interfaces/EateryInterface.java
@@ -0,0 +1,12 @@
+package com.drinkool.interfaces;
+
+import java.util.UUID;
+
+public interface EateryInterface {
+ UUID getOwnerId();
+ void setOwnerId(UUID x);
+ String getName();
+ void setName(String x);
+ boolean getIsVerified();
+ void setIsVerified(boolean x);
+}
diff --git a/lib/src/main/java/com/drinkool/interfaces/EntityInterface.java b/lib/src/main/java/com/drinkool/interfaces/EntityInterface.java
new file mode 100644
index 0000000..89f517f
--- /dev/null
+++ b/lib/src/main/java/com/drinkool/interfaces/EntityInterface.java
@@ -0,0 +1,8 @@
+package com.drinkool.interfaces;
+
+import java.util.UUID;
+
+public interface EntityInterface {
+ UUID getId();
+ void setId(UUID x);
+}
diff --git a/lib/src/main/java/com/drinkool/interfaces/MenuItemInterface.java b/lib/src/main/java/com/drinkool/interfaces/MenuItemInterface.java
index 3a38506..d7e53f0 100644
--- a/lib/src/main/java/com/drinkool/interfaces/MenuItemInterface.java
+++ b/lib/src/main/java/com/drinkool/interfaces/MenuItemInterface.java
@@ -3,6 +3,6 @@ package com.drinkool.interfaces;
public interface MenuItemInterface {
String getName();
void setName(String x);
- double getPrice();
- void setPrice(double x);
+ double getPrice();
+ void setPrice(double x);
}