using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Watcher.Data; using Watcher.Models; using Watcher.ViewModels; [Authorize] public class ServerController : Controller { private readonly AppDbContext _context; public ServerController(AppDbContext context) { _context = context; } public async Task Overview() { var vm = new ServerOverviewViewModel { Servers = await _context.Servers.OrderBy(s => s.Id).ToListAsync() }; return View(vm); } [HttpGet] public IActionResult AddServer() { return View(); } [HttpPost] public async Task AddServer(AddServerViewModel vm) { if (!ModelState.IsValid) return View(vm); var server = new Server { Name = vm.Name, IPAddress = vm.IPAddress, Type = vm.Type, IsOnline = vm.IsOnline, }; _context.Servers.Add(server); await _context.SaveChangesAsync(); return RedirectToAction(nameof(Overview)); } [HttpPost] [ValidateAntiForgeryToken] public async Task Delete(int id) { var server = await _context.Servers.FindAsync(id); if (server == null) { return NotFound(); } _context.Servers.Remove(server); await _context.SaveChangesAsync(); return RedirectToAction(nameof(Overview)); } // GET: Server/Edit/5 public async Task EditServer(int id) { var server = await _context.Servers.FindAsync(id); if (server == null) return NotFound(); var vm = new EditServerViewModel { Name = server.Name, IPAddress = server.IPAddress, Type = server.Type }; return View(vm); } // POST: Server/Edit/5 [HttpPost] [ValidateAntiForgeryToken] public async Task EditServer(int id, EditServerViewModel vm) { if (ModelState.IsValid) { var server = await _context.Servers.FindAsync(id); if (server == null) return NotFound(); server.Name = vm.Name; server.IPAddress = vm.IPAddress; server.Type = vm.Type; await _context.SaveChangesAsync(); return RedirectToAction(nameof(Overview)); } return View(vm); } public async Task ServerCardsPartial() { var servers = _context.Servers.ToList(); foreach (var server in servers) { server.IsOnline = (DateTime.UtcNow - server.LastSeen).TotalSeconds <= 120; await _context.SaveChangesAsync(); } return PartialView("_ServerCard", servers); // korrekt } }