Beispiel #1
0
        public async Task <GetPublicationDto> CreateOneAsync(CreatePublicationDto item)
        {
            try
            {
                foreach (var space in item.SharedSpaces)
                {
                    if (await _sharedSpaceRepository.IsAvaliableSharedSpace(space.CreateSharedSpace()))
                    {
                        throw new BadRequestException($"The space with resource id {space.ResourceId} has been shared already");
                    }
                }


                if (!await ValidPublicationTime(item))
                {
                    throw new BadRequestException($"The Publication with reservartion id {item.ReservationId} time is not valid");
                }

                await _publicationRepository.CreateOneAsync(item.CreatePublication());

                // Se debe actualizar el estado de la reserva a compartido(ID=8)
                var reservation = await _reservationRepository.FindOneByIdAsync(item.ReservationId);

                reservation.ReservationStateId = ReservationStates.Shared;
                reservation.UpdatedAt          = DateTime.Now;
                await _reservationRepository.UpdateOneAsync(reservation);
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.Message);
                throw new BadRequestException("System error");
            }

            return(GetPublicationDto.FromPublication(item.CreatePublication()));
        }
Beispiel #2
0
        public async Task <IActionResult> CreateOneAsync(
            [FromBody] CreatePublicationDto createPublicationDto
            )
        {
            var item = await _publicationService.CreateOneAsync(createPublicationDto);

            return(Ok(item));
        }
Beispiel #3
0
        private async Task <bool> ValidPublicationTime(CreatePublicationDto pub)
        {
            var res = await _reservationRepository.FindOneByIdAsync(pub.ReservationId);

            if (pub.StartTime.Hour < res.StartTime.Hour || pub.EndTime.Hour > res.EndTime.Hour)
            {
                return(false);
            }
            return(true);
        }
        public async Task Create(CreatePublicationDto input)
        {
            var @publication = Publication.Create(1, input.Name, input.Description, input.FilePath, input.Downloads);

            var user = await UserManager.GetUserByIdAsync(3);

            await _notificationPublisher.PublishAsync(
                notificationName : "PublicationNotification",
                data : new MessageNotificationData("New Publication available : " + input.Name),
                severity : NotificationSeverity.Success,
                userIds : new[] { user.ToUserIdentifier() }
                );

            await _publicationRepository.InsertAsync(@publication);
        }
Beispiel #5
0
        public async Task <IActionResult> CreateOneAsync(
            [FromBody] CreatePublicationDto createPublicationDto
            )
        {
            try
            {
                var created = await _publicationService.CreateOneAsync(createPublicationDto);

                return(Ok(created));
            }
            catch (Exception e)
            {
                return(HttpExceptionMapper.ToHttpActionResult(e));
            }
        }
        public async Task <PublicationResponseObject> CreateOneAsync(CreatePublicationDto t)
        {
            // Validando que exista el usuario
            var foundUser = await _usersRepository.FindOneByIdAsync(t.UserId);

            if (foundUser == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound, "User not found");
            }


            // Validando que exista Food
            var foundFood = await _foodRepository.FindOneByIdAsync(t.FoodId);

            if (foundFood == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound, "Food not found");
            }


            // Validando que exista la publicacion no exista
            var found = await _publicationsRepository.FindOneByUserIdAndFoodIdAndDescriptionAsync(t.UserId, t.FoodId, t.Description);

            if (found != null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest, "Publication already exists");
            }


            // Validaciones
            if (!IsDescriptionValid(t.Description))
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest, "Description is not valid");
            }

            if (!IsStockValid(t.Stock))
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest, "Stock is invalid");
            }

            if (!IsPricePerUnitValid(t.PricePerUnit))
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest, "PricePerUnit is invalid");
            }

            // if (!AreDatesValid(t.StartDate, t.EndDate))
            // throw new HttpResponseException(HttpStatusCode.BadRequest, "Dates are invalid");

            if (!IsImageUrlValid(t.ImageUrl))
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest, "ImageUrl is invalid");
            }


            // Creation
            var newPublication = new Publication()
            {
                Description = t.Description,
                Stock       = t.Stock,
                StartDate   = t.StartDate,
                // EndDate = t.EndDate,
                ImageUrl     = t.ImageUrl,
                IsPublished  = t.IsPublished,
                PricePerUnit = t.PricePerUnit,
                FoodId       = foundFood.Id,
                UserId       = foundUser.Id,
                CreatedAt    = DateTime.Now,
                UpdatedAt    = DateTime.Now
            };

            await _publicationsRepository.CreateOneAsync(newPublication);

            var entity = await _publicationsRepository.FindOneByIdAsync(newPublication.Id);

            return(PublicationResponseObject.FromEntity(entity));
        }