using Berufsschule_HAM.Services; using Berufsschule_HAM.Models; using Microsoft.AspNetCore.Mvc; using System.Text.Json; using Microsoft.AspNetCore.Authorization; using Novell.Directory.Ldap; using Berufsschule_HAM.Helpers; [Authorize] [Route("[controller]")] public class LocationsController : Controller { private readonly LdapService _ldap; private readonly ILogger _logger; public LocationsController(LdapService ldap, ILogger logger) { _ldap = ldap; _logger = logger; } [HttpGet("Index")] public async Task> Index() { IEnumerable list = await _ldap.ListLocationsAsync(); return list; } [HttpGet("Create")] public async Task Create(LocationsCreateRequestModel model) { try { LocationsDescription room = model.LocationsDescription; string location = StringHelpers.Slugify(room.Location + " " + room.RoomNumber + " " + room.Seat); LdapAttributeSet attributeSet = [ new LdapAttribute("objectClass", "locality"), new LdapAttribute("objectClass", "top"), new LdapAttribute("l", location), new LdapAttribute("description", JsonSerializer.Serialize(room)) ]; await _ldap.CreateLocation(attributeSet); return true; } catch (Exception ex) { _logger.LogError("Unable to create location: {ex.Message} - {ex.StackTrace}", [ex.Message, ex.StackTrace]); return false; } } [HttpGet("Delete")] public async Task Delete(string cn) { if (cn is null) { return false; } return await Task.Run(async () => { try { await _ldap.DeleteLocationAsync(cn); return true; } catch (Exception) { return false; } }); } [HttpPost("Update")] public async Task Update(LocationsModifyRequestModel requestModel) { if (requestModel is null) { _logger.LogError("Unable to update a location because the LocationsModifyRequestModel is null"); return false; } try { string location = requestModel.Location; LocationsDescription room = requestModel.Description; string newLocation = StringHelpers.Slugify(room.Location + " " + room.RoomNumber + " " + room.Seat); // TODO: fix DRY violation await _ldap.UpdateLocation(location, "description", JsonSerializer.Serialize(room)); await _ldap.UpdateLocation(location, "l", newLocation); return true; } catch (Exception ex) { _logger.LogError("Unable to update location: {ex.Message} - {ex.StackTrace}", [ex.Message, ex.StackTrace]); return false; } } }