Пример #1
0
        private async Task UploadImagesWithDifferentSizesAsync(Remark remark, RemarkUser user, File originalPhoto, string metadata = null)
        {
            var extension    = originalPhoto.Name.Split('.').Last();
            var uniqueNumber = _uniqueNumberGenerator.Generate();
            var groupId      = Guid.NewGuid();
            var size         = "big";
            var fileName     = metadata == null
                ? $"remark_{remark.Id:N}_{uniqueNumber}.{extension}"
                : $"remark_{remark.Id:N}_{metadata}_{uniqueNumber}.{extension}";
            var baseImageUrl = "";
            await _fileHandler.UploadAsync(originalPhoto, fileName, (baseUrl, fullUrl) =>
            {
                baseImageUrl = baseUrl;
                remark.AddPhoto(RemarkPhoto.Create(groupId, fileName, size, fullUrl, user, metadata));
            });

            var smallImageFileName  = $"200x200/{fileName}";
            var mediumImageFileName = $"600x600/{fileName}";
            var smallImageUrl       = $"{baseImageUrl}/{smallImageFileName}";
            var mediumImageUrl      = $"{baseImageUrl}/{mediumImageFileName}";

            remark.AddPhoto(RemarkPhoto.Create(groupId, smallImageFileName, "small", smallImageUrl, user, metadata));
            remark.AddPhoto(RemarkPhoto.Create(groupId, mediumImageFileName, "medium", mediumImageUrl, user, metadata));

            //Trigger resizing images using AWS Lambda, so they shall be accessible with https.
            await Task.WhenAll(new List <Task>
            {
                TriggerImageResizeAsync(smallImageUrl),
                TriggerImageResizeAsync(mediumImageUrl)
            });
        }
Пример #2
0
        public async Task AddPhotosAsync(Guid remarkId, string userId, params File[] photos)
        {
            if (photos == null || !photos.Any())
            {
                throw new ServiceException(OperationCodes.NoFiles,
                                           $"There are no photos to be added to the remark with id: '{remarkId}'.");
            }

            var user = await _userRepository.GetOrFailAsync(userId);

            Logger.Debug($"Adding {photos.Count()} photos to remark with id: '{remarkId}'.");
            var remark = await _remarkRepository.GetOrFailAsync(remarkId);

            if (remark.Photos.GroupBy(x => x.Size).Count() + photos.Count() > _settings.PhotosLimit)
            {
                throw new ServiceException(OperationCodes.TooManyFiles,
                                           $"There are too many photos ({photos.Count()}) to be added to the remark with id: '{remarkId}'.");
            }
            var tasks = new List <Task>();

            foreach (var photo in photos)
            {
                var task = UploadImagesWithDifferentSizesAsync(remark, RemarkUser.Create(user), photo);
                tasks.Add(task);
            }
            await Task.WhenAll(tasks);

            await _remarkRepository.UpdateAsync(remark);

            Logger.Debug($"Added {photos.Count()} photos to remark with id: '{remarkId}'.");
        }
        protected static void Initialize()
        {
            RemarkRepositoryMock   = new Mock <IRemarkRepository>();
            UserRepositoryMock     = new Mock <IUserRepository>();
            RemarkPhotoServiceMock = new Mock <IRemarkPhotoService>();
            GeneralSettings        = new GeneralSettings
            {
                AllowedDistance = 15.0
            };

            RemarkStateService = new RemarkStateService(RemarkRepositoryMock.Object,
                                                        UserRepositoryMock.Object,
                                                        RemarkPhotoServiceMock.Object,
                                                        GeneralSettings);

            var user     = new User(UserId, "name", "user");
            var category = new Category("category");

            Description = "test";
            Remark      = new Remark(RemarkId, user, category, Location);
            Remark.AddPhoto(RemarkPhoto.Small(Guid.NewGuid(), "test.jpg", "http://my-test-image.com", RemarkUser.Create(user)));

            RemarkRepositoryMock.Setup(x => x.GetByIdAsync(Moq.It.IsAny <Guid>()))
            .ReturnsAsync(Remark);
            UserRepositoryMock.Setup(x => x.GetByUserIdAsync(Moq.It.IsAny <string>()))
            .ReturnsAsync(User);
        }
