我们现在已经完成了顾客信息的注册,在我们的点餐系统中,除了有顾客外,还有员工。员工的角色分为服务员、收银员、后厨三种。为了很好的管理信息,我们先需要创建数据源来管理相关的数据。
1 创建数据源
打开控制台,点击数据模型,点击+号创建数据源
添加一列,输入姓名,类型选择文本
继续添加一列,输入电话,类型选择电话
继续添加列,输入密码,类型选择文本
继续添加列,输入角色,类型选择枚举。枚举需要创建一个选项集,点击立即创建
选项集输入角色,分别添加服务员、收银员、后厨
继续添加列,输入邀请码,类型选择文本
继续添加列,输入审核状态,类型选择枚举
审核状态分为待审核、通过和不通过
我们员工注册的时候需要输入邀请码,我们需要增加一个邀请码的表来存储
添加一列,邀请码,类型选择文本
添加一列,是否使用,类型选择布尔值
2 开发API
我们开发一个后端的API用来完成员工的注册,点击我们的用户管理,点击编辑APIs方法
点击+号创建
输入方法的名称和标识,类型选择自定义代码
入参添加name、phone、password、role、invite_code
2.1 加密密码
增加一个API用来加密密码,类型选择云函数,点击管理云函数
选择新建云函数
输入函数名称
点击我们刚刚创建的函数名称
切换到函数代码
点击保存并安装依赖
点击复制
点击新建文件
输入package.json
输入如下的代码
{
"name": "app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {},
"author": "",
"license": "ISC",
"dependencies": {
"@cloudbase/node-sdk": "latest",
"bcryptjs":"latest"
}
}
在index.js中输入如下代码
;
const bcrypt = require('bcryptjs');
exports.main = async (event, context) => {
const { password } = event; // 从输入参数中获取 password
if (!password) {
return { status: 'error', message: '密码未提供' };
}
const salt = await bcrypt.genSalt(10); // 生成盐
const hashedPassword = await bcrypt.hash(password, salt); // 加密密码
return { status: 'success', hashedPassword };
};
先点击保存并安装依赖,然后点击测试,输入参数测试
然后选择我们的云函数,添加入参
点击方法测试,验证正确之后点击出参映射
2.2 验证邀请码是否有效
在我们的API中,我们单独写一个验证方法来验证邀请码是否有效,思路是调用查询多条的方法,传入邀请码和是否被使用过两个查询条件。如果找到了说明邀请码是有效的,没找到说明邀请码是无效的
async function validateInviteCode(invite_code,context) {
// 这里实现邀请码的验证逻辑
// 例如,查询数据库中是否存在该邀请码
const result = await context.callModel({
name: 'invite_codes_s3r45mp', // 数据模型标识
methodName: 'wedaGetRecordsV2', // 数据模型方法标识
params: {
// 筛选内容,查找与当前openid匹配的用户
filter: {
where: {
$and: [
{
code: {
$eq: invite_code,
},
},
{
is_used: {
$eq: false,
},
},
],
},
},
// 排序
orderBy: [
{
createdAt: "asc", // 创建时间,正序
},
{
updateBy: "desc", // 更新时间,倒序
},
],
// 返回字段选择
select: {
$master: true, // 返回主表
},
// 返回total字段
getCount: true,
// 页面大小
pageSize: 1, // 只需要一条记录
// 当前页面
pageNumber: 1,
},
});
return result.total > 0 ?result.records[0]:null; // 返回邀请码信息
}
2.3 全部逻辑
有了这两个方法,我们就可以编写整体逻辑了,全部代码
// 验证邀请码的函数
async function validateInviteCode(invite_code,context) {
// 这里实现邀请码的验证逻辑
// 例如,查询数据库中是否存在该邀请码
const result = await context.callModel({
name: 'invite_codes_s3r45mp', // 数据模型标识
methodName: 'wedaGetRecordsV2', // 数据模型方法标识
params: {
// 筛选内容,查找与当前openid匹配的用户
filter: {
where: {
$and: [
{
code: {
$eq: invite_code,
},
},
{
is_used: {
$eq: false,
},
},
],
},
},
// 排序
orderBy: [
{
createdAt: "asc", // 创建时间,正序
},
{
updateBy: "desc", // 更新时间,倒序
},
],
// 返回字段选择
select: {
$master: true, // 返回主表
},
// 返回total字段
getCount: true,
// 页面大小
pageSize: 1, // 只需要一条记录
// 当前页面
pageNumber: 1,
},
});
return result.total > 0 ?result.records[0]:null; // 返回邀请码信息
}
// 哈希密码的函数
async function hashPassword(password,context) {
const result = await context.callConnector({
name: 'userManager_ssztgij',
methodName: 'hashPassword',
params: {password:password}, // 方法入参
});
return result.hashedPassword;
}
module.exports = async function (params, context) {
const hashedPassword = await hashPassword(params.password,context); // 加密密码
console.log('Hashed Password:', hashedPassword);
// 验证邀请码
const inviteCodeInfo = await validateInviteCode(params.invite_code,context);
if (!inviteCodeInfo) {
return { status: 'error', message: '邀请码无效或已被使用' };
}
// 注册员工信息
try {
await context.callModel({
name: 'employee_5kkehvv', // 数据模型标识
methodName: 'wedaCreateV2', // 数据模型方法标识
params: {
data: {
name: params.name,
password: hashedPassword,
dh:params.phone,
role:params.role,
invite_code:params.invite_code,
shzt:"1"
},
},
});
await context.callModel({
name: 'invite_codes_s3r45mp', // 数据模型标识
methodName: 'wedaUpdateV2', // 数据模型方法标识
params: {
data: {
is_used: true,
},
// 筛选内容,筛选内容推荐使用编辑器数据筛选器生成
filter: {
where: {
$and: [
{
_id: {
$eq: inviteCodeInfo._id, // 更新单条时,推荐传入_id数据标识进行操作
},
},
],
},
},
},
});
return { status: 'success', message: '注册成功,等待审核' };
} catch (error) {
return { status: 'error', message: '注册失败', error };
}
};
总结
我们本篇讲解了员工注册的数据源创建以及后端API的编写,需要灵活的应用自定义代码和云函数才能开发出想要的功能来。