| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- using System.Reflection.Metadata;
- using AutoMapper;
- using Microsoft.EntityFrameworkCore;
- using SecureSharing.Business.Dtos;
- using SecureSharing.Business.Infrastructure;
- using SecureSharing.Business.Interfaces;
- using SecureSharing.Data.Data;
- using SecureSharing.Data.DbContexts;
-
- namespace SecureSharing.Business.Services;
-
- public sealed class MessageService : IMessageService
- {
- private readonly AppDbContext _dbContext;
- private readonly IMapper _mapper;
-
- public MessageService(AppDbContext dbContext, IMapper mapper)
- {
- _dbContext = dbContext;
- _mapper = mapper;
- }
-
- public async Task<Guid> Create(MessageDto messageDto, PeriodOfValidity chosenPeriod)
- {
- var message = _mapper.Map<Message>(messageDto);
- message.ExpiryDate = chosenPeriod switch
- {
- PeriodOfValidity.ONE_TIME => null,
- PeriodOfValidity.ONE_DAY => DateTime.UtcNow.AddMinutes(1),
- PeriodOfValidity.ONE_HOUR => DateTime.UtcNow.AddHours(1),
- PeriodOfValidity.ONE_WEEK => DateTime.UtcNow.AddDays(7),
- _ => null
- };
-
- await _dbContext.Messages.AddAsync(message);
- await _dbContext.SaveChangesAsync();
- return Guid.Parse(message.Code);
- }
-
- public async Task DeleteExpiredMessages()
- {
- var result = await _dbContext.Messages
- .Where(m => (m.ExpiryDate != null && m.ExpiryDate <= DateTime.UtcNow) || !m.IsValid).ToListAsync();
- _dbContext.RemoveRange(result);
- await _dbContext.SaveChangesAsync();
- }
-
- public async Task InvalidateMessage(int id)
- {
- var message = await _dbContext.Messages.Where(m => m.Id == id).FirstOrDefaultAsync();
- message!.IsValid = false;
- await _dbContext.SaveChangesAsync();
- }
-
- private void DeleteFiles(Guid basePathGuid)
- {
- // TODO: this path needs to be extracted somehow.
- var basePath = Path.Combine(@"D:\secure-sharing\SecureSharing\wwwroot\files", basePathGuid.ToString());
-
- Directory.Delete(basePath, true);
- }
-
- public async Task<bool> Delete(int id)
- {
- var messageDto = await GetById(id);
- if (messageDto is null)
- return false;
-
- DeleteFiles(messageDto.Code);
-
- _dbContext.Messages.Remove(_mapper.Map<Message>(messageDto));
- try
- {
- await _dbContext.SaveChangesAsync();
- }
- catch (DbUpdateException)
- {
- return false;
- }
-
- return true;
- }
-
- public async Task<IEnumerable<MessageDto>> GetAll()
- {
- var result = await _dbContext.Messages.AsNoTracking().ToListAsync();
- var mappedResult = _mapper.Map<IEnumerable<MessageDto>>(result);
- return mappedResult;
- }
-
-
- public async Task<MessageDto> GetById(int messageId)
- {
- var result = await _dbContext.Messages.Include(x=>x.FileNames).AsNoTracking().FirstOrDefaultAsync(x => x.Id == messageId);
- var mappedResult = _mapper.Map<MessageDto>(result);
- return mappedResult;
- }
-
- public async Task<MessageDto> GetByCode(Guid code)
- {
- var result = await _dbContext.Messages.Include(x=>x.FileNames).AsNoTracking().FirstOrDefaultAsync(x => x.Code == code.ToString());
- var mappedResult = _mapper.Map<MessageDto>(result);
- return mappedResult;
- }
-
- public async Task Update(MessageDto messageDto)
- {
- var a = _dbContext.Messages.Update(_mapper.Map<Message>(messageDto));
- await _dbContext.SaveChangesAsync();
- }
- }
|