Add user and page statistics, add sitemap and robots.txt generation

This commit is contained in:
2024-11-27 17:07:32 +01:00
parent 5fb708051b
commit e99a5f15b4
26 changed files with 520 additions and 81 deletions

View File

@@ -0,0 +1,14 @@
import type { SitemapUrlInput } from '#sitemap/types'
import { and, eq } from 'drizzle-orm';
import { explorerContentTable } from '~/db/schema';
import useDatabase from '~/composables/useDatabase';
export default defineSitemapEventHandler(() => {
const db = useDatabase();
const pages = db.select({ path: explorerContentTable.path, lastMod: explorerContentTable.timestamp }).from(explorerContentTable).where(and(eq(explorerContentTable.private, false), eq(explorerContentTable.navigable, true))).all();
return pages.map(e => ({
loc: `/explore/${e.path}`,
lastmod: e.lastMod,
})) satisfies SitemapUrlInput[];
})

View File

@@ -0,0 +1,3 @@
export default defineEventHandler((e) => {
return [];
})

View File

@@ -0,0 +1,3 @@
export default defineEventHandler((e) => {
return [];
})

View File

@@ -3,7 +3,7 @@ import { schema } from '~/schemas/login';
import type { UserSession, UserSessionRequired } from '~/types/auth';
import { ZodError } from 'zod';
import { checkSession, logSession } from '~/server/utils/user';
import { usersTable } from '~/db/schema';
import { usersDataTable, usersTable } from '~/db/schema';
import { eq, or, sql } from 'drizzle-orm';
interface SuccessHandler
@@ -93,6 +93,8 @@ export default defineEventHandler(async (e): Promise<Return> => {
}
}) as UserSessionRequired);
db.update(usersDataTable).set({ logCount: user.data.logCount + 1 }).where(eq(usersDataTable.id, user.id)).run();
setResponseStatus(e, 201);
return { success: true, session: data };
}

View File

@@ -13,7 +13,7 @@ export default defineEventHandler(async (e) => {
const buffer = Buffer.from(body.data.content, 'utf-8');
const db = useDatabase();
const content = db.insert(explorerContentTable).values({ ...body.data, content: buffer }).onConflictDoUpdate({ target: explorerContentTable.path, set: { ...body.data, content: buffer } });
const content = db.insert(explorerContentTable).values({ ...body.data, content: buffer }).onConflictDoUpdate({ target: explorerContentTable.path, set: { ...body.data, content: buffer, timestamp: new Date() } });
if(content !== undefined)
{

View File

@@ -22,10 +22,13 @@ export default defineEventHandler(async (e) => {
'navigable': explorerContentTable.navigable,
'private': explorerContentTable.private,
'order': explorerContentTable.order,
'visit': explorerContentTable.visit,
}).from(explorerContentTable).where(eq(explorerContentTable.path, sql.placeholder('path'))).prepare().get({ path });
if(content !== undefined)
{
db.update(explorerContentTable).set({ visit: content.visit + 1 }).where(eq(explorerContentTable.path, content.path)).run();
return content;
}

View File

@@ -54,6 +54,7 @@ export default defineEventHandler(async (e) => {
navigable: item.navigable,
private: item.private,
order: item.order,
timestamp: new Date(),
},
target: explorerContentTable.path,
}).run();