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

@@ -2,18 +2,21 @@ const mysql = require('mysql2/promise');
// 数据库配置
const dbConfig = {
host: process.env.DB_HOST || '192.168.0.240',
port: process.env.DB_PORT || 3306,
host: process.env.DB_HOST || '129.211.213.226',
port: process.env.DB_PORT || 9527,
user: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD || 'aiot$Aiot123',
password: process.env.DB_PASSWORD || 'aiotAiot123!',
database: process.env.DB_NAME || 'jiebandata',
connectionLimit: 10,
// 移除无效的配置选项 acquireTimeout 和 timeout
charset: 'utf8mb4',
timezone: '+08:00',
// 连接池配置
waitForConnections: true,
queueLimit: 0
queueLimit: 0,
// 超时配置
connectTimeout: 10000, // 10秒连接超时
acquireTimeout: 10000, // 10秒获取连接超时
timeout: 10000 // 10秒查询超时
};
// 创建连接池
@@ -33,41 +36,105 @@ async function testConnection() {
}
// 执行查询
async function query(sql, params = []) {
const query = async (sql, params = []) => {
let connection;
try {
const [rows] = await pool.execute(sql, params);
return rows;
connection = await pool.getConnection();
const [results] = await connection.execute(sql, params);
connection.release();
return results;
} catch (error) {
console.error('数据库查询错误:', error.message);
if (connection) {
connection.release();
}
throw error;
}
}
};
// 执行事务
async function transaction(callback) {
const connection = await pool.getConnection();
// 事务处理
const transaction = async (callback) => {
let connection;
try {
connection = await pool.getConnection();
await connection.beginTransaction();
const result = await callback(connection);
await connection.commit();
connection.release();
return result;
} catch (error) {
await connection.rollback();
if (connection) {
await connection.rollback();
connection.release();
}
throw error;
} finally {
connection.release();
}
}
};
// 关闭连接池
async function closePool() {
await pool.end();
try {
await pool.end();
console.log('✅ MySQL连接池已关闭');
} catch (error) {
console.error('❌ 关闭MySQL连接池时出错:', error.message);
}
}
// 管理员数据库操作
const adminDB = {
// 根据用户名查找管理员
findByUsername: async (username) => {
const sql = 'SELECT * FROM admins WHERE username = ?';
const results = await query(sql, [username]);
return results[0];
},
// 根据ID查找管理员
findById: async (id) => {
const sql = 'SELECT * FROM admins WHERE id = ?';
const results = await query(sql, [id]);
return results[0];
},
// 创建管理员
create: async (adminData) => {
const keys = Object.keys(adminData);
const values = Object.values(adminData);
const placeholders = keys.map(() => '?').join(', ');
const sql = `INSERT INTO admins (${keys.join(', ')}) VALUES (${placeholders})`;
const result = await query(sql, values);
return result.insertId;
},
// 更新管理员最后登录时间
updateLastLogin: async (id) => {
const sql = 'UPDATE admins SET last_login = CURRENT_TIMESTAMP WHERE id = ?';
await query(sql, [id]);
},
// 更新管理员信息
update: async (id, adminData) => {
const keys = Object.keys(adminData);
const values = Object.values(adminData);
const setClause = keys.map(key => `${key} = ?`).join(', ');
const sql = `UPDATE admins SET ${setClause} WHERE id = ?`;
await query(sql, [...values, id]);
},
// 删除管理员
delete: async (id) => {
const sql = 'DELETE FROM admins WHERE id = ?';
await query(sql, [id]);
}
};
module.exports = {
pool,
query,
transaction,
testConnection,
closePool
closePool,
adminDB
};