Build & Run
What is Eos?
Eos is the product/family name for the greenfield platform replacing the legacy
Logiswift system — not a single app. Each piece underneath it is named by function:
Eos.Api (backend API), Eos.Workers (background jobs), and — coming next —
Eos.Web (Operations frontend), Eos.Rf, Eos.Reporting, and Eos.Contracts
(shared DTOs consumed by the frontends).
Stack
- .NET 10, C#, nullable reference types and implicit usings enabled.
- ASP.NET Core Web API as the single API host.
- SQL Server with EF Core 10, database-first (scaffolded from the existing schema).
- .NET Worker Service for background jobs (replaces the old Windows Services).
- xUnit + FluentAssertions + NSubstitute for tests; FluentValidation for validation.
Repository layout — monorepo, one solution per area
This is a monorepo: one Git repo, multiple areas, each with its own solution and its own CI/CD pipeline — they are not built or deployed together.
/ shared conventions only: CLAUDE.md, README.md,
Directory.Build.props, .editorconfig, .gitattributes, .gitignore
/backend/ Logiswift.Eos.slnx — everything this document describes
src/Logiswift.Eos.Api/
src/Logiswift.Eos.Application/
src/Logiswift.Eos.Domain/
src/Logiswift.Eos.Infrastructure/
src/Logiswift.Eos.Workers/
tests/...
/frontend/ the frontend area, own tooling/pipeline (not a .NET solution)
src/eos-web/ React + Vite + TypeScript, Operations frontend
src/eos-rf/ (coming next) handheld-scanner frontend
src/eos-reporting/ (coming next) reporting frontend
/eos-contracts/ (coming next) shared DTOs consumed by the frontends, own solution
Two folders shown above are new since this documentation site was built: /docs/ (this
Docusaurus site itself, sibling to backend//frontend/) and /docs-internal/ (internal
planning docs).
Existing project namespaces (Logiswift.Eos.Api, Logiswift.Eos.Application,
Logiswift.Eos.Domain, Logiswift.Eos.Infrastructure, Logiswift.Eos.Workers) are
already correctly component-named — never rename them for this layout; the
restructuring is folders and docs only, not namespaces.
Build & run
All commands below run from backend/ (this area's own root):
cd backend
dotnet restore
dotnet build
dotnet test
dotnet run --project src/Logiswift.Eos.Api # API + Swagger at /swagger
dotnet run --project src/Logiswift.Eos.Workers # background jobs
Multi-client deployment
Each client (CPL, AFF, AXENDO, CEVA, CJ, DENMAR, deugro, IMISK, LEOCH, LDC, LOGISWIFT,
PERFORMANS, BARRICK, PBCU, QUANTA) gets its own deployment of the Api + Workers,
each pointed at that client's database via the EosDb connection string in configuration.
Do not bake client-specific logic into code; drive differences through configuration.
Conventions
async/awaiteverywhere for I/O; passCancellationTokenthrough.- DTOs at the API boundary — never expose EF entities over the wire.
- Constructor injection via the built-in DI container.
- One job class per former Windows Service under
Workers/Jobs, each aBackgroundService. - Tests: service/use-case logic in
*.Application.Tests, domain logic in*.Domain.Tests, DB-touching tests in*.Integration.Tests.
:::danger Do not
- Do not apply EF migrations or run
dotnet ef database updateagainst any real database without explicit confirmation. - Do not hand-edit scaffolded files.
- Do not add cross-module dependencies that bypass Application interfaces.
- Do not introduce microservice splits without a discussion first.
- Do not cache transactional data (Operations/Rf/Reporting/Edi entities). In-memory caching
is reserved for
Mas*lookup/reference tables only. :::