Пример #4
0
        protected static void Initialize()
        {
            ExceptionHandlerMock = new Mock <IExceptionHandler>();
            Handler = new Handler(ExceptionHandlerMock.Object);
            RemarkRepositoryMock      = new Mock <IRemarkRepository>();
            RemarkRepositoryMock      = new Mock <IRemarkRepository>();
            GroupRemarkRepositoryMock = new Mock <IGroupRemarkRepository>();
            RemarkServiceClientMock   = new Mock <IRemarkServiceClient>();
            RemarkCacheMock           = new Mock <IRemarkCache>();
            RemarkResolvedHandler     = new RemarkResolvedHandler(Handler,
                                                                  RemarkRepositoryMock.Object,
                                                                  GroupRemarkRepositoryMock.Object,
                                                                  RemarkServiceClientMock.Object,
                                                                  RemarkCacheMock.Object);

            User = new User
            {
                UserId = UserId,
                Name   = "TestUser"
            };
            Event  = new RemarkResolved(Guid.NewGuid(), Resource.Create("test", "test"), UserId, RemarkId);
            Author = new RemarkUser
            {
                UserId = UserId,
                Name   = "TestUser"
            };
            Category = new RemarkCategory
            {
                Id   = Guid.NewGuid(),
                Name = "Test"
            };
            Location = new Location
            {
                Address     = "address",
                Coordinates = new[] { 1.0, 1.0 },
                Type        = "point"
            };
            Remark = new Remark
            {
                Id          = RemarkId,
                Author      = Author,
                Category    = Category,
                CreatedAt   = CreatedAt,
                Description = "test",
                Location    = Location,
                Photos      = new List <File>()
            };
            var resolvedRemark = new Remark
            {
                Id          = RemarkId,
                Author      = Author,
                Category    = Category,
                CreatedAt   = CreatedAt,
                Description = "test",
                Location    = Location,
                State       = new RemarkState
                {
                    State = "resolved",
                    User  = new RemarkUser
                    {
                        UserId = UserId,
                    }
                },
                Photos = new List <File>()
            };

            RemarkServiceClientMock
            .Setup(x => x.GetAsync <Remark>(RemarkId))
            .ReturnsAsync(resolvedRemark);
            RemarkRepositoryMock.Setup(x => x.GetByIdAsync(Moq.It.IsAny <Guid>()))
            .ReturnsAsync(Remark);
        }
        protected static void Initialize()
        {
            FileHandlerMock              = new Mock <IFileHandler>();
            RemarkRepositoryMock         = new Mock <IRemarkRepository>();
            RemarkCategoryRepositoryMock = new Mock <ICategoryRepository>();
            TagRepositoryMock            = new Mock <ITagRepository>();
            UserRepositoryMock           = new Mock <IUserRepository>();
            CategoryRepositoryMock       = new Mock <ICategoryRepository>();
            GroupRepositoryMock          = new Mock <IGroupRepository>();
            ImageServiceMock             = new Mock <IImageService>();
            RemarkPhotoServiceMock       = new Mock <IRemarkPhotoService>();
            UniqueNumberGeneratorMock    = new Mock <IUniqueNumberGenerator>();
            GeneralSettings              = new GeneralSettings
            {
                AllowedDistance = 15.0
            };

            RemarkService = new RemarkService(RemarkRepositoryMock.Object,
                                              UserRepositoryMock.Object,
                                              CategoryRepositoryMock.Object,
                                              TagRepositoryMock.Object,
                                              GroupRepositoryMock.Object,
                                              RemarkPhotoServiceMock.Object,
                                              GeneralSettings);

            var user     = new User(UserId, "name", "user");
            var category = new Category("category");

            Remark = new Remark(RemarkId, user, category, Location);
            Remark.AddPhoto(RemarkPhoto.Small(Guid.NewGuid(), "test.jpg", "http://my-test-image.com", RemarkUser.Create(user)));

            RemarkRepositoryMock.Setup(x => x.GetByIdAsync(Moq.It.IsAny <Guid>()))
            .ReturnsAsync(Remark);
            UserRepositoryMock.Setup(x => x.GetByUserIdAsync(Moq.It.IsAny <string>()))
            .ReturnsAsync(User);
            ImageServiceMock.Setup(x => x.ProcessImage(Moq.It.IsAny <File>()))
            .Returns(new Dictionary <string, File>
            {
                { "small", File },
                { "medium", File },
                { "big", File }
            });
        }
Пример #6
0
        public async Task UploadImagesWithDifferentSizesAsync(Remark remark, string userId, File originalPhoto, string metadata = null)
        {
            var user = await _userRepository.GetOrFailAsync(userId);

            await UploadImagesWithDifferentSizesAsync(remark, RemarkUser.Create(user), originalPhoto, metadata);
        }