< Summary

Class:WinSolutions.Sveta.Server.Services.Implements.EmailService
Assembly:WinSolutions.Sveta.Server
File(s):/opt/dev/sveta_api_build/WinSolutions.Sveta.Server/Services/Implements/EmailService.cs
Covered lines:15
Uncovered lines:74
Coverable lines:89
Total lines:171
Line coverage:16.8% (15 of 89)
Covered branches:7
Total branches:50
Branch coverage:14% (7 of 50)

Metrics

MethodLine coverage Branch coverage
.ctor(...)100%100%
Create()0%0%
Create()0%0%
Create()50%58.33%
Create()0%0%
Update()0%100%
GetEmail()0%100%
GetEmailsForJob()0%0%

File(s)

/opt/dev/sveta_api_build/WinSolutions.Sveta.Server/Services/Implements/EmailService.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using Microsoft.Extensions.Logging;
 5using System.Threading.Tasks;
 6using WinSolutions.Sveta.Server.Services.Interfaces;
 7using WinSolutions.Sveta.Server.Data.DataModel.Contexts;
 8using WinSolutions.Sveta.Server.Data.DataModel.Entities;
 9using WinSolutions.Sveta.Common;
 10using Microsoft.EntityFrameworkCore;
 11using System.Linq;
 12using WinSolutions.Sveta.Server.Data.DataModel.Kinds;
 13
 14namespace WinSolutions.Sveta.Server.Services.Implements
 15{
 16    public class EmailService: SvetaServiceBase, IEmailService
 17    {
 18        private readonly SvetaDbContext _db;
 19        private readonly ILogger<EmailService> _logger;
 20
 21        public EmailService(SvetaDbContext db, ILogger<EmailService> logger, IAuthenticationService authenticationServic
 18622            : base(authenticationService)
 18623        {
 18624            _db = db;
 18625            _logger = logger;
 18626        }
 27
 28        /// <summary>
 29        /// Создать запись
 30        /// </summary>
 31        /// <param name="subject">Тема письма</param>
 32        /// <param name="body">Тело письма</param>
 33        /// <param name="receiver">получатель</param>
 34        /// <param name="attach">вложение с полным путем</param>
 35        /// <returns></returns>
 36        public async Task Create(string subject, string body, User receiver, string attach = null)
 037        {
 038            if (string.IsNullOrWhiteSpace(receiver?.Email) || string.IsNullOrWhiteSpace(subject))
 039                return;
 040            await _db.Emails.AddAsync(new Email()
 041            {
 042                Subject = subject,
 043                Body = body,
 044                Status = (int)EmailStatus.InQueue,
 045                Receiver = receiver.Email,
 046                Attachment = attach
 047            });
 048            await _db.SaveChangesAsync(CurrentUserId);
 049        }
 50
 51        /// <summary>
 52        /// Создать запись
 53        /// </summary>
 54        /// <param name="subject">Тема письма</param>
 55        /// <param name="body">Тело письма</param>
 56        /// <param name="receiver">получатель</param>
 57        /// <param name="attach">вложение с полным путем</param>
 58        /// <returns></returns>
 59        public async Task Create(string subject, string body, string receiver, string attach = null)
 060        {
 061            if (string.IsNullOrWhiteSpace(receiver) || string.IsNullOrWhiteSpace(subject))
 062                return;
 063            await _db.Emails.AddAsync(new Email()
 064            {
 065                Subject = subject,
 066                Body = body,
 067                Status = (int)EmailStatus.InQueue,
 068                Receiver = receiver,
 069                Attachment = attach
 070            });
 071            await _db.SaveChangesAsync(CurrentUserId);
 072        }
 73
 74        /// <summary>
 75        /// Создать запись
 76        /// </summary>
 77        /// <param name="subject">Тема письма</param>
 78        /// <param name="body">Тело письма</param>
 79        /// <param name="receiver">список получателей</param>
 80        /// <param name="attach">вложение с полным путем</param>
 81        /// <returns></returns>
 82        public async Task Create(string subject, string body, List<string> receivers, string attach = null)
 56083        {
 56084            if (receivers?.Count == 0 || string.IsNullOrWhiteSpace(subject))
 085                return;
 56086            var emails = new List<Email>() { };
 392087            foreach (var item in receivers)
 112088            {
 112089                if (string.IsNullOrWhiteSpace(item))
 112090                    continue;
 091                emails.Add(new Email()
 092                {
 093                    Subject = subject,
 094                    Body = body,
 095                    Status = (int)EmailStatus.InQueue,
 096                    Receiver = item,
 097                    Attachment = attach
 098                });
 099            }
 560100            await _db.Emails.AddRangeAsync(emails.ToArray());
 560101            await _db.SaveChangesAsync(CurrentUserId);
 560102        }
 103
 104        /// <summary>
 105        /// Создать запись
 106        /// </summary>
 107        /// <param name="subject">Тема письма</param>
 108        /// <param name="body">Тело письма</param>
 109        /// <param name="receiver">список получателей</param>
 110        /// <param name="attach">вложение с полным путем</param>
 111        /// <returns></returns>
 112        public async Task Create(string subject, string body, List<User> receivers, string attach = null)
 0113        {
 0114            if (receivers?.Count == 0 || string.IsNullOrWhiteSpace(subject))
 0115                return;
 0116            var emails = new List<Email>() { };
 0117            foreach (var item in receivers)
 0118            {
 0119                if (string.IsNullOrWhiteSpace(item?.Email))
 0120                    continue;
 0121                emails.Add(new Email()
 0122                {
 0123                    Subject = subject,
 0124                    Body = body,
 0125                    Status = (int)EmailStatus.InQueue,
 0126                    Receiver = item.Email,
 0127                    Attachment = attach
 0128                });
 0129            }
 0130            await _db.Emails.AddRangeAsync(emails.ToArray());
 0131            await _db.SaveChangesAsync(CurrentUserId);
 0132        }
 133
 134        /// <summary>
 135        /// обновить записиь
 136        /// </summary>
 137        /// <param name="data">запись</param>
 138        /// <returns></returns>
 139        public async Task Update(Email data)
 0140        {
 0141            _db.Emails.Update(data);
 0142            await _db.SaveChangesAsync(CurrentUserId);
 0143        }
 144
 145        /// <summary>
 146        /// получить запись
 147        /// </summary>
 148        /// <param name="id">id записи</param>
 149        /// <returns></returns>
 0150        public async Task<Email> GetEmail(long id) => await _db.Emails.FirstOrDefaultAsync(x => !x.IsDeleted && x.Id == 
 151
 152        /// <summary>
 153        /// Получить список записей для обработки джобом отправки сообщений
 154        /// </summary>
 155        /// <returns></returns>
 156        public async Task<List<Email>> GetEmailsForJob()
 0157        {
 0158            var emails = await _db.Emails
 0159                .Where(x => x.Status == (int)EmailStatus.Error || x.Status == (int)EmailStatus.InQueue)
 0160                .Where(x => !x.IsDeleted).ToListAsync();
 0161            if (emails.Count > 0)
 0162            {
 0163                foreach (var email in emails)
 0164                    email.Status = (int)EmailStatus.Captured;
 0165                _db.Emails.UpdateRange(emails);
 0166                await _db.SaveChangesAsync(CurrentUserId);
 0167            }
 0168            return emails;
 0169        }
 170    }
 171}