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 }); }
// 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); }