Files
constructdemo/ConstructorAppUI/Controllers/ReferenceController.cs
2025-05-01 15:18:30 +03:00

194 lines
7.8 KiB
C#
Raw Permalink 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 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<IActionResult> 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<List<ResultReferenceDto>>(jsonData);
return View(values);
}
return View();
}
[HttpGet]
public IActionResult CreateReference()
{
return View();
}
[HttpPost]
public async Task<IActionResult> 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<IActionResult> 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<UpdateReferenceDto>(jsonData);
return View(values);
}
return View();
}
[HttpPost]
public async Task<IActionResult> 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<UpdateReferenceDto>(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<IActionResult> 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<UpdateReferenceDto>(jsonData);
return View(reference);
}
return View("Error");
}
[HttpPost]
public async Task<IActionResult> 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<UpdateReferenceDto>(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");
}
}
}