about summary refs log tree commit diff
path: root/src/state/lib/api.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/lib/api.ts')
-rw-r--r--src/state/lib/api.ts29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/state/lib/api.ts b/src/state/lib/api.ts
index df0047991..64a88cdec 100644
--- a/src/state/lib/api.ts
+++ b/src/state/lib/api.ts
@@ -97,6 +97,33 @@ export async function unrepost(adx: AdxClient, user: string, uri: string) {
   return numDels > 0
 }
 
+export async function follow(
+  adx: AdxClient,
+  user: string,
+  subject: {did: string; name: string},
+) {
+  return await adx
+    .repo(user, true)
+    .collection('blueskyweb.xyz:Follows')
+    .create('Follow', {
+      $type: 'blueskyweb.xyz:Follow',
+      subject,
+      createdAt: new Date().toISOString(),
+    })
+}
+
+export async function unfollow(
+  adx: AdxClient,
+  user: string,
+  subject: {did: string},
+) {
+  const coll = adx.repo(user, true).collection('blueskyweb.xyz:Follows')
+  const numDels = await deleteWhere(coll, 'Follow', record => {
+    return record.value.subject.did === subject.did
+  })
+  return numDels > 0
+}
+
 type WherePred = (_record: GetRecordResponseValidated) => Boolean
 async function deleteWhere(
   coll: AdxRepoCollectionClient,
@@ -104,7 +131,7 @@ async function deleteWhere(
   cond: WherePred,
 ) {
   const toDelete: string[] = []
-  iterateAll(coll, schema, record => {
+  await iterateAll(coll, schema, record => {
     if (cond(record)) {
       toDelete.push(record.key)
     }