mirror of
https://github.com/chylex/Discord-History-Tracker.git
synced 2024-12-22 23:42:50 +01:00
42 lines
1.6 KiB
C#
42 lines
1.6 KiB
C#
using System.Net;
|
|
using System.Text.Json;
|
|
using System.Threading.Tasks;
|
|
using DHT.Server.Data;
|
|
using DHT.Server.Database;
|
|
using DHT.Server.Service;
|
|
using DHT.Utils.Http;
|
|
using Microsoft.AspNetCore.Http;
|
|
|
|
namespace DHT.Server.Endpoints {
|
|
sealed class TrackChannelEndpoint : BaseEndpoint {
|
|
public TrackChannelEndpoint(IDatabaseFile db, ServerParameters parameters) : base(db, parameters) {}
|
|
|
|
protected override async Task<(HttpStatusCode, object?)> Respond(HttpContext ctx) {
|
|
var root = await ReadJson(ctx);
|
|
var server = ReadServer(root.RequireObject("server"), "server");
|
|
var channel = ReadChannel(root.RequireObject("channel"), "channel", server.Id);
|
|
|
|
Db.AddServer(server);
|
|
Db.AddChannel(channel);
|
|
|
|
return (HttpStatusCode.OK, null);
|
|
}
|
|
|
|
private static Data.Server ReadServer(JsonElement json, string path) => new() {
|
|
Id = json.RequireSnowflake("id", path),
|
|
Name = json.RequireString("name", path),
|
|
Type = ServerTypes.FromString(json.RequireString("type", path)) ?? throw new HttpException(HttpStatusCode.BadRequest, "Server type must be either 'SERVER', 'GROUP', or 'DM'.")
|
|
};
|
|
|
|
private static Channel ReadChannel(JsonElement json, string path, ulong serverId) => new() {
|
|
Id = json.RequireSnowflake("id", path),
|
|
Server = serverId,
|
|
Name = json.RequireString("name", path),
|
|
ParentId = json.HasKey("parent") ? json.RequireSnowflake("parent", path) : null,
|
|
Position = json.HasKey("position") ? json.RequireInt("position", path, min: 0) : null,
|
|
Topic = json.HasKey("topic") ? json.RequireString("topic", path) : null,
|
|
Nsfw = json.HasKey("nsfw") ? json.RequireBool("nsfw", path) : null
|
|
};
|
|
}
|
|
}
|