feat: init project with miniprogram, cloud functions and admin console

这个提交包含在:
Guoguo
2026-04-22 21:24:20 +08:00
当前提交 a84e37a6e2
修改 106 个文件,包含 5902 行新增0 行删除
+130
查看文件
@@ -0,0 +1,130 @@
var db = require('../../common/db')
var auth = require('../../common/auth')
var RESPONSE = require('../../common/response').RESPONSE
var ERROR_CODES = require('../../common/response').ERROR_CODES
exports.main_handler = async function (event) {
try {
var method = event.httpMethod || 'GET'
var path = event.path || ''
var body = parseBody(event)
if (method === 'POST' && path === '/api/v1/treatment/sync') {
return await syncRecord(event, body)
}
if (method === 'GET' && path === '/api/v1/treatment/history') {
return await getHistory(event, body)
}
return RESPONSE.error(ERROR_CODES.PARAM_ERROR.code, 'unknown route')
} catch (err) {
console.error('treatment error:', err)
return RESPONSE.error(ERROR_CODES.SERVER_ERROR.code, err.message)
}
}
async function syncRecord(event, body) {
var user = auth.extractUser(event)
if (!user) return RESPONSE.error(ERROR_CODES.INVALID_TOKEN.code, ERROR_CODES.INVALID_TOKEN.message)
if (!body.session_id || !body.device_id) {
return RESPONSE.error(ERROR_CODES.PARAM_ERROR.code, 'missing session_id or device_id')
}
var devices = await db.query(
'SELECT id FROM devices WHERE device_id = ? AND deleted_at IS NULL LIMIT 1',
[body.device_id]
)
if (devices.length === 0) {
return RESPONSE.error(ERROR_CODES.DEVICE_NOT_FOUND.code, ERROR_CODES.DEVICE_NOT_FOUND.message)
}
var devicePkId = devices[0].id
var existingSession = await db.query(
'SELECT id FROM sessions WHERE session_id = ? LIMIT 1',
[body.session_id]
)
if (existingSession.length === 0) {
await db.insert(
'INSERT INTO sessions (session_id, user_id, device_id, status, started_at, ended_at) VALUES (?, ?, ?, 2, ?, ?)',
[
body.session_id,
user.user_id,
devicePkId,
body.start_time ? new Date(body.start_time).toISOString().slice(0, 19).replace('T', ' ') : null,
body.end_time ? new Date(body.end_time).toISOString().slice(0, 19).replace('T', ' ') : null
]
)
}
var existingRecord = await db.query(
'SELECT id FROM treatment_records WHERE session_id = ? LIMIT 1',
[body.session_id]
)
if (existingRecord.length > 0) {
return RESPONSE.success({ record_id: existingRecord[0].id })
}
var result = await db.insert(
'INSERT INTO treatment_records (session_id, user_id, device_id, regions, total_duration_ms, mode, avg_pd, sync_status, synced_at, started_at, ended_at) ' +
'VALUES (?, ?, ?, ?, ?, ?, ?, 2, NOW(), ?, ?)',
[
body.session_id,
user.user_id,
devicePkId,
body.regions || null,
body.total_duration_ms || null,
body.mode !== undefined ? body.mode : null,
body.avg_pd || null,
body.start_time ? new Date(body.start_time).toISOString().slice(0, 19).replace('T', ' ') : null,
body.end_time ? new Date(body.end_time).toISOString().slice(0, 19).replace('T', ' ') : null
]
)
if (body.pd_data && Array.isArray(body.pd_data)) {
for (var i = 0; i < body.pd_data.length; i++) {
var pd = body.pd_data[i]
await db.insert(
'INSERT INTO pd_data (session_id, device_id, region_name, pd_value, recorded_at) VALUES (?, ?, ?, ?, ?)',
[body.session_id, devicePkId, pd.name, pd.pd || null, new Date().toISOString().slice(0, 19).replace('T', ' ')]
)
}
}
return RESPONSE.success({ record_id: result.insertId })
}
async function getHistory(event, body) {
var user = auth.extractUser(event)
if (!user) return RESPONSE.error(ERROR_CODES.INVALID_TOKEN.code, ERROR_CODES.INVALID_TOKEN.message)
var page = parseInt(body.page) || 1
var pageSize = parseInt(body.page_size) || 20
var offset = (page - 1) * pageSize
var totalResult = await db.query(
'SELECT COUNT(*) AS cnt FROM treatment_records WHERE user_id = ?',
[user.user_id]
)
var total = totalResult[0].cnt
var records = await db.query(
'SELECT tr.id AS record_id, tr.session_id, tr.regions, tr.total_duration_ms, tr.mode, tr.avg_pd, tr.started_at AS start_time, tr.ended_at AS end_time, d.device_id, d.device_name ' +
'FROM treatment_records tr ' +
'JOIN devices d ON tr.device_id = d.id ' +
'WHERE tr.user_id = ? ' +
'ORDER BY tr.started_at DESC LIMIT ? OFFSET ?',
[user.user_id, pageSize, offset]
)
return RESPONSE.paginate(records, total, page, pageSize)
}
function parseBody(event) {
if (event.body) {
try { return JSON.parse(event.body) } catch (e) { return {} }
}
return event.queryStringParameters || {}
}