public async Task <OperationResult <string> > SaveFile(Stream fileStream) { var fileId = Guid.NewGuid().ToString("N"); fileStream.Seek(0, SeekOrigin.Begin); var thumbResult = await _thumbnailsRepo.AddThumbnailFor(fileId, fileStream); if (thumbResult.ErrorMessageIfAny != null) { return(new OperationResult <string> { ErrorMessageIfAny = thumbResult.ErrorMessageIfAny }); } var newFile = new PresentationFile(); newFile.FileID = fileId; await _context.PresentationFiles.AddAsync(newFile); await _context.SaveChangesAsync(); var filePathResult = CreatePathFor(fileId); if (filePathResult.ErrorMessageIfAny != null) { return(new OperationResult <string> { ErrorMessageIfAny = filePathResult.ErrorMessageIfAny }); } var fs = AirshowUtils.CreateFileToWriteAtPath(filePathResult.Value); if (fs == null) { return(new OperationResult <string> { ErrorMessageIfAny = OperationStatus.kInvalidFileNameOrAlreadyExists }); } fileStream.Seek(0, SeekOrigin.Begin); await fileStream.CopyToAsync(fs); fs.Dispose(); return(new OperationResult <string> { Value = newFile.FileID }); }
public async Task <OperationStatus> DeletePresentation(string presentationName, string userId) { var opResult = new OperationStatus(); var upList = _context.UserPresentations.Where(up => up.UserId == userId); var singledOutUP = await upList.Where(up => _context.Presentations.Any(p => p.Id == up.PresentationId && p.Name == presentationName)) .Include(up => up.Presentation).ToListAsync(); if (singledOutUP.Count == 1) { var up = singledOutUP.First(); var presentation = up.Presentation; _context.UserPresentations.Remove(up); var rows = await _context.SaveChangesAsync(); if (rows <= 0) { return(new OperationStatus { ErrorMessageIfAny = "Error while trying to update the database." }); } if (!await _context.UserPresentations.AnyAsync(u => u.PresentationId == presentation.Id)) { var presentationTags = _context.PresentationTags.Where(pt => pt.PresentationId == presentation.Id).ToList(); _context.Presentations.Remove(presentation); _context.PresentationTags.RemoveRange(presentationTags); _context.SaveChanges(); return(await _filesRepository.DeleteFileWithId(presentation.FileID)); } } else { opResult.ErrorMessageIfAny = "File not found"; } return(opResult); }
public void Run() { _timer = new Timer(async(obj) => { var time = DateTime.Now; var unconfirmedAccounts = await _context.Users.Where(u => !u.EmailConfirmed && (time - u.CreationDate).TotalSeconds >= CleaningIntervalSeconds).ToListAsync(); if (unconfirmedAccounts != null && unconfirmedAccounts.Count() > 0) { _context.Users.RemoveRange(unconfirmedAccounts); await _context.SaveChangesAsync(); } }, null, CleaningIntervalMiliseconds, CleaningIntervalMiliseconds); }
public async Task <OperationResult <List <Tag> > > CreateOrGetTags(List <string> tagsAsStrings) { var opRes = new OperationResult <List <Tag> >(); List <Tag> result = new List <Tag>(); opRes.Value = result; if (tagsAsStrings == null || tagsAsStrings.Count == 0) { opRes.ErrorMessageIfAny = "Invalid tag names specified"; return(opRes); } List <Tag> existentTags = _context.Tags.Where(t => tagsAsStrings.Contains(t.Name)).ToList(); if (existentTags != null && existentTags.Count > 0) { foreach (var tag in existentTags) { if (tag.PresentationTags == null) { tag.PresentationTags = new List <PresentationTag>(); } } result.AddRange(existentTags); } foreach (var item in tagsAsStrings) { if (!existentTags.Any(t => t.Name == item)) { var newTag = new Tag { Name = item, PresentationTags = new List <PresentationTag>() }; _context.Tags.Add(newTag); result.Add(newTag); } } await _context.SaveChangesAsync(); return(opRes); }