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}")]
|
#[get("/api/thumb/{hash}")]
|
||||||
pub async fn get_thumbnail(
|
pub async fn get_thumbnail(
|
||||||
state: web::Data<State>,
|
state: web::Data<State>,
|
||||||
|
@ -165,19 +164,11 @@ pub async fn get_thumbnail(
|
||||||
Err(error::ErrorNotImplemented("Previews not enabled."))
|
Err(error::ErrorNotImplemented("Previews not enabled."))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[post("/api/query")]
|
||||||
pub struct QueryRequest {
|
pub async fn get_query(state: web::Data<State>, query: String) -> Result<HttpResponse, Error> {
|
||||||
query: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[get("/api/obj")]
|
|
||||||
pub async fn get_query(
|
|
||||||
state: web::Data<State>,
|
|
||||||
web::Query(info): web::Query<QueryRequest>,
|
|
||||||
) -> Result<HttpResponse, Error> {
|
|
||||||
let connection = state.upend.connection().map_err(ErrorInternalServerError)?;
|
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
|
let entries = connection
|
||||||
.query(in_query)
|
.query(in_query)
|
||||||
.map_err(ErrorInternalServerError)?;
|
.map_err(ErrorInternalServerError)?;
|
||||||
|
|
|
@ -10,7 +10,7 @@ const inFlightRequests: { [key: string]: Promise<UpListing> } = {};
|
||||||
|
|
||||||
export function useEntity(address: string) {
|
export function useEntity(address: string) {
|
||||||
const { data, error, revalidate } = useSWR<ListingResult, unknown>(
|
const { data, error, revalidate } = useSWR<ListingResult, unknown>(
|
||||||
() => `/api/obj/${address}`
|
`/api/obj/${address}`
|
||||||
);
|
);
|
||||||
|
|
||||||
const entity: Readable<UpObject | undefined> = derived(data, ($listing) => {
|
const entity: Readable<UpObject | undefined> = derived(data, ($listing) => {
|
||||||
|
@ -38,7 +38,8 @@ export function query(query: () => string) {
|
||||||
const queryString = typeof query === "string" ? query : query();
|
const queryString = typeof query === "string" ? query : query();
|
||||||
console.debug(`Querying: ${queryString}`);
|
console.debug(`Querying: ${queryString}`);
|
||||||
const { data, error, revalidate } = useSWR<ListingResult, unknown>(
|
const { data, error, revalidate } = useSWR<ListingResult, unknown>(
|
||||||
() => `/api/obj?query=${encodeURIComponent(query())}`
|
"/api/query",
|
||||||
|
{ method: "POST", body: queryString }
|
||||||
);
|
);
|
||||||
|
|
||||||
const result = derived(data, ($values) => {
|
const result = derived(data, ($values) => {
|
||||||
|
@ -55,11 +56,10 @@ export function query(query: () => string) {
|
||||||
export async function queryOnce(query: string): Promise<UpListing> {
|
export async function queryOnce(query: string): Promise<UpListing> {
|
||||||
const cacheResult = queryOnceLRU.get(query);
|
const cacheResult = queryOnceLRU.get(query);
|
||||||
if (!cacheResult) {
|
if (!cacheResult) {
|
||||||
const url = `/api/obj?query=${query}`;
|
if (!inFlightRequests[query]) {
|
||||||
if (!inFlightRequests[url]) {
|
|
||||||
console.debug(`Querying: ${query}`);
|
console.debug(`Querying: ${query}`);
|
||||||
inFlightRequests[url] = new Promise((resolve, reject) => {
|
inFlightRequests[query] = new Promise((resolve, reject) => {
|
||||||
fetch(url, { keepalive: true })
|
fetch("/api/query", { method: "POST", body: query, keepalive: true })
|
||||||
.then(async (response) => {
|
.then(async (response) => {
|
||||||
resolve(new UpListing(await response.json()));
|
resolve(new UpListing(await response.json()));
|
||||||
})
|
})
|
||||||
|
@ -68,7 +68,7 @@ export async function queryOnce(query: string): Promise<UpListing> {
|
||||||
} else {
|
} else {
|
||||||
console.debug(`Chaining request for ${query}...`);
|
console.debug(`Chaining request for ${query}...`);
|
||||||
}
|
}
|
||||||
return await inFlightRequests[url];
|
return await inFlightRequests[query];
|
||||||
} else {
|
} else {
|
||||||
console.debug(`Returning cached: ${query}`);
|
console.debug(`Returning cached: ${query}`);
|
||||||
return cacheResult;
|
return cacheResult;
|
||||||
|
|
|
@ -3,15 +3,15 @@ import { writable } from "svelte/store";
|
||||||
// stale shim until https://github.com/ConsoleTVs/sswr/issues/24 is resolved
|
// stale shim until https://github.com/ConsoleTVs/sswr/issues/24 is resolved
|
||||||
export type SWRKey = string;
|
export type SWRKey = string;
|
||||||
export function useSWR<D = unknown, E = Error>(
|
export function useSWR<D = unknown, E = Error>(
|
||||||
key: SWRKey | undefined | (() => SWRKey | undefined)
|
key: SWRKey,
|
||||||
|
options?: RequestInit
|
||||||
) {
|
) {
|
||||||
const data = writable<D | undefined>();
|
const data = writable<D | undefined>();
|
||||||
const error = writable<E | undefined>();
|
const error = writable<E | undefined>();
|
||||||
|
|
||||||
async function doFetch() {
|
async function doFetch() {
|
||||||
const keyString = typeof key === "string" ? key : key();
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch(keyString);
|
const response = await fetch(key, options);
|
||||||
if (response.ok) {
|
if (response.ok) {
|
||||||
data.set(await response.json());
|
data.set(await response.json());
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue