Files
watcher/Watcher/Controllers/ServerController.cs
2025-06-21 15:57:48 +02:00

122 lines
2.9 KiB
C#

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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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
}
}