using ConstructorAppUI.Dtos.ProjectDtos; using ConstructorAppUI.Dtos.ProjectGalleryDtos; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Newtonsoft.Json; using System.Text; namespace ConstructorAppUI.Controllers { public class ProjectGalleryController : Controller { private readonly IHttpClientFactory _httpClientFactory; private readonly IWebHostEnvironment _webHostEnvironment; private readonly string _apiBaseUrl; public ProjectGalleryController(IHttpClientFactory httpClientFactory, IWebHostEnvironment webHostEnvironment, IConfiguration configuration) { _httpClientFactory = httpClientFactory; _webHostEnvironment = webHostEnvironment; _apiBaseUrl = configuration["ApiSettings:BaseUrl"]; } public async Task Index(int? projectId) { var client = _httpClientFactory.CreateClient(); // Tüm galerileri al var galleryResponse = await client.GetAsync($"{_apiBaseUrl}/api/ProjectGallery/GetByProjectId/{projectId}"); var galleryValues = new List(); if (galleryResponse.IsSuccessStatusCode) { var jsonData = await galleryResponse.Content.ReadAsStringAsync(); galleryValues = JsonConvert.DeserializeObject>(jsonData); } // Tüm projeleri al (dropdown için) var projectResponse = await client.GetAsync($"{_apiBaseUrl}/api/Project"); if (projectResponse.IsSuccessStatusCode) { var projectJson = await projectResponse.Content.ReadAsStringAsync(); var projectValues = JsonConvert.DeserializeObject>(projectJson); ViewBag.ProjectList = new SelectList(projectValues, "ProjectID", "Title"); } // BaseUrl'i View'a aktar ViewData["ApiBaseUrl"] = _apiBaseUrl; return View(galleryValues); } public async Task GetByProjectId(int projectId) { var client = _httpClientFactory.CreateClient(); var response = await client.GetAsync($"{_apiBaseUrl}/api/ProjectGallery/GetByProjectId/{projectId}"); if (response.IsSuccessStatusCode) { var json = await response.Content.ReadAsStringAsync(); var data = JsonConvert.DeserializeObject>(json); return Json(data); } return Json(new List()); } [HttpGet] public async Task CreateProjectGalleryAsync() { var client = _httpClientFactory.CreateClient(); var response = await client.GetAsync($"{_apiBaseUrl}/api/Project"); if (!response.IsSuccessStatusCode) { return View(); // veya hata sayfası } var json = await response.Content.ReadAsStringAsync(); var projects = JsonConvert.DeserializeObject>(json); ViewBag.ProjectList = new SelectList(projects, "ProjectID", "Title"); return View(); } [HttpPost] public async Task CreateProjectGallery(int projectId, List GalleryFiles) { if (GalleryFiles == null || !GalleryFiles.Any()) { return BadRequest("Hiç görsel seçilmedi."); } foreach (var file in GalleryFiles) { // Görseli sunucuda kaydet var imagePath = Path.Combine(_webHostEnvironment.WebRootPath, "Images", file.FileName); using (var stream = new FileStream(imagePath, FileMode.Create)) { await file.CopyToAsync(stream); } // API'ye gönderilecek DTO var dto = new CreateProjectGalleryDto { ProjectID = projectId, ImageUrl = "/Images/" + file.FileName }; var client = _httpClientFactory.CreateClient(); var jsonData = JsonConvert.SerializeObject(dto); var content = new StringContent(jsonData, Encoding.UTF8, "application/json"); await client.PostAsync($"{_apiBaseUrl}/api/ProjectGallery", content); } return RedirectToAction("Index", "ProjectGallery", new { id = projectId }); } } }