You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

93 lines
3.6 KiB

import * as serverApi from '../../api/api';
import { QueryElem, QueryFor, simplify, toApiQuery } from '../query/Query';
import backendRequest from './request';
export async function queryItems(
type: serverApi.ResourceType,
query: QueryElem | undefined,
offset: number | undefined,
limit: number | undefined,
responseType: serverApi.QueryResponseType,
): Promise<serverApi.QueryResponse> {
const queryForMapping : any = {
[serverApi.ResourceType.Album]: QueryFor.Albums,
[serverApi.ResourceType.Artist]: QueryFor.Artists,
[serverApi.ResourceType.Tag]: QueryFor.Tags,
[serverApi.ResourceType.Track]: QueryFor.Tracks,
};
const simplified = simplify(query || null, queryForMapping[type]);
var q: serverApi.QueryRequest = {
query: simplified ? toApiQuery(simplified, queryForMapping[type]) : {},
offsetsLimits: {
artistOffset: (type == serverApi.ResourceType.Artist) ? (offset || 0) : undefined,
artistLimit: (type == serverApi.ResourceType.Artist) ? (limit || -1) : undefined,
albumOffset: (type == serverApi.ResourceType.Album) ? (offset || 0) : undefined,
albumLimit: (type == serverApi.ResourceType.Album) ? (limit || -1) : undefined,
trackOffset: (type == serverApi.ResourceType.Track) ? (offset || 0) : undefined,
trackLimit: (type == serverApi.ResourceType.Track) ? (limit || -1) : undefined,
tagOffset: (type == serverApi.ResourceType.Tag) ? (offset || 0) : undefined,
tagLimit: (type == serverApi.ResourceType.Tag) ? (limit || -1) : undefined,
},
ordering: {
orderBy: {
type: serverApi.OrderByType.Name,
},
ascending: true,
},
responseType: responseType,
};
const requestOpts = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(q),
};
return (async () => {
const response = await backendRequest((process.env.REACT_APP_BACKEND || "") + serverApi.QueryEndpoint, requestOpts)
let json: any = await response.json();
return json;
})();
}
export async function queryArtists(
query: QueryElem | undefined,
offset: number | undefined,
limit: number | undefined,
responseType: serverApi.QueryResponseType,
): Promise<serverApi.QueryResponseArtistDetails[] | number[] | number> {
let r = await queryItems(serverApi.ResourceType.Artist, query, offset, limit, responseType);
return r.artists;
}
export async function queryAlbums(
query: QueryElem | undefined,
offset: number | undefined,
limit: number | undefined,
responseType: serverApi.QueryResponseType,
): Promise<serverApi.QueryResponseAlbumDetails[] | number[] | number> {
let r = await queryItems(serverApi.ResourceType.Album, query, offset, limit, responseType);
return r.albums;
}
export async function queryTracks(
query: QueryElem | undefined,
offset: number | undefined,
limit: number | undefined,
responseType: serverApi.QueryResponseType,
): Promise<serverApi.QueryResponseTrackDetails[] | number[] | number> {
let r = await queryItems(serverApi.ResourceType.Track, query, offset, limit, responseType);
return r.tracks;
}
export async function queryTags(
query: QueryElem | undefined,
offset: number | undefined,
limit: number | undefined,
responseType: serverApi.QueryResponseType,
): Promise<serverApi.QueryResponseTagDetails[] | number[] | number> {
let r = await queryItems(serverApi.ResourceType.Tag, query, offset, limit, responseType);
return r.tags;
}