Files
shop-go/internal/database/migrate.go
T

45 lines
1.5 KiB
Go

package database
import (
"context"
"github.com/jackc/pgx/v5/pgxpool"
)
func Migrate(ctx context.Context, pool *pgxpool.Pool) error {
queries := []string{
`CREATE TABLE IF NOT EXISTS admins (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
)`,
`ALTER TABLE products ADD COLUMN IF NOT EXISTS details TEXT NOT NULL DEFAULT ''`,
`ALTER TABLE products ADD COLUMN IF NOT EXISTS is_active BOOLEAN NOT NULL DEFAULT true`,
`ALTER TABLE products ADD COLUMN IF NOT EXISTS updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()`,
`CREATE TABLE IF NOT EXISTS product_images (
id SERIAL PRIMARY KEY,
product_id INT NOT NULL REFERENCES products(id) ON DELETE CASCADE,
file_path VARCHAR(512) NOT NULL,
is_primary BOOLEAN NOT NULL DEFAULT false,
sort_order INT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
)`,
`CREATE INDEX IF NOT EXISTS idx_product_images_product ON product_images (product_id)`,
`CREATE TABLE IF NOT EXISTS site_stats (
id INT PRIMARY KEY DEFAULT 1 CHECK (id = 1),
total_visits BIGINT NOT NULL DEFAULT 0,
today_visits INT NOT NULL DEFAULT 0,
visit_date DATE NOT NULL DEFAULT CURRENT_DATE
)`,
`INSERT INTO site_stats (id) VALUES (1) ON CONFLICT (id) DO NOTHING`,
}
for _, q := range queries {
if _, err := pool.Exec(ctx, q); err != nil {
return err
}
}
return nil
}