add tag service

This commit is contained in:
Alex Holliday committed 2026-05-19 11:15:54 -07:00
1 parent 451c752170
commit 48735c7dc8
2 files changed
+38

No files matched your search

+1
View File
@@ -18,6 +18,7 @@ export * from "@/service/infrastructure/emailService.js";
export * from "@/service/infrastructure/globalPingService.js";
export * from "@/service/infrastructure/networkService.js";
export * from "@/service/infrastructure/notificationsService.js";
export * from "@/service/infrastructure/tagService.js";
export * from "@/service/infrastructure/statusService.js";
// Notification providers
@@ -0,0 +1,37 @@
import { Tag } from "@/types/index.js";
import { ITagsRepository, IMonitorsRepository } from "@/repositories/index.js";
export interface ITagsService {
createTag(tag: Partial<Tag>, teamId: string): Promise<Tag>;
getTag(tagId: string, teamId: string): Promise<Tag>;
getTagsByTeamId(teamId: string): Promise<Tag[]>;
updateTag(tagId: string, teamId: string, patch: Partial<Tag>): Promise<Tag>;
deleteTag(tagId: string, teamId: string): Promise<Tag>;
}
export class TagsService implements ITagsService {
constructor(
private tagsRepository: ITagsRepository,
private monitorsRepository: IMonitorsRepository
) {}
createTag = async (tagData: Partial<Tag>, teamId: string): Promise<Tag> => {
tagData.teamId = teamId;
return await this.tagsRepository.create(tagData);
};
getTag = async (tagId: string, teamId: string): Promise<Tag> => {
return await this.tagsRepository.findById(tagId, teamId);
};
getTagsByTeamId = async (teamId: string): Promise<Tag[]> => {
return await this.tagsRepository.findByTeamId(teamId);
};
updateTag = async (tagId: string, teamId: string, patch: Partial<Tag>): Promise<Tag> => {
return await this.tagsRepository.updateById(tagId, teamId, patch);
};
deleteTag = async (tagId: string, teamId: string): Promise<Tag> => {
await this.monitorsRepository.removeTagFromMonitors(tagId);
return await this.tagsRepository.deleteById(tagId, teamId);
};
}