import { AxiosResponse } from "axios"; import { RequestDefinition, RequestData, ImplementsRequestInterface } from "../requestBase"; import { CreateQueryViewModel, QueryExecuteResult, QueryViewModel, UpdateQueryViewModel } from "../../viewmodels/admin/query.models"; import { DynamicQueryStructure } from "../../types/admin/dynamicQueries"; import { BaseClient } from "../../clients/clientBase"; interface GetQueryParams { offset?: number; count?: number; noLimit?: boolean; } interface IQueryRequests { getQueries: RequestDefinition; getQueryById: RequestDefinition<{ id: string }, void, QueryViewModel>; createQuery: RequestDefinition; updateQuery: RequestDefinition<{ id: string }, UpdateQueryViewModel, void>; deleteQuery: RequestDefinition<{ id: string }, void, void>; executeQuery: RequestDefinition; executeQueryByQueryStoreId: RequestDefinition; } @ImplementsRequestInterface() export default abstract class QueryDataRequests { static async getQueries({ http }: BaseClient): Promise> { return await http.get("/admin/querystore"); } static async getQueryById({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise> { return await http.get(`/admin/querystore/${p.params.id}`); } static async createQuery({ http }: BaseClient, p: RequestData): Promise> { return await http.post("/admin/querystore", p.body); } static async updateQuery({ http }: BaseClient, p: RequestData<{ id: string }, UpdateQueryViewModel>): Promise> { return await http.post(`/admin/querystore/${p.params.id}`, p.body); } static async deleteQuery({ http }: BaseClient, p: RequestData<{ id: string }, void>): Promise> { return await http.post(`/admin/querystore/${p.params.id}`); } static async executeQuery( { http }: BaseClient, p: RequestData ): Promise> { const queryParams = new URLSearchParams(Object.fromEntries(Object.entries(p.params).filter(([_, v]) => v !== undefined))).toString(); return await http.post(`/admin/query?${queryParams}`, p.body); } static async executeQueryByQueryStoreId( { http }: BaseClient, p: RequestData ): Promise> { const queryParams = new URLSearchParams( Object.fromEntries(Object.entries(p.params).filter(([k, v]) => v !== undefined && k != "storeId")) ).toString(); return await http.post(`/admin/query/${p.params.storeId}?${queryParams}`); } }