{-# LANGUAGE TemplateHaskell #-}

module Wire.IndexedUserStore.Bulk where

import Polysemy
import Wire.UserSearch.Migration

-- | Increase this number any time you want to force reindexing.
expectedMigrationVersion :: MigrationVersion
expectedMigrationVersion :: MigrationVersion
expectedMigrationVersion = Natural -> MigrationVersion
MigrationVersion Natural
6

-- | Bulk operations, must not be used from any web handler
data IndexedUserStoreBulk m a where
  -- | Only changes data if it is not updated since last update, use when users
  -- need to be synced because of an outage, or migrating to a new ES instance.
  SyncAllUsers :: IndexedUserStoreBulk m ()
  -- | Overwrite all users in the ES index, use it when trying to fix some
  -- inconsistency or while introducing a new field in the mapping.
  ForceSyncAllUsers :: IndexedUserStoreBulk m ()
  MigrateData :: IndexedUserStoreBulk m ()

makeSem ''IndexedUserStoreBulk