Leanpub Header

Skip to main content

Building Conduit

Applying CQRS/ES to an Elixir and Phoenix web app

Discover why functional languages, such as Elixir, are ideally suited to building applications following the command query responsibility segregation and event sourcing (CQRS/ES) pattern.

Learn how to implement this architecture in a Phoenix web application to build an exemplary Medium.com clone.

Minimum price

Free!

$0.99

You pay

$0.00

Author earns

$0.00
$

...Or Buy With Credits!

You can get credits monthly with a Reader Membership
PDF
EPUB
WEB
343
Readers
155
Pages
About

About

About the Book

Learn how to implement the CQRS/ES pattern to build an Elixir and Phoenix web application.

You will be shown how to build an exemplary blogging platform. You will build a functional, event sourced domain model along with a read model optimised for querying.

This book is for anyone who has an interest in CQRS/ES and Elixir.

Author

About the Author

Ben Smith

Ben Smith is a full stack software engineer with a focus on the design, build, and deployment of intuitive and performant web applications.

Ben follows the domain-driven design approach to building software. He advocates using the Command Query Responsibility Segregation (CQRS) pattern to build the core business software. This approach allows a clean separation of the domain model for accepting command-based write operations, and a read-only query model. Both sides can be independently scaled: the development team and the physical deployment to the production environment.

Ben is enthusiastically using Elixir, Erlang/OTP, and Phoenix to build scalable web applications that respond in microseconds.

Discover more about Ben's work and his company Binary Consulting.

Contents

Table of Contents

Preface

Introduction

  1. Who is Building Conduit for?
  2. What does it cover?
  3. What is CQRS?
  4. Commands
  5. Domain events
  6. Queries
  7. What is event sourcing?
  8. What are the costs of using CQRS?
  9. Recipe for building a CQRS/ES application in Elixir
  10. An aggregate
  11. An event sourced aggregate
  12. Unit testing an aggregate

Conduit

  1. General functionality
  2. API specs

Contexts

  1. Contexts in Phoenix
  2. Contexts in Conduit

Getting started

  1. Installing Phoenix
  2. Generating a Phoenix project
  3. Starting the Phoenix server
  4. Commanded facilitates CQRS/ES in Elixir
  5. Write and read model stores
  6. Installing and configuring Commanded
  7. Configuring the read model store

Accounts

  1. Register a user
  2. Building our first context
  3. Writing our first integration test
  4. Application structure
  5. Alternate structure
  6. Building our first aggregate
  7. Building our first command
  8. Building our first domain event
  9. Writing our first unit test
  10. Command dispatch and routing
  11. Writing our first read model projection
  12. Validating dispatched commands
  13. Testing user registration validation
  14. Enforce unique usernames
  15. Additional username validation
  16. Validating a user’s email address
  17. Hashing the user’s password
  18. Completing user registration

Authentication

  1. Authenticate a user
  2. Generating a JWT token
  3. Getting the current user

Articles

  1. Publishing an article
  2. Authoring articles
  3. Publish article integration test
  4. Building the article controller
  5. Defining the publish article command
  6. Generating a unique URL slug
  7. Building the article aggregate
  8. Projecting the article read model
  9. Publishing articles test
  10. Listing articles
  11. List articles controller test
  12. Querying latest articles
  13. Filter by author
  14. Filter by tag
  15. Get an article
  16. Favorite articles
  17. Favorite integration test
  18. Article routing
  19. Favorite article controller
  20. Favorite articles in Blog context
  21. Favorite commands and events
  22. Favorite article aggregate handling
  23. Unit testing favorites in the article aggregate
  24. Routing favorite commands
  25. Projecting favorite articles in the read model
  26. Favorite articles test
  27. Filter by favorite articles

Tags

  1. Listing tags
  2. Projecting tags into the read model

Frequently asked questions

  1. How do I structure my CQRS/ES application?
  2. How do I deal with eventually consistent read model projections?

Appendix I

  1. Conduit API specs
  2. Authentication header
  3. JSON objects returned by API
  4. User
  5. Profile
  6. Single article
  7. Multiple articles
  8. Single comment
  9. Multiple comments
  10. List of tags
  11. Errors and status codes
  12. Endpoints
  13. Authentication
  14. Registration
  15. Get current user
  16. Update user
  17. Get profile
  18. Follow user
  19. Unfollow user
  20. List articles
  21. Feed articles
  22. Get article
  23. Create Article
  24. Update Article
  25. Delete article
  26. Add comments to an article
  27. Get comments from an article
  28. Delete comment
  29. Favourite article
  30. Unfavourite article
  31. Get tags

The Leanpub 60 Day 100% Happiness Guarantee

Within 60 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.

Now, this is technically risky for us, since you'll have the book or course files either way. But we're so confident in our products and services, and in our authors and readers, that we're happy to offer a full money back guarantee for everything we sell.

You can only find out how good something is by trying it, and because of our 100% money back guarantee there's literally no risk to do so!

So, there's no reason not to click the Add to Cart button, is there?

See full terms...

Earn $8 on a $10 Purchase, and $16 on a $20 Purchase

We pay 80% royalties on purchases of $7.99 or more, and 80% royalties minus a 50 cent flat fee on purchases between $0.99 and $7.98. You earn $8 on a $10 sale, and $16 on a $20 sale. So, if we sell 5000 non-refunded copies of your book for $20, you'll earn $80,000.

(Yes, some authors have already earned much more than that on Leanpub.)

In fact, authors have earned over $14 million writing, publishing and selling on Leanpub.

Learn more about writing on Leanpub

Free Updates. DRM Free.

If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).

Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.

Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.

Learn more about Leanpub's ebook formats and where to read them

Write and Publish on Leanpub

You can use Leanpub to easily write, publish and sell in-progress and completed ebooks and online courses!

Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks.

Leanpub is a magical typewriter for authors: just write in plain text, and to publish your ebook, just click a button. (Or, if you are producing your ebook your own way, you can even upload your own PDF and/or EPUB files and then publish with one click!) It really is that easy.

Learn more about writing on Leanpub