-- Filamenteka PostgreSQL Schema -- Enable UUID extension CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- Colors table CREATE TABLE colors ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), name VARCHAR(100) NOT NULL UNIQUE, hex VARCHAR(7) NOT NULL, cena_refill INTEGER DEFAULT 3499, cena_spulna INTEGER DEFAULT 3999, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP ); -- Filaments table CREATE TABLE filaments ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), tip VARCHAR(50) NOT NULL, finish VARCHAR(50) NOT NULL, boja VARCHAR(100) NOT NULL, boja_hex VARCHAR(7), refill INTEGER DEFAULT 0, spulna INTEGER DEFAULT 0, kolicina INTEGER DEFAULT 0, cena VARCHAR(50), created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, CONSTRAINT fk_color FOREIGN KEY (boja) REFERENCES colors(name) ON UPDATE CASCADE, CONSTRAINT check_kolicina CHECK (kolicina = refill + spulna) ); -- Create indexes for better performance CREATE INDEX idx_filaments_tip ON filaments(tip); CREATE INDEX idx_filaments_boja ON filaments(boja); CREATE INDEX idx_filaments_created_at ON filaments(created_at); -- Create updated_at trigger function CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$ language 'plpgsql'; -- Apply trigger to filaments table CREATE TRIGGER update_filaments_updated_at BEFORE UPDATE ON filaments FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- Apply trigger to colors table CREATE TRIGGER update_colors_updated_at BEFORE UPDATE ON colors FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); -- Default colors are now inserted by Bambu Lab colors migration