Edary — Accounting & ERP System
Enterprise accounting and ERP for financial management, chart of accounts, transactions, and reporting. The codebase follows layered DDD with ABP, a SPA on Angular 20, and a self-contained Windows host for release deployments.
At a glance
| Layer | Technology |
|---|---|
| Backend | .NET 10, ASP.NET Core, ABP 10 |
| API | Auto API controllers / HttpApi, Swagger (Swashbuckle via ABP) |
| Database | EF Core 10 + SQL Server |
| Auth | OpenIddict + ABP Identity |
| Frontend | Angular 20 + ABP NG 10 |
| DI | Autofac |
| Logging | Serilog |
| Tests | xUnit, NSubstitute, Shouldly, Volo.Abp.TestBase |
Demo video
Platform & backend host
- .NET 10 (
net10.0), C# withLangVersion: latest, nullable reference types enabled. - ASP.NET Core web host (
Edary.HttpApi.Host) with in-process hosting. - Release publishing: self-contained deployment for Windows x64 so
Edary.HttpApi.Host.execan run without a separate .NET runtime on the machine (per project settings).
ABP Framework (layered DDD)
ABP 10.0.2 (Volo.Abp) — layered application template:
- Domain.Shared — constants, enums, localization
- Domain — entities, repository contracts, domain services
- Application.Contracts — DTOs, application service interfaces
- Application — use-case implementations
- EntityFrameworkCore — data access
- HttpApi + HttpApi.Host — API surface and hosting
- DbMigrator — database migrations and seed data
Dependency injection: Autofac (Volo.Abp.Autofac).
API docs: Swashbuckle through Volo.Abp.Swashbuckle.
Multi-tenancy: Volo.Abp.AspNetCore.MultiTenancy.
Tooling: ABP Studio Client where it fits the workflow.
Authentication & identity
- OpenIddict via ABP packages (OpenIddict + Account.Web.OpenIddict), with
openiddict.pfxon the host. - Identity and tenant management integrated in ABP (domain, application, EF Core layers).
- IdentityModel for OAuth/OpenID Connect on clients or integrations.
Database & data access
- Entity Framework Core 10 with SQL Server (
Volo.Abp.EntityFrameworkCore.SqlServer). - Built-in EF modules: permissions, settings, background jobs, auditing, features, BLOB storage in the database, OpenIddict, Identity, tenant management.
- Host also uses EF Core InMemory for auxiliary scenarios (e.g. health checks or in-app test paths).
- Microsoft.EntityFrameworkCore.Tools for
dotnet efmigrations.
Frontend (SPA)
- Angular 20, TypeScript ~5.8, RxJS 7.8, Zone.js.
- ABP Angular 10.0.2:
@abp/ng.core,@abp/ng.oauth,@abp/ng.identity,@abp/ng.account,@abp/ng.tenant-management, feature/settings management, Basic theme. - Angular CLI 20; production build via
ng build --configuration production. - Publish integration: on publish, Angular is built (
npm ci/npm installthenbuild:prod) and output is copied into the hostwwwroot.
Logging, monitoring & health
- Serilog with ASP.NET Core integration and Serilog.Sinks.Async.
- Health Checks UI (UI + in-memory storage) with health-check clients.
Application & domain extras
- Emailing (
Volo.Abp.Emailing), caching (Volo.Abp.Caching). - AutoMapper via Volo.Abp.AutoMapper in the application layer (note: an rc package version may appear in one project vs 10.0.2 elsewhere).
- System.Management in the app (typically Windows machine / WMI-style reads).
Side projects & tooling
- Edary.LicenseGenerator — .NET 10 console app using System.Management (WMI-oriented) for license / machine binding (pairs with the ELG desktop issuer on the portfolio).
- Edary.HttpApi.Client plus a console test client project.
- KubernetesClient on the host — commonly used for Kubernetes integration or cluster-side configuration.
Tests
- xUnit with Microsoft.NET.Test.Sdk, Shouldly, NSubstitute, Volo.Abp.TestBase.
Related — licensing (ELG)
Edary License Generator (ELG) issues RSA-signed JSON licenses (customer, machine ID, expiry) for Edary deployments. Details: Edary License Generator (ELG).