128 lines
3.1 KiB
TypeScript
128 lines
3.1 KiB
TypeScript
import { getFilterObject, getSortObject, PageQueryParams } from "../pagination";
|
|
import { generateId } from "../utils/id";
|
|
import {
|
|
CreateOrgInput,
|
|
orgFields,
|
|
orgModel,
|
|
UpdateOrgInput,
|
|
} from "./organization.schema";
|
|
|
|
export async function createOrg(input: CreateOrgInput, tenantId: string) {
|
|
const org = await orgModel.create({
|
|
tenantId: tenantId,
|
|
pid: generateId(),
|
|
createdAt: new Date(),
|
|
...input,
|
|
});
|
|
|
|
return org;
|
|
}
|
|
|
|
export async function getOrg(orgId: string, tenantId: string) {
|
|
return await orgModel.findOne({
|
|
$and: [{ tenantId: tenantId }, { pid: orgId }],
|
|
});
|
|
}
|
|
|
|
export async function listOrgs(params: PageQueryParams, tenantId: string) {
|
|
const page = params.page || 1;
|
|
const pageSize = params.pageSize || 10;
|
|
const sortObj = getSortObject(params, orgFields);
|
|
const filterObj = getFilterObject(params, orgFields);
|
|
|
|
const orgs = await orgModel.aggregate([
|
|
{ $match: { $and: [{ tenantId: tenantId }, ...filterObj] } },
|
|
{
|
|
$facet: {
|
|
metadata: [{ $count: "count" }],
|
|
data: [
|
|
{ $skip: (page - 1) * pageSize },
|
|
{ $limit: pageSize },
|
|
{ $sort: sortObj },
|
|
],
|
|
},
|
|
},
|
|
]);
|
|
|
|
if (orgs[0].data.length === 0)
|
|
return { orgs: [], metadata: { count: 0, page, pageSize } };
|
|
|
|
return {
|
|
orgs: orgs[0].data,
|
|
metadata: {
|
|
count: orgs[0].metadata[0].count,
|
|
page,
|
|
pageSize,
|
|
},
|
|
};
|
|
}
|
|
|
|
export async function updateOrg(
|
|
input: UpdateOrgInput,
|
|
orgId: string,
|
|
tenantId: string
|
|
) {
|
|
const updateOrgResult = await orgModel.findOneAndUpdate(
|
|
{
|
|
$and: [{ tenantId: tenantId }, { pid: orgId }],
|
|
},
|
|
{ ...input, updatedAt: new Date() },
|
|
{ new: true }
|
|
);
|
|
|
|
return updateOrgResult;
|
|
}
|
|
|
|
export async function deleteOrg(orgId: string, tenantId: string) {
|
|
return await orgModel.deleteOne({
|
|
$and: [{ tenantId: tenantId }, { pid: orgId }],
|
|
});
|
|
}
|
|
|
|
export async function searchOrgs(params: PageQueryParams, tenantId: string) {
|
|
const page = params.page || 1;
|
|
const pageSize = params.pageSize || 10;
|
|
const sortObj = getSortObject(params, orgFields);
|
|
const filterObj = getFilterObject(params, orgFields);
|
|
|
|
if (!params.searchToken)
|
|
return { orgs: [], metadata: { count: 0, page, pageSize } };
|
|
|
|
const regex = new RegExp(params.searchToken, "i");
|
|
|
|
const orgs = await orgModel.aggregate([
|
|
{ $match: { $and: [{ tenantId: tenantId }, ...filterObj] } },
|
|
{
|
|
$match: {
|
|
$or: [{ name: { $regex: regex } }, { domain: { $regex: regex } }],
|
|
},
|
|
},
|
|
{
|
|
$facet: {
|
|
metadata: [{ $count: "count" }],
|
|
data: [
|
|
{ $skip: (page - 1) * pageSize },
|
|
{ $limit: pageSize },
|
|
{ $sort: sortObj },
|
|
],
|
|
},
|
|
},
|
|
]);
|
|
|
|
if (orgs[0].data.length === 0)
|
|
return { orgs: [], metadata: { count: 0, page, pageSize } };
|
|
|
|
return {
|
|
orgs: orgs[0].data,
|
|
metadata: {
|
|
count: orgs[0].metadata[0].count,
|
|
page,
|
|
pageSize,
|
|
},
|
|
};
|
|
}
|
|
|
|
export async function getUniqueValuesOrg(field: string, tenenatId: string) {
|
|
return await orgModel.distinct(field, { tenantId: tenenatId });
|
|
}
|