feat: init project with miniprogram, cloud functions and admin console
这个提交包含在:
@@ -0,0 +1,74 @@
|
||||
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 === 'GET' && path === '/api/v1/user/profile') {
|
||||
return await getProfile(event)
|
||||
}
|
||||
if (method === 'PUT' && path === '/api/v1/user/profile') {
|
||||
return await updateProfile(event, body)
|
||||
}
|
||||
|
||||
return RESPONSE.error(ERROR_CODES.PARAM_ERROR.code, 'unknown route')
|
||||
} catch (err) {
|
||||
console.error('user error:', err)
|
||||
return RESPONSE.error(ERROR_CODES.SERVER_ERROR.code, err.message)
|
||||
}
|
||||
}
|
||||
|
||||
async function getProfile(event) {
|
||||
var user = auth.extractUser(event)
|
||||
if (!user) return RESPONSE.error(ERROR_CODES.INVALID_TOKEN.code, ERROR_CODES.INVALID_TOKEN.message)
|
||||
|
||||
var users = await db.query(
|
||||
'SELECT id AS user_id, nickname, avatar_url AS avatar, phone, status FROM users WHERE id = ? AND deleted_at IS NULL LIMIT 1',
|
||||
[user.user_id]
|
||||
)
|
||||
if (users.length === 0) {
|
||||
return RESPONSE.error(ERROR_CODES.USER_NOT_FOUND.code, ERROR_CODES.USER_NOT_FOUND.message)
|
||||
}
|
||||
|
||||
var profile = users[0]
|
||||
|
||||
var bindings = await db.query(
|
||||
'SELECT COUNT(*) AS cnt FROM bindings WHERE user_id = ? AND status = 1',
|
||||
[user.user_id]
|
||||
)
|
||||
var bindTime = await db.query(
|
||||
'SELECT bound_at AS bind_time FROM bindings WHERE user_id = ? AND status = 1 ORDER BY bound_at ASC LIMIT 1',
|
||||
[user.user_id]
|
||||
)
|
||||
|
||||
profile.device_count = bindings[0].cnt
|
||||
profile.bind_time = bindTime.length > 0 ? bindTime[0].bind_time : null
|
||||
|
||||
return RESPONSE.success(profile)
|
||||
}
|
||||
|
||||
async function updateProfile(event, body) {
|
||||
var user = auth.extractUser(event)
|
||||
if (!user) return RESPONSE.error(ERROR_CODES.INVALID_TOKEN.code, ERROR_CODES.INVALID_TOKEN.message)
|
||||
|
||||
if (body.nickname) {
|
||||
await db.update(
|
||||
'UPDATE users SET nickname = ? WHERE id = ?',
|
||||
[body.nickname, user.user_id]
|
||||
)
|
||||
}
|
||||
|
||||
return RESPONSE.success({ message: 'success' })
|
||||
}
|
||||
|
||||
function parseBody(event) {
|
||||
if (event.body) {
|
||||
try { return JSON.parse(event.body) } catch (e) { return {} }
|
||||
}
|
||||
return event.queryStringParameters || {}
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户