예제 #1
0
        public async Task <IActionResult> CreateAdvertisement(CreateAdvertisementRequest request)
        {
            var advertisement = await AdvertisementService.CreateAdvertisement(UserName, request);

            if (advertisement == null)
            {
                return(BadRequest("Your subscription doesn't allow this."));
            }

            return(CreatedAtAction(nameof(GetAdvertisementDetails), new { id = advertisement.Id }, advertisement));
        }
        public async Task <IActionResult> CreateAdvertisementAsync([FromForm] CreateAdvertisementRequest createAdvertisementRequest)
        {
            Guid     currentUserId   = Guid.Parse(User.Identity.Name);
            Customer currentCustomer = await _customerService.GetCustomerByIdAsync(currentUserId);

            Advertisement advertisement = _mapper.Map <Advertisement>(createAdvertisementRequest);

            using (var uploadedImageStream = createAdvertisementRequest.FormFile.OpenReadStream())
            {
                await _advertisementService.CreateAdvertisementForCustomer(
                    advertisement, uploadedImageStream, currentCustomer);
            }

            return(Ok());
        }
        public async Task <dynamic> Post([FromBody] CreateAdvertisementRequest requestBody)
        {
            var userId = new ObjectId(this.GetCurrentUserId());

            var userCollection = MongoWrapper.Database.GetCollection <Models.Contractor>(nameof(Models.User));

            var userFilterBuilder = new FilterDefinitionBuilder <Models.Contractor>();
            var userFilter        = userFilterBuilder.And
                                    (
                GeneralUtils.NotDeactivated(userFilterBuilder),
                userFilterBuilder.Eq(u => u._id, userId)
                                    );

            var userProjectionBuilder = new ProjectionDefinitionBuilder <Models.Contractor>();
            var userProjection        = userProjectionBuilder
                                        .Include(m => m._id)
                                        .Include(m => m.FullName)
                                        .Include(m => m.Avatar)
                                        .Include(m => m.FileBytesLimit)
                                        .Include(m => m.FileBytesOccupied)
                                        .Include("_t");

            var userTask = userCollection.FindAsync(userFilter, new FindOptions <Models.Contractor>
            {
                Limit = 1,
                AllowPartialResults = false,
                Projection          = userProjection
            });

            Models.Contractor user = null;

            List <(FileReference, Func <Task>)> files             = new List <(FileReference, Func <Task>)>();
            Task <(FileReference, Func <Task>)> fileReferenceTask = Task.FromResult <(FileReference, Func <Task>)>((null, () => Task.CompletedTask));

            if (requestBody.Midias != null)
            {
                long totalSize = 0;
                foreach (MidiaRequest midiaRequest in requestBody.Midias)
                {
                    if (midiaRequest.Id != null)
                    {
                        fileReferenceTask = GeneralUtils.GetFileForReferenceToken
                                            (
                            MongoWrapper,
                            midiaRequest.Id,
                            userId
                                            );
                        var(fileReference, expirer) = await fileReferenceTask;
                        totalSize += fileReference.FileInfo.Size;
                        files.Add((fileReference, expirer));
                    }
                }
                user = (await userTask).Single();
                GeneralUtils.CheckSizeForUser(totalSize, user.FileBytesOccupied, user.FileBytesLimit);
            }

            var postCollection = MongoWrapper.Database.GetCollection <Models.Advertisement>(nameof(Models.Advertisement));

            var creationDate = DateTime.UtcNow;

            var ad = new Models.Advertisement
            {
                _id            = ObjectId.GenerateNewId(creationDate),
                Title          = requestBody.Titulo,
                Text           = requestBody.Descricao,
                FileReferences = files.Select(f => f.Item1).ToList(),
                Position       = requestBody.Coordenada == null ? null : new GeoJsonPoint <GeoJson3DGeographicCoordinates>(requestBody.Coordenada.ToGeoJsonCoordinate()),
                Poster         = user ?? (await userTask).Single(),
            };

            await postCollection.InsertOneAsync(ad);

            files.AsParallel().ForAll(async f => await f.Item2());

            return(new ResponseBody
            {
                Code = ResponseCode.GenericSuccess,
                Data = ad._id,
                Message = "Postagem criada com sucesso!",
                Success = true
            });
        }
예제 #4
0
        // Hirdetés létrehozása
        public async Task <AdvertisementDetailedDTO> CreateAdvertisement(string userName, CreateAdvertisementRequest request)
        {
            var advertisement = request.FromDTO();

            foreach (var detail in advertisement.Details)
            {
                detail.Id = 0;
            }

            //Felhasználó beállítása
            var user = await UserRepository.GetByNameWithDetails(userName);

            advertisement.User     = user;
            advertisement.UserName = user.UserName;

            //Dátum beállítása
            advertisement.UploadDate = DateTime.Today;

            //Képek beállítása
            foreach (string image in request.ImageList)
            {
                advertisement.Images.Add(new Image {
                    File = image
                });
            }

            //Előfizetés ellenőrzése
            bool success = SubscriptionService.CheckSubscription(user, advertisement);

            //Validáció
            bool valid = await ValidateAsync(advertisement);

            if (success && valid)
            {
                advertisement.Status = advertisement.Priority.ToStatus();
                await AdvertisementRepository.CreateAsync(advertisement);

                return(advertisement.ToDetailedDTO());
            }
            return(null);
        }
        // Requests
        public static Advertisement FromDTO(this CreateAdvertisementRequest dto)
        {
            var advertisement = Mapper.Map <Advertisement>(dto);

            return(advertisement);
        }