public async Task <PublicationResponseObject> FindOneByIdAsync(int id)
        {
            var found = await _publicationsRepository.FindOneByIdAsync(id);

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

            return(PublicationResponseObject.FromEntity(found));
        }
        public async Task <PublicationResponseObject> UpdateOneByIdAsync(int id, UpdatePublicationDto t)
        {
            var found = await _publicationsRepository.FindOneByIdAsync(id);

            if (found == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound, $"User with id {id} was not found");
            }

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

            var updateEntity = t.ToEntity();

            updateEntity.Id        = id;
            updateEntity.UserId    = found.UserId;
            updateEntity.UpdatedAt = DateTime.Now;

            await _publicationsRepository.UpdateOneAsync(updateEntity);

            var entity = await _publicationsRepository.FindOneByIdAsync(id);

            return(PublicationResponseObject.FromEntity(entity));
        }
        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));
        }