Добавлена поддержка личных уведомлений для redmine5

This commit is contained in:
Pavel Gnedov 2024-07-24 07:47:39 +07:00
parent f425bdf0ee
commit 4a420dcf71
2 changed files with 37 additions and 0 deletions

View file

@ -46,6 +46,32 @@ export class UsersService {
);
}
async findUserByLogin(login: string): Promise<RedmineTypes.User | null> {
const userFromMemoryCache = this.memoryCache.find((item) => {
const email = item.mail;
if (!email) return false;
return email.startsWith(login);
});
if (userFromMemoryCache) {
return RedmineTypes.CreateUser(userFromMemoryCache);
}
const usersDb = await this.users.getDatasource();
const res = await usersDb.find({
selector: {
mail: {
$regex: login,
},
},
limit: 1,
});
if (!res || !res.docs || !res.docs[0]) {
return null;
}
const userFromDb = res.docs[0];
this.memoryCache.set(userFromDb.id, userFromDb);
return RedmineTypes.CreateUser(userFromDb);
}
async findUserByName(
firstname: string,
lastname: string,

View file

@ -9,6 +9,7 @@ import { PersonalParsedMessage } from 'src/models/personal-parsed-message.model'
@Injectable()
export class PersonalNotificationsService {
private userNameRe = /@([\wА-Яа-яЁё]+) ([\wА-Яа-яЁё]+)@/g;
private userName2Re = /@([\wА-Яа-яЁё\.]+)/g;
private logger = new Logger(PersonalNotificationsService.name);
$messages = new Subject<IssueAndPersonalParsedMessageModel>();
@ -71,6 +72,16 @@ export class PersonalNotificationsService {
}
result = results.next();
}
const results2 = notes.matchAll(this.userName2Re);
let result2 = results2.next();
while (!result2.done) {
if (result.value && result.value[1]) {
const login = result.value[1];
const user = await this.usersService.findUserByLogin(login);
if (user) recipients.push(user.id);
}
result2 = results2.next();
}
if (recipients.length > 0) {
return {
message: notes,