Files
admin/_docs/02_document/module-layout.md
T
Oleksandr Bezdieniezhnykh c7b297de83
ci/woodpecker/push/01-test Pipeline failed
ci/woodpecker/push/02-build-push unknown status
refactor: remove deploy.cmd and update Dockerfile for health checks
- Deleted the deploy.cmd script as it was no longer needed.
- Updated Dockerfile to include curl for health checks and added a non-root user for improved security.
- Modified health check command to use curl for better reliability.
- Adjusted docker-compose.test.yml to reflect changes in health check configuration.
- Cleaned up appsettings.json and removed unused configuration properties.
- Removed Resource entity and related requests from the codebase as part of the architectural shift.
- Updated documentation to reflect the removal of hardware binding and related endpoints.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-13 08:47:21 +03:00

6.3 KiB

Module Layout

Language: csharp Layout Convention: solution-flat (legacy — pre-src/ convention) Root: ./ (csproj folders sit at workspace root) Last Updated: 2026-05-13

Layout Rules

  1. This admin/ workspace is one deployable (the Azaion.AdminApi HTTP service) split across four production csproj projects + one e2e test csproj: Azaion.AdminApi, Azaion.Services, Azaion.Common, Azaion.Test, e2e/Azaion.E2E.
  2. Existing task specs (_docs/02_tasks/*/AZ-*.md) all use Component: Admin API as a single coarse identifier covering this entire workspace. The Per-Component Mapping below honors that convention rather than rewriting every task spec.
  3. The conceptual sub-components documented in _docs/02_document/components/01_data_layer..05_admin_api/ are read-time documentation aids, not write-time ownership boundaries. They are listed under "Conceptual Sub-Components" below for reference only.
  4. Public API surface = the namespaces / interfaces exposed across csproj boundaries (I*Service interfaces in Azaion.Services, request DTOs in Azaion.Common/Requests/, entities in Azaion.Common/Entities/).
  5. Tests live in Azaion.Test/ (in-process unit/integration) and e2e/Azaion.E2E/ (HTTP black-box). Production code never imports from either.

Per-Component Mapping

Component: Admin API

  • Epic: AZ-181 (and any other admin-API epic, e.g. AZ-509 for the Detection Classes feature)
  • Directory: workspace root (multi-csproj, see below)
  • Owns (exclusive write during implementation):
    • Azaion.AdminApi/**
    • Azaion.Services/**
    • Azaion.Common/**
    • Azaion.Test/**
    • e2e/Azaion.E2E/** (xUnit/HttpClient-based black-box tests)
    • e2e/db-init/** (test-DB seed/init scripts consumed by the e2e harness)
    • docker.test/** (test fixture / schema-init helpers used by Azaion.Test)
    • docker-compose.test.yml
  • Public API (visible to other csprojs within the workspace):
    • Azaion.Services/I*Service.cs interfaces (UserService, AuthService, ResourcesService, …)
    • Azaion.Services/Security.cs, Azaion.Services/Cache.cs (used by Azaion.AdminApi/Program.cs)
    • Azaion.Common/Requests/* request DTOs
    • Azaion.Common/Entities/* linq2db entities
    • Azaion.Common/Database/* IDbFactory + connection helpers
    • Azaion.Common/Configs/* strongly-typed config records
    • Azaion.Common/Extensions/* extension methods
    • Azaion.Common/BusinessException.cs
    • Azaion.AdminApi/Program.cs (composition root + minimal-API endpoints)
    • Azaion.AdminApi/BusinessExceptionHandler.cs
  • Internal (do NOT import across csproj boundaries):
    • private/internal members within each csproj (default C# visibility rules apply)
    • Azaion.AdminApi/appsettings*.json (loaded by the host, not imported)
    • e2e/Azaion.E2E/Helpers/* (test-only helpers, never imported by production)
  • Imports from: (none — this is the only deployable in the workspace; the Loader is architecturally retired per suite/_docs/_repo-config.yaml unresolved:loader-retirement-arch-doc)
  • Consumed by: HTTP clients (UI workspace, edge services on secured Jetson, SaaS browser sessions) — out of process

Conceptual Sub-Components (documentation only — NOT ownership boundaries)

These come from _docs/02_document/components/ and exist for reading the codebase, not for assigning task ownership. A single task may legitimately touch multiple sub-components within the Admin API umbrella.

# Sub-component Primary file locations
1 Data Layer Azaion.Common/Database/, Azaion.Common/Configs/, Azaion.Common/Entities/ (incl. DetectionClass.cs added cycle 1; Resource.cs added then removed in same cycle — see post-cycle-1 revert)
2 User Management Azaion.Services/UserService.cs (incl. RegisterDevice added cycle 1 / AZ-196 — calls RegisterUser end-to-end after security-audit consolidation, finding F-3), Azaion.Common/Requests/Register{User,DeviceResponse}.cs, LoginRequest.cs, SetUserQueueOffsetsRequest.cs
3 Auth & Security Azaion.Services/AuthService.cs, Azaion.Services/Security.cs (post-AZ-197 — GetHWHash removed; signature simplified), Azaion.Services/Cache.cs
4 Resource Management Azaion.Services/ResourcesService.cs, Azaion.Common/Requests/GetResourceRequest.cs (SetHWRequest.cs removed by AZ-197; ResourceUpdateService.cs + GetUpdateRequest.cs + PublishResourceRequest.cs removed when AZ-183 was reverted)
4b Detection Classes Azaion.Services/DetectionClassService.cs + Azaion.Common/Requests/{Create,Update}DetectionClassRequest.cs (added cycle 1 / AZ-513)
5 Admin API (HTTP) Azaion.AdminApi/Program.cs, Azaion.AdminApi/BusinessExceptionHandler.cs, Azaion.AdminApi/appsettings*.json

Allowed Dependencies (csproj layering)

Layer csproj May reference
4. Entry / Host Azaion.AdminApi Azaion.Services, Azaion.Common
3. Application Azaion.Services Azaion.Common
2. Foundation Azaion.Common (none)
—. Tests (in-process) Azaion.Test Azaion.Services, Azaion.Common, Azaion.AdminApi (integration only)
—. Tests (out-of-process e2e) e2e/Azaion.E2E (none from production csprojs — HTTP only)

A reference from a lower production layer to a higher production layer is an Architecture finding (High severity) in /code-review Phase 7. Test projects may reference any production csproj; production csprojs may NOT reference test projects.

Layout Conventions (reference)

Language Root Per-component path Public API file Test path
C# (.NET) ./ (this workspace, legacy flat layout) ./<Csproj>/ namespace-root types in each csproj Azaion.Test/, e2e/Azaion.E2E/

Notes

  • This file was authored 2026-05-13 by /autodev Step 10 to satisfy /implement Step 4. The _docs/ artifact set predates the Step 1.5 module-layout addition, so this is a backfill rather than a fresh decompose Step 1.5 run.
  • If the project later splits into multiple deployables (e.g. carving out Azaion.AnnotationsApi), re-run /decompose Step 1.5 to produce a finer-grained mapping.