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 {
@IsInt() id: number;
@IsString() status: string;
@IsString() @IsOptional() assignedTo: string;
@IsString() @IsOptional() assignTo: string;
@IsString() deliveryAddress: string;
@IsString() subject: string;
@IsString() department: string;
@IsInt() @IsOptional() parentTicketId: number;
@IsString() dueDate: string;;
@IsString() dueDate: 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 { Result } from "src/common/errors/result-error.factory";
import { TicketList } from "src/customer-support/tickets/dtos/ticket-list.dto";
@ -9,23 +9,26 @@ export class TicketController {
constructor(private readonly getService: TicketService) { }
@Get(':status/:email')
@Get(':status')
async findTicketByFilters(
@Access('email') email: string,
@Param('status') status: string,
@Param('email') filterEmail?: string,
@Query('sortOrder') sortOrder?: string,
@Query('sortTypes') sortTypes?: 'DESC' | 'ASC',
@Query('offset') offset?: number,
@Query('limit') limit?: number,
@Query('sortOrder') sortOrder: string,
@Query('sortType') sortType: 'DESC' | 'ASC',
@Query('email') filterEmail?: string,
@Query('offset', ParseIntPipe) offset?: number,
@Query('limit', ParseIntPipe) limit?: number,
): Promise<Result<TicketList[], string>> {
const statusFliters = status.split(',');
if (!filterEmail) {
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);
}
}
const statusFilters = status.split(',');
const queryEmail = filterEmail ?? email;
return await this.getService.getListOfAllTicketByFilters(
statusFilters,
offset,
limit,
sortOrder,
sortType,
queryEmail,
);
}
}

View File

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