Skip to content

Commit 30175b5

Browse files
committed
feat: ama session management page
1 parent 814e9b2 commit 30175b5

11 files changed

Lines changed: 102 additions & 15 deletions

File tree

.env.private.example

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ NODE_ENV=dev # obviously, set to prod in prod.
33
ENCRYPTION_KEY=boop # generate using node -e "console.log(require('crypto').randomBytes(32).toString('base64'));"
44
OAUTH_DISCORD_CLIENT_SECRET=73tI-EaLVgtkrcgpBawzmOfdNpY_4ME7
55

6+
# don't touch. overwrites the one in .env.public, which prisma reads
7+
DATABASE_URL=postgres://chatsift:admin@postgres:5432/chatsift
8+
69
LOCAL_DATABASE_PORT=5432
710
LOCAL_DOZZLE_PORT=8080
811

.env.public

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
ROOT_DOMAIN=automoderator.app
22
ADMINS=223703707118731264
33

4-
DATABASE_URL=postgres://chatsift:admin@postgres:5432/chatsift
4+
DATABASE_URL=postgres://chatsift:admin@127.0.0.1:5432/chatsift
55
REDIS_URL=redis://redis:6379
66

77
API_PORT=9876
Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,15 @@
1-
export default function AMAPage() {}
1+
import { DashboardCrumbs } from '../../../_components/DashboardCrumbs';
2+
import { Heading } from '@/components/common/Heading';
3+
4+
export default async function AMAPage({ params }: PageProps<'/dashboard/[id]/ama/amas'>) {
5+
const { id } = await params;
6+
7+
return (
8+
<div className="space-y-8">
9+
<div className="flex flex-col gap-4">
10+
<DashboardCrumbs segments={[{ label: 'AMA Bot', href: `/dashboard/${id}/ama` }, { label: 'AMA Sessions' }]} />
11+
<Heading subtitle="Create, edit, and manage AMAs in your community" title="AMA sessions" />
12+
</div>
13+
</div>
14+
);
15+
}

