using ConstructorAppUI.Dtos.TeamDtos; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using System.Text; namespace ConstructorAppUI.Controllers { public class TeamController : Controller { private readonly IHttpClientFactory _httpClientFactory; private readonly IWebHostEnvironment _webHostEnvironment; private readonly string _apiBaseUrl; public TeamController(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/Team"); if (responseMessage.IsSuccessStatusCode) { var jsonData = await responseMessage.Content.ReadAsStringAsync(); var values = JsonConvert.DeserializeObject>(jsonData); return View(values); } return View(); } [HttpGet] public IActionResult CreateTeam() { return View(); } [HttpPost] public async Task CreateTeam(CreateTeamDto createTeamDto, 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); } createTeamDto.ImageUrl = "/Images/" + ImageFile.FileName; } var client = _httpClientFactory.CreateClient(); var jsonData = JsonConvert.SerializeObject(createTeamDto); StringContent stringContent = new StringContent(jsonData, Encoding.UTF8, "application/json"); var responseMessage = await client.PostAsync($"{_apiBaseUrl}/api/Team", stringContent); if (responseMessage.IsSuccessStatusCode) { return RedirectToAction("Index"); } return View(); } [HttpGet] public async Task UpdateTeam(int id) { var client = _httpClientFactory.CreateClient(); var responseMessage = await client.GetAsync($"{_apiBaseUrl}/api/Team/{id}"); if (responseMessage.IsSuccessStatusCode) { var jsonData = await responseMessage.Content.ReadAsStringAsync(); var values = JsonConvert.DeserializeObject(jsonData); return View(values); } return View(); } [HttpPost] public async Task UpdateTeam(UpdateTeamDto updateTeamDto, IFormFile ImageFile) { var client = _httpClientFactory.CreateClient(); // Mevcut "Team" verisini al var existingSliderResponse = await client.GetAsync($"{_apiBaseUrl}/api/Team/{updateTeamDto.TeamID}"); 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.ImageUrl)) { var oldImagePath = Path.Combine(_webHostEnvironment.WebRootPath, existingSlider.ImageUrl.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); } updateTeamDto.ImageUrl = $"/Images/{fileName}"; } else { updateTeamDto.ImageUrl = existingSlider.ImageUrl; } // API'ye güncelleme isteği gönder var updatedJsonData = JsonConvert.SerializeObject(updateTeamDto); StringContent stringContent = new StringContent(updatedJsonData, Encoding.UTF8, "application/json"); var responseMessage = await client.PutAsync($"{_apiBaseUrl}/api/Team/", stringContent); if (responseMessage.IsSuccessStatusCode) { return RedirectToAction("Index"); } } return View(updateTeamDto); } [HttpGet] public async Task DeleteTeamConfirmation(int id) { var client = _httpClientFactory.CreateClient(); var responseMessage = await client.GetAsync($"{_apiBaseUrl}/api/Team/{id}"); if (responseMessage.IsSuccessStatusCode) { var jsonData = await responseMessage.Content.ReadAsStringAsync(); var slider = JsonConvert.DeserializeObject(jsonData); return View(slider); } return View("Error"); } [HttpPost] public async Task DeleteTeam(int id) { var client = _httpClientFactory.CreateClient(); var responseMessage = await client.GetAsync($"{_apiBaseUrl}/api/Team/{id}"); if (responseMessage.IsSuccessStatusCode) { var jsonData = await responseMessage.Content.ReadAsStringAsync(); var slider = JsonConvert.DeserializeObject(jsonData); if (!string.IsNullOrEmpty(slider.ImageUrl)) { var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/Images", Path.GetFileName(slider.ImageUrl)); // 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/Team/{id}"); if (deleteResponse.IsSuccessStatusCode) { return RedirectToAction("Index"); } } return View("Error"); } } }