Skip to content

Commit

Permalink
feat: update search query to use new DB
Browse files Browse the repository at this point in the history
  • Loading branch information
dromzeh committed Jul 14, 2023
1 parent e854749 commit f0fa95e
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 53 deletions.
42 changes: 18 additions & 24 deletions src/lib/query.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { Asset } from "@/lib/types/asset";
import { getConnection } from "@/lib/planetscale";

type queryParameter = string | number;

Expand All @@ -17,31 +18,22 @@ export const getSearchResults = async (
sqlQuery = addAssetToSqlQuery(asset, sqlQuery, parameters);
sqlQuery = addTagsToSqlQuery(tags, sqlQuery, parameters);

sqlQuery += ` ORDER BY uploadedDate DESC`;
sqlQuery += ` ORDER BY uploaded_date DESC`;

sqlQuery = limitResults(sqlQuery);

if (!query && !game.length && !asset.length && !tags.length) {
sqlQuery = `SELECT * FROM assets ORDER BY uploadedDate DESC LIMIT 30`;
sqlQuery = `SELECT * FROM assets ORDER BY uploaded_date DESC LIMIT 30`;
}

const row: D1Result<Asset> = await env.database
.prepare(sqlQuery)
.bind(...parameters)
.run();
const db = await getConnection(env);

return row.results.map((result) => ({
id: result.id,
name: result.name,
game: result.game,
asset: result.asset,
tags: result.tags,
url: result.url,
verified: result.verified,
uploadedBy: result.uploadedBy,
uploadedDate: result.uploadedDate,
fileSize: result.fileSize,
}));
console.log(sqlQuery, parameters);
const row = await db
.execute(sqlQuery, parameters)
.then((row) => row.rows as Asset[]);

return row;
};

const addQueryToSqlQuery = (
Expand Down Expand Up @@ -74,7 +66,9 @@ const addAssetToSqlQuery = (
parameters: queryParameter[]
): string => {
if (asset.length) {
sqlQuery += ` AND asset IN (${asset.map(() => "?").join(",")})`;
sqlQuery += ` AND asset_category IN (${asset
.map(() => "?")
.join(",")})`;
parameters.push(...asset);
}
return sqlQuery;
Expand All @@ -86,15 +80,15 @@ const addTagsToSqlQuery = (
parameters: queryParameter[]
): string => {
if (tags.length) {
sqlQuery += ` AND tags IN (${tags.map(() => "?").join(",")})`;
sqlQuery += ` AND tags IN (${tags
.map(() => "?")
.join(",")
.toUpperCase()})`;
parameters.push(...tags);
}
return sqlQuery;
};

const limitResults = (sqlQuery: string): string => {
// if (game.length > 1 || asset.length > 1 || tags.length > 1) {
// sqlQuery += ` LIMIT 2500`;
// }
return (sqlQuery += ` LIMIT 2500`);
return (sqlQuery += ` LIMIT 1500`);
};
4 changes: 2 additions & 2 deletions src/lib/types/asset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export interface Asset {
status: string;
uploaded_by: string;
uploaded_date: string;
view_count: number;
download_count: number;
view_count?: number;
download_count?: number;
file_size: number;
}
65 changes: 38 additions & 27 deletions src/routes/search/search.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { responseHeaders } from "@/lib/responseHeaders";
import type { Asset } from "@/lib/types/asset";
import * as queryLib from "@/lib/query";
import { getConnection } from "@/lib/planetscale";

export const getSearch = async (
request: Request,
Expand All @@ -12,13 +13,21 @@ export const getSearch = async (
const asset = url.searchParams.get("asset")?.split(",") || [];
const tags = url.searchParams.get("tags")?.split(",") || [];

const results = await queryLib.getSearchResults(
query,
game,
asset,
tags,
env
);
const results = await (
await queryLib.getSearchResults(query, game, asset, tags, env)
).map((results) => {
return {
id: results.id,
name: results.name,
game: results.game,
asset_category: results.asset_category,
url: results.url,
tags: results.tags,
status: results.status,
uploaded_by: results.uploaded_by,
uploaded_date: results.uploaded_date,
};
});

const response = new Response(
JSON.stringify({
Expand All @@ -44,7 +53,6 @@ export const getRecentAssets = async (
env: Env
): Promise<Response> => {
const url = new URL(request.url);
let results: Asset[] = [];

const cacheKey = new Request(url.toString(), request);
const cache = caches.default;
Expand All @@ -54,28 +62,31 @@ export const getRecentAssets = async (
return response;
}

const parameters = [];
let sqlQuery = `SELECT * FROM assets WHERE 1=1`;
const db = await getConnection(env);

sqlQuery += ` ORDER BY uploadedDate DESC LIMIT 30`;
const row = await db
.execute(
"SELECT * FROM assets WHERE 1=1 ORDER BY uploaded_date DESC LIMIT 30"
)
.then((row) => row.rows as Asset[] | undefined);

const row: D1Result<Asset> = await env.database
.prepare(sqlQuery)
.bind(...parameters)
.run();
if (!row) {
throw new Error("No results found");
}

results = row.results.map((result) => ({
id: result.id,
name: result.name,
game: result.game,
asset: result.asset,
tags: result.tags,
url: result.url,
verified: result.verified,
uploadedBy: result.uploadedBy,
uploadedDate: result.uploadedDate,
fileSize: result.fileSize,
}));
const results = row.map((asset) => {
return {
id: asset.id,
name: asset.name,
game: asset.game,
asset_category: asset.asset_category,
url: asset.url,
tags: asset.tags,
status: asset.status,
uploaded_by: asset.uploaded_by,
uploaded_date: asset.uploaded_date,
};
});

response = new Response(
JSON.stringify({
Expand Down

0 comments on commit f0fa95e

Please sign in to comment.