finish migration to Pilz.NET

This commit is contained in:
Schedel Pascal
2024-08-23 11:18:46 +02:00
parent 90283ff5df
commit 4cd52de441
10 changed files with 103 additions and 110 deletions

View File

@@ -1,44 +1,33 @@
using OwnChar.Api.Packets;
using OwnChar.Api.Packets.General;
using OwnChar.Api.Packets.General;
using OwnChar.Api.Packets.Groups;
using OwnChar.Api.Updates;
using OwnChar.Data;
using OwnChar.Data.Model.Client;
using OwnChar.Server.Data.Model;
using OwnChar.Server.Extensions;
using Pilz.Net.Api;
namespace OwnChar.Server.Api.Endpoint;
internal class GroupsApi(IServer server) : IApiEndpoint
internal class GroupsApi(IOwnCharServer server)
{
public void Initialize(IApiBuilder builder)
[MessageHandler("/group/get/byid")]
public ApiResult GetById(GetSinlgeObjectRequest request, ApiRequestInfo info)
{
builder.Map("/groups/get/byid", GetById);
builder.Map("/groups/get", Get);
builder.Map("/groups/create", Create);
builder.Map("/groups/update", Update);
builder.Map("/groups/delete", Delete);
builder.Map("/groups/members/get", GetMembers);
builder.Map("/groups/members/add", AddMembers);
builder.Map("/groups/members/update", UpdateMember);
builder.Map("/groups/members/remove", RemoveMembers);
}
private IResult GetById(GetSinlgeObjectRequest request)
{
if (!server.CheckLogin(request, UserType.Guest, out UserAccountDb? user))
return TypedResults.Unauthorized();
if (!server.CheckLogin(info, UserType.Guest, out UserAccountDb? user))
return ApiResult.Unauthorized();
if (server.Data?.Set<GroupDb>().FirstOrDefault(n => n.Id == request.ObjectId && n.Members.Any(m => m.User != null && m.User.Id == user.Id)) is not GroupDb group)
return TypedResults.Ok(new GetSingleObjectResponse<Group>(null).With(OwnCharResponseError.NotFound));
return ApiResult.NotFound();
return TypedResults.Ok(new GetSingleObjectResponse<Group>(group.ToClient()));
return ApiResult.Ok(new GetSingleObjectResponse<Group>(group.ToClient()));
}
private IResult Get(GetGroupsRequest request)
[MessageHandler("/group/get", RequiesAuth = true)]
public ApiResult Get(GetGroupsRequest request, ApiRequestInfo info)
{
if (!server.CheckLogin(request, UserType.Guest, out UserAccountDb? user))
return TypedResults.Unauthorized();
if (!server.CheckLogin(info, UserType.Guest, out UserAccountDb? user))
return ApiResult.Unauthorized();
IQueryable<GroupDb> groups;
@@ -49,13 +38,14 @@ internal class GroupsApi(IServer server) : IApiEndpoint
else
groups = Array.Empty<GroupDb>().AsQueryable(); // Currently not supported.
return TypedResults.Ok(new GetGroupsResponse([.. groups.Select(g => g.ToClient())]));
return ApiResult.Ok(new GetGroupsResponse([.. groups.Select(g => g.ToClient())]));
}
private IResult Create(CreateGroupRequest request)
[MessageHandler("/group/create", RequiesAuth = true)]
public ApiResult Create(CreateGroupRequest request, ApiRequestInfo info)
{
if (!server.CheckLogin(request, UserType.User, out UserAccountDb? user))
return TypedResults.Unauthorized();
if (!server.CheckLogin(info, UserType.User, out UserAccountDb? user))
return ApiResult.Unauthorized();
var group = new GroupDb();
@@ -71,19 +61,20 @@ internal class GroupsApi(IServer server) : IApiEndpoint
server.Data!.Update(group);
server.Data.SaveChanges();
return TypedResults.Ok(new CreateGroupResponse(group.ToClient()));
return ApiResult.Ok(new CreateGroupResponse(group.ToClient()));
}
private IResult Update(UpdateRequest request)
[MessageHandler("/group/update", RequiesAuth = true)]
public ApiResult Update(UpdateRequest request, ApiRequestInfo info)
{
if (!server.CheckLogin(request, UserType.User, out UserAccountDb? user)
if (!server.CheckLogin(info, UserType.User, out UserAccountDb? user)
|| server.Data?.Set<GroupDb>().FirstOrDefault(n => n.Id == request.Update.Id) is not GroupDb group
|| !group.Members.Any(m => m.Id == user.Profile!.Id && m.Level >= MemberLevel.Admin
|| user.IsNot(UserType.Admin)))
return TypedResults.Unauthorized();
return ApiResult.Unauthorized();
if (request.Update is not GroupUpdate update)
return TypedResults.Ok(new UpdateResponse().With(OwnCharResponseError.Default));
return ApiResult.NotFound();
group.Name = update.Name;
group.Fandom = update.Fandom;
@@ -91,42 +82,45 @@ internal class GroupsApi(IServer server) : IApiEndpoint
server.Data.Update(group);
server.Data.SaveChanges();
return TypedResults.Ok(new UpdateResponse());
return ApiResult.Ok();
}
private IResult Delete(DeleteObjectRequest request)
[MessageHandler("/group/delete", RequiesAuth = true)]
public ApiResult Delete(DeleteObjectRequest request, ApiRequestInfo info)
{
if (!server.CheckLogin(request, UserType.User, out UserAccountDb? user)
if (!server.CheckLogin(info, UserType.User, out UserAccountDb? user)
|| server.Data?.Set<GroupDb>().FirstOrDefault(n => n.Id == request.ObjectId) is not GroupDb group
|| !group.Members.Any(m => m.Id == user.Profile!.Id && m.Level >= MemberLevel.Owner)
|| user.IsNot(UserType.Admin))
return TypedResults.Unauthorized();
return ApiResult.Unauthorized();
server.Data.Remove(group);
server.Data.SaveChanges();
return TypedResults.Ok(new DeleteObjectResponse());
return ApiResult.Ok();
}
private IResult GetMembers(GetGroupMembersRequest request)
[MessageHandler("/group/members/get", RequiesAuth = true)]
public ApiResult GetMembers(GetGroupMembersRequest request, ApiRequestInfo info)
{
if (!server.CheckLogin(request, UserType.User, out UserAccountDb? user)
if (!server.CheckLogin(info, UserType.User, out UserAccountDb? user)
|| server.Data?.Set<GroupDb>().FirstOrDefault(n => n.Id == request.GroupId) is not GroupDb group
|| !group.Members.Any(m => m.Id == user.Profile!.Id && m.Level >= MemberLevel.Member)
|| user.IsNot(UserType.Admin))
return TypedResults.Unauthorized();
return ApiResult.Unauthorized();
var members = group.Members.Select(n => n.ToClient());
return TypedResults.Ok(new GetGroupMembersResponse(members.ToList()));
return ApiResult.Ok(new GetGroupMembersResponse(members.ToList()));
}
private IResult AddMembers(GroupMemberAddRequest request)
[MessageHandler("/group/members/add", RequiesAuth = true)]
public ApiResult AddMembers(GroupMemberAddRequest request, ApiRequestInfo info)
{
if (!server.CheckLogin(request, UserType.User, out UserAccountDb? user)
if (!server.CheckLogin(info, UserType.User, out UserAccountDb? user)
|| server.Data?.Set<GroupDb>().FirstOrDefault(n => n.Id == request.GroupId) is not GroupDb group
|| !group.Members.Any(m => m.Id == user.Profile!.Id && m.Level >= MemberLevel.Admin)
|| user.IsNot(UserType.Admin))
return TypedResults.Unauthorized();
return ApiResult.Unauthorized();
var addedMembers = new List<MemberEntryDb>();
@@ -146,43 +140,45 @@ internal class GroupsApi(IServer server) : IApiEndpoint
}
}
return TypedResults.Ok(new GroupMemberAddResponse(addedMembers.Select(m => m.ToClient()).ToList()));
return ApiResult.Ok(new GroupMemberAddResponse(addedMembers.Select(m => m.ToClient()).ToList()));
}
private IResult UpdateMember(UpdateRequest request)
[MessageHandler("/group/members/update", RequiesAuth = true)]
public ApiResult UpdateMember(UpdateRequest request, ApiRequestInfo info)
{
if (!server.CheckLogin(request, UserType.User, out UserAccountDb? user)
if (!server.CheckLogin(info, UserType.User, out UserAccountDb? user)
|| server.Data?.Set<GroupDb>().FirstOrDefault(n => n.Id == request.Update.Id) is not GroupDb group
|| group.Members.FirstOrDefault(m => m.Id == request.Update.Id) is not MemberEntryDb member
|| !group.Members.Any(m => m.Id == user.Profile!.Id && m.Level >= MemberLevel.Admin
|| user.IsNot(UserType.Admin)))
return TypedResults.Unauthorized();
return ApiResult.Unauthorized();
if (request.Update is not MemberUpdate update)
return TypedResults.Ok(new UpdateResponse().With(OwnCharResponseError.Default));
return ApiResult.NotFound();
member.Level = update.Level;
server.Data.Update(member);
server.Data.SaveChanges();
return TypedResults.Ok(new UpdateResponse());
return ApiResult.Ok();
}
private IResult RemoveMembers(DeleteObjectRequest request)
[MessageHandler("/group/members/remove", RequiesAuth = true)]
public ApiResult RemoveMembers(DeleteObjectRequest request, ApiRequestInfo info)
{
if (!server.CheckLogin(request, UserType.User, out UserAccountDb? user)
if (!server.CheckLogin(info, UserType.User, out UserAccountDb? user)
|| server.Data?.Set<MemberEntryDb>().FirstOrDefault(m => m.Id == request.ObjectId) is not MemberEntryDb member
|| server.Data?.Set<GroupDb>().FirstOrDefault(n => n.Members.Contains(member)) is not GroupDb group
|| !group.Members.Any(m => m.Id == user.Profile!.Id && m.Level >= MemberLevel.Admin
|| user.IsNot(UserType.Admin)))
return TypedResults.Unauthorized();
return ApiResult.Unauthorized();
group.Members.Remove(member);
server.Data.Remove(member);
server.Data.Update(group);
server.Data.SaveChanges();
return TypedResults.Ok(new DeleteObjectResponse());
return ApiResult.Ok();
}
}