Preface
Introduction
- Who is Building Conduit for?
- What does it cover?
- What is CQRS?
- Commands
- Domain events
- Queries
- What is event sourcing?
- What are the costs of using CQRS?
- Recipe for building a CQRS/ES application in Elixir
- An aggregate
- An event sourced aggregate
- Unit testing an aggregate
Conduit
- General functionality
- API specs
Contexts
- Contexts in Phoenix
- Contexts in Conduit
Getting started
- Installing Phoenix
- Generating a Phoenix project
- Starting the Phoenix server
- Commanded facilitates CQRS/ES in Elixir
- Write and read model stores
- Installing and configuring Commanded
- Configuring the read model store
Accounts
- Register a user
- Building our first context
- Writing our first integration test
- Application structure
- Alternate structure
- Building our first aggregate
- Building our first command
- Building our first domain event
- Writing our first unit test
- Command dispatch and routing
- Writing our first read model projection
- Validating dispatched commands
- Testing user registration validation
- Enforce unique usernames
- Additional username validation
- Validating a user’s email address
- Hashing the user’s password
- Completing user registration
Authentication
- Authenticate a user
- Generating a JWT token
- Getting the current user
Articles
- Publishing an article
- Authoring articles
- Publish article integration test
- Building the article controller
- Defining the publish article command
- Generating a unique URL slug
- Building the article aggregate
- Projecting the article read model
- Publishing articles test
- Listing articles
- List articles controller test
- Querying latest articles
- Filter by author
- Filter by tag
- Get an article
- Favorite articles
- Favorite integration test
- Article routing
- Favorite article controller
- Favorite articles in Blog context
- Favorite commands and events
- Favorite article aggregate handling
- Unit testing favorites in the article aggregate
- Routing favorite commands
- Projecting favorite articles in the read model
- Favorite articles test
- Filter by favorite articles
Tags
- Listing tags
- Projecting tags into the read model
Frequently asked questions
- How do I structure my CQRS/ES application?
- How do I deal with eventually consistent read model projections?
Appendix I
- Conduit API specs
- Authentication header
- JSON objects returned by API
- User
- Profile
- Single article
- Multiple articles
- Single comment
- Multiple comments
- List of tags
- Errors and status codes
- Endpoints
- Authentication
- Registration
- Get current user
- Update user
- Get profile
- Follow user
- Unfollow user
- List articles
- Feed articles
- Get article
- Create Article
- Update Article
- Delete article
- Add comments to an article
- Get comments from an article
- Delete comment
- Favourite article
- Unfavourite article
- Get tags