GET /api/users/{uuid} (Status eines Spielers)
@@ -260,8 +304,8 @@ Das Webhook wir so oft gesendet, bis der angegebene Webhook Endpoint eine Respon
Alle Webhooks:
-| Beschreibung | HTTP Header | Body |
-| ------------------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Beschreibung | HTTP Header | Body |
+| ------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ein neuer Nutzer hat sich registriert | x-webhook-action: signup
| {
// Vorname des Nutzers
firstname: string,
// Nachname des Nutzers
lastname: string,
// Geburtstag des Nutzers im YYYY-MM-DD format
birthday: string,
// Telefonnummer des Nutzers. `null` wenn keine angegeben wurde
telephone: string \| null,
// Spielername des Nutzers
username: string,
// Minecraft-Edition des Nutzers
edition: 'java' \| 'bedrock'
// UUID des Nutzers. null wenn keine UUID ermittelt werden konnte
uuid: string \| null,
// IP-Adresse des Users
ip: string
} |
-| Ein neuer Report wurde erstellt | x-webhook-action: report
| {
// Username des Reporters. `null` wenn der Report vom System gemacht wurde
reporter: string \| null,
// Username des reporteten Spielers. `null` wenn Spieler unbekannt ist
reported: string \| null,
// Grund des Reports
reason: string
} |
-| Ein neuer Strike wurde erstellt | x-webhook-action: strike
| {
// UUID des Spielers, der gestriked wurde uuid: string
} |
+| Ein neuer Report wurde erstellt | x-webhook-action: report
| {
// Username des Reporters. `null` wenn der Report vom System gemacht wurde
reporter: string \| null,
// Username des reporteten Spielers. `null` wenn Spieler unbekannt ist
reported: string \| null,
// Grund des Reports
reason: string
} |
+| Ein neuer Strike wurde erstellt | x-webhook-action: strike
| {
// UUID des Spielers, der gestriked wurde uuid: string
} |
diff --git a/src/pages/api/users/index.ts b/src/pages/api/users/index.ts
new file mode 100644
index 0000000..0c44a6c
--- /dev/null
+++ b/src/pages/api/users/index.ts
@@ -0,0 +1,48 @@
+import { z } from 'astro:schema';
+import { db } from '@db/database.ts';
+import { externalApi } from '../_api.ts';
+
+export const PUT = externalApi({
+ auth: true,
+ input: z.object({
+ firstname: z.string().trim().min(1),
+ lastname: z.string().trim().min(1),
+ birthday: z.string().date(),
+ phone: z.string().trim(),
+ username: z.string().trim().min(1),
+ uuid: z.string().uuid(),
+ edition: z.enum(['java', 'bedrock'])
+ }),
+ handler: async ({ input }) => {
+ const existing = await db.existsUser({
+ username: input.username,
+ uuid: input.uuid
+ });
+
+ if (existing) {
+ return new Response(JSON.stringify({ error: 'User with this username or uuid already exists' }), {
+ status: 409,
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ });
+ }
+
+ const user = await db.addUser({
+ firstname: input.firstname,
+ lastname: input.lastname,
+ birthday: input.birthday,
+ telephone: input.phone || null,
+ username: input.username,
+ edition: input.edition,
+ uuid: input.uuid
+ });
+
+ return new Response(JSON.stringify({ id: user.id }), {
+ status: 201,
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ });
+ }
+});