XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEWorkflow

【WinUI】XFE基于windows的工作流

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Net;
using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
using XFEExtension.NetCore.ServerInteractive.Attributes;
using XFEExtension.NetCore.ServerInteractive.Implements.CoreService;
using XFEExtension.NetCore.ServerInteractive.Utilities.Server.Services.CoreService;
using XFEWorkflow.Abstractions;
using XFEWorkflow.Space.Contracts;

namespace XFEWorkflow.Space.Server;

public static class SpaceHost { public static SpaceStore Store { get; set; } = null!; }
public partial class SpacePublicService : ServerCoreStandardServiceBase
{
    [EntryPoint("health")]
    [EntryPoint("register")]
    [EntryPoint("plugins/search")]
    [EntryPoint("plugins/detail")]
    [EntryPoint("workflows/search")]
    [EntryPoint("workflows/detail")]
    [EntryPoint("workflows/preview")]
    [EntryPoint("packages/chunk")]
    [NoLog]
    public async Task Execute()
    {
        try
        {
            var body = Args.Context?.Body ?? ReadOnlyMemory<byte>.Empty;
            var input = body.Length == 0 ? new JsonObject() : JsonNode.Parse(body.Span) as JsonObject ?? throw new InvalidDataException("请求必须是 JSON 对象");
            await Close((await SpaceHost.Store.PublicAsync(Route, input)).ToJsonString(WorkflowJson.Options));
        }
        catch (Exception ex) when (ex is ArgumentException or InvalidOperationException or InvalidDataException or IOException or FormatException or JsonException)
        { await CloseWithError(ex.Message, HttpStatusCode.BadRequest); }
    }
}
public partial class SpaceAuthorService : ServerCoreUserServiceBase
{
    [EntryPoint("plugins/mine")]
    [EntryPoint("workflows/mine")]
    [EntryPoint("workflows/preview/private")]
    [EntryPoint("workflows/withdraw")]
    [EntryPoint("uploads/cancel")]
    [EntryPoint("uploads/begin")]
    [EntryPoint("uploads/chunk")]
    [EntryPoint("uploads/complete")]
    [EntryPoint("reviews/list")]
    [EntryPoint("reviews/decide")]
    [EntryPoint("plugins/withdraw")]
    [EntryPoint("account/profile")]
    [EntryPoint("account/update")]
    [NoLog]
    public async Task Execute()
    {
        try
        {
            var current = SpaceHost.Store.PublicUser(User);
            var input = JsonNode.Parse((Args.Context?.Body ?? ReadOnlyMemory<byte>.Empty).Span) as JsonObject ?? throw new InvalidDataException("请求必须是 JSON 对象");
            await Close((await SpaceHost.Store.AuthorAsync(Route, input, current)).ToJsonString(WorkflowJson.Options));
        }
        catch (UnauthorizedAccessException ex) { await CloseWithError(ex.Message, HttpStatusCode.Forbidden); }
        catch (Exception ex) when (ex is ArgumentException or InvalidOperationException or InvalidDataException or IOException or FormatException or JsonException)
        { await CloseWithError(ex.Message, HttpStatusCode.BadRequest); }
    }
}
public partial class SpaceLoginService : UserLoginService<SpaceUser>
{
    [EntryPoint("login")]
    [NoLog]
    public Task SpaceLogin() => Login();
}
public partial class SpaceReloginService : UserReloginService<SpaceUser>
{
    [EntryPoint("relogin")]
    [NoLog]
    public Task SpaceRelogin() => Relogin();
}