【问题标题】:Get number of requisitions made by the user in a day获取用户一天内的申请数量
【发布时间】:2022-11-06 01:30:42
【问题描述】:

我的 API 中有一个 POST ENDPOINT,我想在其中注册工人制作的所有工作日志。

export const registerPoint = async (req: Request, res: Response) => {

const user = res.locals.decoded;
const {id} = user;

const ponto = new Ponto;

ponto.datePoint = new Date();
ponto.user_id = id;

//this numPoint should restart every day for that user...
ponto.numPoint = 1; 


res.json({ msg: "Register point Route", user, id });
return;

}

我如何控制工人提出此申请的次数? 我想控制变量 numPoint,当用户提出这个申请时,它应该增加 01,然后在一天的最后一天将它返回到 0。

任何人都知道可以处理此问题的解决方案或 npm 包吗?

编辑:我用 SEQUELIZE + MYSQL 存储所有数据。

【问题讨论】:

  • 你是什​​么意思控制?您想限制端点被命中的次数吗?
  • 您打算如何存储数据?您可以考虑使用数据库,因为您需要将申请数据存储在某处。您不能将其保存在内存中,因为当您重新启动应用程序时,数据将会丢失。
  • @RinkeshP 不限制,但控制例如名为 John 的用户注册他的点的次数。点的定义:(例如点是他进入工作的时间,离开吃午饭,然后回到工作,然后是他离开工作的时间)
  • @GuyHagemans 实际上使用 MYSQL 和 sequelize。我已经编辑了问题并输入了该信息。谢谢
  • @BrenoSantin 好的,这是一个非常好的开始!从概念上讲,您可以做的是首先为该特定客户获取价值。如果存在,请在数字上加一。如果它尚不存在,请在数据库中创建值为 1 的条目。请注意您提到您计划增加 01,但这并不是一个很好的数字。请使用整数,整数应该是整数(即 1、2、3 等)。您的 cronjob(请参阅下面的答案)可以每晚将所有值重置为 0。如果您在问题中分享您的 sequalize 代码,如果您愿意,我可以查看。

标签: node.js typescript sequelize.js backend


【解决方案1】:

作为起点,您可以使用简单的数据库来存储数据,例如 https://www.npmjs.com/package/sqlite3 或 MySQL。

每天运行作业,您可以考虑 https://www.npmjs.com/package/node-cron ,例如有一个日常作业(在 API 调用函数之外);

var cron = require('node-cron');

cron.schedule('0 0 1 * *', () => {
  console.log('running every minute to 1 from 5');
});

【讨论】:

    【解决方案2】:

    据我了解,您需要一个日志记录/审计跟踪机制。由于您使用的是 MySQL,因此您可以创建一个包含 (datetime, user_id, action) 之类的列的新表。每次用户执行任何操作时,都会在此处记录。然后您可以通过聚合轻松找出计数。您不需要为任何用户重置任何计数,如果给定日期的数据不存在,那么它的计数将为 0。

    【讨论】:

      【解决方案3】:

      我已经制定了一个解决方案,它适用于我想要的。

      下面是解决方案:

      export const registerPoint = async (req: Request, res: Response) => {
      
      const decodedUser = res.locals.decoded;
      const user = await User.findByPk(decodedUser.id);
      
      const TODAY_START = new Date().setHours(0, 0, 0, 0);
      const NOW = new Date();
      
      const markedPointsOfDay = await Ponto.findAll({
          where: {
              datePoint: {
                  [Op.gt]: TODAY_START,
                  [Op.lt]: NOW
              },
          }
      });
      
      const markedPointsOfDayByUser = await Ponto.findAll({
          where: {
              datePoint: {
                  [Op.gt]: TODAY_START,
                  [Op.lt]: NOW
              },
              UserId: (user !== null) ? user.id : decodedUser.id
          }
      })
      
      
      
      if (!markedPointsOfDay || markedPointsOfDay.length === 0) {
          const ponto = new Ponto;
          ponto.datePoint = new Date();
          if (user) {
              console.log(user)
              ponto.UserId = user.id as number;
              console.log(ponto.UserId);
          }
      
          if (markedPointsOfDayByUser) {
              ponto.numPoint = markedPointsOfDayByUser.length + 1;
          }
      
          const newPoint = await ponto.save();
          res.json({ msg: "Ponto registrado com sucesso", msg2: "Caiu no IF de quando nao encontrou ponto do DIA", newPoint })
          return;
      
      }
      
      if (markedPointsOfDay) {
      
          const ponto = new Ponto;
          ponto.datePoint = new Date();
      
          if (user) {
              ponto.UserId = user.id as number;
          }
      
          if (markedPointsOfDayByUser) {
              ponto.numPoint = markedPointsOfDayByUser.length + 1;
          } 
          
      
          const newPoint = await ponto.save();
          res.json({ msg: "ponto registrado", markedPoint: newPoint, markedPointsOfDayByUser });
          return;
      
      
      }
      
      return;
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多