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.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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.AddDays(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)
  37. .ToListAsync();
  38. var toReturn = result.Select(x => x.Code).ToList();
  39. _dbContext.RemoveRange(result);
  40. await _dbContext.SaveChangesAsync();
  41. return toReturn;
  42. }
  43. public async Task InvalidateMessage(int id)
  44. {
  45. var message = await _dbContext.Messages
  46. .Where(m => m.Id == id)
  47. .FirstOrDefaultAsync();
  48. message!.IsValid = false;
  49. await _dbContext.SaveChangesAsync();
  50. }
  51. public async Task<bool> Delete(int id)
  52. {
  53. var messageDto = await GetById(id);
  54. if (messageDto is null)
  55. return false;
  56. _dbContext.Messages.Remove(_mapper.Map<Message>(messageDto));
  57. try
  58. {
  59. await _dbContext.SaveChangesAsync();
  60. }
  61. catch (DbUpdateException)
  62. {
  63. return false;
  64. }
  65. return true;
  66. }
  67. public async Task<IEnumerable<MessageDto>> GetAll()
  68. {
  69. var result = await _dbContext.Messages
  70. .AsNoTracking()
  71. .ToListAsync();
  72. var mappedResult = _mapper.Map<IEnumerable<MessageDto>>(result);
  73. return mappedResult;
  74. }
  75. public async Task<MessageDto> GetById(int messageId)
  76. {
  77. var result = await _dbContext.Messages
  78. .Include(x => x.FileNames)
  79. .AsNoTracking()
  80. .FirstOrDefaultAsync(x => x.Id == messageId);
  81. var mappedResult = _mapper.Map<MessageDto>(result);
  82. return mappedResult;
  83. }
  84. public async Task<MessageDto> GetByCode(Guid code)
  85. {
  86. var result = await _dbContext.Messages
  87. .Include(x => x.FileNames)
  88. .AsNoTracking()
  89. .FirstOrDefaultAsync(x => x.Code == code.ToString());
  90. var mappedResult = _mapper.Map<MessageDto>(result);
  91. return mappedResult;
  92. }
  93. public async Task Update(MessageDto messageDto)
  94. {
  95. var message = await GetById(messageDto.Id);
  96. message.Text = messageDto.Text;
  97. message.FileNames = messageDto.FileNames;
  98. var a = _dbContext.Messages
  99. .Update(_mapper.Map<Message>(message));
  100. await _dbContext.SaveChangesAsync();
  101. }
  102. }