Load user data before updating, prefer newer events in repository over old ones with the same created_at, add list update utils

This commit is contained in:
Jon Staab
2025-08-01 13:09:50 -07:00
parent bd67f2763d
commit 1f5f869f7c
9 changed files with 119 additions and 11 deletions
+27 -1
View File
@@ -14,9 +14,11 @@ import {
} from "./relaySelections.js"
import {wotGraph} from "./wot.js"
export type UserDataLoader = (pubkey: string, relays?: string[], force?: boolean) => unknown
export type MakeUserDataOptions<T> = {
mapStore: Readable<Map<string, T>>
loadItem: (pubkey: string) => unknown
loadItem: UserDataLoader
}
const makeUserData = <T>({mapStore, loadItem}: MakeUserDataOptions<T>) =>
@@ -30,41 +32,65 @@ const makeUserData = <T>({mapStore, loadItem}: MakeUserDataOptions<T>) =>
}),
)
const makeUserLoader =
(loadItem: UserDataLoader) =>
async (relays: string[] = [], force = false) => {
const $pubkey = pubkey.get()
if ($pubkey) {
await loadItem($pubkey, relays, force)
}
}
export const userProfile = makeUserData({
mapStore: profilesByPubkey,
loadItem: loadProfile,
})
export const loadUserProfile = makeUserLoader(loadProfile)
export const userFollows = makeUserData({
mapStore: followsByPubkey,
loadItem: loadFollows,
})
export const loadUserFollows = makeUserLoader(loadFollows)
export const userMutes = makeUserData({
mapStore: mutesByPubkey,
loadItem: loadMutes,
})
export const loadUserMutes = makeUserLoader(loadMutes)
export const userPins = makeUserData({
mapStore: pinsByPubkey,
loadItem: loadPins,
})
export const loadUserPins = makeUserLoader(loadPins)
export const userRelaySelections = makeUserData({
mapStore: relaySelectionsByPubkey,
loadItem: loadRelaySelections,
})
export const loadUserRelaySelections = makeUserLoader(loadRelaySelections)
export const userInboxRelaySelections = makeUserData({
mapStore: inboxRelaySelectionsByPubkey,
loadItem: loadInboxRelaySelections,
})
export const loadUserInboxRelaySelections = makeUserLoader(loadInboxRelaySelections)
export const userBlossomServers = makeUserData({
mapStore: blossomServersByPubkey,
loadItem: loadBlossomServers,
})
export const loadUserBlossomServers = makeUserLoader(loadBlossomServers)
export const getUserWotScore = (tpk: string) => wotGraph.get().get(tpk) || 0
export const deriveUserWotScore = (tpk: string) => derived(wotGraph, $g => $g.get(tpk) || 0)