chore: ticket service but not tested

This commit is contained in:
mahyargdz
2025-01-28 20:08:43 +03:30
parent 239099bb15
commit 1d11509371
28 changed files with 368 additions and 73 deletions
@@ -1,4 +1,97 @@
import { Injectable } from "@nestjs/common";
import { BadRequestException, Injectable } from "@nestjs/common";
import { Not } from "typeorm";
import { ParamDto } from "../../../common/DTO/param.dto";
import { CommonMessage, TicketMessageEnum } from "../../../common/enums/message.enum";
import { UsersService } from "../../users/providers/users.service";
import { PaginationUtils } from "../../utils/providers/pagination.utils";
import { CreateTicketCategoryDto } from "../DTO/create-ticket-category.dto";
import { SearchTicketCategoryDto } from "../DTO/search-ticket-category.dto";
import { UpdateTicketCategoryDto } from "../DTO/update-ticket-category.dto";
import { TicketCategoryRepository } from "../repositories/tickets-category.repository";
@Injectable()
export class TicketsService {}
export class TicketsService {
constructor(
private readonly ticketsCategoryRepository: TicketCategoryRepository,
private readonly usersService: UsersService,
) {}
//******************************** */
async getTicketCategories() {
const ticketCategories = await this.ticketsCategoryRepository.find({ relations: { group: true } });
return {
ticketCategories,
};
}
//******************************** */
async getCategoriesList(queryDto: SearchTicketCategoryDto) {
const { limit, skip } = PaginationUtils(queryDto);
const queryBuilder = this.ticketsCategoryRepository
.createQueryBuilder("category")
// .leftJoinAndSelect("category.group", "group")
// .addSelect(["group.id", "group.name"])
.leftJoin("category.group", "group")
.addSelect(["group.id", "group.name"])
// .leftJoinAndSelect("group.users", "users")
.loadRelationCountAndMap("category.ticketsCount", "category.tickets")
.loadRelationCountAndMap("category.usersCount", "group.users");
if (queryDto.isActive !== undefined) {
queryBuilder.andWhere("category.isActive = :isActive", { isActive: queryDto.isActive === 1 });
}
if (queryDto.q) {
queryBuilder.where("category.title LIKE :q", { q: `%${queryDto.q}%` });
}
const [categories, count] = await queryBuilder.skip(skip).take(limit).getManyAndCount();
return { categories, count };
}
//******************************** */
async createTicketCategory(createDto: CreateTicketCategoryDto) {
const { userGroup } = await this.usersService.getUserGroupById(createDto.userGroupId);
const existCategory = await this.ticketsCategoryRepository.findCategoryByTitle(createDto.title);
if (existCategory) throw new BadRequestException(TicketMessageEnum.CATEGORY_EXIST);
const ticketCategory = this.ticketsCategoryRepository.create({ ...createDto, group: userGroup });
await this.ticketsCategoryRepository.save(ticketCategory);
return {
message: TicketMessageEnum.CATEGORY_CREATED,
};
}
//******************************** */
async updateCategory(paramDto: ParamDto, updateCategoryDto: UpdateTicketCategoryDto) {
const category = await this.ticketsCategoryRepository.findCategoryById(paramDto.id);
if (!category) throw new BadRequestException(TicketMessageEnum.CATEGORY_NOT_FOUND);
if (updateCategoryDto.title) {
const { title } = updateCategoryDto;
const existCategory = await this.ticketsCategoryRepository.findOneBy({ title, id: Not(paramDto.id) });
if (existCategory) throw new BadRequestException(TicketMessageEnum.CATEGORY_EXIST);
}
await this.ticketsCategoryRepository.save({ ...category, ...updateCategoryDto });
return {
message: CommonMessage.UPDATE_SUCCESS,
};
}
//******************************** */
async toggleCategoryStatus(paramDto: ParamDto) {
const category = await this.ticketsCategoryRepository.findCategoryById(paramDto.id);
if (!category) throw new BadRequestException(TicketMessageEnum.CATEGORY_NOT_FOUND);
category.isActive = !category.isActive;
await this.ticketsCategoryRepository.save(category);
return {
message: CommonMessage.UPDATE_SUCCESS,
isActive: category.isActive,
};
}
//******************************** */
async createTicket() {}
}