Skip to content

Commit

Permalink
+ Publish cart informations in the broker
Browse files Browse the repository at this point in the history
  • Loading branch information
sarahjebali committed Dec 12, 2024
1 parent 1c99ede commit 2a91d53
Show file tree
Hide file tree
Showing 9 changed files with 85 additions and 67 deletions.
33 changes: 21 additions & 12 deletions cart/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,27 @@
version: '3.8'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181

image: strimzi/kafka:0.19.0-kafka-2.5.0
command: [
"sh", "-c",
"bin/zookeeper-server-start.sh config/zookeeper.properties"
]
ports:
- "2181:2181"
environment:
LOG_DIR: /tmp/logs
kafka:
image: confluentinc/cp-kafka:latest
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
image: strimzi/kafka:0.19.0-kafka-2.5.0
command: [
"sh", "-c",
"bin/kafka-server-start.sh config/server.properties --override listeners=$${KAFKA_LISTENERS} --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS} --override zookeeper.connect=$${KAFKA_ZOOKEEPER_CONNECT}"
]
depends_on:
- zookeeper
ports:
- "9093:9093"
environment:
LOG_DIR: "/tmp/logs"
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9093
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
8 changes: 6 additions & 2 deletions cart/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-jackson</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-redis-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
Expand All @@ -72,11 +76,11 @@
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-jwt</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-messaging-kafka</artifactId>
Expand Down
16 changes: 0 additions & 16 deletions cart/src/main/java/org/soa/GreetingResource.java

This file was deleted.

7 changes: 7 additions & 0 deletions cart/src/main/java/org/soa/api/CartResource.java
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,13 @@ public Response removeItem(@PathParam("userId") UUID userId, @PathParam("product
}
}

@POST
@Path("/{userId}/validate")
public Response validateCart(@PathParam("userId") UUID userId) {
cartService.validateCart(userId);
return Response.status(Status.OK).entity("Enfin, publié!!!!").build();
}

// Vider le panier d'un utilisateur
//@DELETE
//@Path("/{userId}/clear")
Expand Down
16 changes: 14 additions & 2 deletions cart/src/main/java/org/soa/dto/ItemDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,19 @@ public class ItemDTO {

private UUID itemId; // Identifiant de l'item
private String name; // Nom de l'item
private int quantity; // Quantité de l'item
private int quantity;
private double price; // Quantité de l'item

// Constructeur sans paramètres
public ItemDTO() {
}

// Constructeur avec paramètres
public ItemDTO(UUID itemId, String name, int quantity) {
public ItemDTO(UUID itemId, String name, int quantity, double price) {
this.itemId = itemId;
this.name = name;
this.quantity = quantity;
this.price = price;
}

public UUID getItemId() {
Expand All @@ -42,4 +44,14 @@ public int getQuantity() {
public void setQuantity(int quantity) {
this.quantity = quantity;
}

public double getPrice() {
return price;
}

public void setPrice(double price) {
this.price = price;
}


}
39 changes: 34 additions & 5 deletions cart/src/main/java/org/soa/service/CartService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
import org.jboss.logging.Logger;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;
import org.soa.dto.ItemDTO;
import org.soa.model.Cart;
import org.soa.model.Item;
import org.soa.messaging.CartPublisher;

import java.util.List;
import java.util.UUID;
Expand All @@ -25,7 +27,6 @@ private RMap<UUID, Cart> getCartsMap() {
}

// Créer un nouveau panier
@Transactional
public Cart createCart(UUID userId) {
try {
logger.info("Creating cart for userId: " + userId);
Expand Down Expand Up @@ -66,7 +67,6 @@ public Cart getCart(UUID userId) {
}

// Ajouter un item au panier
@Transactional
public void addItem(UUID userId, Item item) {
try {
logger.info("Adding item to cart for userId: " + userId);
Expand Down Expand Up @@ -95,7 +95,6 @@ public void addItem(UUID userId, Item item) {
}

// Mettre à jour un item dans le panier
@Transactional
public void updateItem(UUID userId, Item cartItem) {
try {
logger.info("Updating item in cart for userId: " + userId);
Expand All @@ -122,7 +121,6 @@ public void updateItem(UUID userId, Item cartItem) {
}

// Supprimer un item du panier
@Transactional
public void removeItem(UUID userId, UUID itemId) {
try {
logger.info("Removing item from cart for userId: " + userId);
Expand Down Expand Up @@ -168,7 +166,6 @@ public List<Item> getCartItems(UUID userId) {
}

// Supprimer le panier
@Transactional
public void deleteCart(UUID userId) {
try {
logger.info("Deleting cart for userId: " + userId);
Expand All @@ -186,4 +183,36 @@ public void deleteCart(UUID userId) {
throw new RuntimeException("An unexpected error occurred while deleting the cart.", e);
}
}

@Inject
CartPublisher cartPublisher;

public void validateCart(UUID cartId) {
// Récupérer le panier à partir de son ID
Cart cart = getCart(cartId);
if (cart == null) {
throw new IllegalArgumentException("Cart not found with ID: " + cartId);
}

// Vérifier si le panier est vide
if (cart.getItems() == null || cart.getItems().isEmpty()) {
throw new IllegalArgumentException("Cannot validate an empty cart.");
}

// Convertir les items du panier en objets ItemDTO
List<ItemDTO> itemDTOs = cart.getItems().entrySet().stream()
.map(entry -> new ItemDTO(entry.getKey(), entry.getValue().getName(),
entry.getValue().getQuantity(), entry.getValue().getPrice()))
.toList();

// Publier le panier dans le broker
cartPublisher.publishCart(cartId, itemDTOs);

// Optionnel : journaliser l'action
logger.info("Cart with ID: " + cartId + " successfully published to the broker.");
}




}
5 changes: 3 additions & 2 deletions cart/src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ quarkus.redis.hosts=redis://localhost:6379

mp.messaging.outgoing.cart-topic.connector=smallrye-kafka
mp.messaging.outgoing.cart-topic.topic=cart-topic
mp.messaging.outgoing.cart-topic.value.serializer=org.apache.kafka.common.serialization.JsonSerializer
mp.messaging.outgoing.cart-topic.value.serializer=org.soa.serialization.CartEventSerializer
mp.messaging.outgoing.cart-topic.bootstrap.servers=localhost:9093
quarkus.kafka.devservices.enabled=false

# Kafka broker address
kafka.bootstrap.servers=localhost:9092



8 changes: 0 additions & 8 deletions cart/src/test/java/org/soa/GreetingResourceIT.java

This file was deleted.

20 changes: 0 additions & 20 deletions cart/src/test/java/org/soa/GreetingResourceTest.java

This file was deleted.

0 comments on commit 2a91d53

Please sign in to comment.