using LendWise.Web.Data; using LendWise.Web.Models; using LendWise.Web.Services; using Microsoft.AspNetCore.Mvc; namespace LendWise.Web.Controllers; public class HomeController(AppDbContext db, ILogger logger) : Controller { private static readonly string[] Topics = ["General", "Loan enquiry", "Partnership", "Careers", "Grievance"]; [HttpGet("")] public IActionResult Index() => View(); [HttpGet("about")] public IActionResult About() => View(); [HttpGet("career")] public IActionResult Career() => View(); [HttpGet("partner-with-us")] public IActionResult Partner() => View(); [HttpGet("privacy-policy")] public IActionResult Privacy() => View(); [HttpGet("terms-and-conditions")] public IActionResult Terms() => View(); [HttpGet("disclaimer")] public IActionResult Disclaimer() => View(); [HttpGet("guides")] public IActionResult Guides() => View(GuideCatalog.All); [HttpGet("guides/{slug}")] public IActionResult Guide(string slug) { var guide = GuideCatalog.Find(slug); return guide is null ? NotFound() : View(guide); } [HttpGet("contact")] public IActionResult Contact(string? topic) { var model = new ContactViewModel { Topic = Topics.Contains(topic) ? topic! : "General" }; return View(model); } [HttpPost("contact")] [ValidateAntiForgeryToken] public async Task Contact(ContactViewModel model) { // Bots fill the hidden field; pretend it worked and do nothing. if (!string.IsNullOrWhiteSpace(model.Website)) { TempData["Sent"] = true; return RedirectToAction(nameof(Contact)); } if (!Topics.Contains(model.Topic)) { ModelState.AddModelError(nameof(model.Topic), "Choose a topic."); } if (!ModelState.IsValid) { return View(model); } try { db.ContactMessages.Add(new ContactMessage { Name = model.Name.Trim(), Email = model.Email.Trim(), Phone = string.IsNullOrWhiteSpace(model.Phone) ? null : model.Phone.Trim(), Topic = model.Topic, Message = model.Message.Trim() }); await db.SaveChangesAsync(); } catch (Exception ex) { logger.LogError(ex, "Could not save contact message."); ModelState.AddModelError(string.Empty, "We could not send your message just now. Please try again in a few minutes."); return View(model); } TempData["Sent"] = true; return RedirectToAction(nameof(Contact)); } [HttpGet("error/{code:int?}")] public IActionResult Error(int? code) { var status = code ?? 500; Response.StatusCode = status; return View(status); } }