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 || {} }