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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }