line-gestao-frontend/src/app/services/historico.service.ts

78 lines
2.4 KiB
TypeScript

import { Injectable } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import { Observable } from 'rxjs';
import { environment } from '../../environments/environment';
export type AuditAction = 'CREATE' | 'UPDATE' | 'DELETE';
export type AuditChangeType = 'added' | 'modified' | 'removed';
export interface AuditFieldChangeDto {
field: string;
changeType: AuditChangeType;
oldValue?: string | null;
newValue?: string | null;
}
export interface AuditLogDto {
id: string;
occurredAtUtc: string;
action: AuditAction | string;
page: string;
entityName: string;
entityId?: string | null;
entityLabel?: string | null;
userId?: string | null;
userName?: string | null;
userEmail?: string | null;
requestPath?: string | null;
requestMethod?: string | null;
ipAddress?: string | null;
changes: AuditFieldChangeDto[];
}
export interface PagedResult<T> {
page: number;
pageSize: number;
total: number;
items: T[];
}
export interface HistoricoQuery {
pageName?: string;
action?: AuditAction | string;
entity?: string;
userId?: string;
search?: string;
dateFrom?: string;
dateTo?: string;
page?: number;
pageSize?: number;
}
@Injectable({ providedIn: 'root' })
export class HistoricoService {
private readonly baseApi: string;
constructor(private http: HttpClient) {
const raw = (environment.apiUrl || '').replace(/\/+$/, '');
this.baseApi = raw.toLowerCase().endsWith('/api') ? raw : `${raw}/api`;
}
list(params: HistoricoQuery): Observable<PagedResult<AuditLogDto>> {
let httpParams = new HttpParams();
if (params.pageName) httpParams = httpParams.set('pageName', params.pageName);
if (params.action) httpParams = httpParams.set('action', params.action);
if (params.entity) httpParams = httpParams.set('entity', params.entity);
if (params.userId) httpParams = httpParams.set('userId', params.userId);
if (params.search) httpParams = httpParams.set('search', params.search);
if (params.dateFrom) httpParams = httpParams.set('dateFrom', params.dateFrom);
if (params.dateTo) httpParams = httpParams.set('dateTo', params.dateTo);
httpParams = httpParams.set('page', String(params.page || 1));
httpParams = httpParams.set('pageSize', String(params.pageSize || 10));
return this.http.get<PagedResult<AuditLogDto>>(`${this.baseApi}/historico`, { params: httpParams });
}
}