blocked.repo.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { Q } from '@nozbe/watermelondb';
  2. import { database } from 'src/watermelondb';
  3. import BlockedUser from 'src/watermelondb/models/BlockedUser';
  4. type Blocked = {
  5. id: number;
  6. first_name: string;
  7. last_name: string;
  8. avatar: string | null;
  9. };
  10. export async function upsertBlockedUsers(users: Blocked[]) {
  11. if (!users?.length) return;
  12. const collection = database.get<BlockedUser>('blocked_users');
  13. await database.write(async () => {
  14. const batch: any[] = [];
  15. for (const u of users) {
  16. const existingNow = await collection.query(Q.where('user_id', u.id)).fetch();
  17. if (existingNow.length) {
  18. batch.push(
  19. existingNow[0].prepareUpdate((rec) => {
  20. rec.firstName = u.first_name;
  21. rec.lastName = u.last_name;
  22. rec.avatar = u.avatar ?? null;
  23. rec.removed = false;
  24. })
  25. );
  26. } else {
  27. batch.push(
  28. collection.prepareCreate((rec) => {
  29. rec.userId = u.id;
  30. rec.firstName = u.first_name;
  31. rec.lastName = u.last_name;
  32. rec.avatar = u.avatar ?? null;
  33. rec.removed = false;
  34. })
  35. );
  36. }
  37. }
  38. await database.batch(batch);
  39. });
  40. }