# Design: Deploy Artifacts to Sites — Remove Config DB Dependency

**Date:** 2026-03-17
**Status:** Approved

## Problem

`ExternalSystemClient`, `DatabaseGateway`, and `NotificationDeliveryService` query the central config DB at runtime from site servers. The data is already deployed to local SQLite via `DeployArtifactsCommand` but never read back. Sites should be fully self-contained after artifact deployment.

## Changes

### 1. Site-local repository implementations

Create `SiteExternalSystemRepository` and `SiteNotificationRepository` that read from `SiteStorageService` (SQLite) instead of EF Core config DB repositories. Implement `IExternalSystemRepository` and `INotificationRepository` interfaces backed by SQLite queries.

### 2. Remove AddConfigurationDatabase from Site role

Replace `AddConfigurationDatabase` in Program.cs Site role with site-local repository registrations. Site no longer needs a SQL Server connection string.

### 3. Add "Deploy Artifacts" button to Admin UI

On the Sites page, add a "Deploy Artifacts" button per site that:
- Collects all external systems, database connections, notification lists + recipients, SMTP configs from config DB
- Sends `DeployArtifactsCommand` to the site via `CommunicationService`
- Shows success/failure toast

### 4. Include data connections in artifact deployment

Extend `DeployArtifactsCommand` to include data connection definitions (OPC UA endpoints, etc). Add `StoreDataConnectionDefinitionAsync` to `SiteStorageService`.

### 5. No change to FlattenedConfiguration

The DCL already reads connection config from `FlattenedConfiguration.Connections` dict, populated during flattening from config DB. This stays as-is.

## Outcome

After artifact deployment, sites operate without any config DB access. The config DB connection string is removed from `appsettings.Site.json`.
