switch from GET /api/obj?query endpoint to POST /api/query endpoint
also switch from useSWR shim taking `() => SWRKey` as paramfeat/vaults
parent
261fc97c9e
commit
a83149e746
|
@ -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)?;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue