From 8be1a310b1df146620af2a748891d60bd0b686b6 Mon Sep 17 00:00:00 2001 From: Rory& Date: Sun, 15 Feb 2026 19:23:29 +0100 Subject: [PATCH] Some unfinished templates work --- assets/openapi.json | Bin 932832 -> 932945 bytes assets/schemas.json | Bin 405645 -> 405734 bytes .../UnixSocketSpacebarReplication.cs | 2 +- extra/admin-api/Spacebar.AdminApi/Program.cs | 1 + .../Controllers/GuildTemplatesController.cs | 16 ++++ .../Spacebar.UApi/Models/GuildTemplate.cs | 73 ++++++++++++++++++ .../Models/UseGuildTemplateRequest.cs | 14 ++++ extra/admin-api/Spacebar.UApi/Program.cs | 2 + .../Services/TemplateImportService.cs | 13 ++++ .../GuildTemplateCreateSchema.ts | 2 +- 10 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 extra/admin-api/Spacebar.UApi/Controllers/GuildTemplatesController.cs create mode 100644 extra/admin-api/Spacebar.UApi/Models/GuildTemplate.cs create mode 100644 extra/admin-api/Spacebar.UApi/Models/UseGuildTemplateRequest.cs create mode 100644 extra/admin-api/Spacebar.UApi/Services/TemplateImportService.cs diff --git a/assets/openapi.json b/assets/openapi.json index a06d0d78286ea6d915cfb7b557c9728004fb1fc7..ee3b874614f583b6cfcbe72b8ccb2e42cf14b598 100644 GIT binary patch delta 128 zcmaFx-Qwa8i-s1)Ele|eryIC26;5ur;4ytd1ry8k^$|>hlMUjOxA*ih6;7O9V8t#W znxB`JS(F=JTvC*nm!4V_UzA!{nmWBugV}9zgRg$Ojsi0fvj8zG5VHX>I}mdKF((jn S0Wmia^8hjLb{z%2Ez$sA87iXy delta 92 zcmcck!{Whri-s1)Ele|erz=D<7f)`u;4$5yg4uZbe;G#B?OlCLg%c+?`0BUMRbU2U i79eH?Vm2UV2VxE&<^*CcAm#>Q9w6r3K39Qni!=b_`Xbi= diff --git a/assets/schemas.json b/assets/schemas.json index f10afc4a44b90fff6958f553c5c2a3a4d520e82d..289dec600fc111978a15e020c7d21c804b019388 100644 GIT binary patch delta 100 zcmeBuDDmu}L_-VX7A6**>G8=diqi|uGi{hYL7jzVdcZrDu*m`MSht($GHtJ({2)(A zBrUTjH@>)}C^0WRwJ5$QwXig`c=E?8`RNbdvII^4V8!Inp1G0aGNn~vOWjv^bH2gp_2pNv2HifW!hdn ZUBH2(); // builder.Services.AddSingleton(); // builder.Services.AddSingleton(); // builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddRequestTimeouts(x => { diff --git a/extra/admin-api/Spacebar.UApi/Controllers/GuildTemplatesController.cs b/extra/admin-api/Spacebar.UApi/Controllers/GuildTemplatesController.cs new file mode 100644 index 000000000..6206a6c40 --- /dev/null +++ b/extra/admin-api/Spacebar.UApi/Controllers/GuildTemplatesController.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Mvc; +using Spacebar.Interop.Authentication.AspNetCore; +using Spacebar.Models.Db.Contexts; +using Spacebar.UApi.Models; +using Spacebar.UApi.Services; + +namespace Spacebar.UApi.Controllers; + +[ApiController] +public class GuildTemplatesController(ILogger logger, SpacebarDbContext db, SpacebarAspNetAuthenticationService authService, TemplateImportService importService) : ControllerBase { + [HttpPost("/api/v10/guilds/templates/{templateId}")] + public async Task UseTemplate(string templateId, UseGuildTemplateRequest request) { + var user = await authService.GetCurrentUserAsync(Request); + await importService.CreateGuildFromTemplateById(templateId, request, user); + } +} \ No newline at end of file diff --git a/extra/admin-api/Spacebar.UApi/Models/GuildTemplate.cs b/extra/admin-api/Spacebar.UApi/Models/GuildTemplate.cs new file mode 100644 index 000000000..d53035692 --- /dev/null +++ b/extra/admin-api/Spacebar.UApi/Models/GuildTemplate.cs @@ -0,0 +1,73 @@ +using System.Text.Json.Nodes; +using System.Text.Json.Serialization; + +namespace Spacebar.UApi.Models; + +// TODO: real schemas +public class GuildTemplate { + [JsonPropertyName("code")] + public string Code { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("description")] + public string Description { get; set; } + + [JsonPropertyName("usage_count")] + public int UsageCount { get; set; } + + [JsonPropertyName("creator_id")] + public string CreatorId { get; set; } + + [JsonPropertyName("creator")] + public JsonObject Creator { get; set; } + + [JsonPropertyName("created_at")] + public DateTimeOffset CreatedAt { get; set; } + + [JsonPropertyName("updated_at")] + public DateTimeOffset UpdatedAt { get; set; } + + [JsonPropertyName("source_guild_id")] + public string SourceGuildId { get; set; } + + [JsonPropertyName("serialized_source_guild")] + public SerializedSourceGuild SerializedSourceGuild { get; set; } +} + +public class SerializedSourceGuild { } + +public class GuildTemplateRole { + [JsonPropertyName("id")] + public int Id { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } + + [JsonPropertyName("permissions")] + public string Permissions { get; set; } + + // "color" ignored for now - is deprecated anyhow + [JsonPropertyName("colors")] + public RoleColors Colors { get; set; } + + [JsonPropertyName("hoist")] + public bool Hoist { get; set; } + + [JsonPropertyName("mentionable")] + public bool Mentionable { get; set; } + + // [JsonPropertyName("icon")] +} + +public class RoleColors { + [JsonPropertyName("primary_color")] + public int PrimaryColor { get; set; } + + [JsonPropertyName("secondary_color")] + public int? SecondaryColor { get; set; } + + [JsonPropertyName("tertiary_color")] + public int TertiaryColor { get; set; } +} \ No newline at end of file diff --git a/extra/admin-api/Spacebar.UApi/Models/UseGuildTemplateRequest.cs b/extra/admin-api/Spacebar.UApi/Models/UseGuildTemplateRequest.cs new file mode 100644 index 000000000..47a516a04 --- /dev/null +++ b/extra/admin-api/Spacebar.UApi/Models/UseGuildTemplateRequest.cs @@ -0,0 +1,14 @@ +using System.Text.Json.Serialization; + +namespace Spacebar.UApi.Models; + +public class UseGuildTemplateRequest { + /// + /// Data URI encoded image + /// + [JsonPropertyName("icon")] + public string? Icon { get; set; } + + [JsonPropertyName("name")] + public string Name { get; set; } +} \ No newline at end of file diff --git a/extra/admin-api/Spacebar.UApi/Program.cs b/extra/admin-api/Spacebar.UApi/Program.cs index 4695b7abc..d6bb0d96e 100644 --- a/extra/admin-api/Spacebar.UApi/Program.cs +++ b/extra/admin-api/Spacebar.UApi/Program.cs @@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore; using Spacebar.Interop.Authentication; using Spacebar.Interop.Authentication.AspNetCore; using Spacebar.Models.Db.Contexts; +using Spacebar.UApi.Services; var builder = WebApplication.CreateBuilder(args); if (!string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable("APPSETTINGS_PATH"))) @@ -32,6 +33,7 @@ builder.Services.AddDbContextPool(options => { builder.Services.AddSingleton(); builder.Services.AddScoped(); builder.Services.AddScoped(); +builder.Services.AddScoped(); var app = builder.Build(); diff --git a/extra/admin-api/Spacebar.UApi/Services/TemplateImportService.cs b/extra/admin-api/Spacebar.UApi/Services/TemplateImportService.cs new file mode 100644 index 000000000..ae7b86a2c --- /dev/null +++ b/extra/admin-api/Spacebar.UApi/Services/TemplateImportService.cs @@ -0,0 +1,13 @@ +using Spacebar.Models.Db.Contexts; +using Spacebar.Models.Db.Models; +using Spacebar.UApi.Models; + +namespace Spacebar.UApi.Services; + +public class TemplateImportService(SpacebarDbContext db) { + public async Task CreateGuildFromTemplateById(string templateId, UseGuildTemplateRequest request, User user) { + return ""; + } + + public async Task<> +} \ No newline at end of file diff --git a/src/schemas/uncategorised/GuildTemplateCreateSchema.ts b/src/schemas/uncategorised/GuildTemplateCreateSchema.ts index 3ce9862f0..31035b784 100644 --- a/src/schemas/uncategorised/GuildTemplateCreateSchema.ts +++ b/src/schemas/uncategorised/GuildTemplateCreateSchema.ts @@ -18,5 +18,5 @@ export interface GuildTemplateCreateSchema { name: string; - avatar?: string | null; + icon?: string | null; }