Skip to content

Server credential persistence (SwiftData + Keychain) #135

@kirich1409

Description

@kirich1409

Epic: Welcome Screen (#139)

Task ID: T-0 · Wave: 0 (prerequisite) · Complexity: L

Описание

Реализовать персистентное хранение серверов. Сейчас серверы хранятся только в памяти (ServerListFeature.State.servers) и теряются при перезапуске.

SwiftData (ServerModel): метаданные — serverID (UUID, unique), host, port, displayName, serverType, baseURL, certificateFingerprint, defaultImage, createdAt, lastConnectedAt.

Keychain (ServerKeychainStore): секреты — token, clientCertificatePEM, clientKeyPEM, caCertificatePEM. Ключ: serverID.uuidString.

TCA Dependency (ServerRepositoryClient): методы loadAll, save, delete, updateLastConnected. Live: CRUD в SwiftData + sync секретов в Keychain.

Обновить ServerListFeature: _loadServers загружает из SwiftData+Keychain, save/delete пишет через dependency. Убрать TODO Phase 4b.

Module: MacApp/Relay/Persistence + MacApp/Relay/ServerManagement

Acceptance Criteria

  • ServerModel (@model) с метаданными сервера в SwiftData
  • ServerKeychainStore: CRUD для секретов по serverID
  • ServerRepositoryClient как TCA DependencyKey (live + testValue)
  • ServerListFeature._loadServers загружает из persistence
  • Сохранение нового сервера → SwiftData + Keychain
  • Удаление сервера → SwiftData + Keychain
  • Серверы сохраняются между перезапусками приложения
  • Тесты: save/load/delete через testValue dependency

Dependencies

Нет — параллельно с T-1, T-2.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions