You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MessageService.cs 3.2KB

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