diff --git a/.github/workflows/maven-docker.yml b/.github/workflows/maven-docker.yml
new file mode 100644
index 0000000..626bdfd
--- /dev/null
+++ b/.github/workflows/maven-docker.yml
@@ -0,0 +1,46 @@
+name: Locafy CI/CD Pipeline
+
+on:
+ push:
+ branches: [ "main" ]
+ pull_request:
+ branches: [ "main" ]
+
+jobs:
+ build-and-test:
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: ./locafy-microservices
+
+ steps:
+ # 1. Checkout Code
+ - name: Checkout code
+ uses: actions/checkout@v3
+
+ # 2. Setup Java 17
+ - name: Set up JDK 17
+ uses: actions/setup-java@v3
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+ cache: maven
+
+ # 3. Compile and Package with Maven
+ - name: Build with Maven
+ run: mvn clean package -DskipTests
+
+ # 4. Build Docker Images (CI Step)
+ - name: Build Docker Images
+ run: docker compose build
+
+ # 5. Deploy to Runner Environment (Test Deployment)
+ - name: Start Services
+ run: docker compose up -d
+
+ # 6. Verify Services are Running
+ - name: Check Running Containers
+ run: |
+ sleep 30 # Give services time to start
+ docker compose ps
+ docker logs notification-service
\ No newline at end of file
diff --git a/project_milestone_4/ReadMe.md b/ReadMe4.md
similarity index 100%
rename from project_milestone_4/ReadMe.md
rename to ReadMe4.md
diff --git a/ReadMe5.md b/ReadMe5.md
new file mode 100644
index 0000000..03005ad
--- /dev/null
+++ b/ReadMe5.md
@@ -0,0 +1,125 @@
+# Locafy - Microservices Architecture - EXTENDED
+
+Locafy is a local business discovery platform implemented using Spring Boot Microservices.
+
+## Architecture
+
+1. **Discovery Server (Eureka):** Service Registry.
+2. **API Gateway:** Routes all traffic (Port 8080).
+3. **Business Service:** Manages business profiles (Uses Builder & Strategy patterns).
+4. **Review Service:** Manages reviews. Validates business existence via REST calls to Business Service.
+5. **Notification Service:** Simulates sending alerts when reviews are posted.
+
+
+Part 1: Architecture Upgrade (Synchronous vs. Asynchronous)
+Current State (Synchronous): Review Service -> calls Notification Service directly via HTTP (Feign).
+
+Problem: If the Notification Service is down, the Review Service fails or hangs. The user has to wait for the email to be sent before their review is saved.
+
+New State (Asynchronous with RabbitMQ): Review Service -> sends a message to RabbitMQ -> Notification Service picks it up later.
+
+Benefit: Decoupling. The Review Service doesn't care if the Notification Service is online. It saves the review, sends a message to the queue, and responds to the user immediately (Scalability & Fault Tolerance).
+
+
+The Change
+services:
+ # ... (Discovery, Gateway, Business Service remain the same) ...
+
+ # NEW: Message Broker
+ rabbitmq:
+ image: rabbitmq:3.12-management
+ container_name: rabbitmq
+ ports:
+ - "5672:5672" # App communication port
+ - "15672:15672" # Management Dashboard (http://localhost:15672)
+ environment:
+ RABBITMQ_DEFAULT_USER: guest
+ RABBITMQ_DEFAULT_PASS: guest
+
+ review-service:
+ build: ./review-service
+ container_name: review-service
+ ports:
+ - "8082:8082"
+ environment:
+ - EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://discovery-server:8761/eureka/
+ - SPRING_RABBITMQ_HOST=rabbitmq # Connect to Rabbit container
+ depends_on:
+ - discovery-server
+ - business-service
+ - rabbitmq # Wait for RabbitMQ
+
+
+adding this to the review-service pom: https://spring.io/projects/spring-amqp
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
+
+adding this to: src/main/java/com/locafy/review/config/RabbitMQConfig.java
+
+package com.locafy.review.config;
+
+ import org.springframework.amqp.core.*;
+ import org.springframework.context.annotation.Bean;
+ import org.springframework.context.annotation.Configuration;
+
+ @Configuration
+ public class RabbitMQConfig {
+ public static final String QUEUE = "notification.queue";
+ public static final String EXCHANGE = "review.exchange";
+ public static final String ROUTING_KEY = "review.routingKey";
+
+ @Bean
+ public Queue queue() { return new Queue(QUEUE); }
+
+ @Bean
+ public TopicExchange exchange() { return new TopicExchange(EXCHANGE); }
+
+ @Bean
+ public Binding binding(Queue queue, TopicExchange exchange) {
+ return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY);
+ }
+ }
+
+and then
+Update Service Logic: Modify ReviewService.java to use RabbitTemplate instead of NotificationClient.
+
+
+
+
+
+old code to be added back
+package com.example.review_service;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableFeignClients
+public class ReviewServiceApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(ReviewServiceApplication.class, args);
+ }
+}
+
+
+
+Use this for Docker and not the intelij plugin: docker compose up --build
+
+
+
+# 1. Ensure fresh JARs are available
+mvn clean package -DskipTests
+
+# 2. Build and start containers using the V2 plugin
+docker compose up --build
+
+
+Step 4: CI/CD Pipeline (GitHub Actions)
+This pipeline will run every time you push code to GitHub. It will verify that your Java code compiles and that your Docker containers can build and start up successfully.
+
+Create this file structure in your project root: .github/workflows/maven-docker.yml
\ No newline at end of file
diff --git a/project_milestone_4/locafy-microservices/.idea/.gitignore b/locafy-microservices/.idea/.gitignore
similarity index 100%
rename from project_milestone_4/locafy-microservices/.idea/.gitignore
rename to locafy-microservices/.idea/.gitignore
diff --git a/project_milestone_4/locafy-microservices/.idea/compiler.xml b/locafy-microservices/.idea/compiler.xml
similarity index 94%
rename from project_milestone_4/locafy-microservices/.idea/compiler.xml
rename to locafy-microservices/.idea/compiler.xml
index 2612fda..9d8df4c 100644
--- a/project_milestone_4/locafy-microservices/.idea/compiler.xml
+++ b/locafy-microservices/.idea/compiler.xml
@@ -9,7 +9,7 @@
-
+
@@ -17,8 +17,8 @@
-
+
diff --git a/project_milestone_4/locafy-microservices/.idea/encodings.xml b/locafy-microservices/.idea/encodings.xml
similarity index 100%
rename from project_milestone_4/locafy-microservices/.idea/encodings.xml
rename to locafy-microservices/.idea/encodings.xml
diff --git a/project_milestone_4/locafy-microservices/.idea/jarRepositories.xml b/locafy-microservices/.idea/jarRepositories.xml
similarity index 100%
rename from project_milestone_4/locafy-microservices/.idea/jarRepositories.xml
rename to locafy-microservices/.idea/jarRepositories.xml
diff --git a/project_milestone_4/locafy-microservices/.idea/locafy-microservices.iml b/locafy-microservices/.idea/locafy-microservices.iml
similarity index 100%
rename from project_milestone_4/locafy-microservices/.idea/locafy-microservices.iml
rename to locafy-microservices/.idea/locafy-microservices.iml
diff --git a/project_milestone_4/locafy-microservices/.idea/misc.xml b/locafy-microservices/.idea/misc.xml
similarity index 100%
rename from project_milestone_4/locafy-microservices/.idea/misc.xml
rename to locafy-microservices/.idea/misc.xml
diff --git a/project_milestone_4/locafy-microservices/.idea/modules.xml b/locafy-microservices/.idea/modules.xml
similarity index 100%
rename from project_milestone_4/locafy-microservices/.idea/modules.xml
rename to locafy-microservices/.idea/modules.xml
diff --git a/project_milestone_4/locafy-microservices/.idea/vcs.xml b/locafy-microservices/.idea/vcs.xml
similarity index 100%
rename from project_milestone_4/locafy-microservices/.idea/vcs.xml
rename to locafy-microservices/.idea/vcs.xml
diff --git a/project_milestone_4/locafy-microservices/api-gateway/.gitattributes b/locafy-microservices/api-gateway/.gitattributes
similarity index 100%
rename from project_milestone_4/locafy-microservices/api-gateway/.gitattributes
rename to locafy-microservices/api-gateway/.gitattributes
diff --git a/project_milestone_4/locafy-microservices/api-gateway/.gitignore b/locafy-microservices/api-gateway/.gitignore
similarity index 100%
rename from project_milestone_4/locafy-microservices/api-gateway/.gitignore
rename to locafy-microservices/api-gateway/.gitignore
diff --git a/project_milestone_4/locafy-microservices/api-gateway/.mvn/wrapper/maven-wrapper.properties b/locafy-microservices/api-gateway/.mvn/wrapper/maven-wrapper.properties
similarity index 100%
rename from project_milestone_4/locafy-microservices/api-gateway/.mvn/wrapper/maven-wrapper.properties
rename to locafy-microservices/api-gateway/.mvn/wrapper/maven-wrapper.properties
diff --git a/project_milestone_4/locafy-microservices/api-gateway/Dockerfile b/locafy-microservices/api-gateway/Dockerfile
similarity index 100%
rename from project_milestone_4/locafy-microservices/api-gateway/Dockerfile
rename to locafy-microservices/api-gateway/Dockerfile
diff --git a/project_milestone_4/locafy-microservices/api-gateway/mvnw b/locafy-microservices/api-gateway/mvnw
similarity index 100%
rename from project_milestone_4/locafy-microservices/api-gateway/mvnw
rename to locafy-microservices/api-gateway/mvnw
diff --git a/project_milestone_4/locafy-microservices/api-gateway/mvnw.cmd b/locafy-microservices/api-gateway/mvnw.cmd
similarity index 100%
rename from project_milestone_4/locafy-microservices/api-gateway/mvnw.cmd
rename to locafy-microservices/api-gateway/mvnw.cmd
diff --git a/project_milestone_4/locafy-microservices/api-gateway/pom.xml b/locafy-microservices/api-gateway/pom.xml
similarity index 100%
rename from project_milestone_4/locafy-microservices/api-gateway/pom.xml
rename to locafy-microservices/api-gateway/pom.xml
diff --git a/project_milestone_4/locafy-microservices/api-gateway/src/main/java/com/example/api_gateway/ApiGatewayApplication.java b/locafy-microservices/api-gateway/src/main/java/com/example/api_gateway/ApiGatewayApplication.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/api-gateway/src/main/java/com/example/api_gateway/ApiGatewayApplication.java
rename to locafy-microservices/api-gateway/src/main/java/com/example/api_gateway/ApiGatewayApplication.java
diff --git a/project_milestone_4/locafy-microservices/api-gateway/src/main/java/com/example/api_gateway/config/GatewayConfig.java b/locafy-microservices/api-gateway/src/main/java/com/example/api_gateway/config/GatewayConfig.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/api-gateway/src/main/java/com/example/api_gateway/config/GatewayConfig.java
rename to locafy-microservices/api-gateway/src/main/java/com/example/api_gateway/config/GatewayConfig.java
diff --git a/project_milestone_4/locafy-microservices/api-gateway/src/main/java/com/example/api_gateway/config/GlobalErrorConfig.java b/locafy-microservices/api-gateway/src/main/java/com/example/api_gateway/config/GlobalErrorConfig.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/api-gateway/src/main/java/com/example/api_gateway/config/GlobalErrorConfig.java
rename to locafy-microservices/api-gateway/src/main/java/com/example/api_gateway/config/GlobalErrorConfig.java
diff --git a/project_milestone_4/locafy-microservices/api-gateway/src/main/resources/application.yaml b/locafy-microservices/api-gateway/src/main/resources/application.yaml
similarity index 100%
rename from project_milestone_4/locafy-microservices/api-gateway/src/main/resources/application.yaml
rename to locafy-microservices/api-gateway/src/main/resources/application.yaml
diff --git a/project_milestone_4/locafy-microservices/api-gateway/src/test/java/com/example/api_gateway/ApiGatewayApplicationTests.java b/locafy-microservices/api-gateway/src/test/java/com/example/api_gateway/ApiGatewayApplicationTests.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/api-gateway/src/test/java/com/example/api_gateway/ApiGatewayApplicationTests.java
rename to locafy-microservices/api-gateway/src/test/java/com/example/api_gateway/ApiGatewayApplicationTests.java
diff --git a/project_milestone_4/locafy-microservices/business-service/.gitattributes b/locafy-microservices/business-service/.gitattributes
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/.gitattributes
rename to locafy-microservices/business-service/.gitattributes
diff --git a/project_milestone_4/locafy-microservices/business-service/.gitignore b/locafy-microservices/business-service/.gitignore
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/.gitignore
rename to locafy-microservices/business-service/.gitignore
diff --git a/project_milestone_4/locafy-microservices/business-service/.mvn/wrapper/maven-wrapper.properties b/locafy-microservices/business-service/.mvn/wrapper/maven-wrapper.properties
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/.mvn/wrapper/maven-wrapper.properties
rename to locafy-microservices/business-service/.mvn/wrapper/maven-wrapper.properties
diff --git a/project_milestone_4/locafy-microservices/business-service/Dockerfile b/locafy-microservices/business-service/Dockerfile
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/Dockerfile
rename to locafy-microservices/business-service/Dockerfile
diff --git a/project_milestone_4/locafy-microservices/business-service/mvnw b/locafy-microservices/business-service/mvnw
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/mvnw
rename to locafy-microservices/business-service/mvnw
diff --git a/project_milestone_4/locafy-microservices/business-service/mvnw.cmd b/locafy-microservices/business-service/mvnw.cmd
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/mvnw.cmd
rename to locafy-microservices/business-service/mvnw.cmd
diff --git a/project_milestone_4/locafy-microservices/business-service/pom.xml b/locafy-microservices/business-service/pom.xml
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/pom.xml
rename to locafy-microservices/business-service/pom.xml
diff --git a/project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/BusinessServiceApplication.java b/locafy-microservices/business-service/src/main/java/com/example/business_service/BusinessServiceApplication.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/BusinessServiceApplication.java
rename to locafy-microservices/business-service/src/main/java/com/example/business_service/BusinessServiceApplication.java
diff --git a/project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/controller/BusinessController.java b/locafy-microservices/business-service/src/main/java/com/example/business_service/controller/BusinessController.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/controller/BusinessController.java
rename to locafy-microservices/business-service/src/main/java/com/example/business_service/controller/BusinessController.java
diff --git a/project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/loader/DataLoader.java b/locafy-microservices/business-service/src/main/java/com/example/business_service/loader/DataLoader.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/loader/DataLoader.java
rename to locafy-microservices/business-service/src/main/java/com/example/business_service/loader/DataLoader.java
diff --git a/project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/model/BusinessProfile.java b/locafy-microservices/business-service/src/main/java/com/example/business_service/model/BusinessProfile.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/model/BusinessProfile.java
rename to locafy-microservices/business-service/src/main/java/com/example/business_service/model/BusinessProfile.java
diff --git a/project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/repository/BusinessRepository.java b/locafy-microservices/business-service/src/main/java/com/example/business_service/repository/BusinessRepository.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/repository/BusinessRepository.java
rename to locafy-microservices/business-service/src/main/java/com/example/business_service/repository/BusinessRepository.java
diff --git a/project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/service/BusinessService.java b/locafy-microservices/business-service/src/main/java/com/example/business_service/service/BusinessService.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/service/BusinessService.java
rename to locafy-microservices/business-service/src/main/java/com/example/business_service/service/BusinessService.java
diff --git a/project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/CategorySearchStrategy.java b/locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/CategorySearchStrategy.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/CategorySearchStrategy.java
rename to locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/CategorySearchStrategy.java
diff --git a/project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/LocationSearchStrategy.java b/locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/LocationSearchStrategy.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/LocationSearchStrategy.java
rename to locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/LocationSearchStrategy.java
diff --git a/project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/NameSearchStrategy.java b/locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/NameSearchStrategy.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/NameSearchStrategy.java
rename to locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/NameSearchStrategy.java
diff --git a/project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/SearchStrategy.java b/locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/SearchStrategy.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/SearchStrategy.java
rename to locafy-microservices/business-service/src/main/java/com/example/business_service/strategy/SearchStrategy.java
diff --git a/project_milestone_4/locafy-microservices/business-service/src/main/resources/application.yaml b/locafy-microservices/business-service/src/main/resources/application.yaml
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/src/main/resources/application.yaml
rename to locafy-microservices/business-service/src/main/resources/application.yaml
diff --git a/project_milestone_4/locafy-microservices/business-service/src/test/java/com/example/business_service/BusinessServiceApplicationTests.java b/locafy-microservices/business-service/src/test/java/com/example/business_service/BusinessServiceApplicationTests.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/business-service/src/test/java/com/example/business_service/BusinessServiceApplicationTests.java
rename to locafy-microservices/business-service/src/test/java/com/example/business_service/BusinessServiceApplicationTests.java
diff --git a/project_milestone_4/locafy-microservices/discovery-server/.gitattributes b/locafy-microservices/discovery-server/.gitattributes
similarity index 100%
rename from project_milestone_4/locafy-microservices/discovery-server/.gitattributes
rename to locafy-microservices/discovery-server/.gitattributes
diff --git a/project_milestone_4/locafy-microservices/discovery-server/.gitignore b/locafy-microservices/discovery-server/.gitignore
similarity index 100%
rename from project_milestone_4/locafy-microservices/discovery-server/.gitignore
rename to locafy-microservices/discovery-server/.gitignore
diff --git a/project_milestone_4/locafy-microservices/discovery-server/.mvn/wrapper/maven-wrapper.properties b/locafy-microservices/discovery-server/.mvn/wrapper/maven-wrapper.properties
similarity index 100%
rename from project_milestone_4/locafy-microservices/discovery-server/.mvn/wrapper/maven-wrapper.properties
rename to locafy-microservices/discovery-server/.mvn/wrapper/maven-wrapper.properties
diff --git a/project_milestone_4/locafy-microservices/discovery-server/Dockerfile b/locafy-microservices/discovery-server/Dockerfile
similarity index 100%
rename from project_milestone_4/locafy-microservices/discovery-server/Dockerfile
rename to locafy-microservices/discovery-server/Dockerfile
diff --git a/project_milestone_4/locafy-microservices/discovery-server/mvnw b/locafy-microservices/discovery-server/mvnw
similarity index 100%
rename from project_milestone_4/locafy-microservices/discovery-server/mvnw
rename to locafy-microservices/discovery-server/mvnw
diff --git a/project_milestone_4/locafy-microservices/discovery-server/mvnw.cmd b/locafy-microservices/discovery-server/mvnw.cmd
similarity index 100%
rename from project_milestone_4/locafy-microservices/discovery-server/mvnw.cmd
rename to locafy-microservices/discovery-server/mvnw.cmd
diff --git a/project_milestone_4/locafy-microservices/discovery-server/pom.xml b/locafy-microservices/discovery-server/pom.xml
similarity index 100%
rename from project_milestone_4/locafy-microservices/discovery-server/pom.xml
rename to locafy-microservices/discovery-server/pom.xml
diff --git a/project_milestone_4/locafy-microservices/discovery-server/src/main/java/com/example/discovery_server/DiscoveryServerApplication.java b/locafy-microservices/discovery-server/src/main/java/com/example/discovery_server/DiscoveryServerApplication.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/discovery-server/src/main/java/com/example/discovery_server/DiscoveryServerApplication.java
rename to locafy-microservices/discovery-server/src/main/java/com/example/discovery_server/DiscoveryServerApplication.java
diff --git a/project_milestone_4/locafy-microservices/discovery-server/src/main/resources/application.yaml b/locafy-microservices/discovery-server/src/main/resources/application.yaml
similarity index 100%
rename from project_milestone_4/locafy-microservices/discovery-server/src/main/resources/application.yaml
rename to locafy-microservices/discovery-server/src/main/resources/application.yaml
diff --git a/project_milestone_4/locafy-microservices/discovery-server/src/test/java/com/example/discovery_server/DiscoveryServerApplicationTests.java b/locafy-microservices/discovery-server/src/test/java/com/example/discovery_server/DiscoveryServerApplicationTests.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/discovery-server/src/test/java/com/example/discovery_server/DiscoveryServerApplicationTests.java
rename to locafy-microservices/discovery-server/src/test/java/com/example/discovery_server/DiscoveryServerApplicationTests.java
diff --git a/project_milestone_4/locafy-microservices/docker-compose.yml b/locafy-microservices/docker-compose.yml
similarity index 70%
rename from project_milestone_4/locafy-microservices/docker-compose.yml
rename to locafy-microservices/docker-compose.yml
index af6470b..a954697 100644
--- a/project_milestone_4/locafy-microservices/docker-compose.yml
+++ b/locafy-microservices/docker-compose.yml
@@ -30,15 +30,17 @@ services:
depends_on:
- discovery-server
- notification-service:
- build: ./notification-service
- container_name: notification-service
+
+ # EXTENDED MICROSERV. with RabbitMQ
+ rabbitmq:
+ image: rabbitmq:3.12-management
+ container_name: rabbitmq
ports:
- - "8083:8083"
+ - "5672:5672" # App communication port
+ - "15672:15672" # Management dashboard foir RabbitMQ (http://localhost:15672)
environment:
- - EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://discovery-server:8761/eureka/
- depends_on:
- - discovery-server
+ RABBITMQ_DEFAULT_USER: guest
+ RABBITMQ_DEFAULT_PASS: guest
review-service:
build: ./review-service
@@ -47,6 +49,21 @@ services:
- "8082:8082"
environment:
- EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://discovery-server:8761/eureka/
+ - SPRING_RABBITMQ_HOST=rabbitmq # Connect to Rabbit container
depends_on:
- discovery-server
- - business-service
\ No newline at end of file
+ - business-service
+ - rabbitmq # Wait for RabbitMQ
+
+ notification-service:
+ build: ./notification-service
+ container_name: notification-service
+ ports:
+ - "8083:8083"
+ environment:
+ - EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://discovery-server:8761/eureka/
+ - SPRING_RABBITMQ_HOST=rabbitmq
+ depends_on:
+ - discovery-server
+ - rabbitmq
+
diff --git a/project_milestone_4/locafy-microservices/notification-service/.gitattributes b/locafy-microservices/notification-service/.gitattributes
similarity index 100%
rename from project_milestone_4/locafy-microservices/notification-service/.gitattributes
rename to locafy-microservices/notification-service/.gitattributes
diff --git a/project_milestone_4/locafy-microservices/notification-service/.gitignore b/locafy-microservices/notification-service/.gitignore
similarity index 100%
rename from project_milestone_4/locafy-microservices/notification-service/.gitignore
rename to locafy-microservices/notification-service/.gitignore
diff --git a/project_milestone_4/locafy-microservices/notification-service/.mvn/wrapper/maven-wrapper.properties b/locafy-microservices/notification-service/.mvn/wrapper/maven-wrapper.properties
similarity index 100%
rename from project_milestone_4/locafy-microservices/notification-service/.mvn/wrapper/maven-wrapper.properties
rename to locafy-microservices/notification-service/.mvn/wrapper/maven-wrapper.properties
diff --git a/project_milestone_4/locafy-microservices/notification-service/Dockerfile b/locafy-microservices/notification-service/Dockerfile
similarity index 100%
rename from project_milestone_4/locafy-microservices/notification-service/Dockerfile
rename to locafy-microservices/notification-service/Dockerfile
diff --git a/project_milestone_4/locafy-microservices/notification-service/mvnw b/locafy-microservices/notification-service/mvnw
similarity index 100%
rename from project_milestone_4/locafy-microservices/notification-service/mvnw
rename to locafy-microservices/notification-service/mvnw
diff --git a/project_milestone_4/locafy-microservices/notification-service/mvnw.cmd b/locafy-microservices/notification-service/mvnw.cmd
similarity index 100%
rename from project_milestone_4/locafy-microservices/notification-service/mvnw.cmd
rename to locafy-microservices/notification-service/mvnw.cmd
diff --git a/project_milestone_4/locafy-microservices/notification-service/pom.xml b/locafy-microservices/notification-service/pom.xml
similarity index 95%
rename from project_milestone_4/locafy-microservices/notification-service/pom.xml
rename to locafy-microservices/notification-service/pom.xml
index 0188bb2..ef0d7b0 100644
--- a/project_milestone_4/locafy-microservices/notification-service/pom.xml
+++ b/locafy-microservices/notification-service/pom.xml
@@ -39,6 +39,10 @@
org.springframework.boot
spring-boot-starter-webmvc
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
diff --git a/project_milestone_4/locafy-microservices/notification-service/src/main/java/com/example/notification_service/NotificationServiceApplication.java b/locafy-microservices/notification-service/src/main/java/com/example/notification_service/NotificationServiceApplication.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/notification-service/src/main/java/com/example/notification_service/NotificationServiceApplication.java
rename to locafy-microservices/notification-service/src/main/java/com/example/notification_service/NotificationServiceApplication.java
diff --git a/locafy-microservices/notification-service/src/main/java/com/example/notification_service/consumer/NotificationConsumer.java b/locafy-microservices/notification-service/src/main/java/com/example/notification_service/consumer/NotificationConsumer.java
new file mode 100644
index 0000000..8abbcc1
--- /dev/null
+++ b/locafy-microservices/notification-service/src/main/java/com/example/notification_service/consumer/NotificationConsumer.java
@@ -0,0 +1,21 @@
+package com.example.notification_service.consumer;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.stereotype.Component;
+
+@Component
+public class NotificationConsumer {
+
+ private static final Logger log = LoggerFactory.getLogger(NotificationConsumer.class);
+
+ // Listens to the queue defined in the Review Service
+ @RabbitListener(queues = "notification.queue")
+ public void consumeMessage(String message) {
+ log.info("------------------------------------------------");
+ log.info("🐰 RABBITMQ MESSAGE RECEIVED: {}", message);
+ log.info("------------------------------------------------");
+ // Here you would add logic to send actual Email/SMS
+ }
+}
diff --git a/project_milestone_4/locafy-microservices/notification-service/src/main/java/com/example/notification_service/controller/NotificationController.java b/locafy-microservices/notification-service/src/main/java/com/example/notification_service/controller/NotificationController.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/notification-service/src/main/java/com/example/notification_service/controller/NotificationController.java
rename to locafy-microservices/notification-service/src/main/java/com/example/notification_service/controller/NotificationController.java
diff --git a/project_milestone_4/locafy-microservices/notification-service/src/main/resources/application.yaml b/locafy-microservices/notification-service/src/main/resources/application.yaml
similarity index 100%
rename from project_milestone_4/locafy-microservices/notification-service/src/main/resources/application.yaml
rename to locafy-microservices/notification-service/src/main/resources/application.yaml
diff --git a/project_milestone_4/locafy-microservices/notification-service/src/test/java/com/example/notification_service/NotificationServiceApplicationTests.java b/locafy-microservices/notification-service/src/test/java/com/example/notification_service/NotificationServiceApplicationTests.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/notification-service/src/test/java/com/example/notification_service/NotificationServiceApplicationTests.java
rename to locafy-microservices/notification-service/src/test/java/com/example/notification_service/NotificationServiceApplicationTests.java
diff --git a/project_milestone_4/locafy-microservices/review-service/.gitattributes b/locafy-microservices/review-service/.gitattributes
similarity index 100%
rename from project_milestone_4/locafy-microservices/review-service/.gitattributes
rename to locafy-microservices/review-service/.gitattributes
diff --git a/project_milestone_4/locafy-microservices/review-service/.gitignore b/locafy-microservices/review-service/.gitignore
similarity index 100%
rename from project_milestone_4/locafy-microservices/review-service/.gitignore
rename to locafy-microservices/review-service/.gitignore
diff --git a/project_milestone_4/locafy-microservices/review-service/.mvn/wrapper/maven-wrapper.properties b/locafy-microservices/review-service/.mvn/wrapper/maven-wrapper.properties
similarity index 100%
rename from project_milestone_4/locafy-microservices/review-service/.mvn/wrapper/maven-wrapper.properties
rename to locafy-microservices/review-service/.mvn/wrapper/maven-wrapper.properties
diff --git a/project_milestone_4/locafy-microservices/review-service/Dockerfile b/locafy-microservices/review-service/Dockerfile
similarity index 100%
rename from project_milestone_4/locafy-microservices/review-service/Dockerfile
rename to locafy-microservices/review-service/Dockerfile
diff --git a/project_milestone_4/locafy-microservices/review-service/mvnw b/locafy-microservices/review-service/mvnw
similarity index 100%
rename from project_milestone_4/locafy-microservices/review-service/mvnw
rename to locafy-microservices/review-service/mvnw
diff --git a/project_milestone_4/locafy-microservices/review-service/mvnw.cmd b/locafy-microservices/review-service/mvnw.cmd
similarity index 100%
rename from project_milestone_4/locafy-microservices/review-service/mvnw.cmd
rename to locafy-microservices/review-service/mvnw.cmd
diff --git a/project_milestone_4/locafy-microservices/review-service/pom.xml b/locafy-microservices/review-service/pom.xml
similarity index 95%
rename from project_milestone_4/locafy-microservices/review-service/pom.xml
rename to locafy-microservices/review-service/pom.xml
index cc4fd62..bb42ba0 100644
--- a/project_milestone_4/locafy-microservices/review-service/pom.xml
+++ b/locafy-microservices/review-service/pom.xml
@@ -39,6 +39,12 @@
org.springframework.boot
spring-boot-starter-webmvc
+
+
+ org.springframework.boot
+ spring-boot-starter-amqp
+
+
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
diff --git a/locafy-microservices/review-service/src/main/java/com/example/review_service/ReviewServiceApplication.java b/locafy-microservices/review-service/src/main/java/com/example/review_service/ReviewServiceApplication.java
new file mode 100644
index 0000000..b47398c
--- /dev/null
+++ b/locafy-microservices/review-service/src/main/java/com/example/review_service/ReviewServiceApplication.java
@@ -0,0 +1,39 @@
+package com.example.review_service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+//@SpringBootApplication
+//@EnableDiscoveryClient
+//@EnableFeignClients
+//@EnableScheduling // <--- CRITICAL: Enables the timer
+//public class ReviewServiceApplication {
+//
+// private static final Logger log =
+// LoggerFactory.getLogger(ReviewServiceApplication.class);
+//
+// public static void main(String[] args) {
+// SpringApplication.run(ReviewServiceApplication.class, args);
+// log.info("🚀 APPLICATION STARTED");
+// }
+//
+// @Scheduled(fixedRate = 3000)
+// public void heartbeat() {
+// log.info("💓 HEARTBEAT – app is alive");
+// }
+//}
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableFeignClients
+public class ReviewServiceApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(ReviewServiceApplication.class, args);
+ }
+}
\ No newline at end of file
diff --git a/project_milestone_4/locafy-microservices/review-service/src/main/java/com/example/review_service/client/BusinessClient.java b/locafy-microservices/review-service/src/main/java/com/example/review_service/client/BusinessClient.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/review-service/src/main/java/com/example/review_service/client/BusinessClient.java
rename to locafy-microservices/review-service/src/main/java/com/example/review_service/client/BusinessClient.java
diff --git a/project_milestone_4/locafy-microservices/review-service/src/main/java/com/example/review_service/client/NotificationClient.java b/locafy-microservices/review-service/src/main/java/com/example/review_service/client/NotificationClient.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/review-service/src/main/java/com/example/review_service/client/NotificationClient.java
rename to locafy-microservices/review-service/src/main/java/com/example/review_service/client/NotificationClient.java
diff --git a/locafy-microservices/review-service/src/main/java/com/example/review_service/config/RabbitMQConfig.java b/locafy-microservices/review-service/src/main/java/com/example/review_service/config/RabbitMQConfig.java
new file mode 100644
index 0000000..8308d7d
--- /dev/null
+++ b/locafy-microservices/review-service/src/main/java/com/example/review_service/config/RabbitMQConfig.java
@@ -0,0 +1,25 @@
+package com.example.review_service.config;
+
+import org.springframework.amqp.core.*;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+public class RabbitMQConfig {
+ public static String QUEUE = "notification.queue";
+ public static String EXCHANGE = "review.exchange";
+ public static String ROUTING_KEY = "review.routingKey";
+
+ @Bean
+ public Queue queue() { return new Queue(QUEUE); } //this is not the queue of java.util.queue but
+ //but it is org.springframework.amqp.core.Queue;
+
+ @Bean
+ public TopicExchange exchange() { return new TopicExchange(EXCHANGE); }
+
+ @Bean
+ public Binding binding(Queue queue, TopicExchange exchange) {
+ return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY);
+ }
+}
diff --git a/project_milestone_4/locafy-microservices/review-service/src/main/java/com/example/review_service/controller/ReviewController.java b/locafy-microservices/review-service/src/main/java/com/example/review_service/controller/ReviewController.java
similarity index 100%
rename from project_milestone_4/locafy-microservices/review-service/src/main/java/com/example/review_service/controller/ReviewController.java
rename to locafy-microservices/review-service/src/main/java/com/example/review_service/controller/ReviewController.java
diff --git a/locafy-microservices/review-service/src/main/java/com/example/review_service/exception/GlobalExceptionHandler.java b/locafy-microservices/review-service/src/main/java/com/example/review_service/exception/GlobalExceptionHandler.java
new file mode 100644
index 0000000..14c201c
--- /dev/null
+++ b/locafy-microservices/review-service/src/main/java/com/example/review_service/exception/GlobalExceptionHandler.java
@@ -0,0 +1,24 @@
+package com.example.review_service.exception;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+
+ @ExceptionHandler(RuntimeException.class)
+ public ResponseEntity