mirror of https://github.com/fantasticit/think.git
Merge pull request #140 from fantasticit/fix/13x
server: improve message notify
This commit is contained in:
commit
909c266f06
|
@ -2,4 +2,5 @@ export enum RedisDBEnum {
|
|||
documentVersion = 0,
|
||||
view = 1,
|
||||
verify = 2,
|
||||
message = 3,
|
||||
}
|
||||
|
|
|
@ -14,7 +14,9 @@ import helmet from 'helmet';
|
|||
import { AppModule } from './app.module';
|
||||
|
||||
async function bootstrap() {
|
||||
const app = await NestFactory.create(AppModule);
|
||||
const app = await NestFactory.create(AppModule, {
|
||||
logger: ['warn', 'error'],
|
||||
});
|
||||
const config = app.get(ConfigService);
|
||||
const port = config.get('server.port') || 5002;
|
||||
|
||||
|
|
|
@ -97,6 +97,7 @@ export class CommentService {
|
|||
wikiId: doc.wikiId,
|
||||
documentId: doc.id,
|
||||
}),
|
||||
uniqueId: ret.id,
|
||||
});
|
||||
})
|
||||
);
|
||||
|
@ -206,6 +207,7 @@ export class CommentService {
|
|||
wikiId: doc.wikiId,
|
||||
documentId: doc.id,
|
||||
}),
|
||||
uniqueId: newData.id,
|
||||
});
|
||||
})
|
||||
);
|
||||
|
@ -234,6 +236,7 @@ export class CommentService {
|
|||
wikiId: doc.wikiId,
|
||||
documentId: doc.id,
|
||||
}),
|
||||
uniqueId: data.id,
|
||||
});
|
||||
})
|
||||
);
|
||||
|
|
|
@ -136,6 +136,7 @@ export class DocumentService {
|
|||
wikiId: doc.wikiId,
|
||||
documentId: doc.id,
|
||||
}),
|
||||
uniqueId: doc.id,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -174,6 +175,7 @@ export class DocumentService {
|
|||
wikiId: doc.wikiId,
|
||||
documentId: doc.id,
|
||||
}),
|
||||
uniqueId: doc.id,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -212,6 +214,7 @@ export class DocumentService {
|
|||
wikiId: doc.wikiId,
|
||||
documentId: doc.id,
|
||||
}),
|
||||
uniqueId: doc.id,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -751,6 +754,7 @@ export class DocumentService {
|
|||
wikiId: doc.wikiId,
|
||||
documentId: doc.id,
|
||||
}),
|
||||
uniqueId: doc.id,
|
||||
});
|
||||
})
|
||||
.filter(Boolean)
|
||||
|
|
|
@ -3,13 +3,30 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
|||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { IUser } from '@think/domains';
|
||||
import { Repository } from 'typeorm';
|
||||
import Redis from 'ioredis';
|
||||
import { buildRedis } from '@helpers/redis.helper';
|
||||
import { RedisDBEnum } from '@constants/*';
|
||||
import { uniqueId } from 'lodash';
|
||||
|
||||
@Injectable()
|
||||
export class MessageService {
|
||||
private redis: Redis;
|
||||
|
||||
constructor(
|
||||
@InjectRepository(MessageEntity)
|
||||
private readonly messageRepo: Repository<MessageEntity>
|
||||
) {}
|
||||
) {
|
||||
this.buildRedis();
|
||||
}
|
||||
|
||||
private async buildRedis() {
|
||||
try {
|
||||
this.redis = await buildRedis(RedisDBEnum.message);
|
||||
console.log('[think] 消息服务启动成功');
|
||||
} catch (e) {
|
||||
console.error(`[think] 消息服务启动错误: "${e.message}"`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 新消息通知
|
||||
|
@ -17,16 +34,15 @@ export class MessageService {
|
|||
* @param msg
|
||||
* @returns
|
||||
*/
|
||||
async notify(userId: IUser['id'], msg) {
|
||||
const data = { userId, ...msg };
|
||||
const mayBeNotified = await this.messageRepo.findOne(data);
|
||||
async notify(userId: IUser['id'], msg: { title: string; message: string; url: string; uniqueId: string | number }) {
|
||||
const key = `message-${userId}-${uniqueId}`;
|
||||
|
||||
if (mayBeNotified) {
|
||||
if (!mayBeNotified.read) {
|
||||
if (await this.redis.get(key)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const data = { userId, ...msg };
|
||||
await this.redis.set(key, Date.now(), 'EX', 5 * 60);
|
||||
const res = await this.messageRepo.create(data);
|
||||
const ret = await this.messageRepo.save(res);
|
||||
return ret;
|
||||
|
|
|
@ -218,6 +218,7 @@ export class OrganizationService {
|
|||
url: buildMessageURL('toOrganization')({
|
||||
organizationId: organization.id,
|
||||
}),
|
||||
uniqueId: organization.id,
|
||||
});
|
||||
|
||||
return ret;
|
||||
|
@ -256,6 +257,7 @@ export class OrganizationService {
|
|||
url: buildMessageURL('toOrganization')({
|
||||
organizationId: organization.id,
|
||||
}),
|
||||
uniqueId: organization.id,
|
||||
});
|
||||
|
||||
return ret;
|
||||
|
@ -294,6 +296,7 @@ export class OrganizationService {
|
|||
url: buildMessageURL('toOrganization')({
|
||||
organizationId: organization.id,
|
||||
}),
|
||||
uniqueId: organization.id,
|
||||
});
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -60,7 +60,7 @@ export class SystemService {
|
|||
: await this.systemRepo.create(emailConfig);
|
||||
await this.systemRepo.save(newConfig);
|
||||
|
||||
console.log('[think] 已载入文件配置:', newConfig);
|
||||
console.log('[think] 已载入文件配置', JSON.stringify(newConfig, null, 2));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -118,6 +118,7 @@ export class WikiService {
|
|||
organizationId: wiki.organizationId,
|
||||
wikiId: wiki.id,
|
||||
}),
|
||||
uniqueId: wiki.id,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -165,6 +166,7 @@ export class WikiService {
|
|||
organizationId: wiki.organizationId,
|
||||
wikiId: wiki.id,
|
||||
}),
|
||||
uniqueId: wiki.id,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -212,6 +214,7 @@ export class WikiService {
|
|||
organizationId: wiki.organizationId,
|
||||
wikiId: wiki.id,
|
||||
}),
|
||||
uniqueId: wiki.id,
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue