diff --git a/public/api/specs/liljudd.json b/public/api/specs/liljudd.json index 2b35d6c..faa29e4 100644 --- a/public/api/specs/liljudd.json +++ b/public/api/specs/liljudd.json @@ -10,7 +10,7 @@ "version": "0.0.0" }, "paths": { - "/api/config/boot": { + "/api/boot/config": { "get": { "tags": ["Guild configs"], "summary": "Find a guild's config by ID", @@ -41,7 +41,7 @@ ] } }, - "/api/config/{guildId}": { + "/api/{guildId}/config": { "get": { "tags": ["Guild configs"], "summary": "Find a guild's config by ID", @@ -118,7 +118,7 @@ ] } }, - "/api/tp_messages/{guildId}": { + "/api/{guildId}/tp_messages": { "get": { "tags": ["Time planning messages"], "summary": "Find the tp_messages of guild by ID", @@ -208,7 +208,56 @@ ] } }, - "/api/match/{guildId}/{channelId}": { + "/api/{guildId}/matches": { + "get": { + "tags": ["Matches"], + "summary": "Find all matches of guild by ID", + "description": "Returns tp_messages for a guild", + "operationId": "getMatchesOfGuildById", + "parameters": [ + { + "name": "guildId", + "in": "path", + "description": "ID of guild's tp_messages to return", + "required": true, + "schema": { + "type": "string", + "format": "varchar(20)" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/tp_messages" + } + } + } + } + }, + "204": { + "description": "Time planning not enabled for this guild" + }, + "400": { + "description": "Invalid ID supplied" + }, + "404": { + "description": "Guild not found" + } + }, + "security": [ + { + "api_key": [] + } + ] + } + }, + "/api/{guildId}/matches/{channelId}": { "post": { "tags": ["Matches"], "summary": "Save a new created match in channel of guild by IDs", @@ -264,7 +313,7 @@ ] } }, - "/api/match/{guildId}/{channelId}/{matchMessageId}": { + "/api/{guildId}/matches/{channelId}/{matchMessageId}": { "put": { "tags": ["Matches"], "summary": "Set state for match of guild by IDs", @@ -329,55 +378,6 @@ } ] } - }, - "/api/match/{guildId}": { - "get": { - "tags": ["Matches"], - "summary": "Find all matches of guild by ID", - "description": "Returns tp_messages for a guild", - "operationId": "getMatchesOfGuildById", - "parameters": [ - { - "name": "guildId", - "in": "path", - "description": "ID of guild's tp_messages to return", - "required": true, - "schema": { - "type": "string", - "format": "varchar(20)" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tp_messages" - } - } - } - } - }, - "204": { - "description": "Time planning not enabled for this guild" - }, - "400": { - "description": "Invalid ID supplied" - }, - "404": { - "description": "Guild not found" - } - }, - "security": [ - { - "api_key": [] - } - ] - } } }, "components": { diff --git a/src/routes/api/[guildId]/config.ts b/src/routes/api/[guildId]/config.ts new file mode 100644 index 0000000..25fdaf9 --- /dev/null +++ b/src/routes/api/[guildId]/config.ts @@ -0,0 +1,48 @@ +import { APIEvent } from "@solidjs/start/server/types"; +import { eq } from "drizzle-orm"; +import db from "~/drizzle"; +import { guilds } from "~/drizzle/schema"; + +export const GET = async ({ params }: APIEvent) => { + const guild = await db.query.guilds + .findFirst({ + where: eq(guilds.id, params.guildId), + with: { + timePlanning: { with: { messages: true } }, + matches: true, + }, + }) + .execute(); + + if (!guild) + return new Response(JSON.stringify({ error: "No such guild found." }), { + status: 404, + }); + + return guild; +}; + +export const DELETE = async ({ params }: APIEvent) => { + const guildQuery = await db.query.guilds + .findFirst({ + where: eq(guilds.id, params.guildId), + with: { + timePlanning: { with: { messages: true } }, + matches: true, + }, + }) + .execute(); + + if (!guildQuery) + return new Response(JSON.stringify({ error: "No such guild found." }), { + status: 404, + }); + + const guild = await db + .delete(guilds) + .where(eq(guilds.id, params.guildId)) + .returning() + .execute(); + + return guild; +}; diff --git a/src/routes/api/[guildId]/matches/[channelId]/[matchMessageId].ts b/src/routes/api/[guildId]/matches/[channelId]/[matchMessageId].ts new file mode 100644 index 0000000..c701f81 --- /dev/null +++ b/src/routes/api/[guildId]/matches/[channelId]/[matchMessageId].ts @@ -0,0 +1,24 @@ +import { APIEvent } from "@solidjs/start/server/types"; +import { eq } from "drizzle-orm"; +import db from "~/drizzle"; +import { guilds } from "~/drizzle/schema"; + +export const PUT = async ({ params }: APIEvent) => { + const guild = await db.query.guilds + .findFirst({ + where: eq(guilds.id, params.guildId), + with: { + timePlanning: { with: { messages: true } }, + matches: true, + }, + }) + .execute(); + + if (!guild) + return new Response(JSON.stringify({ error: "No such guild found." }), { + status: 404, + }); + + return "TODO"; + // return guild.timePlanning; +}; diff --git a/src/routes/api/[guildId]/matches/[channelId]/index.ts b/src/routes/api/[guildId]/matches/[channelId]/index.ts new file mode 100644 index 0000000..bf84d60 --- /dev/null +++ b/src/routes/api/[guildId]/matches/[channelId]/index.ts @@ -0,0 +1,24 @@ +import { APIEvent } from "@solidjs/start/server/types"; +import { eq } from "drizzle-orm"; +import db from "~/drizzle"; +import { guilds } from "~/drizzle/schema"; + +export const POST = async ({ params }: APIEvent) => { + const guild = await db.query.guilds + .findFirst({ + where: eq(guilds.id, params.guildId), + with: { + timePlanning: { with: { messages: true } }, + matches: true, + }, + }) + .execute(); + + if (!guild) + return new Response(JSON.stringify({ error: "No such guild found." }), { + status: 404, + }); + + return "TODO"; + // return guild.timePlanning; +}; diff --git a/src/routes/api/[guildId]/matches/index.ts b/src/routes/api/[guildId]/matches/index.ts new file mode 100644 index 0000000..403aab3 --- /dev/null +++ b/src/routes/api/[guildId]/matches/index.ts @@ -0,0 +1,24 @@ +import { APIEvent } from "@solidjs/start/server/types"; +import { eq } from "drizzle-orm"; +import db from "~/drizzle"; +import { guilds } from "~/drizzle/schema"; + +export const GET = async ({ params }: APIEvent) => { + const guild = await db.query.guilds + .findFirst({ + where: eq(guilds.id, params.guildId), + with: { + timePlanning: { with: { messages: true } }, + matches: true, + }, + }) + .execute(); + + if (!guild) + return new Response(JSON.stringify({ error: "No such guild found." }), { + status: 404, + }); + + return "TODO"; + // return guild.timePlanning; +}; diff --git a/src/routes/api/[guildId]/tp_messages.ts b/src/routes/api/[guildId]/tp_messages.ts new file mode 100644 index 0000000..8ede1ed --- /dev/null +++ b/src/routes/api/[guildId]/tp_messages.ts @@ -0,0 +1,28 @@ +import { APIEvent } from "@solidjs/start/server/types"; +import { eq } from "drizzle-orm"; +import db from "~/drizzle"; +import { guilds } from "~/drizzle/schema"; + +export const GET = async ({ params }: APIEvent) => { + const guild = await db.query.guilds + .findFirst({ + where: eq(guilds.id, params.guildId), + with: { + timePlanning: { with: { messages: true } }, + matches: true, + }, + }) + .execute(); + + if (!guild) + return new Response(JSON.stringify({ error: "No such guild found." }), { + status: 404, + }); + + return "TODO"; + // return guild.timePlanning; +}; + +export const PUT = async () => { + return "TODO"; +}; diff --git a/src/routes/api/boot/config.ts b/src/routes/api/boot/config.ts new file mode 100644 index 0000000..c93810c --- /dev/null +++ b/src/routes/api/boot/config.ts @@ -0,0 +1,14 @@ +import db from "~/drizzle"; + +export const GET = async () => { + const guilds = await db.query.guilds + .findMany({ + with: { + timePlanning: { with: { messages: true } }, + matches: true, + }, + }) + .execute(); + + return { guilds }; +};