Files
pagodera/lib/db/migrations/004_listings.sql
T
Evandro Fonseca Junior 55eebde0ba feat: add user authentication UI to header component
Add login and register dialogs, user dropdown menu with profile link and logout option, and integrate with session management hook. Prevent hydration mismatches by conditionally rendering auth elements after mount. Update package-lock.json with new @esbuild dependencies for build tooling.
2025-11-04 02:33:29 -03:00

55 lines
1.9 KiB
PL/PgSQL

-- Migration 004: Tabela de anúncios (listings) do marketplace
-- Criado em: 2025-01-27
-- Tabela de anúncios
CREATE TABLE IF NOT EXISTS listings (
listing_id SERIAL PRIMARY KEY,
seller_id INTEGER NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,
item_id INTEGER NOT NULL, -- referência ao banco de itens do TibiaWiki
item_name VARCHAR(255) NOT NULL,
quantity INTEGER DEFAULT 1 CHECK (quantity > 0),
server_name VARCHAR(50) NOT NULL,
-- Preços aceitos
price_pix DECIMAL(10, 2),
price_tibia_coins INTEGER,
price_gold_coins BIGINT,
-- Leilão
is_auction BOOLEAN DEFAULT FALSE,
current_bid_amount DECIMAL(10, 2),
current_bidder_id INTEGER REFERENCES users(user_id),
auction_ends_at TIMESTAMP,
-- Metadados
description TEXT,
listing_status VARCHAR(20) DEFAULT 'active' CHECK (listing_status IN ('active', 'sold', 'cancelled', 'in_escrow', 'expired')),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
sold_at TIMESTAMP,
views_count INTEGER DEFAULT 0
);
-- Índices para performance
CREATE INDEX IF NOT EXISTS idx_listings_status ON listings(listing_status);
CREATE INDEX IF NOT EXISTS idx_listings_item_id ON listings(item_id);
CREATE INDEX IF NOT EXISTS idx_listings_seller_id ON listings(seller_id);
CREATE INDEX IF NOT EXISTS idx_listings_server ON listings(server_name);
CREATE INDEX IF NOT EXISTS idx_listings_created_at ON listings(created_at DESC);
CREATE INDEX IF NOT EXISTS idx_listings_auction ON listings(is_auction, auction_ends_at) WHERE is_auction = TRUE;
-- Trigger para atualizar updated_at automaticamente
CREATE OR REPLACE FUNCTION update_listings_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trigger_update_listings_updated_at
BEFORE UPDATE ON listings
FOR EACH ROW
EXECUTE FUNCTION update_listings_updated_at();