chore: get announcements by service
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { Body, Controller, Get, Post, Query } from "@nestjs/common";
|
import { Body, Controller, Get, Param, Post, Query } from "@nestjs/common";
|
||||||
import { ApiProperty, ApiTags } from "@nestjs/swagger";
|
import { ApiProperty, ApiTags } from "@nestjs/swagger";
|
||||||
|
|
||||||
import { AnnouncementService } from "./announcement.service";
|
import { AnnouncementService } from "./announcement.service";
|
||||||
@@ -41,4 +41,13 @@ export class AnnouncementController {
|
|||||||
async getPublicAnnouncements() {
|
async getPublicAnnouncements() {
|
||||||
return await this.announcementService.getPublicAnnouncements();
|
return await this.announcementService.getPublicAnnouncements();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@AuthGuards()
|
||||||
|
@ApiProperty({
|
||||||
|
description: "Get all public announcements",
|
||||||
|
})
|
||||||
|
@Get(":serviceId")
|
||||||
|
async getAnnouncementsByService(@Query() queryDto: SearchCriticismQueryDto, @Param("serviceId") serviceId: string) {
|
||||||
|
return await this.announcementService.getAnnouncementByService(queryDto, serviceId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export class AnnouncementService {
|
|||||||
if (createAnnouncementDto.groupIds) {
|
if (createAnnouncementDto.groupIds) {
|
||||||
groups = await this.usersService.getUserGroupsByIds(createAnnouncementDto.groupIds);
|
groups = await this.usersService.getUserGroupsByIds(createAnnouncementDto.groupIds);
|
||||||
}
|
}
|
||||||
|
//TODO: Create Queue for publishAT
|
||||||
const announcement = this.announcementRepository.create({
|
const announcement = this.announcementRepository.create({
|
||||||
...createAnnouncementDto,
|
...createAnnouncementDto,
|
||||||
service,
|
service,
|
||||||
@@ -70,4 +71,34 @@ export class AnnouncementService {
|
|||||||
const announcements = await this.announcementRepository.find({ where: { isPublic: true }, relations: ["service", "targetGroups"] });
|
const announcements = await this.announcementRepository.find({ where: { isPublic: true }, relations: ["service", "targetGroups"] });
|
||||||
return { announcements };
|
return { announcements };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getAnnouncementByService(queryDto: SearchAnnouncementQueryDto, serviceId: string) {
|
||||||
|
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"])
|
||||||
|
.where("danak_service.id = :serviceId", { serviceId });
|
||||||
|
|
||||||
|
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, paginate: true };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user