switch from GET /api/obj?query endpoint to POST /api/query endpoint

also switch from useSWR shim taking `() => SWRKey` as param
feat/vaults
Tomáš Mládek 2022-02-06 22:25:23 +01:00
parent 261fc97c9e
commit a83149e746
No known key found for this signature in database
GPG Key ID: ED21612889E75EC5
3 changed files with 13 additions and 22 deletions

View File

@ -126,7 +126,6 @@ pub async fn get_raw(
}
}
#[get("/api/thumb/{hash}")]
pub async fn get_thumbnail(
state: web::Data<State>,
@ -165,19 +164,11 @@ pub async fn get_thumbnail(
Err(error::ErrorNotImplemented("Previews not enabled."))
}
#[derive(Deserialize)]
pub struct QueryRequest {
query: String,
}
#[get("/api/obj")]
pub async fn get_query(
state: web::Data<State>,
web::Query(info): web::Query<QueryRequest>,
) -> Result<HttpResponse, Error> {
#[post("/api/query")]
pub async fn get_query(state: web::Data<State>, query: String) -> Result<HttpResponse, Error> {
let connection = state.upend.connection().map_err(ErrorInternalServerError)?;
let in_query: Query = info.query.as_str().parse().map_err(ErrorBadRequest)?;
let in_query: Query = query.parse().map_err(ErrorBadRequest)?;
let entries = connection
.query(in_query)
.map_err(ErrorInternalServerError)?;

View File

@ -10,7 +10,7 @@ const inFlightRequests: { [key: string]: Promise<UpListing> } = {};
export function useEntity(address: string) {
const { data, error, revalidate } = useSWR<ListingResult, unknown>(
() => `/api/obj/${address}`
`/api/obj/${address}`
);
const entity: Readable<UpObject | undefined> = derived(data, ($listing) => {
@ -38,7 +38,8 @@ export function query(query: () => string) {
const queryString = typeof query === "string" ? query : query();
console.debug(`Querying: ${queryString}`);
const { data, error, revalidate } = useSWR<ListingResult, unknown>(
() => `/api/obj?query=${encodeURIComponent(query())}`
"/api/query",
{ method: "POST", body: queryString }
);
const result = derived(data, ($values) => {
@ -55,11 +56,10 @@ export function query(query: () => string) {
export async function queryOnce(query: string): Promise<UpListing> {
const cacheResult = queryOnceLRU.get(query);
if (!cacheResult) {
const url = `/api/obj?query=${query}`;
if (!inFlightRequests[url]) {
if (!inFlightRequests[query]) {
console.debug(`Querying: ${query}`);
inFlightRequests[url] = new Promise((resolve, reject) => {
fetch(url, { keepalive: true })
inFlightRequests[query] = new Promise((resolve, reject) => {
fetch("/api/query", { method: "POST", body: query, keepalive: true })
.then(async (response) => {
resolve(new UpListing(await response.json()));
})
@ -68,7 +68,7 @@ export async function queryOnce(query: string): Promise<UpListing> {
} else {
console.debug(`Chaining request for ${query}...`);
}
return await inFlightRequests[url];
return await inFlightRequests[query];
} else {
console.debug(`Returning cached: ${query}`);
return cacheResult;

View File

@ -3,15 +3,15 @@ import { writable } from "svelte/store";
// stale shim until https://github.com/ConsoleTVs/sswr/issues/24 is resolved
export type SWRKey = string;
export function useSWR<D = unknown, E = Error>(
key: SWRKey | undefined | (() => SWRKey | undefined)
key: SWRKey,
options?: RequestInit
) {
const data = writable<D | undefined>();
const error = writable<E | undefined>();
async function doFetch() {
const keyString = typeof key === "string" ? key : key();
try {
const response = await fetch(keyString);
const response = await fetch(key, options);
if (response.ok) {
data.set(await response.json());
} else {