public async Task<IActionResult> Create(CreatePostVM viewModel)
{
if (ModelState.IsValid)
{
var user = await _userManager.GetUserAsync(User);
Car car = new Car
{
Make = viewModel.Make,
Model = viewModel.Model,
Year = viewModel.Year,
Kilometer = viewModel.Kilometer,
HorsePower = viewModel.HorsePower,
LocationCountry = viewModel.LocationCountry,
LocationCity = viewModel.LocationCity,
CategoryId = viewModel.CategoryId,
FuelTypeId = viewModel.FuelTypeId,
TransmissionTypeId = viewModel.TransmissionTypeId,
CarExtras = new List<CarExtra>(),
Images = new List<Image>(),
};
Post post = new Post()
{
Title = viewModel.Title,
Description = viewModel.Description,
Price = viewModel.Price,
CoverImage = viewModel.CoverImage,
CreatorId = user.Id,
Car = car
};
if (viewModel.SelectedExtras != null)
{
foreach (var extra in viewModel.SelectedExtras)
{
var carExtra = new CarExtra()
{
CarId = post.CarId,
ExtraId = extra
};
post.Car.CarExtras.Add(carExtra);
}
}
if (viewModel.SelectedImages != null && viewModel.SelectedImages.Count > 0)
{
foreach (var file in viewModel.SelectedImages)
{
var fileName = Path.GetFileName(file.FileName);
var fileExtension = Path.GetExtension(fileName);
var uniqueFileName = Guid.NewGuid().ToString() + fileExtension;
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/images", uniqueFileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
file.CopyTo(stream);
}
var image = new Image()
{
CarId = post.CarId,
Path = fileName
};
post.Car.Images.Add(image);
}
}
_db.Posts.Add(post);
await _db.SaveChangesAsync();
}
else
{
var errors = ModelState.Select(x => x.Value.Errors)
.Where(y => y.Count > 0)
.ToList();
return BadRequest(errors);
}
return RedirectToAction("GetAll");
}