CJ_Clippy 553de595d2
Some checks are pending
ci / build (push) Waiting to run
ci / test (push) Waiting to run
fix magnet creation
2025-09-23 18:45:17 -08:00

123 lines
3.6 KiB
TypeScript

import { PrismaClient } from '../../generated/prisma'
import { withAccelerate } from "@prisma/extension-accelerate"
import { type FastifyInstance, type FastifyReply, type FastifyRequest } from 'fastify'
import { env } from '../config/env'
import { constants } from '../config/constants'
import { getTargetUser } from '../utils/authorization'
import logger from '../utils/logger'
const prisma = new PrismaClient().$extends(withAccelerate())
export default async function indexRoutes(fastify: FastifyInstance): Promise<void> {
fastify.get('/profile', async function (request, reply) {
const userId = request.session.get('userId');
logger.debug(`userId=${userId}`);
if (!userId) return reply.redirect('/auth/patreon');
const user = await prisma.user.findUnique({
where: { id: userId },
include: {
roles: true
}
})
return reply.viewAsync("profile.hbs", {
user,
site: constants.site
}, { layout: 'layouts/main.hbs' });
})
fastify.get('/', async function (request, reply) {
const cdnOrigin = env.CDN_ORIGIN;
const NODE_ENV = env.NODE_ENV;
const userId = request.session.get('userId');
logger.debug(`we are at the GET root (/) route, with userId=${userId}`);
const vods = await prisma.vod.findMany({
take: 3,
orderBy: {
createdAt: 'desc'
}
})
logger.trace('vods as follows')
logger.trace(vods)
const vtubers = await prisma.vtuber.findMany({
take: 3,
orderBy: {
createdAt: 'desc'
}
})
// Guard: no user in session
if (!userId) {
const authPath = env.PATREON_AUTHORIZE_PATH
logger.debug(`either patreon_user or patreon_user.id was falsy. userId=${userId}`)
return reply.viewAsync("index.hbs", {
user: { roles: [{ name: 'anon' }] },
cdnOrigin,
obsToken: null,
NODE_ENV,
vods,
vtubers,
// streams,
// tags,
patreonChannels: [],
authPath,
site: constants.site
}, { layout: 'layouts/main.hbs' });
}
// Safe to query database
const user = await prisma.user.findFirstOrThrow({
where: {
id: userId,
},
include: {
roles: true
}
});
logger.debug('user as follows');
logger.debug(user);
const authPath = env.PATREON_AUTHORIZE_PATH
return reply.viewAsync("index.hbs", {
user,
cdnOrigin,
NODE_ENV,
authPath,
vods,
vtubers,
// streams,
// tags,
site: constants.site,
}, { layout: 'layouts/main.hbs' });
});
fastify.get('/health', function (request, reply) {
return reply.send('OK')
})
fastify.get('/version', function (request, reply) {
return reply.send(constants.site.version)
})
fastify.get('/perks', async function (request, reply) {
const user = await getTargetUser(request, reply)
const cdnOrigin = env.CDN_ORIGIN;
const NODE_ENV = env.NODE_ENV;
const authPath = env.PATREON_AUTHORIZE_PATH
return reply.view('perks.hbs', {
user,
cdnOrigin,
NODE_ENV,
authPath,
site: constants.site,
}, { layout: 'layouts/main.hbs' })
})
}