点餐小程序实战教程07员工管理,创建数据源及API


我们现在已经完成了顾客信息的注册,在我们的点餐系统中,除了有顾客外,还有员工。员工的角色分为服务员、收银员、后厨三种。为了很好的管理信息,我们先需要创建数据源来管理相关的数据。

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中输入如下代码

'use strict';
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的编写,需要灵活的应用自定义代码和云函数才能开发出想要的功能来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低代码布道师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值