|
@@ -18,33 +18,23 @@ export class ChatService extends BaseService<modelType> {
|
|
|
async chat(filter) {
|
|
|
const user = this.ctx.user;
|
|
|
const list = await this.model.aggregate([
|
|
|
- {
|
|
|
- $match: {
|
|
|
- ...filter,
|
|
|
- $or: [{ sender_id: get(user, '_id') }, { receiver_id: get(user, '_id') }],
|
|
|
- },
|
|
|
- },
|
|
|
- { $group: { _id: '$sender_id', other: { $first: '$$ROOT' } } },
|
|
|
- {
|
|
|
- $replaceRoot: {
|
|
|
- newRoot: '$other',
|
|
|
- },
|
|
|
- },
|
|
|
+ { $match: { ...filter, $or: [{ sender_id: get(user, '_id') }, { receiver_id: get(user, '_id') }] } },
|
|
|
+ { $group: { _id: { sender_id: '$sender_id', receiver_id: '$receiver_id' }, other: { $first: '$$ROOT' } } },
|
|
|
+ { $replaceRoot: { newRoot: '$other' } },
|
|
|
]);
|
|
|
const data = [];
|
|
|
for (const val of list) {
|
|
|
- let id = '';
|
|
|
- if (val.sender_id !== get(user, '_id')) id = val.sender_id;
|
|
|
- else id = val.receiver_id;
|
|
|
- const userData = await this.uModel.findById(id).lean();
|
|
|
- data.push({
|
|
|
- _id: get(userData, '_id'),
|
|
|
- nick_name: get(userData, 'nick_name'),
|
|
|
- icon: get(userData, 'icon'),
|
|
|
- send_time: val.send_time,
|
|
|
- content: val.content,
|
|
|
- type: val.type,
|
|
|
- });
|
|
|
+ if (val.sender_id !== get(user, '_id')) {
|
|
|
+ const userData = await this.uModel.findById(val.sender_id).lean();
|
|
|
+ data.push({
|
|
|
+ _id: get(userData, '_id'),
|
|
|
+ nick_name: get(userData, 'nick_name'),
|
|
|
+ icon: get(userData, 'icon'),
|
|
|
+ send_time: val.send_time,
|
|
|
+ content: val.content,
|
|
|
+ type: val.type,
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
return data;
|
|
|
}
|
|
@@ -59,6 +49,7 @@ export class ChatService extends BaseService<modelType> {
|
|
|
})
|
|
|
.skip(skip)
|
|
|
.limit(limit)
|
|
|
+ .sort({ send_time: 1 })
|
|
|
.lean();
|
|
|
const data = [];
|
|
|
for (const val of list) {
|