Add user auth, cart, checkout and personal account for guests and registered users
This commit is contained in:
@@ -33,6 +33,50 @@ func Migrate(ctx context.Context, pool *pgxpool.Pool) error {
|
||||
visit_date DATE NOT NULL DEFAULT CURRENT_DATE
|
||||
)`,
|
||||
`INSERT INTO site_stats (id) VALUES (1) ON CONFLICT (id) DO NOTHING`,
|
||||
`CREATE TABLE IF NOT EXISTS users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
email VARCHAR(255) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
name VARCHAR(255) NOT NULL DEFAULT '',
|
||||
phone VARCHAR(50) NOT NULL DEFAULT '',
|
||||
address TEXT NOT NULL DEFAULT '',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
)`,
|
||||
`CREATE TABLE IF NOT EXISTS carts (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INT REFERENCES users(id) ON DELETE CASCADE,
|
||||
session_key VARCHAR(64) NOT NULL DEFAULT '',
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
)`,
|
||||
`CREATE UNIQUE INDEX IF NOT EXISTS idx_carts_user ON carts (user_id) WHERE user_id IS NOT NULL`,
|
||||
`CREATE UNIQUE INDEX IF NOT EXISTS idx_carts_session ON carts (session_key) WHERE user_id IS NULL`,
|
||||
`CREATE TABLE IF NOT EXISTS cart_items (
|
||||
id SERIAL PRIMARY KEY,
|
||||
cart_id INT NOT NULL REFERENCES carts(id) ON DELETE CASCADE,
|
||||
product_id INT NOT NULL REFERENCES products(id) ON DELETE CASCADE,
|
||||
quantity INT NOT NULL DEFAULT 1 CHECK (quantity > 0),
|
||||
UNIQUE (cart_id, product_id)
|
||||
)`,
|
||||
`CREATE TABLE IF NOT EXISTS orders (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INT REFERENCES users(id) ON DELETE SET NULL,
|
||||
guest_name VARCHAR(255) NOT NULL DEFAULT '',
|
||||
guest_email VARCHAR(255) NOT NULL DEFAULT '',
|
||||
guest_phone VARCHAR(50) NOT NULL DEFAULT '',
|
||||
address TEXT NOT NULL DEFAULT '',
|
||||
total NUMERIC(10,2) NOT NULL DEFAULT 0,
|
||||
status VARCHAR(50) NOT NULL DEFAULT 'new',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
)`,
|
||||
`CREATE TABLE IF NOT EXISTS order_items (
|
||||
id SERIAL PRIMARY KEY,
|
||||
order_id INT NOT NULL REFERENCES orders(id) ON DELETE CASCADE,
|
||||
product_id INT NOT NULL,
|
||||
product_name VARCHAR(255) NOT NULL,
|
||||
price NUMERIC(10,2) NOT NULL,
|
||||
quantity INT NOT NULL CHECK (quantity > 0)
|
||||
)`,
|
||||
`CREATE INDEX IF NOT EXISTS idx_orders_user ON orders (user_id)`,
|
||||
}
|
||||
|
||||
for _, q := range queries {
|
||||
|
||||
Reference in New Issue
Block a user