import type { RequestGroup } from 'insomnia-data'; import { database as db, models } from 'insomnia-data'; const { type } = models.requestGroup; export function create(patch: Partial = {}) { if (!patch.parentId) { throw new Error('New RequestGroup missing `parentId`: ' + JSON.stringify(patch)); } return db.docCreate(type, patch); } export function update(requestGroup: RequestGroup, patch: Partial = {}) { return db.docUpdate(requestGroup, patch); } export function getById(id: string) { return db.findOne(type, { _id: id }); } export function findByParentId(parentId: string) { return db.find(type, { parentId }); } export function remove(requestGroup: RequestGroup) { return db.remove(requestGroup); } export function all() { return db.find(type); } export async function duplicate(requestGroup: RequestGroup, patch: Partial = {}) { if (!patch.name) { patch.name = `${requestGroup.name} (Copy)`; } const q = { metaSortKey: { $gt: requestGroup.metaSortKey, }, }; const [nextRequestGroup] = await db.find(type, q, { metaSortKey: 1, }); const nextSortKey = nextRequestGroup ? nextRequestGroup.metaSortKey : requestGroup.metaSortKey + 100; // Calculate new sort key const sortKeyIncrement = (nextSortKey - requestGroup.metaSortKey) / 2; const metaSortKey = requestGroup.metaSortKey + sortKeyIncrement; return db.duplicate(requestGroup, { metaSortKey, ...patch, }); }