package mockdata import ( "database/sql" ) type MockDatabase struct { Key string `json:"key"` Name string `json:"name"` Description string `json:"description"` SchemaName string InitSQL string } func List() []MockDatabase { return []MockDatabase{ { Key: "shop", Name: "电商库", Description: "商品/订单/用户", SchemaName: "mock_shop", InitSQL: `CREATE TABLE IF NOT EXISTS users ( id INT PRIMARY KEY, name VARCHAR(64) NOT NULL ); CREATE TABLE IF NOT EXISTS products ( id INT PRIMARY KEY, name VARCHAR(128) NOT NULL, price DECIMAL(10,2) NOT NULL ); CREATE TABLE IF NOT EXISTS orders ( id INT PRIMARY KEY, user_id INT NOT NULL, created_at DATETIME NOT NULL ); CREATE TABLE IF NOT EXISTS order_items ( id INT PRIMARY KEY, order_id INT NOT NULL, product_id INT NOT NULL, quantity INT NOT NULL, unit_price DECIMAL(10,2) NOT NULL ); DELETE FROM users; DELETE FROM products; DELETE FROM orders; DELETE FROM order_items; INSERT INTO users (id, name) VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Carol'); INSERT INTO products (id, name, price) VALUES (1, 'Keyboard', 199.00), (2, 'Mouse', 49.00), (3, 'Monitor', 899.00), (4, 'USB-C Cable', 19.00), (5, 'Laptop Stand', 129.00); INSERT INTO orders (id, user_id, created_at) VALUES (1, 1, '2025-01-01 10:00:00'), (2, 1, '2025-01-05 12:00:00'), (3, 2, '2025-02-10 09:30:00'); INSERT INTO order_items (id, order_id, product_id, quantity, unit_price) VALUES (1, 1, 1, 1, 199.00), (2, 1, 2, 2, 49.00), (3, 2, 3, 1, 899.00), (4, 2, 4, 3, 19.00), (5, 3, 2, 1, 49.00), (6, 3, 5, 1, 129.00); `, }, { Key: "hr", Name: "人事库", Description: "部门/员工/薪资", SchemaName: "mock_hr", InitSQL: `CREATE TABLE IF NOT EXISTS departments ( id INT PRIMARY KEY, name VARCHAR(64) NOT NULL ); CREATE TABLE IF NOT EXISTS employees ( id INT PRIMARY KEY, department_id INT NOT NULL, name VARCHAR(64) NOT NULL, salary INT NOT NULL ); DELETE FROM employees; DELETE FROM departments; INSERT INTO departments (id, name) VALUES (1, 'Engineering'), (2, 'Sales'), (3, 'HR'); INSERT INTO employees (id, department_id, name, salary) VALUES (1, 1, 'Eve', 30000), (2, 1, 'Mallory', 42000), (3, 2, 'Trent', 28000), (4, 2, 'Peggy', 35000), (5, 3, 'Victor', 26000); `, }, } } func EnsureMockSchemas(mysql *sql.DB) error { for _, m := range List() { if _, err := mysql.Exec("CREATE DATABASE IF NOT EXISTS " + m.SchemaName + " CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"); err != nil { return err } if _, err := mysql.Exec("USE " + m.SchemaName); err != nil { return err } if _, err := mysql.Exec(m.InitSQL); err != nil { return err } } return nil }