128 lines
2.7 KiB
Go
128 lines
2.7 KiB
Go
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
|
|
}
|