在第一次更新项目时发送电子邮件通知

本文关键字:电子邮件 通知 第一次 更新 新项目 | 更新日期: 2023-09-27 18:13:12

我想在项目被分配到类别时发送通知电子邮件,但它应该只在第一次发生时发生。对项目的后续类别分配不需要发出通知。

当一个类别被分配给一个项目时,有一个"链接"字段将被标记为true。尝试使用if (item.Linked == true)条件作为触发器,但每次添加或删除类别时都会发出通知。

下面是到目前为止的代码:
private void UpdateItemCategories(Item item, ItemViewModel viewModel)
{
    var itemCategories = item.Categories.ToList();
    foreach (var category in itemCategories)
    {
        if (!viewModel.Categories.Any(t => t.CategoryId == category.CategoryId))
        {
            item.Categories.Remove(category);
            if (issue.Solutions.Count == 0)
            {
                issue.Linked = false;
            }
        }
    }
    foreach (var category in viewModel.Categories)
    {
        if (!itemCategories.Any(t => t.CategoryId == category.CategoryId))
        {
            var itemCategory = category.ToCategory();
            db.Categories.Attach(itemCategory);
            item.Categories.Add(itemCategory);
            item.Linked = true;
        }
    }
    if (item.Linked == true)
    {
        //Send notification e-mail
        UserMailer.Notification(item).Send();
    }
}

很明显代码有问题。什么好主意吗?

在第一次更新项目时发送电子邮件通知

你的逻辑不正确。当一个项目类别被更新时,你应该检查项目类别是否第一次被更新。您可以通过简单地检查您的项目是否已经链接来检查。

修改代码:

private void UpdateItemCategories(Item item, ItemViewModel viewModel)
{
    //Check whether item is already linked with some category
    bool sendEmail;
    if(item.Linked == false)
    {
      sendEmail=true;
    }
    //Above code is for your understanding. you can simply use: bool sendEmail = !item.Linked;
    var itemCategories = item.Categories.ToList();
    foreach (var category in itemCategories)
    {
        if (!viewModel.Categories.Any(t => t.CategoryId == category.CategoryId))
        {
            item.Categories.Remove(category);
            item.Linked = false;
        }
    }
    foreach (var category in viewModel.Categories)
    {
        if (!itemCategories.Any(t => t.CategoryId == category.CategoryId))
        {
            var itemCategory = category.ToCategory();
            db.Categories.Attach(itemCategory);
            item.Categories.Add(itemCategory);
            item.Linked = true;
        }
    }
    if (sendEmail)
    {
        //Send notification e-mail
        UserMailer.Notification(item).Send();
    }
}