repositories.ts raw

   1  import { Pubkey } from '../shared'
   2  import { RelayList } from './RelayList'
   3  import { RelaySet } from './RelaySet'
   4  import { FavoriteRelays } from './FavoriteRelays'
   5  
   6  /**
   7   * Repository interface for RelayList aggregate
   8   *
   9   * Implementations should handle:
  10   * - Local caching (IndexedDB)
  11   * - Remote fetching from relays
  12   * - Event publishing
  13   */
  14  export interface RelayListRepository {
  15    /**
  16     * Find the relay list for a user
  17     */
  18    findByOwner(pubkey: Pubkey): Promise<RelayList | null>
  19  
  20    /**
  21     * Save a relay list
  22     */
  23    save(relayList: RelayList): Promise<void>
  24  }
  25  
  26  /**
  27   * Repository interface for RelaySet aggregate
  28   */
  29  export interface RelaySetRepository {
  30    /**
  31     * Find a relay set by owner and ID
  32     */
  33    findById(pubkey: Pubkey, id: string): Promise<RelaySet | null>
  34  
  35    /**
  36     * Find all relay sets for a user
  37     */
  38    findByOwner(pubkey: Pubkey): Promise<RelaySet[]>
  39  
  40    /**
  41     * Save a relay set
  42     */
  43    save(pubkey: Pubkey, relaySet: RelaySet): Promise<void>
  44  
  45    /**
  46     * Delete a relay set
  47     */
  48    delete(pubkey: Pubkey, id: string): Promise<void>
  49  }
  50  
  51  /**
  52   * Repository interface for FavoriteRelays aggregate
  53   */
  54  export interface FavoriteRelaysRepository {
  55    /**
  56     * Find the favorite relays for a user
  57     */
  58    findByOwner(pubkey: Pubkey): Promise<FavoriteRelays | null>
  59  
  60    /**
  61     * Save favorite relays
  62     */
  63    save(favoriteRelays: FavoriteRelays): Promise<void>
  64  }
  65