mirror of
https://github.com/sakaljurgis/best-choice.git
synced 2026-07-08 21:47:40 +00:00
rename column, add missing
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import { useState } from 'react';
|
||||
|
||||
interface ItemThumbnailProps {
|
||||
url: string | null;
|
||||
alt: string;
|
||||
size?: 'sm' | 'md';
|
||||
}
|
||||
|
||||
const sizeClassMap: Record<Required<ItemThumbnailProps>['size'], string> = {
|
||||
sm: 'h-14 w-14',
|
||||
md: 'h-20 w-20'
|
||||
};
|
||||
|
||||
export function ItemThumbnail({ url, alt, size = 'sm' }: ItemThumbnailProps) {
|
||||
const [hasError, setHasError] = useState(false);
|
||||
const hasImage = !!url && !hasError;
|
||||
const sizeClasses = sizeClassMap[size];
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`flex-shrink-0 overflow-hidden rounded-md border border-slate-200 bg-slate-100 ${sizeClasses}`}
|
||||
>
|
||||
{hasImage ? (
|
||||
<img
|
||||
src={url ?? ''}
|
||||
alt={alt}
|
||||
className="h-full w-full object-cover"
|
||||
loading="lazy"
|
||||
onError={() => setHasError(true)}
|
||||
/>
|
||||
) : (
|
||||
<div className="flex h-full w-full items-center justify-center px-2 text-center text-[0.625rem] font-medium uppercase tracking-wide text-slate-400">
|
||||
No Image
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -9,7 +9,7 @@ export const migration: Migration = {
|
||||
CREATE TABLE IF NOT EXISTS urls (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
url TEXT NOT NULL UNIQUE,
|
||||
note TEXT,
|
||||
body_text TEXT,
|
||||
attributes JSONB NOT NULL DEFAULT '{}'::jsonb,
|
||||
has_price BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
|
||||
@@ -3,7 +3,7 @@ import { query } from './pool.js';
|
||||
export interface UrlRow {
|
||||
id: string;
|
||||
url: string;
|
||||
note: string | null;
|
||||
body_text: string | null;
|
||||
attributes: unknown;
|
||||
has_price: boolean;
|
||||
created_at: Date;
|
||||
@@ -13,7 +13,7 @@ export interface UrlRow {
|
||||
export interface UrlRecord {
|
||||
id: string;
|
||||
url: string;
|
||||
note: string | null;
|
||||
bodyText: string | null;
|
||||
attributes: unknown;
|
||||
hasPrice: boolean;
|
||||
createdAt: string;
|
||||
@@ -23,7 +23,7 @@ export interface UrlRecord {
|
||||
const mapUrlRow = (row: UrlRow): UrlRecord => ({
|
||||
id: row.id,
|
||||
url: row.url,
|
||||
note: row.note,
|
||||
bodyText: row.body_text,
|
||||
attributes: row.attributes ?? {},
|
||||
hasPrice: row.has_price,
|
||||
createdAt: row.created_at.toISOString(),
|
||||
@@ -33,7 +33,7 @@ const mapUrlRow = (row: UrlRow): UrlRecord => ({
|
||||
export const findUrlById = async (id: string): Promise<UrlRecord | null> => {
|
||||
const result = await query<UrlRow>(
|
||||
`
|
||||
SELECT id, url, note, attributes, has_price, created_at, updated_at
|
||||
SELECT id, url, body_text, attributes, has_price, created_at, updated_at
|
||||
FROM urls
|
||||
WHERE id = $1
|
||||
`,
|
||||
@@ -50,7 +50,7 @@ export const findUrlById = async (id: string): Promise<UrlRecord | null> => {
|
||||
export const findUrlByValue = async (url: string): Promise<UrlRecord | null> => {
|
||||
const result = await query<UrlRow>(
|
||||
`
|
||||
SELECT id, url, note, attributes, has_price, created_at, updated_at
|
||||
SELECT id, url, body_text, attributes, has_price, created_at, updated_at
|
||||
FROM urls
|
||||
WHERE url = $1
|
||||
`,
|
||||
@@ -66,7 +66,7 @@ export const findUrlByValue = async (url: string): Promise<UrlRecord | null> =>
|
||||
|
||||
export interface CreateUrlParams {
|
||||
url: string;
|
||||
note?: string | null;
|
||||
bodyText?: string | null;
|
||||
attributes?: unknown;
|
||||
hasPrice?: boolean;
|
||||
}
|
||||
@@ -74,15 +74,15 @@ export interface CreateUrlParams {
|
||||
export const createUrl = async (params: CreateUrlParams): Promise<UrlRecord> => {
|
||||
const result = await query<UrlRow>(
|
||||
`
|
||||
INSERT INTO urls (url, note, attributes, has_price)
|
||||
INSERT INTO urls (url, body_text, attributes, has_price)
|
||||
VALUES ($1, $2, $3, $4)
|
||||
ON CONFLICT (url) DO UPDATE
|
||||
SET updated_at = NOW()
|
||||
RETURNING id, url, note, attributes, has_price, created_at, updated_at
|
||||
RETURNING id, url, body_text, attributes, has_price, created_at, updated_at
|
||||
`,
|
||||
[
|
||||
params.url,
|
||||
params.note ?? null,
|
||||
params.bodyText ?? null,
|
||||
params.attributes ?? {},
|
||||
params.hasPrice ?? false
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user