chore: create,get all announcements with pagination

This commit is contained in:
Matin
2025-01-29 14:38:53 +03:30
parent 63e5d1b925
commit d5268a396d
9 changed files with 177 additions and 13 deletions
@@ -1,10 +1,73 @@
import { Injectable } from "@nestjs/common";
// import { AnnouncementRepository } from "./repositories/announcement.repository";
import { CreateAnnouncementDto } from "./DTO/create-announcement.dto";
import { SearchAnnouncementQueryDto } from "./DTO/search-announcement-query.dto";
import { AnnouncementRepository } from "./repositories/announcement.repository";
import { CommonMessage } from "../../common/enums/message.enum";
import { DanakServicesService } from "../danak-services/providers/danak-services.service";
import { UsersService } from "../users/providers/users.service";
import { PaginationUtils } from "../utils/providers/pagination.utils";
@Injectable()
export class AnnouncementService {
// constructor(private readonly announcementRepository: AnnouncementRepository) {}
constructor(
private readonly announcementRepository: AnnouncementRepository,
private readonly danakServicesService: DanakServicesService,
private readonly usersService: UsersService,
) {}
async createAnnouncement() {}
async createAnnouncement(createAnnouncementDto: CreateAnnouncementDto) {
let service;
let groups;
if (createAnnouncementDto.serviceId) {
service = await this.danakServicesService.findServiceById(createAnnouncementDto.serviceId);
}
if (createAnnouncementDto.groupIds) {
groups = await this.usersService.getUserGroupsByIds(createAnnouncementDto.groupIds);
}
const announcement = this.announcementRepository.create({
...createAnnouncementDto,
service,
targetGroups: groups?.userGroups,
});
await this.announcementRepository.save(announcement);
return {
message: CommonMessage.CREATED,
announcement,
};
}
async getAllAnnouncements(queryDto: SearchAnnouncementQueryDto) {
const { limit, skip } = PaginationUtils(queryDto);
const queryBuilder = this.announcementRepository
.createQueryBuilder("announcement")
.leftJoin("announcement.service", "danak_service")
.addSelect(["danak_service.id", "danak_service.name"])
.leftJoin("announcement.targetGroups", "group")
.addSelect(["group.id", "group.name"]);
if (queryDto.since) {
queryBuilder.andWhere("announcement.createdAt >= :since", { since: queryDto.since });
}
if (queryDto.publishAt) {
queryBuilder.andWhere("announcement.publishAt >= :publishAt", { publishAt: queryDto.publishAt });
}
if (queryDto.q) {
queryBuilder.andWhere("announcement.title LIKE :q", { q: `%${queryDto.q}%` });
}
queryBuilder.orderBy("announcement.createdAt", "DESC");
const [announcements, count] = await queryBuilder.skip(skip).take(limit).getManyAndCount();
return { announcements, count };
}
async getPublicAnnouncements() {
const announcements = await this.announcementRepository.find({ where: { isPublic: true }, relations: ["service", "targetGroups"] });
return { announcements };
}
}