// @flow import fractionalIndex from "fractional-index"; import { Collection } from "../models"; import { sequelize, Op } from "../sequelize"; /** * * @param teamId The team id whose collections has to be fetched * @param index the index for which collision has to be checked * @returns An index, if there is collision returns a new index otherwise the same index */ export default async function removeIndexCollision( teamId: string, index: string ) { const collection = await Collection.findOne({ where: { teamId, deletedAt: null, index }, }); if (!collection) { return index; } const nextCollection = await Collection.findAll({ where: { teamId, deletedAt: null, index: { [Op.gt]: index, }, }, attributes: ["id", "index"], limit: 1, order: [ sequelize.literal('"collection"."index" collate "C"'), ["updatedAt", "DESC"], ], }); const nextCollectionIndex = nextCollection.length ? nextCollection[0].index : null; return fractionalIndex(index, nextCollectionIndex); }