mirror of
https://github.com/d-fi/d-fi-core.git
synced 2025-07-27 23:54:23 +02:00
refactor api
This commit is contained in:
parent
66d220ab23
commit
2847a406e5
@ -1,5 +1,5 @@
|
|||||||
import axios from './lib/request';
|
import axios from '../lib/request';
|
||||||
import FastLRU from './lib/fast-lru';
|
import {request, requestPublicApi} from './request';
|
||||||
import type {
|
import type {
|
||||||
albumType,
|
albumType,
|
||||||
trackType,
|
trackType,
|
||||||
@ -15,60 +15,7 @@ import type {
|
|||||||
trackTypePublicApi,
|
trackTypePublicApi,
|
||||||
albumTypePublicApi,
|
albumTypePublicApi,
|
||||||
userType,
|
userType,
|
||||||
} from './types';
|
} from '../types';
|
||||||
|
|
||||||
// expire cache in 60 minutes
|
|
||||||
const lru = new FastLRU({
|
|
||||||
maxSize: 1000,
|
|
||||||
ttl: 60 * 60000,
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make post requests to deezer api
|
|
||||||
* @param {Object} body post body
|
|
||||||
* @param {String} method request method
|
|
||||||
*/
|
|
||||||
export const request = async (body: object, method: string) => {
|
|
||||||
const cacheKey = method + ':' + Object.entries(body).join(':');
|
|
||||||
const cache = lru.get(cacheKey);
|
|
||||||
if (cache) {
|
|
||||||
return cache;
|
|
||||||
}
|
|
||||||
|
|
||||||
const {
|
|
||||||
data: {error, results},
|
|
||||||
} = await axios.post('/gateway.php', body, {params: {method}});
|
|
||||||
|
|
||||||
if (Object.keys(results).length > 0) {
|
|
||||||
lru.set(cacheKey, results);
|
|
||||||
return results;
|
|
||||||
}
|
|
||||||
|
|
||||||
const errorMessage = Object.entries(error).join(', ');
|
|
||||||
throw new Error(errorMessage);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Make post requests to deezer public api
|
|
||||||
* @param {Object} body post body
|
|
||||||
* @param {String} method request method
|
|
||||||
*/
|
|
||||||
export const requestPublicApi = async (slug: string) => {
|
|
||||||
const cache = lru.get(slug);
|
|
||||||
if (cache) {
|
|
||||||
return cache;
|
|
||||||
}
|
|
||||||
|
|
||||||
const {data} = await axios.get('https://api.deezer.com' + slug);
|
|
||||||
|
|
||||||
if (data.error) {
|
|
||||||
const errorMessage = Object.entries(data.error).join(', ');
|
|
||||||
throw new Error(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
lru.set(slug, data);
|
|
||||||
return data;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {String} sng_id song id
|
* @param {String} sng_id song id
|
9
src/api/cache.ts
Normal file
9
src/api/cache.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import FastLRU from '../lib/fast-lru';
|
||||||
|
|
||||||
|
// Expire cache in 60 minutes
|
||||||
|
const lru = new FastLRU({
|
||||||
|
maxSize: 1000,
|
||||||
|
ttl: 60 * 60000,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default lru;
|
2
src/api/index.ts
Normal file
2
src/api/index.ts
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export * from './api';
|
||||||
|
export * from './request';
|
49
src/api/request.ts
Normal file
49
src/api/request.ts
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import axios from '../lib/request';
|
||||||
|
import lru from './cache';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make post requests to deezer api
|
||||||
|
* @param {Object} body post body
|
||||||
|
* @param {String} method request method
|
||||||
|
*/
|
||||||
|
export const request = async (body: object, method: string) => {
|
||||||
|
const cacheKey = method + ':' + Object.entries(body).join(':');
|
||||||
|
const cache = lru.get(cacheKey);
|
||||||
|
if (cache) {
|
||||||
|
return cache;
|
||||||
|
}
|
||||||
|
|
||||||
|
const {
|
||||||
|
data: {error, results},
|
||||||
|
} = await axios.post('/gateway.php', body, {params: {method}});
|
||||||
|
|
||||||
|
if (Object.keys(results).length > 0) {
|
||||||
|
lru.set(cacheKey, results);
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
const errorMessage = Object.entries(error).join(', ');
|
||||||
|
throw new Error(errorMessage);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make post requests to deezer public api
|
||||||
|
* @param {Object} body post body
|
||||||
|
* @param {String} method request method
|
||||||
|
*/
|
||||||
|
export const requestPublicApi = async (slug: string) => {
|
||||||
|
const cache = lru.get(slug);
|
||||||
|
if (cache) {
|
||||||
|
return cache;
|
||||||
|
}
|
||||||
|
|
||||||
|
const {data} = await axios.get('https://api.deezer.com' + slug);
|
||||||
|
|
||||||
|
if (data.error) {
|
||||||
|
const errorMessage = Object.entries(data.error).join(', ');
|
||||||
|
throw new Error(errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
lru.set(slug, data);
|
||||||
|
return data;
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user