Files
tnsu-approval-route/frontend/src/webparts/approvalAdmin/services/api.ts
T
gorbenko.pavel 82512eb1db
Tests / frontend-test (push) Successful in 44s
Tests / backend-test (push) Failing after 17m4s
Архивация списков (#13)
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/13
2026-08-19 09:08:36 +00:00

98 lines
4.2 KiB
TypeScript

import { IHttpClient } from './httpClient';
import {
CreateRequestTypeInput,
CreateTemplateRouteInput,
CreateTemplateRouteStepInput,
PatchRequestTypeInput,
PatchTemplateRouteInput,
PatchTemplateRouteStepInput,
RequestType,
RequestTypeListSeries,
ResolveTemplateRouteQuery,
ResolveTemplateRouteResult,
TemplateRoute,
TemplateRouteStep,
UpdateRequestTypeInput,
UpdateTemplateRouteInput,
UpdateTemplateRouteStepInput
} from '../models';
// Тонкий 1:1 фасад над контроллерами бэкенда:
// backend/Tnsu.ApprovalRoute.Api/Controllers/{RequestTypes,TemplateRoutes,TemplateRouteSteps}Controller.cs
export class ApprovalRouteApi {
constructor(private readonly http: IHttpClient) {}
public readonly requestTypes = {
list: (): Promise<RequestType[]> =>
this.http.get<RequestType[]>('/api/request-types'),
get: (id: number): Promise<RequestType> =>
this.http.get<RequestType>(`/api/request-types/${id}`),
create: (body: CreateRequestTypeInput): Promise<RequestType> =>
this.http.post<RequestType>('/api/request-types', body),
update: (id: number, body: UpdateRequestTypeInput): Promise<RequestType> =>
this.http.put<RequestType>(`/api/request-types/${id}`, body),
patch: (id: number, body: PatchRequestTypeInput): Promise<RequestType> =>
this.http.patch<RequestType>(`/api/request-types/${id}`, body),
remove: (id: number): Promise<void> =>
this.http.delete(`/api/request-types/${id}`),
// Серии партиций СРАЗУ по всем типам заявок (см.
// ListPartitionService.ListAllAsync) — для дашборда (счётчик партиций) и
// портала, которому нужен весь список адресов разом, а не по одному запросу
// на тип.
listsAll: (): Promise<RequestTypeListSeries[]> =>
this.http.get<RequestTypeListSeries[]>('/api/request-types/lists')
};
public readonly templateRoutes = {
list: (requestTypeId?: number): Promise<TemplateRoute[]> =>
this.http.get<TemplateRoute[]>('/api/template-routes', { requestTypeId }),
get: (id: number): Promise<TemplateRoute> =>
this.http.get<TemplateRoute>(`/api/template-routes/${id}`),
create: (body: CreateTemplateRouteInput): Promise<TemplateRoute> =>
this.http.post<TemplateRoute>('/api/template-routes', body),
update: (id: number, body: UpdateTemplateRouteInput): Promise<TemplateRoute> =>
this.http.put<TemplateRoute>(`/api/template-routes/${id}`, body),
patch: (id: number, body: PatchTemplateRouteInput): Promise<TemplateRoute> =>
this.http.patch<TemplateRoute>(`/api/template-routes/${id}`, body),
remove: (id: number): Promise<void> =>
this.http.delete(`/api/template-routes/${id}`),
// POST, а не GET: запрос несёт список условий (fieldValues) переменной длины —
// не ложится на плоскую query-строку (см. IHttpClient.QueryParams).
resolve: (query: ResolveTemplateRouteQuery): Promise<ResolveTemplateRouteResult> =>
this.http.post<ResolveTemplateRouteResult>('/api/template-routes/resolve', query)
};
public readonly templateRouteSteps = {
list: (routeId: number): Promise<TemplateRouteStep[]> =>
this.http.get<TemplateRouteStep[]>(`/api/template-routes/${routeId}/steps`),
get: (routeId: number, id: number): Promise<TemplateRouteStep> =>
this.http.get<TemplateRouteStep>(`/api/template-routes/${routeId}/steps/${id}`),
create: (routeId: number, body: CreateTemplateRouteStepInput): Promise<TemplateRouteStep> =>
this.http.post<TemplateRouteStep>(`/api/template-routes/${routeId}/steps`, body),
update: (routeId: number, id: number, body: UpdateTemplateRouteStepInput): Promise<TemplateRouteStep> =>
this.http.put<TemplateRouteStep>(`/api/template-routes/${routeId}/steps/${id}`, body),
patch: (routeId: number, id: number, body: PatchTemplateRouteStepInput): Promise<TemplateRouteStep> =>
this.http.patch<TemplateRouteStep>(`/api/template-routes/${routeId}/steps/${id}`, body),
remove: (routeId: number, id: number): Promise<void> =>
this.http.delete(`/api/template-routes/${routeId}/steps/${id}`)
};
}