Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improvement assets #5458

Merged
merged 3 commits into from
Jun 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 22 additions & 9 deletions packages/plugin-assets-api/src/messageBroker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,55 +2,68 @@ import { sendMessage } from '@erxes/api-utils/src/core';
import type { MessageArgsOmitService } from '@erxes/api-utils/src/core';
import { generateModels } from './connectionResolver';
import { consumeRPCQueue } from '@erxes/api-utils/src/messageBroker';
import { getLasthistoryEachAssets } from './utils';

export const setupMessageConsumers = async () => {
consumeRPCQueue('assets:assets.find', async ({ subdomain, data }) => {
const models = await generateModels(subdomain);

return {
status: 'success',
data: await models.Assets.find(data).lean(),
data: await models.Assets.find(data).lean()
};
});

consumeRPCQueue(
'assets:assets.getKbArticleHistoriesPerAsset',
async ({ subdomain, data }) => {
const models = await generateModels(subdomain);

return {
status: 'success',
data: await getLasthistoryEachAssets(models, data)
};
}
);
};

export const sendContactsMessage = (
args: MessageArgsOmitService,
args: MessageArgsOmitService
): Promise<any> => {
return sendMessage({
serviceName: 'contacts',
...args,
...args
});
};

export const sendFormsMessage = (
args: MessageArgsOmitService,
args: MessageArgsOmitService
): Promise<any> => {
return sendMessage({
serviceName: 'forms',
...args,
...args
});
};

export const sendCardsMessage = (
args: MessageArgsOmitService,
args: MessageArgsOmitService
): Promise<any> => {
return sendMessage({
serviceName: 'cards',
...args,
...args
});
};

export const sendCoreMessage = (args: MessageArgsOmitService): Promise<any> => {
return sendMessage({
serviceName: 'core',
...args,
...args
});
};

export const sendKbMessage = (args: MessageArgsOmitService): Promise<any> => {
return sendMessage({
serviceName: 'knowledgebase',
...args,
...args
});
};
74 changes: 56 additions & 18 deletions packages/plugin-assets-api/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export const generateFilter = async (
models: IModels,
params,
type,
subdomain: string,
subdomain: string
) => {
let filter: any = {};

Expand All @@ -23,7 +23,7 @@ export const generateFilter = async (
if (params.parentId) {
if (params.parentId === '*') {
const assets = await models?.Assets.find({
parentId: { $in: ['', undefined, null] },
parentId: { $in: ['', undefined, null] }
});
const assetIds = (assets || []).map((asset) => asset._id);
filter.assetId = { $in: assetIds };
Expand All @@ -44,7 +44,7 @@ export const generateFilter = async (
action: 'branches.findOne',
data: { _id: params.branchId },
isRPC: true,
defaultValue: {},
defaultValue: {}
});

if (branch) {
Expand All @@ -54,7 +54,7 @@ export const generateFilter = async (
action: 'branches.find',
data: { query: { order: { $regex: branch.order } } },
isRPC: true,
defaultValue: [],
defaultValue: []
})
).map((branch) => branch._id);
filter.branchId = { $in: branchIds };
Expand All @@ -69,15 +69,15 @@ export const generateFilter = async (
action: 'departments.find',
data: { _id: params.departmentId },
isRPC: true,
defaultValue: {},
defaultValue: {}
});

if (department) {
const departmentIds = (
await sendCoreMessage({
subdomain,
action: 'departments.find',
data: { order: { $regex: department.order } },
data: { order: { $regex: department.order } }
})
).map((department) => department._id);
filter.departmentId = { $in: departmentIds };
Expand All @@ -103,7 +103,7 @@ export const generateFilter = async (
if (params.createdAtTo) {
filter.createdAt = {
...filter.createdAt,
$lt: new Date(params.createdAtTo),
$lt: new Date(params.createdAtTo)
};
}

Expand All @@ -120,7 +120,7 @@ export const generateFilter = async (
if (params.modifiedAtTo) {
filter.modifiedAt = {
...filter.modifiedAt,
$lt: new Date(params.modifiedAtTo),
$lt: new Date(params.modifiedAtTo)
};
}

Expand All @@ -129,20 +129,20 @@ export const generateFilter = async (
filter.$or = [
{ _id: { $regex: new RegExp(`.*${params.searchValue}.*`, 'i') } },
{
description: { $regex: new RegExp(`.*${params.searchValue}.*`, 'i') },
},
description: { $regex: new RegExp(`.*${params.searchValue}.*`, 'i') }
}
];
}
if (type === 'movementItems') {
const assetIds = await models?.Assets.find({
$or: [
{
name: { $regex: new RegExp(`.*${params.searchValue}.*`, 'i') },
name: { $regex: new RegExp(`.*${params.searchValue}.*`, 'i') }
},
{
code: { $regex: new RegExp(`.*${params.searchValue}.*`, 'i') },
},
],
code: { $regex: new RegExp(`.*${params.searchValue}.*`, 'i') }
}
]
}).distinct('_id');

filter.assetId = { $in: assetIds };
Expand Down Expand Up @@ -171,14 +171,14 @@ export const generateFilter = async (
$group: {
_id: '$assetId',
movements: {
$push: '$$ROOT',
},
},
$push: '$$ROOT'
}
}
},
{ $unwind: '$movements' },
{ $sort: { 'movements.createdAt': -1 } },
{ $group: { _id: '$_id', movements: { $push: '$movements' } } },
{ $replaceRoot: { newRoot: { $arrayElemAt: ['$movements', 0] } } },
{ $replaceRoot: { newRoot: { $arrayElemAt: ['$movements', 0] } } }
];

const movements = await models?.MovementItems.aggregate(pipeline);
Expand All @@ -189,3 +189,41 @@ export const generateFilter = async (

return filter;
};

export const getLasthistoryEachAssets = async (
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider renaming the function getLasthistoryEachAssets to follow camelCase and enhance clarity. A suggested name could be getLastHistoryForEachAsset.

models: IModels,
filter: any
) => {
return await models.AssetsKbArticlesHistories.aggregate([
{ $match: { ...filter } }, // filter items
{
$group: {
_id: {
assetId: '$assetId',
kbArticleId: '$kbArticleId'
},
kbArticles: {
$push: '$$ROOT' // Group all entries under each assetId
}
}
},
{
$addFields: {
kbArticles: {
$sortArray: {
input: '$kbArticles',
sortBy: { createdAt: -1 }
}
}
}
},
{
$project: {
_id: null,
assetId: '$_id.assetId',
kbArticleId: '$_id.kbArticleId',
current: { $arrayElemAt: ['$kbArticles', 0] }
}
}
]);
};
Loading