Files
percovitrine/includes/db.php
T

52 lines
1.6 KiB
PHP

<?php
$DB_PATH = getenv('DB_PATH') ?: '/data/vitrine.db';
$UPLOAD_DIR = getenv('UPLOAD_DIR') ?: '/data/uploads/';
if (!is_dir($UPLOAD_DIR)) @mkdir($UPLOAD_DIR, 0755, true);
if (!is_dir(dirname($DB_PATH))) @mkdir(dirname($DB_PATH), 0755, true);
$pdo = new PDO('sqlite:' . $DB_PATH, null, null, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
$pdo->exec("PRAGMA journal_mode=WAL; PRAGMA foreign_keys=ON;");
$pdo->exec("
CREATE TABLE IF NOT EXISTS categories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
description TEXT DEFAULT '',
price REAL DEFAULT 0,
shipping REAL DEFAULT 0,
sku TEXT DEFAULT '',
category_id INTEGER REFERENCES categories(id) ON DELETE SET NULL,
status TEXT DEFAULT 'brouillon' CHECK(status IN ('brouillon','prêt','publié')),
etsy_listing_id TEXT DEFAULT '',
tags TEXT DEFAULT '',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS product_media (
id INTEGER PRIMARY KEY AUTOINCREMENT,
product_id INTEGER NOT NULL REFERENCES products(id) ON DELETE CASCADE,
type TEXT DEFAULT 'image' CHECK(type IN ('image','video')),
filename TEXT,
original_name TEXT,
video_url TEXT,
sort_order INTEGER DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS settings (
key TEXT PRIMARY KEY,
value TEXT DEFAULT ''
);
");