feat(tickets): ajusted the query to return the correct Date format and ajusted the api call string to use query instead of param args

This commit is contained in:
Matthieu Haineault 2026-02-26 15:08:15 -05:00
parent f3753ec53e
commit 37a4da7923
4 changed files with 32 additions and 25 deletions

View File

@ -3,12 +3,12 @@ import { IsInt, IsOptional, IsString } from "class-validator";
export class TicketList { export class TicketList {
@IsInt() id: number; @IsInt() id: number;
@IsString() status: string; @IsString() status: string;
@IsString() @IsOptional() assignedTo: string; @IsString() @IsOptional() assignTo: string;
@IsString() deliveryAddress: string; @IsString() deliveryAddress: string;
@IsString() subject: string; @IsString() subject: string;
@IsString() department: string; @IsString() department: string;
@IsInt() @IsOptional() parentTicketId: number; @IsInt() @IsOptional() parentTicketId: number;
@IsString() dueDate: string;; @IsString() dueDate: string;
@IsString() updatedAt: string; @IsString() updatedAt: string;
@IsString() completedAt: string; @IsString() @IsOptional() completedAt: string;
} }

View File

@ -1,4 +1,4 @@
import { Controller, Get, Param, Query } from "@nestjs/common"; import { Controller, Get, Param, ParseIntPipe, Query } from "@nestjs/common";
import { Access } from "src/common/decorators/module-access.decorators"; import { Access } from "src/common/decorators/module-access.decorators";
import { Result } from "src/common/errors/result-error.factory"; import { Result } from "src/common/errors/result-error.factory";
import { TicketList } from "src/customer-support/tickets/dtos/ticket-list.dto"; import { TicketList } from "src/customer-support/tickets/dtos/ticket-list.dto";
@ -9,23 +9,26 @@ export class TicketController {
constructor(private readonly getService: TicketService) { } constructor(private readonly getService: TicketService) { }
@Get(':status/:email') @Get(':status')
async findTicketByFilters( async findTicketByFilters(
@Access('email') email: string, @Access('email') email: string,
@Param('status') status: string, @Param('status') status: string,
@Param('email') filterEmail?: string, @Query('sortOrder') sortOrder: string,
@Query('sortOrder') sortOrder?: string, @Query('sortType') sortType: 'DESC' | 'ASC',
@Query('sortTypes') sortTypes?: 'DESC' | 'ASC', @Query('email') filterEmail?: string,
@Query('offset') offset?: number, @Query('offset', ParseIntPipe) offset?: number,
@Query('limit') limit?: number, @Query('limit', ParseIntPipe) limit?: number,
): Promise<Result<TicketList[], string>> { ): Promise<Result<TicketList[], string>> {
const statusFliters = status.split(','); const statusFilters = status.split(',');
if (!filterEmail) { const queryEmail = filterEmail ?? email;
filterEmail = email;
return await this.getService.getListOfAllTicketByFilters(statusFliters, offset, limit, sortOrder, sortTypes, filterEmail);
} else {
return await this.getService.getListOfAllTicketByFilters(statusFliters, offset, limit, sortOrder, sortTypes, filterEmail);
}
}
return await this.getService.getListOfAllTicketByFilters(
statusFilters,
offset,
limit,
sortOrder,
sortType,
queryEmail,
);
}
} }

View File

@ -11,10 +11,10 @@ export class TicketService {
getListOfAllTicketByFilters = async ( getListOfAllTicketByFilters = async (
status: string[], status: string[],
offset: number = 1, offset: number = 0,
limit: number = 25, limit: number = 25,
sortOrder: string = 'last_update' as const, sortOrder: string = 'last_update',
sortType: 'DESC' | 'ASC' = 'DESC' as const, sortType: 'DESC' | 'ASC' = 'DESC',
email?: string email?: string
): Promise<Result<TicketList[], string>> => { ): Promise<Result<TicketList[], string>> => {
@ -37,9 +37,13 @@ export class TicketService {
t.subject AS subject, t.subject AS subject,
d.name AS department, d.name AS department,
t.parent AS parentTicketId, t.parent AS parentTicketId,
t.due_date AS dueDate, DATE_FORMAT(FROM_UNIXTIME(t.due_date / 1000), '%d/%m/%y') AS dueDate,
t.last_update AS updatedAt, DATE_FORMAT(FROM_UNIXTIME(t.last_update / 1000), '%d/%m/%y') AS updatedAt,
t.date_closed AS completedAt CASE
WHEN t.date_closed IS NOT NULL
THEN DATE_FORMAT(FROM_UNIXTIME(t.date_closed / 1000), '%d/%m/%y')
ELSE NULL
END AS completedAt
FROM staff s FROM staff s
LEFT JOIN ticket t ON t.assign_to = s.id LEFT JOIN ticket t ON t.assign_to = s.id
LEFT JOIN account a ON t.account_id = a.id LEFT JOIN account a ON t.account_id = a.id

View File

@ -1 +1 @@
GET http://localhost:3000/tickets/open/gilles@targointernet.com?offset=1&limit=10 GET http://localhost:3000/tickets/OPEN?sortOrder=last_update&sortTypes=DESC&offset=0&limit=10&email=gilles@targointernet.com