✋
【個人開発】当意即妙なツッコミでいいねを獲得せよ
概要
ツッコミを投稿して、良いツッコミにいいねを投票するWebアプリSOKUMYOを作りました。
動機:大喜利のツッコミ版を作りたい
今日における「大喜利」は、おおむね「司会者が出す《お題》に対して、複数の回答者が、当意即妙に洒落の利いた回答をして面白さを競う」といった遊び・余興・演目、を指す意味で用いられる語。
大喜利とはボケの腕を競うものともいえますが、ツッコミにも腕が必要です。お笑い芸人の中には切れ味の鋭いツッコミで人気を博している方もいるように、ツッコミが陽の目を見る機会がもっとあっても良いのではないかと思いました。
使い方
DiscordまたはGoogleアカウントが必要です。
初回ログイン
選んだ認証プロバイダの認証ページにリダイレクトします(Discordの場合)
プロフィール作成
初回ログインが終わったらプロフィールを作成します。
ボケる
ツッコむ
自分のツッコミは削除できます。
技術的なこと
T3 Stack
で作ってVercel
にデプロイしました。DBはPostgres
でRailway
にデプロイしています。この構成は普段から使っているので特段目新しいことはありませんでした。強いて工夫したところを挙げれば、管理者向け機能を作りました。
管理者専用のAPIの呼び出し時にmiddlewareを挟んで管理者ロールを持っているか判定し、アクセスを制御します。tRPC
で以下のように書けます。
trpc.ts
const enforceUserIsAdmin = t.middleware(async ({ ctx, next }) => {
if (!ctx.session?.user) {
throw new TRPCError({ code: "UNAUTHORIZED" });
}
const profile = await prisma.userProfile.findUnique({
where: {
userId: ctx.session.user.id ?? ''
}
});
if (profile?.role === '1') {
return next({
ctx: {
session: { ...ctx.session, user: ctx.session.user },
},
});
} else {
throw new TRPCError({ code: "FORBIDDEN" });
}
});
export const adminProcedure = t.procedure.use(enforceUserIsAdmin);
Discussion