Built with ASP.NET Core 5.0 WebAPI & Angular 12 Material UI
Having quite a lot of experience with POS & Inventory Management system, we set out to build out a full fledged open source system using our favorite tech stack and tools. Modular development was a prime requirement for us when we got started. Adapting to a Microservice architecture was the first choice we had. But given the complexities with the mentioned architecture, we decided to stay away from it atleast for the starting.
There actually was no real need to implement microservices. fluentpos was meant to help businesses in their day-to-day activities. For this, a well designed monolith application would also do the trick. We were clear to have the API and UI seperated, to give oppurtunities to multiple client apps in the future.
For API, ASP.NET Core 5.0 was our obvious choice. As for the UI, we decided to go with Angular 12 Material UI.
The WebAPI application had to be highly modular to improve development experience. This needed breaking down the application to logical modules like Identity, Catalog, Sales, Inventory. Each of these modules has its own controllers / interfaces / dbContext. As for the DB providers, postgres / mssql will be used. One module cannot directly talk to the other module nor modify its table. CrossCutting concerns would use interfaces/ events. And yes, domain events are also included in the project using mediatr Handler. Each of the module follows a clean architecture design / Onion / Hex.
fluentpos was meant for retail businesses. The modular monolith architecture would help us to extend fluentpos to support other business modules like cafe, restaurant, warehouses and so.
For the initial release, you can track the progress and included tasks here - https://github.com/fluentpos/fluentpos/milestone/1
PS, we will be adding in more requirements.
- Identify / Create tasks from / to https://github.com/fluentpos/fluentpos/issues
- Assign it to yourself
- Create a branch from the master branch and name it according to the Issue Id. For ex, if the Issue id is #70, create a branch 'fluentpos-70'
- Make your changes in this branch
- Get it reviewed from one of the Core Team Members
- Submit a PR
- Get it Merged to the Master Branch
- API - ASP.NET Core 5.0 WebAPI
- Client - Angular 12 Material
- Data Access - Entity Framework Core 5.0
- DB Providers - Postgres, MSSQL
- API -
In Progress
- Angular Project -
In Progress
- Seperate Website to maintain documentation -
Coming Soon!
- Docker Container -
Coming Soon!
fluentpos is in it's early development stage.
Clone this repository to your local machine.
- Install the latest .NET 5 SDK
- Install the latest DOTNET & EF CLI Tools by using this command
dotnet tool install --global dotnet-ef
- Install the latest version of Visual Studio IDE 2019 (v16.8 and above) OR Visual Studio Code 🚀
- It's recommended to use Postgres DB as it comes by default with fluentpos. Install PostgreSQL.
- As for quick DB Management, we love Azure Data Studio
- Open up
FluentPOS.sln
in Visual Studio 2019. - Navigate to appSettings.json under
src/Api/Bootstrapper/appsettings.json
- Add you PostgreSQL connection string under
PersistenceSettings
. The default connection string is"postgres": "Host=localhost;Database=fluentpos;Username=postgres;Password=root"
- That's everything you need to setup the API. Just build and run the API project.
- By default, the database is migrated and latest changes are applied.
- Some default data is also seeded to this database like roles, users, brands, products etc.
Not interested with PostgreSQL? You can easily switch to MSSQL by following this guide.
- Navigate to fluentpos\src\client via terminal.
- Run
npm install
to install all the required packages - Run
ng serve
- Navigate to localhost:4200 on your browser
- Open up
fluentpos.code-workspace
inside fluentpos\workspace - Make sure you have Visual Studio Code installed as well as .NET and Angular related extensions
- Open terminal session
- Running API with CLI command:
dotnet watch watch
2021-07-18.23-03-37.mp4
POS UI - As of 25/7/2021
2021-07-25.02-09-18.mp4
- superadmin - superadmin@fluentpos.com / 123Pa$$word!
- staff - staff@fluentpos.com / 123Pa$$word!
You can use these credentials to generate jwt tokens in the api/identity/tokens
endpoint.
Since fluentpos is in it's early development stage, I have not been able to write detailed documentation about the implementation. You can expect quite a lot of content around this architecture on my blog @codewithmukesh in the upcoming days.
- Mukesh Murugan @iammukeshm
- Chhin Sras @chhinsras
- Nikolay Chebotov @unchase
- Discord @fluentpos
This project is licensed with the MIT license.