Core

Info

Architectural truth for Core in the ProjectConfig feature. This leaf module contains the domain logic, endpoints, and messaging contracts.

Architecture

FastEndpoints

  • GetProjectConfig
  • UpdateProjectConfig

Wolverine Contracts & Handlers

  • GetProjectConfigHandler (Handler)
  • UpdateProjectConfigHandler (Handler)
  • UpdateProjectConfigCommand (Message)

Domain Models

  • GetProjectConfigQuery

Caching

GetProjectConfigHandler serves the config/preset DTO from HybridCache under the tenant-scoped key config:{tenantId}:{projectId} (5-minute TTL). The per-user access check runs before the cache and is never cached (authorization freshness). The null/no-access result is not cached either — GetOrCreateAsync treats it as a miss each time. The cached DTO only exposes presence booleans (HasApiKey, HasGitToken, …), never secrets.

UpdateProjectConfigHandler invalidates on write: after SaveChangesAsync it removes config:{tenantId}:{projectId}, repo:{tenantId}:{projectId} (the config write may change repos and, once the async clone completes, the file listing), and project-meta:{tenantId}:{projectId} (refreshes every user’s home-page project list). The config tag also evicts the raw encrypted-presets cache entry (presets:{tenantId}:{projectId}), which deliberately reuses it.

0 items under this folder.