import { Injectable } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; import { Observable } from 'rxjs'; import { environment } from '../../environments/environment'; export type SortDir = 'asc' | 'desc'; export interface PagedResult { page: number; pageSize: number; total: number; items: T[]; } export interface ChipVirgemListDto { id: string; item: number; numeroDoChip: string | null; observacoes: string | null; createdAt?: string | null; updatedAt?: string | null; } export interface UpdateChipVirgemRequest { item?: number | null; numeroDoChip?: string | null; observacoes?: string | null; } export interface CreateChipVirgemRequest extends UpdateChipVirgemRequest {} export interface ControleRecebidoListDto { id: string; ano: number | null; item: number | null; notaFiscal: string | null; chip: string | null; serial: string | null; conteudoDaNf: string | null; numeroDaLinha: string | null; valorUnit: number | null; valorDaNf: number | null; dataDaNf: string | null; dataDoRecebimento: string | null; quantidade: number | null; isResumo: boolean | null; createdAt?: string | null; updatedAt?: string | null; } export interface UpdateControleRecebidoRequest { ano?: number | null; item?: number | null; notaFiscal?: string | null; chip?: string | null; serial?: string | null; conteudoDaNf?: string | null; numeroDaLinha?: string | null; valorUnit?: number | null; valorDaNf?: number | null; dataDaNf?: string | null; dataDoRecebimento?: string | null; quantidade?: number | null; isResumo?: boolean | null; } export interface CreateControleRecebidoRequest extends UpdateControleRecebidoRequest {} @Injectable({ providedIn: 'root' }) export class ChipsControleService { private readonly baseApi: string; constructor(private http: HttpClient) { const raw = (environment.apiUrl || '').replace(/\/+$/, ''); this.baseApi = raw.toLowerCase().endsWith('/api') ? raw : `${raw}/api`; } getChipsVirgens(opts: { search?: string; page?: number; pageSize?: number; sortBy?: string; sortDir?: SortDir; }): Observable> { let params = new HttpParams(); if (opts.search && opts.search.trim()) params = params.set('search', opts.search.trim()); params = params.set('page', String(opts.page ?? 1)); params = params.set('pageSize', String(opts.pageSize ?? 20)); params = params.set('sortBy', (opts.sortBy ?? 'item').trim()); params = params.set('sortDir', opts.sortDir ?? 'asc'); return this.http.get>(`${this.baseApi}/chips-virgens`, { params }); } getChipVirgemById(id: string): Observable { return this.http.get(`${this.baseApi}/chips-virgens/${id}`); } updateChipVirgem(id: string, payload: UpdateChipVirgemRequest): Observable { return this.http.put(`${this.baseApi}/chips-virgens/${id}`, payload); } createChipVirgem(payload: CreateChipVirgemRequest): Observable { return this.http.post(`${this.baseApi}/chips-virgens`, payload); } removeChipVirgem(id: string): Observable { return this.http.delete(`${this.baseApi}/chips-virgens/${id}`); } getControleRecebidos(opts: { ano?: number | string | null; isResumo?: boolean | string | null; search?: string; page?: number; pageSize?: number; sortBy?: string; sortDir?: SortDir; }): Observable> { let params = new HttpParams(); const ano = opts.ano ?? ''; const resumo = opts.isResumo ?? ''; if (String(ano).trim()) params = params.set('ano', String(ano).trim()); if (String(resumo).trim()) params = params.set('isResumo', String(resumo).trim()); if (opts.search && opts.search.trim()) params = params.set('search', opts.search.trim()); params = params.set('page', String(opts.page ?? 1)); params = params.set('pageSize', String(opts.pageSize ?? 20)); params = params.set('sortBy', (opts.sortBy ?? 'ano').trim()); params = params.set('sortDir', opts.sortDir ?? 'asc'); return this.http.get>(`${this.baseApi}/controle-recebidos`, { params }); } getControleRecebidoById(id: string): Observable { return this.http.get(`${this.baseApi}/controle-recebidos/${id}`); } updateControleRecebido(id: string, payload: UpdateControleRecebidoRequest): Observable { return this.http.put(`${this.baseApi}/controle-recebidos/${id}`, payload); } createControleRecebido(payload: CreateControleRecebidoRequest): Observable { return this.http.post(`${this.baseApi}/controle-recebidos`, payload); } removeControleRecebido(id: string): Observable { return this.http.delete(`${this.baseApi}/controle-recebidos/${id}`); } }