Files
LuskiServer/LuskiServer/Controllers/v1/SocketRoleController.cs
JacobTech fae28490cd Server Update
Lots of changes
2024-08-27 10:58:42 -04:00

216 lines
8.5 KiB
C#

using Asp.Versioning;
using Luski.Shared.PublicServers.V1.ClientToServer.HTTP;
using Luski.Shared.PublicServers.V1.Enums;
using Luski.Shared.PublicServers.V1.ServerToClient.HTTP;
using Luski.Shared.PublicServers.V1.ServerToClient.WSS;
using Luski.Shared.PublicServers.V1.Shared;
using LuskiServer.Classes;
using LuskiServer.Classes.ServerComs;
using LuskiServer.Classes.TableDef;
using LuskiServer.Enums.ServerComs;
using Microsoft.AspNetCore.Mvc;
using ServerDatabase;
namespace LuskiServer.Controllers.v1;
[ApiVersion(1)]
[ApiController]
public class SocketRoleController : ControllerBase
{
[HttpPost]
[Route(LuskiFunctions.Info.Routes.Default.Base)]
public IActionResult Post([FromBody]RolePostCTS Role)
{
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
LuskiFunctions.Snowflake sf = LuskiFunctions.Snowflake.GenerateSnowflake();
Tables.Roles.Insert(
Roles.ID.CreateParameter(sf.ID),
Roles.Description.CreateParameter(Role.Description),
Roles.DisplayName.CreateParameter(Role.DisplayName),
Roles.ColorType.CreateParameter(Role.ColorType),
Roles.Color.CreateParameter(Convert.FromHexString(Role.Color)),
Roles.ServerPermissions.CreateParameter(Role.ServerPermissions),
Roles.Index.CreateParameter(Role.Index));
WSS.SendData(SendType.All, new ServerEvent()
{
Type = DataType.Role,
Data = new RoleEvent()
{
ID = sf.ID,
ServerPermissions = Role.ServerPermissions,
Description = Role.Description,
DisplayName = Role.DisplayName,
Index = Role.Index,
ColorType = Role.ColorType,
Color = Role.Color
}
});
return this.ResponseToResult(new RoleSTC()
{
ID = sf.ID,
ServerPermissions = Role.ServerPermissions,
Description = Role.Description,
DisplayName = Role.DisplayName,
Index = Role.Index,
Members = Array.Empty<long>(),
ColorType = Role.ColorType,
Color = Role.Color
});
}
[HttpPatch]
[Route(LuskiFunctions.Info.Routes.Default.Base)]
public IActionResult Patch([FromBody]RolePatchCTS Role)
{
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
if (!Tables.Roles.TryReadRow(out RoleRow row, Roles.ID.CreateParameter(Role.ID))) return this.ShowError(ErrorCode.Forbidden, "Role does not exist");
CommandHandler<RoleRow> command = Tables.Roles.CreateCommand().WithFilter(Roles.ID, Role.ID);
RoleEvent re = new()
{
ID = row.ID
};
if (Role.ServerPermissions is not null)
{
command = command.WithValue(Roles.ServerPermissions, Role.ServerPermissions.Value);
row.ServerPermissions = Role.ServerPermissions.Value;
re.ServerPermissions = Role.ServerPermissions.Value;
}
if (Role.Description is not null)
{
command = command.WithValue(Roles.Description, Role.Description);
row.Description = Role.Description;
re.Description = Role.Description;
}
if (Role.Index is not null)
{
command = command.WithValue(Roles.Index, Role.Index.Value);
row.Index = Role.Index.Value;
re.Index = Role.Index.Value;
}
if (Role.DisplayName is not null)
{
command = command.WithValue(Roles.DisplayName, Role.DisplayName);
row.DisplayName = Role.DisplayName;
re.DisplayName = Role.DisplayName;
}
if (Role.ColorType is not null)
{
command = command.WithValue(Roles.ColorType, Role.ColorType.Value);
row.ColorType = Role.ColorType.Value;
re.ColorType = Role.ColorType.Value;
}
if (Role.Color is not null)
{
command = command.WithValue(Roles.Color, Convert.FromHexString(Role.Color));
row.Color = Convert.FromHexString(Role.Color);
re.Color = Role.Color;
}
command.Update();
WSS.SendData(SendType.All, new ServerEvent()
{
Type = DataType.Role,
Data = re
});
return this.ResponseToResult(new RoleSTC()
{
ID = row.ID,
ServerPermissions = row.ServerPermissions,
Description = row.Description,
DisplayName = row.DisplayName,
Index = row.Index,
Members = Tables.RoleMembers.ReadColumn(RoleMembers.User, RoleMembers.Role.CreateParameter(row.ID)),
ColorType = row.ColorType,
Color = Convert.ToHexString(row.Color)
});
}
[HttpPatch]
[Route(LuskiFunctions.Info.Routes.Default.Base + "/Members")]
public IActionResult MemberPatch([FromBody]RoleMembersPatchCTS Role)
{
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
if (!Tables.Roles.TryReadRow(out RoleRow row, Roles.ID.CreateParameter(Role.ID))) return this.ShowError(ErrorCode.Forbidden, "Role does not exist");
LuskiFunctions.Database.ExecuteNonQuery($"DELETE FROM {Tables.RoleMembers.Name} WHERE {RoleMembers.Role.Name} = {Role.ID} AND {RoleMembers.User.Name} IN ({string.Join(", ", Role.RemovedMembers)})");
foreach (long am in Role.AddedMembers)
{
try
{
Tables.RoleMembers.Insert(RoleMembers.Role.CreateParameter(Role.ID), RoleMembers.User.CreateParameter(am));
}
catch
{
//ignore
}
}
WSS.SendData(SendType.All, new ServerEvent()
{
Type = DataType.RoleMember,
Data = new RoleEvent()
{
ID = row.ID,
ServerPermissions = row.ServerPermissions,
Description = row.Description,
DisplayName = row.DisplayName,
Index = row.Index,
Color = Convert.ToHexString(row.Color)
}
});
return this.ResponseToResult(new RoleSTC()
{
ID = row.ID,
ServerPermissions = row.ServerPermissions,
Description = row.Description,
DisplayName = row.DisplayName,
Index = row.Index,
Members = Tables.RoleMembers.ReadColumn(RoleMembers.User, RoleMembers.Role.CreateParameter(row.ID)),
Color = Convert.ToHexString(row.Color)
});
}
[HttpGet]
[Route(LuskiFunctions.Info.Routes.Default.Base)]
public IActionResult Get([FromQuery(Name = "id")]long id)
{
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
if (!Tables.Roles.TryReadRow(out RoleRow row, Roles.ID.CreateParameter(id))) return this.ShowError(ErrorCode.Forbidden, "Role does not exist");
return this.ResponseToResult(new RoleSTC()
{
ID = row.ID,
ServerPermissions = row.ServerPermissions,
Description = row.Description,
DisplayName = row.DisplayName,
Index = row.Index,
Members = Tables.RoleMembers.ReadColumn(RoleMembers.User, RoleMembers.Role.CreateParameter(row.ID)),
ColorType = row.ColorType,
Color = Convert.ToHexString(row.Color)
});
}
[HttpGet]
[Route(LuskiFunctions.Info.Routes.Default.Base + "/GetAll")]
public IActionResult GetAll()
{
if (!this.CanTokenRequest(out long ID, out long SID, out IActionResult? toc) && toc != null) return toc;
RoleRow[] rows = Tables.Roles.ReadRows();
List<RoleSTC> r = new();
for (int i = 0; i < rows.Length; i++)
{
r.Add(new()
{
ID = rows[i].ID,
ServerPermissions = rows[i].ServerPermissions,
Description = rows[i].Description,
DisplayName = rows[i].DisplayName,
Index = rows[i].Index,
Members = Tables.RoleMembers.ReadColumn(RoleMembers.User, RoleMembers.Role.CreateParameter(rows[i].ID)),
ColorType = rows[i].ColorType,
Color = Convert.ToHexString(rows[i].Color)
});
}
return this.ResponseToResult(new RolesSTC()
{
Roles = r.ToArray()
});
}
}