Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

MessageService.cs 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using AutoMapper;
  6. using Microsoft.EntityFrameworkCore;
  7. using SecureSharing.Business.Dtos;
  8. using SecureSharing.Business.Infrastructure;
  9. using SecureSharing.Business.Interfaces;
  10. using SecureSharing.Data.Data;
  11. using SecureSharing.Data.DbContexts;
  12. namespace SecureSharing.Business.Services;
  13. public sealed class MessageService : IMessageService
  14. {
  15. private readonly AppDbContext _dbContext;
  16. private readonly IMapper _mapper;
  17. public MessageService(AppDbContext dbContext, IMapper mapper)
  18. {
  19. _dbContext = dbContext;
  20. _mapper = mapper;
  21. }
  22. public async Task<int> Create(MessageDto messageDto, PeriodOfValidity chosenPeriod)
  23. {
  24. var message = _mapper.Map<Message>(messageDto);
  25. switch (chosenPeriod)
  26. {
  27. case PeriodOfValidity.ONE_TIME:
  28. message.ExpiryDate = null;
  29. break;
  30. case PeriodOfValidity.ONE_DAY:
  31. message.ExpiryDate = DateTime.UtcNow.AddMinutes(1);
  32. break;
  33. case PeriodOfValidity.ONE_HOUR:
  34. message.ExpiryDate = DateTime.UtcNow.AddHours(1);
  35. break;
  36. case PeriodOfValidity.ONE_WEEK:
  37. message.ExpiryDate = DateTime.UtcNow.AddDays(7);
  38. break;
  39. default:
  40. message.ExpiryDate = null;
  41. break;
  42. }
  43. await _dbContext.Messages.AddAsync(message);
  44. await _dbContext.SaveChangesAsync();
  45. return message.Id;
  46. }
  47. public async Task DeleteExpiredMessages()
  48. {
  49. var result = await _dbContext.Messages
  50. .Where(m => (m.ExpiryDate != null && m.ExpiryDate <= DateTime.UtcNow) || !m.IsValid).ToListAsync();
  51. _dbContext.RemoveRange(result);
  52. await _dbContext.SaveChangesAsync();
  53. }
  54. public async Task InvalidateMessage(int id)
  55. {
  56. var message = await _dbContext.Messages.Where(m => m.Id == id).FirstOrDefaultAsync();
  57. message.IsValid = false;
  58. await _dbContext.SaveChangesAsync();
  59. }
  60. public async Task<bool> Delete(int messageId)
  61. {
  62. var messageDto = await GetById(messageId);
  63. if (messageDto == null) return false;
  64. _dbContext.Set<Message>().Remove(_mapper.Map<Message>(messageDto));
  65. try
  66. {
  67. await _dbContext.SaveChangesAsync();
  68. }
  69. catch (DbUpdateException)
  70. {
  71. return false;
  72. }
  73. return true;
  74. }
  75. public async Task<IEnumerable<MessageDto>> GetAll()
  76. {
  77. var result = await _dbContext.Messages.AsNoTracking().ToListAsync();
  78. var mappedResult = _mapper.Map<IEnumerable<MessageDto>>(result);
  79. return mappedResult;
  80. }
  81. public async Task<MessageDto> GetById(int messageId)
  82. {
  83. var result = await _dbContext.Messages.AsNoTracking().FirstOrDefaultAsync(x => x.Id == messageId);
  84. var mappedResult = _mapper.Map<MessageDto>(result);
  85. return mappedResult;
  86. }
  87. public async Task Update(MessageDto messageDto)
  88. {
  89. var a = _dbContext.Messages.Update(_mapper.Map<Message>(messageDto));
  90. await _dbContext.SaveChangesAsync();
  91. }
  92. }