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