Select Git revision
query-service.ts
query-service.ts 7.55 KiB
import {format} from 'sql-formatter'
import type {AxiosRequestConfig} from 'axios'
import {axiosErrorToApiError} from '@/utils'
export const useQueryService = (): any => {
async function findAll(databaseId: number, persisted: boolean): Promise<QueryDto[]> {
const axios = useAxiosInstance()
console.debug('find queries')
return new Promise<QueryDto[]>((resolve, reject) => {
axios.get<QueryDto[]>(`/api/database/${databaseId}/subset`, {params: (persisted && {persisted})})
.then((response) => {
console.info(`Found ${response.data.length} query(s)`)
resolve(response.data)
})
.catch((error) => {
if (error.response.status === 403) {
/* ignore */
resolve([])
}
console.error('Failed to find queries', error)
reject(axiosErrorToApiError(error))
})
})
}
async function findOne(databaseId: number, queryId: number): Promise<QueryDto> {
const axios = useAxiosInstance()
console.debug('find query with id', queryId, 'in database with id', databaseId)
return new Promise<QueryDto>((resolve, reject) => {
axios.get<QueryDto>(`/api/database/${databaseId}/subset/${queryId}`)
.then((response) => {
console.info('Found query with id', queryId, 'in database with id', databaseId)
resolve(response.data)
})
.catch((error) => {
console.error('Failed to find query', error)
reject(axiosErrorToApiError(error))
})
})
}
async function update(databaseId: number, queryId: number, data: QueryPersistDto): Promise<QueryDto> {
const axios = useAxiosInstance()
console.debug('update query with id', queryId, 'in database with id', databaseId)
return new Promise<QueryDto>((resolve, reject) => {
axios.put<QueryDto>(`/api/database/${databaseId}/subset/${queryId}`, data)
.then((response) => {
console.info('Updated query with id', queryId, 'in database with id', databaseId)
resolve(response.data)
})
.catch((error) => {
console.error('Failed to update query', error)
reject(axiosErrorToApiError(error))
})
})
}
async function exportCsv(databaseId: number, queryId: number): Promise<any> {
const axios = useAxiosInstance()
const config: AxiosRequestConfig = {
responseType: 'blob',
headers: {
Accept: 'text/csv'
}
}
console.debug('export query with id', queryId, 'in database with id', databaseId)
return new Promise<any>((resolve, reject) => {
axios.get<any>(`/api/database/${databaseId}/subset/${queryId}`, config)
.then((response) => {
console.info('Exported query with id', queryId, 'in database with id', databaseId)