blocked.repo.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { database } from 'src/watermelondb';
  2. import BlockedUser from 'src/watermelondb/models/BlockedUser';
  3. type Blocked = {
  4. id: number;
  5. first_name: string;
  6. last_name: string;
  7. avatar: string | null;
  8. };
  9. export async function upsertBlockedUsers(users: Blocked[]) {
  10. if (!users?.length) return;
  11. const collection = database.get<BlockedUser>('blocked_users');
  12. const existingBlocked = await collection.query().fetch();
  13. await database.write(async () => {
  14. const batch: any[] = [];
  15. for (const u of users) {
  16. const existing = existingBlocked.find((ec) => ec.userId && ec.userId === u.id);
  17. if (existing) {
  18. batch.push(
  19. existing.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. }