using ConstructorAppUI.Dtos.ReferenceDtos; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using System.Text; namespace ConstructorAppUI.Controllers { public class ReferenceController : Controller { private readonly IHttpClientFactory _httpClientFactory; private readonly IWebHostEnvironment _webHostEnvironment; private readonly string _apiBaseUrl; public ReferenceController(IHttpClientFactory httpClientFactory, IWebHostEnvironment webHostEnvironment, IConfiguration configuration) { _httpClientFactory = httpClientFactory; _webHostEnvironment = webHostEnvironment; _apiBaseUrl = configuration["ApiSettings:BaseUrl"]; } public async Task Index() { var client = _httpClientFactory.CreateClient(); var responseMessage = await client.GetAsync($"{_apiBaseUrl}/api/Reference"); if (responseMessage.IsSuccessStatusCode) { var jsonData = await responseMessage.Content.ReadAsStringAsync(); var values = JsonConvert.DeserializeObject>(jsonData); return View(values); } return View(); } [HttpGet] public IActionResult CreateReference() { return View(); } [HttpPost] public async Task CreateReference(CreateReferenceDto createReferenceDto, IFormFile ImageFile) { if (ImageFile != null) { var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/Images"); // Klasör mevcut değilse oluştur if (!Directory.Exists(imagePath)) { Directory.CreateDirectory(imagePath); } var filePath = Path.Combine(imagePath, ImageFile.FileName); using (var stream = new FileStream(filePath, FileMode.Create)) { await ImageFile.CopyToAsync(stream); } createReferenceDto.LogoUrl = "/Images/" + ImageFile.FileName; } var client = _httpClientFactory.CreateClient(); var jsonData = JsonConvert.SerializeObject(createReferenceDto); StringContent stringContent = new StringContent(jsonData, Encoding.UTF8, "application/json"); var responseMessage = await client.PostAsync($"{_apiBaseUrl}/api/Reference", stringContent); if (responseMessage.IsSuccessStatusCode) { return RedirectToAction("Index"); } return View(); } [HttpGet] public async Task UpdateReference(int id) { var client = _httpClientFactory.CreateClient(); var responseMessage = await client.GetAsync($"{_apiBaseUrl}/api/Reference/{id}"); if (responseMessage.IsSuccessStatusCode) { var jsonData = await responseMessage.Content.ReadAsStringAsync(); var values = JsonConvert.DeserializeObject(jsonData); return View(values); } return View(); } [HttpPost] public async Task UpdateReference(UpdateReferenceDto updateReferenceDto, IFormFile ImageFile) { var client = _httpClientFactory.CreateClient(); // Mevcut "Slider" verisini al var existingSliderResponse = await client.GetAsync($"{_apiBaseUrl}/api/Reference/{updateReferenceDto.ReferenceID}"); if (existingSliderResponse.IsSuccessStatusCode) { var existingJsonData = await existingSliderResponse.Content.ReadAsStringAsync(); var existingSlider = JsonConvert.DeserializeObject(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); } // ImageUrl için işlem if (ImageFile != null && ImageFile.Length > 0) { // Eski görseli sil if (!string.IsNullOrEmpty(existingSlider.LogoUrl)) { var oldImagePath = Path.Combine(_webHostEnvironment.WebRootPath, existingSlider.LogoUrl.TrimStart('/')); if (System.IO.File.Exists(oldImagePath)) { System.IO.File.Delete(oldImagePath); } } // Yeni görseli yükle var fileName = Path.GetFileName(ImageFile.FileName); var imagePath = Path.Combine(imagesPath, fileName); using (var stream = new FileStream(imagePath, FileMode.Create)) { await ImageFile.CopyToAsync(stream); } updateReferenceDto.LogoUrl = $"/Images/{fileName}"; } else { updateReferenceDto.LogoUrl = existingSlider.LogoUrl; } // API'ye güncelleme isteği gönder var updatedJsonData = JsonConvert.SerializeObject(updateReferenceDto); StringContent stringContent = new StringContent(updatedJsonData, Encoding.UTF8, "application/json"); var responseMessage = await client.PutAsync($"{_apiBaseUrl}/api/Reference/", stringContent); if (responseMessage.IsSuccessStatusCode) { return RedirectToAction("Index"); } } return View(updateReferenceDto); } [HttpGet] public async Task DeleteReferenceConfirmation(int id) { var client = _httpClientFactory.CreateClient(); var responseMessage = await client.GetAsync($"{_apiBaseUrl}/api/Reference/{id}"); if (responseMessage.IsSuccessStatusCode) { var jsonData = await responseMessage.Content.ReadAsStringAsync(); var reference = JsonConvert.DeserializeObject(jsonData); return View(reference); } return View("Error"); } [HttpPost] public async Task DeleteReference(int id) { var client = _httpClientFactory.CreateClient(); var responseMessage = await client.GetAsync($"{_apiBaseUrl}/api/Reference/{id}"); if (responseMessage.IsSuccessStatusCode) { var jsonData = await responseMessage.Content.ReadAsStringAsync(); var reference = JsonConvert.DeserializeObject(jsonData); if (!string.IsNullOrEmpty(reference.LogoUrl)) { var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/Images", Path.GetFileName(reference.LogoUrl)); // Görselin gerçekten var olup olmadığını kontrol et if (System.IO.File.Exists(imagePath)) { System.IO.File.Delete(imagePath); // Sadece görsel dosyasını sil } } var deleteResponse = await client.DeleteAsync($"{_apiBaseUrl}/api/Reference/{id}"); if (deleteResponse.IsSuccessStatusCode) { return RedirectToAction("Index"); } } return View("Error"); } } }