refactor(backend): 重构动物相关 API 接口

- 更新了动物数据结构和相关类型定义
- 优化了动物列表、详情、创建、更新和删除接口
- 新增了更新动物状态接口
- 移除了与认领记录相关的接口
-调整了 API 响应结构
This commit is contained in:
ylweng
2025-08-31 00:45:46 +08:00
parent 0cad74b06f
commit 8e5295b572
111 changed files with 15290 additions and 1972 deletions

View File

@@ -77,7 +77,7 @@ CREATE TABLE IF NOT EXISTS jiebandata.travel_plans (
interests TEXT,
visibility ENUM('public', 'friends', 'private') NOT NULL DEFAULT 'public',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENTESTAMP ON UPDATE CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
INDEX idx_user_id (user_id),
INDEX idx_destination (destination),
@@ -85,11 +85,32 @@ CREATE TABLE IF NOT EXISTS jiebandata.travel_plans (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
`;
// 创建管理员表的SQL语句
const createAdminsTableSQL = `
CREATE TABLE IF NOT EXISTS jiebandata.admins (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100),
nickname VARCHAR(50),
avatar VARCHAR(255),
role VARCHAR(20) NOT NULL DEFAULT 'admin',
status TINYINT(1) NOT NULL DEFAULT 1,
last_login DATETIME,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_username (username),
INDEX idx_role (role),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
`;
// 所有表创建语句
const tableCreationSQLs = [
createUsersTableSQL,
createMerchantsTableSQL,
createTravelPlansTableSQL
createTravelPlansTableSQL,
createAdminsTableSQL
];
function executeSQL(connection, sql, description) {
@@ -149,6 +170,12 @@ async function initializeDatabase(config) {
('test_openid_2', '测试用户2', 'https://example.com/avatar2.jpg', 'female', '13800138002', 'user2@example.com')
`, '插入示例用户数据');
// 插入示例管理员
await executeSQL(connection, `
INSERT IGNORE INTO admins (username, password, email, nickname, role) VALUES
('admin', '$2a$10$rZ.r/.H0he7d.9T3.1E3qOeP.UZvF0.U6BQ35ENcQbLQzvEuh3dOq', 'admin@example.com', '超级管理员', 'admin')
`, '插入示例管理员数据');
// 验证数据插入
const [users] = await new Promise((resolve, reject) => {
connection.query('SELECT COUNT(*) as count FROM users', (err, results) => {