diff --git a/assets/openapi.json b/assets/openapi.json index a06d0d7..ee3b874 100644 --- a/assets/openapi.json +++ b/assets/openapi.json @@ -4647,7 +4647,7 @@ "name": { "type": "string" }, - "avatar": { + "icon": { "type": "string", "nullable": true } @@ -5696,6 +5696,9 @@ 4 ], "type": "number" + }, + "confirm_stranger_request": { + "type": "boolean" } } }, diff --git a/assets/schemas.json b/assets/schemas.json index f10afc4..289dec6 100644 --- a/assets/schemas.json +++ b/assets/schemas.json @@ -4931,7 +4931,7 @@ "name": { "type": "string" }, - "avatar": { + "icon": { "type": [ "null", "string" @@ -6051,6 +6051,9 @@ 4 ], "type": "number" + }, + "confirm_stranger_request": { + "type": "boolean" } }, "additionalProperties": false, diff --git a/extra/admin-api/Interop/Spacebar.Interop.Replication.UnixSocket/UnixSocketSpacebarReplication.cs b/extra/admin-api/Interop/Spacebar.Interop.Replication.UnixSocket/UnixSocketSpacebarReplication.cs index a817335..2959c71 100644 --- a/extra/admin-api/Interop/Spacebar.Interop.Replication.UnixSocket/UnixSocketSpacebarReplication.cs +++ b/extra/admin-api/Interop/Spacebar.Interop.Replication.UnixSocket/UnixSocketSpacebarReplication.cs @@ -34,7 +34,7 @@ public class UnixSocketConfiguration { public UnixSocketConfiguration(IConfiguration config) { - config.GetRequiredSection("UnixSocketReplication").Bind(this); + config.GetRequiredSection("Spacebar").GetRequiredSection("UnixSocketReplication").Bind(this); } public string SocketDir { get; set; } = null!; diff --git a/extra/admin-api/Spacebar.AdminApi/Program.cs b/extra/admin-api/Spacebar.AdminApi/Program.cs index b0f8f20..072fba4 100644 --- a/extra/admin-api/Spacebar.AdminApi/Program.cs +++ b/extra/admin-api/Spacebar.AdminApi/Program.cs @@ -36,6 +36,7 @@ // 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 0000000..6206a6c --- /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 0000000..d530356 --- /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 0000000..47a516a --- /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 4695b7a..d6bb0d9 100644 --- a/extra/admin-api/Spacebar.UApi/Program.cs +++ b/extra/admin-api/Spacebar.UApi/Program.cs @@ -4,6 +4,7 @@ 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.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 0000000..ae7b86a --- /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 3ce9862..31035b7 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; }