## Lagom

This module contains articles about the Lagom framework.

### Relevant articles

- [Guide to Reactive Microservices Using Lagom Framework](https://www.baeldung.com/lagom-reactive-microservices)

### Steps to setup from scratch

1) Create sbt build file "build.sbt" 
2) Create plugins file project/plugins.sbt
3) Create build properties file project/build.properties
4) Run sbt command from project root to generate project directories, generated projects at target/lagom-dynamic-projects
   Service Locator project: lagom-internal-meta-project-service-locator
   cassandra project: lagom-internal-meta-project-cassandra	
5) Create folders in all projects to follow maven like directory structure layout for project source code: src/main/java and src/main/java/resources and test folders.
6) Weather microservice
	a) WeatherService Interface with method:
		weatherStatsForToday()
	b) WeatherServiceImpl to return weatherstats from a random list of weather stats
	
7) Greeting Microservice
	 GreetingService Interface: 
		handleGreetFrom(String user)
		
	a) Reply back to user with greeting message("Hello") along with weather stats fetched from weather microservice
	b) Update the greeting message("Hello Again") for an existing user.
	
8) GreetingEntity: PersistentEntity<GreetingCommand, GreetingEvent, GreetingState>
	a) handles ReceivedGreetingCommand 
	b) Stores ReceivedGreetingEvent events to cassandra 
	c) Processes ReceivedGreetingEvent to update GreetingState("Hello" to "Hello Again") if required.
    
9)  Register modules with lagom using application.conf files.
10) Run project: sbt lagom:runAll
	

### Sample Run:
```
$ curl http://localhost:9000/api/greeting/Nikhil;
Hello Nikhil! Today's weather stats: Going to be very humid, Take Water

$ curl http://localhost:9000/api/greeting/Nikhil;
Hello Again Nikhil! Today's weather stats: Going to Rain, Take Umbrella
```


