An educational project for creating an event-driven pet store in Kotlin
TBC
An example of a Kotlin Event Drive Pet Store
License: Apache License 2.0
This is a place holder issue with videos and examples to read
CQRS by Martin Fowler
https://martinfowler.com/bliki/CQRS.html
Event Sourcing by Martin Fowler
https://martinfowler.com/eaaDev/EventSourcing.html
Introduction to Domain Driven Design, CQRS and Event Sourcing by Kenneth Truyers
https://www.kenneth-truyers.net/2013/12/05/introduction-to-domain-driven-design-cqrs-and-event-sourcing/
The Future of Event-driven Microservices with Spring Cloud Stream by Kenny Bastani
https://www.youtube.com/watch?v=M9i8ORKqXQI
Event Sourcing and CQRS with Spring Stream by Jakub Pilimon
https://www.youtube.com/watch?v=eqPMmotEfsA
Spring PetClinic Sample Application Build Status by Pivotal
https://github.com/spring-projects/spring-petclinic
Describe the feature
We should add error mapping to insertIfNotExist
Describe the feature
Create an endpoint to be able to find a pet by id.
Describe the feature
We have to install and configure a kafka in Kubernetes
Useful link: https://strimzi.io/quickstarts/
Describe the feature
Create a service to initialise the database, it should be able to be called to perform that action.
Describe the feature
We should have tests for the code that creates the infra.
Describe the feature
Create a new library for DTO validation using reactor.
Describe the feature
Currently, we use stored procedures to insert categories, breeds, vaccines and tags, we should remove then and do normal SQLs
Describe the feature
The pet-stream service should have a rest service in order to be able to add health checks in a future.
The service should also be able to run a task on the startup.
Describe the feature
We should move the sql files used to initializate the database to a separate folder and run them only on test.
Describe the feature
We should get the pet details from a postgresql.
Describe the feature
In order to have a consistent code formatting we should include Ktlint
Additional context
We could use the maven plugin : https://github.com/gantsign/ktlint-maven-plugin
Projects to add this :
Describe the feature
When we listen to messages from Kafka we will need to handle retries and failures
Describe the feature
Add the ktlint tool to format and verify the code
Describe the feature
Create the new pet-stream service.
Describe the bug
The name of the services is wrong.
Additional context
The correct names of the services are: pet-commands, pet-stream and pet-queries.
Describe the feature
We should handle errors and return json messages.
Describe the feature
We need a diagram that shows the domains for our application
Describe the feature
Update dependencies for:
Additional context
Describe the feature
When we use the CommandsConsumer if Kafka is not available we will wait forever.
Additional context
We should be able to configure how long we will wait that is available before subscribing to get commands.
Describe the feature
We need to create a diagram that shows the Pets domain architecture
Describe the feature
Create a library to produce and consume command messages from a Kafka queue using reactor.
Describe the feature
Create the pet-queries service with its dependencies:
Describe the feature
Improve the usage on list with commands
Additional context
Commands allows to work with list, we could do :
val command = command("example command") {
"attribute1" value listOf("one", "two", "three")
}
val list = command.get<List<String>>("attribute1")
However this is not working very will if we do this
val command = command("example command") {
"attribute1" value listOf("one", "two", "three")
}
val list = command.get<List<Int>>("attribute1")
Even if we have specified to return a List<Int>
we will get a List<String>
since the type assurance is just in List.
We need a new function to do that, something like
val command = command("example command") {
"attribute1" value listOf("one", "two", "three")
}
val list = command.getList<Int>("attribute1")
Them we could raise failures if we can not get that kind of list.
Finally we could make a new dsl infix named values
to make it more clear that we are setting a List in our attribute.
Describe the feature
We have to install and configure a postgreSQL database in Kubernetes
Describe the feature
We need to move the master branch to main
Additional context
See this link :
https://www.hanselman.com/blog/EasilyRenameYourGitDefaultBranchFromMasterToMain.aspx
Describe the feature
We should upgrade the spring version to use the latest one.
Describe the feature
We have to implement the post request to add a new pet in the store.
Additional context
https://petstore.swagger.io/#/pet/addPet
Describe the feature
We have to create a new service component so that we can process commands and save pets in a postgresql database
Describe the bug
When launching the service that set up all the infrastructure, we get an error creating the database cluster when the operator installation takes too much time.
To Reproduce
Steps to reproduce the behaviour:
Expected behaviour
The database cluster should be created without errors.
Describe the feature
Currently we are manually rollbacking when failure creating a pet. We should change this in order to use transactions so that the rollback happens automatically.
Additional context
https://docs.spring.io/spring-data/r2dbc/docs/1.0.x/reference/html/#r2dbc.datbaseclient.transactions
Describe the feature
Currently, when we send a command we will wait forever to the broker been available, we need somehow been able to specify a timeout for sending the command.
Additional context
Probably a setting in the CommandsProducerConfig we will be required
We need to set-up the Github Project, we need :
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.