diff --git a/src/app/jams/(manip)/edit/jam/[jamid]/components/form.tsx b/src/app/jams/(manip)/edit/jam/[jamid]/components/form.tsx
index c4176ff..caba035 100644
--- a/src/app/jams/(manip)/edit/jam/[jamid]/components/form.tsx
+++ b/src/app/jams/(manip)/edit/jam/[jamid]/components/form.tsx
@@ -8,6 +8,7 @@ import { JSONContentTable, JSONJamTable } from "@/lib/mastoauth/realtypes";
export function Form({jamID, preset}:{jamID:string, preset:{
name: string,
description: string,
+ theme: string,
date_start: string,
date_end: string
}}) {
@@ -79,6 +80,19 @@ export function Form({jamID, preset}:{jamID:string, preset:{
Error: {formik.errors.description}
+
+
+
+
+ Error: {formik.errors.theme}
+
+
+
+
+
+
+ Error: {formik.errors.theme}
+
+
= parseInt(jam.date_start);
+
+ if (!started && !existingUser?.admin && jam.author_id != existingUser?.id) jam.theme = "";
return Response.json(jam);
}
@@ -88,6 +112,7 @@ export async function PATCH(request: NextRequest, {params}: {params: {jam:string
if (body.name != null && typeof body.name === 'string' && body.name.length >= 10 && body.name.length <= 2048) newBody.name = body.name;
if (body.description != null && typeof body.description === 'string' && body.description.length >= 10 && body.description.length <= 10000) newBody.description = body.description;
+ if (body.theme != null && typeof body.theme === 'string' && body.theme.length >= 2 && body.theme.length <= 255) newBody.theme = body.theme;
if (body.date_start != null && typeof body.date_start === 'number') newBody.date_start = body.date_start;
if (body.date_end != null && typeof body.date_end === 'number') newBody.date_end = body.date_end;
diff --git a/src/app/jams/api/jams/route.ts b/src/app/jams/api/jams/route.ts
index 79f31bf..f8c7d8e 100644
--- a/src/app/jams/api/jams/route.ts
+++ b/src/app/jams/api/jams/route.ts
@@ -1,9 +1,29 @@
import { db, JamTable } from "@/lib/mastoauth/kysely";
+import { JSONJamTable, JSONUserTable } from "@/lib/mastoauth/realtypes";
import { nanoid } from "nanoid";
import { cookies } from "next/headers";
import { NextRequest } from "next/server";
export async function GET(request: NextRequest) {
+ const cookieStore = cookies();
+ const token = cookieStore.get('token')?.value;
+ let existingUser:JSONUserTable | undefined;
+ if (token != null) {
+ let existingToken = await db
+ .selectFrom('tokens')
+ .where('tokens.id', '=', token)
+ .select('owner')
+ .executeTakeFirst();
+
+ if (existingToken != null) {
+ existingUser = await db
+ .selectFrom('users')
+ .where('users.id', '=', existingToken.owner)
+ .selectAll()
+ .executeTakeFirst() as unknown as JSONUserTable;
+ }
+ }
+
const until = parseInt(request.nextUrl.searchParams.get("until") || Date.now().toString());
let jams = await db
.selectFrom('jams')
@@ -11,12 +31,17 @@ export async function GET(request: NextRequest) {
.limit(20)
.orderBy('jams.created', 'desc')
.selectAll()
- .execute();
+ .execute() as unknown[] as JSONJamTable[];
if (jams == null) return new Response('', {
status: 500
});
+ jams.forEach((jam) => {
+ const started = Date.now() >= parseInt(jam.date_start);
+ if (!started && !existingUser?.admin && jam.author_id != existingUser?.id) jam.theme = "";
+ })
+
return Response.json(jams);
}
@@ -71,6 +96,7 @@ export async function POST(request: NextRequest) {
if (body.author_id != null) te.push("author_id");
if (typeof body.name !== 'string' || body.name.length < 10 || body.name.length > 2048) te.push("name");
if (typeof body.description !== 'string' || body.description.length < 10 || body.description.length > 10000) te.push("description");
+ if (typeof body.theme !== 'string' || body.theme.length < 2 || body.theme.length > 10000) te.push("theme");
if (typeof body.date_start !== 'number') te.push("date_start");
if (typeof body.date_end !== 'number') te.push("date_end");
if (body.created != null) te.push("created");
@@ -87,6 +113,7 @@ export async function POST(request: NextRequest) {
author_id: existingUser.id,
name: newBody.name,
description: newBody.description,
+ theme: newBody.theme,
date_start: newBody.date_start,
date_end: newBody.date_end,
created: Date.now()
diff --git a/src/app/jams/jam/[jam]/page.tsx b/src/app/jams/jam/[jam]/page.tsx
index a9f6e85..d0b5214 100644
--- a/src/app/jams/jam/[jam]/page.tsx
+++ b/src/app/jams/jam/[jam]/page.tsx
@@ -51,6 +51,8 @@ export default async function Home({
.where('jams.id', '=', curJam)
.selectAll()
.executeTakeFirst() as unknown as JSONJamTable;
+
+ if (jam == null) return notFound();
const started = Date.now() >= parseInt(jam.date_start);
const ended = Date.now() >= parseInt(jam.date_end);
@@ -62,7 +64,7 @@ export default async function Home({
.selectAll()
.executeTakeFirst() as unknown as JSONUserTable;
- if (jam == null) return notFound();
+ if (!started && !existingUser?.admin && jam.author_id != existingUser?.id) jam.theme = "";
let content = await db
.selectFrom('content')
@@ -95,7 +97,13 @@ export default async function Home({
You have the ability to modify this Jam.
Edit jam
Delete jam
-
Submit something
+
+
+
+
Submissions
diff --git a/src/app/jams/page.tsx b/src/app/jams/page.tsx
index a7b2f28..fb35977 100644
--- a/src/app/jams/page.tsx
+++ b/src/app/jams/page.tsx
@@ -5,7 +5,7 @@ import { ConditionalNull } from "@/components/utility/Conditional";
import Link from "next/link";
import Markdown from "react-markdown";
import rehypeRaw from "rehype-raw";
-import { JSONJamTable } from "@/lib/mastoauth/realtypes";
+import { JSONJamTable, JSONUserTable } from "@/lib/mastoauth/realtypes";
export default async function Home({
searchParams
@@ -19,7 +19,7 @@ export default async function Home({
const cookieStore = cookies();
const token = cookieStore.get('token')?.value;
- let existingUser;
+ let existingUser: JSONUserTable | undefined;
if (token != null) {
let existingToken = await db
.selectFrom('tokens')
@@ -32,7 +32,7 @@ export default async function Home({
.selectFrom('users')
.where('users.id', '=', existingToken.owner)
.selectAll()
- .executeTakeFirst();
+ .executeTakeFirst() as unknown as JSONUserTable;
}
}
@@ -45,6 +45,11 @@ export default async function Home({
.selectAll()
.execute() as unknown[] as JSONJamTable[];
+ jams.forEach((jam) => {
+ const started = Date.now() >= parseInt(jam.date_start);
+ if (!started && !existingUser?.admin && jam.author_id != existingUser?.id) jam.theme = "";
+ })
+
return (
diff --git a/src/lib/mastoauth/kysely.ts b/src/lib/mastoauth/kysely.ts
index d147c7b..941a29c 100644
--- a/src/lib/mastoauth/kysely.ts
+++ b/src/lib/mastoauth/kysely.ts
@@ -43,6 +43,7 @@ export interface JamTable {
date_start: number;
date_end: number;
created: number;
+ theme: string;
}
export interface ContentTable {
diff --git a/src/lib/mastoauth/realtypes.ts b/src/lib/mastoauth/realtypes.ts
index ae917ce..dbc5064 100644
--- a/src/lib/mastoauth/realtypes.ts
+++ b/src/lib/mastoauth/realtypes.ts
@@ -25,6 +25,7 @@ export interface JSONJamTable {
date_start: string;
date_end: string;
created: string;
+ theme: string;
}
export interface JSONContentTable {