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

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