apps/website/src/app/dashboard/[id]/ama/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default async function AMAPage({ params }: PageProps<'/dashboard/[id]/ama
88
return (
99
<div className="space-y-8">
1010
<div className="flex flex-col gap-4">
11-
<DashboardCrumbs segments={[{ label: 'AMA' }]} />
11+
<DashboardCrumbs segments={[{ label: 'AMA Bot' }]} />
1212
<Heading subtitle="Configure AMA for your server" title="AMA Settings" />
1313
<Link
1414
className="flex items-center gap-4 rounded-lg border-[1px] border-on-secondary bg-card p-4 hover:bg-on-tertiary dark:border-on-secondary-dark dark:bg-card-dark dark:hover:bg-on-tertiary-dark"

apps/website/src/components/footer/Footer.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import { SvgGitHub } from '@/components/icons/SvgGitHub';
55

66
export function Footer() {
77
return (
8-
<footer className="g-4 flex flex-row items-center justify-between gap-4 border-t-2 border-solid border-t-on-secondary px-6 py-3 font-medium dark:border-t-on-secondary-dark">
8+
<footer className="g-4 flex flex-col items-start justify-between gap-3 border-t-2 border-solid border-t-on-secondary px-6 py-3 font-medium sm:flex-row sm:items-center sm:gap-4 dark:border-t-on-secondary-dark">
99
<span className="whitespace-nowrap text-secondary dark:text-secondary-dark">© ChatSift, 2022 - Present</span>
10-
<div className="flex w-full flex-row content-between items-center gap-4">
10+
<div className="flex w-full flex-row flex-wrap items-center justify-between gap-3 sm:w-auto sm:gap-4">
1111
<div className="flex flex-row items-center gap-4">
1212
<Link className="flex" href="/github">
1313
<SvgGitHub />
@@ -16,7 +16,7 @@ export function Footer() {
1616
<SvgDiscord />
1717
</Link>
1818
</div>
19-
<div className="ml-auto flex flex-row items-center gap-2">
19+
<div className="flex flex-row items-center gap-2 sm:ml-auto">
2020
<p className="text-lg font-medium text-secondary dark:text-secondary-dark">Theme:</p>
2121
<ThemeSwitchButton />
2222
</div>

apps/website/src/components/nav/NavbarMobile.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ export function NavbarMobile() {
2424
aria-controls="menu"
2525
aria-expanded={mobileNavOpen}
2626
aria-haspopup="true"
27+
className="p-3"
2728
onPress={() => setMobileNavOpen(!mobileNavOpen)}
28-
style={{ padding: 12 }}
2929
>
3030
{mobileNavOpen ? <SvgClose /> : <SvgHamburger />}
3131
</Button>

apps/website/src/data/common.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@ export const routesInfo = {
4545
},
4646
},
4747

48-
guilds: (id: string) => ({
48+
guilds: (guildId: string) => ({
4949
ama: {
5050
amas: (query: GetAMAsQuery) => ({
51-
queryKey: ['guilds', id, 'ama', 'amas', String(query.include_ended)],
52-
path: '/v3/guilds/:id/ama/amas',
51+
queryKey: ['guilds', guildId, 'ama', 'amas', String(query.include_ended)],
52+
path: '/v3/guilds/:guildId/ama/amas',
5353
query,
54-
params: { id },
54+
params: { guildId },
5555
}),
5656
},
5757
}),
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
-- CreateTable
2+
CREATE TABLE "Experiment" (
3+
"name" TEXT NOT NULL,
4+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
5+
"updatedAt" TIMESTAMP(3),
6+
"rangeStart" INTEGER NOT NULL,
7+
"rangeEnd" INTEGER NOT NULL,
8+
9+
CONSTRAINT "Experiment_pkey" PRIMARY KEY ("name")
10+
);
11+
12+
-- CreateTable
13+
CREATE TABLE "ExperimentOverride" (
14+
"id" SERIAL NOT NULL,
15+
"guildId" TEXT NOT NULL,
16+
"experimentName" TEXT NOT NULL,
17+
18+
CONSTRAINT "ExperimentOverride_pkey" PRIMARY KEY ("id")
19+
);
20+
21+
-- CreateTable
22+
CREATE TABLE "AMASession" (
23+
"id" SERIAL NOT NULL,
24+
"guildId" TEXT NOT NULL,
25+
"modQueue" TEXT,
26+
"flaggedQueue" TEXT,
27+
"guestQueue" TEXT,
28+
"title" TEXT NOT NULL,
29+
"answersChannel" TEXT NOT NULL,
30+
"promptChannelId" TEXT NOT NULL,
31+
"promptMessageId" TEXT NOT NULL,
32+
"ended" BOOLEAN NOT NULL DEFAULT false,
33+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
34+
35+
CONSTRAINT "AMASession_pkey" PRIMARY KEY ("id")
36+
);
37+
38+
-- CreateTable
39+
CREATE TABLE "AmaQuestion" (
40+
"id" SERIAL NOT NULL,
41+
"amaId" INTEGER NOT NULL,
42+
"authorId" TEXT NOT NULL,
43+
"content" TEXT NOT NULL,
44+
"imageUrl" TEXT,
45+
"answerMessageId" TEXT,
46+
47+
CONSTRAINT "AmaQuestion_pkey" PRIMARY KEY ("id")
48+
);
49+
50+
-- CreateIndex
51+
CREATE UNIQUE INDEX "ExperimentOverride_guildId_experimentName_key" ON "ExperimentOverride"("guildId", "experimentName");
52+
53+
-- CreateIndex
54+
CREATE UNIQUE INDEX "AMASession_promptMessageId_key" ON "AMASession"("promptMessageId");
55+
56+
-- AddForeignKey
57+
ALTER TABLE "ExperimentOverride" ADD CONSTRAINT "ExperimentOverride_experimentName_fkey" FOREIGN KEY ("experimentName") REFERENCES "Experiment"("name") ON DELETE CASCADE ON UPDATE CASCADE;
58+
59+
-- AddForeignKey
60+
ALTER TABLE "AmaQuestion" ADD CONSTRAINT "AmaQuestion_amaId_fkey" FOREIGN KEY ("amaId") REFERENCES "AMASession"("id") ON DELETE CASCADE ON UPDATE CASCADE;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# Please do not edit this file manually
2-
# It should be added in your version-control system (i.e. Git)
3-
provider = "postgresql"
2+
# It should be added in your version-control system (e.g., Git)
3+
provider = "postgresql"

services/api/src/routes/ama/getAMAs.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export interface AMASessionWithCount extends Selectable<AMASession> {
2222
export default class GetAMAs extends Route<AMASessionWithCount[], GetAMAsQuery> {
2323
public readonly info = {
2424
method: RouteMethod.get,
25-
path: '/v3/guilds/:id/ama/amas',
25+
path: '/v3/guilds/:guildId/ama/amas',
2626
} as const;
2727

2828
public override readonly queryValidationSchema = querySchema;
@@ -33,7 +33,7 @@ export default class GetAMAs extends Route<AMASessionWithCount[], GetAMAsQuery>
3333

3434
public override async handle(req: TRequest<GetAMAsQuery>, res: Response, next: NextHandler) {
3535
const { include_ended } = req.query as unknown as GetAMAsQuery;
36-
const { id: guildId } = req.params as { id: string };
36+
const { guildId } = req.params as { guildId: string };
3737

3838
let query = context.db.selectFrom('AMASession').selectAll().where('guildId', '=', guildId);
3939

0 commit comments

Comments
 (0)