Adding soft delete to a Phoenix Commanded (CQRS) API
Part two in my series on Elixir’s Commanded library. Part one can be found here.
In the previous post, I converted a vanilla Phoenix API to CQRS with Commanded.
Since the core data model of this application is an append-only (immutable) log, the events can be replayed and the read model can be dramatically changed using existing data.
Implement a soft delete in the API, allowing items to be restored after deletion.
Using CQRS in a simple Phoenix API with Commanded
Despite being a fan of event sourcing and seeing the clear benefits of the approach, I never built anything from scratch. This weekend, I finally decided to break this study cycle and do something practical.
Firestore Backup and Restore
Check out FirestoreRestore. It uses a brand new API to backup and restore your Firestore database!
There have been many requests for Google to add backup and restore functionality to their Cloud Firestore offering. Until this week, the only method for backing up a Firestore database has been to run utilities that traverse the tree as an admin client, saving each document’s JSON representation on disk.
This morning, I opened the Google APIs Explorer and found two new methods listed under Firestore
Trying out ASP.NET Core 2.0
Why Bother with C#?
In my day job, I work with many APIs written in C#. Deployments involve running scripts that move DLLs to Windows servers running IIS. These servers have a large footprint and take a long time to initially provision. I think that the agility provided by being able to dockerize ASP.NET APIs could improve resource utilization, deployment times, and the ability to rapidly scale horizontally.
Since .NET Standard 2.0 and ASP.NET Core 2.0 were recently released, I decided to write a simple API using ASP.NET Core 2.0 and see if the dream of developing and deploying C# outside of Windows is finally a reality.
Example Project: Todo-Backend
The TodoMVC project exists to showcase front end technologies. It is a simple todo list application, typically using storage within the browser.