Files
constructdemo/ConstructorAppUI/Controllers/ProjectController.cs
Sabi Polikar 2f8410a18b
Some checks failed
ASP.NET Core CI/Deploy / deploy (push) Has been cancelled
Yiğit Test
2025-11-08 11:20:49 +03:00

260 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using ConstructorApp.DtoLayer.ProjectGalleryDto;
using ConstructorAppUI.Dtos.ProjectDtos;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Newtonsoft.Json;
using System.ComponentModel.DataAnnotations;
using System.Reflection;
using System.Text;
using static ConstructorApp.EntityLayer.Entities.Project;
namespace ConstructorAppUI.Controllers
{
public class ProjectController : Controller
{
private readonly IHttpClientFactory _httpClientFactory;
private readonly IWebHostEnvironment _webHostEnvironment;
private readonly string _apiBaseUrl;
public ProjectController(IHttpClientFactory httpClientFactory, IWebHostEnvironment webHostEnvironment, IConfiguration configuration)
{
_httpClientFactory = httpClientFactory;
_webHostEnvironment = webHostEnvironment;
_apiBaseUrl = configuration["ApiSettings:BaseUrl"];
}
public async Task<IActionResult> Index()
{
var client = _httpClientFactory.CreateClient();
var responseMessage = await client.GetAsync($"{_apiBaseUrl}/api/Project");
if (responseMessage.IsSuccessStatusCode)
{
var jsonData = await responseMessage.Content.ReadAsStringAsync();
var values = JsonConvert.DeserializeObject<List<ResultProjectDto>>(jsonData);
return View(values);
}
return View();
}
[HttpGet]
public IActionResult CreateProject()
{
ViewBag.StatusList = Enum.GetValues(typeof(ProjectStatus))
.Cast<ProjectStatus>()
.Select(e => new SelectListItem
{
Value = ((int)e).ToString(), // INT OLARAK VALUE
Text = e.GetType()
.GetMember(e.ToString())
.First()
.GetCustomAttribute<DisplayAttribute>()?.Name ?? e.ToString()
}).ToList();
return View();
}
[HttpPost]
public async Task<IActionResult> CreateProject(CreateProjectDto createProjectDto, IFormFile CoverFile, IFormFile FloorPlanFile)
{
var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/Images");
// Klasör kontrolü
if (!Directory.Exists(imagePath))
{
Directory.CreateDirectory(imagePath);
}
// Cover Görseli Kaydet
if (CoverFile != null && CoverFile.Length > 0)
{
var coverPath = Path.Combine(imagePath, CoverFile.FileName);
using (var stream = new FileStream(coverPath, FileMode.Create))
{
await CoverFile.CopyToAsync(stream);
}
createProjectDto.CoverUrl = "/Images/" + CoverFile.FileName;
}
// FloorPlan Görseli Kaydet
if (FloorPlanFile != null && FloorPlanFile.Length > 0)
{
var floorPath = Path.Combine(imagePath, FloorPlanFile.FileName);
using (var stream = new FileStream(floorPath, FileMode.Create))
{
await FloorPlanFile.CopyToAsync(stream);
}
createProjectDto.FloorPlanUrl = "/Images/" + FloorPlanFile.FileName;
}
// API'ye gönder
var client = _httpClientFactory.CreateClient();
var jsonData = JsonConvert.SerializeObject(createProjectDto);
StringContent stringContent = new StringContent(jsonData, Encoding.UTF8, "application/json");
var responseMessage = await client.PostAsync($"{_apiBaseUrl}/api/Project", stringContent);
if (responseMessage.IsSuccessStatusCode)
{
return RedirectToAction("Index");
}
return View();
}
[HttpGet]
public async Task<IActionResult> UpdateProject(int id)
{
var client = _httpClientFactory.CreateClient();
var responseMessage = await client.GetAsync($"{_apiBaseUrl}/api/Project/{id}");
ViewBag.StatusList = Enum.GetValues(typeof(ProjectStatus))
.Cast<ProjectStatus>()
.Select(e => new SelectListItem
{
Value = ((int)e).ToString(), // INT OLARAK VALUE
Text = e.GetType()
.GetMember(e.ToString())
.First()
.GetCustomAttribute<DisplayAttribute>()?.Name ?? e.ToString()
}).ToList();
if (responseMessage.IsSuccessStatusCode)
{
var jsonData = await responseMessage.Content.ReadAsStringAsync();
var values = JsonConvert.DeserializeObject<UpdateProjectDto>(jsonData);
return View(values);
}
return View(new UpdateProjectDto());
}
[HttpPost]
public async Task<IActionResult> UpdateProject(UpdateProjectDto updateProjectDto, IFormFile CoverFile, IFormFile FloorPlanFile)
{
var client = _httpClientFactory.CreateClient();
// Mevcut "Project" verisini al
var existingSliderResponse = await client.GetAsync($"{_apiBaseUrl}/api/Project/{updateProjectDto.ProjectID}");
if (existingSliderResponse.IsSuccessStatusCode)
{
var existingJsonData = await existingSliderResponse.Content.ReadAsStringAsync();
var existingSlider = JsonConvert.DeserializeObject<UpdateProjectDto>(existingJsonData);
// Görseller için "wwwroot/Images" klasörünün varlığını kontrol et
var imagesPath = Path.Combine(_webHostEnvironment.WebRootPath, "Images");
if (!Directory.Exists(imagesPath))
{
Directory.CreateDirectory(imagesPath);
}
// CoverUrl işlemi
if (CoverFile != null && CoverFile.Length > 0)
{
// Eski görseli sil
if (!string.IsNullOrEmpty(existingSlider.CoverUrl))
{
var oldImagePath = Path.Combine(_webHostEnvironment.WebRootPath, existingSlider.CoverUrl.TrimStart('/'));
if (System.IO.File.Exists(oldImagePath))
{
System.IO.File.Delete(oldImagePath);
}
}
// Yeni görseli yükle
var fileName = Path.GetFileName(CoverFile.FileName);
var imagePath = Path.Combine(imagesPath, fileName);
using (var stream = new FileStream(imagePath, FileMode.Create))
{
await CoverFile.CopyToAsync(stream);
}
updateProjectDto.CoverUrl = $"/Images/{fileName}";
}
else
{
updateProjectDto.CoverUrl = existingSlider.CoverUrl;
}
// FloorPlanUrl işlemi
if (FloorPlanFile != null && FloorPlanFile.Length > 0)
{
if (!string.IsNullOrEmpty(existingSlider.FloorPlanUrl))
{
var oldFloorPlanPath = Path.Combine(_webHostEnvironment.WebRootPath, existingSlider.FloorPlanUrl.TrimStart('/'));
if (System.IO.File.Exists(oldFloorPlanPath))
{
System.IO.File.Delete(oldFloorPlanPath);
}
}
var floorPlanFileName = Path.GetFileName(FloorPlanFile.FileName);
var floorPlanPath = Path.Combine(imagesPath, floorPlanFileName);
using (var stream = new FileStream(floorPlanPath, FileMode.Create))
{
await FloorPlanFile.CopyToAsync(stream);
}
updateProjectDto.FloorPlanUrl = $"/Images/{floorPlanFileName}";
}
else
{
updateProjectDto.FloorPlanUrl = existingSlider.FloorPlanUrl;
}
// API'ye güncelleme isteği gönder
var updatedJsonData = JsonConvert.SerializeObject(updateProjectDto);
StringContent stringContent = new StringContent(updatedJsonData, Encoding.UTF8, "application/json");
var responseMessage = await client.PutAsync($"{_apiBaseUrl}/api/Project/", stringContent);
if (responseMessage.IsSuccessStatusCode)
{
return RedirectToAction("Index");
}
}
return View(updateProjectDto);
}
public async Task<IActionResult> ProjectStatusActive(int id)
{
var client = _httpClientFactory.CreateClient();
await client.GetAsync($"{_apiBaseUrl}/api/Project/ProjectStatusActive/{id}");
return RedirectToAction("Index");
}
public async Task<IActionResult> ProjectStatusPassive(int id)
{
var client = _httpClientFactory.CreateClient();
await client.GetAsync($"{_apiBaseUrl}/api/Project/ProjectStatusPassive/{id}");
return RedirectToAction("Index");
}
[AllowAnonymous]
[Route("projeler/{slug}")]
public async Task<IActionResult> Detail(string slug)
{
var client = _httpClientFactory.CreateClient();
var responseMessage = await client.GetAsync($"{_apiBaseUrl}/api/Project/GetBySlug/{slug}");
if (!responseMessage.IsSuccessStatusCode)
{
return NotFound();
}
var jsonData = await responseMessage.Content.ReadAsStringAsync();
var value = JsonConvert.DeserializeObject<ResultProjectDto>(jsonData);
// Görselleri çek
var imageResponse = await client.GetAsync($"{_apiBaseUrl}/api/ProjectImage/GetByProjectId/{value.ProjectID}");
if (imageResponse.IsSuccessStatusCode)
{
var imageJson = await imageResponse.Content.ReadAsStringAsync();
var imageList = JsonConvert.DeserializeObject<List<ResultProjectGalleryDto>>(imageJson);
value.ImageUrls = imageList.Select(x => x.ImageUrl).ToList();
}
return View(value);
}
}
}