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); }