You've already forked obsidian-visualiser
Add user and page statistics, add sitemap and robots.txt generation
This commit is contained in:
14
server/api/__sitemap__/urls.ts
Normal file
14
server/api/__sitemap__/urls.ts
Normal 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[];
|
||||
})
|
||||
3
server/api/admin/pages.get.ts
Normal file
3
server/api/admin/pages.get.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export default defineEventHandler((e) => {
|
||||
return [];
|
||||
})
|
||||
3
server/api/admin/users.get.ts
Normal file
3
server/api/admin/users.get.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export default defineEventHandler((e) => {
|
||||
return [];
|
||||
})
|
||||
@@ -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 };
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import useDatabase from "~/composables/useDatabase";
|
||||
import { userSessionsTable } from "~/db/schema";
|
||||
import { usersDataTable, userSessionsTable } from "~/db/schema";
|
||||
import { eq, and, sql, lte } from "drizzle-orm";
|
||||
import { refreshSessionFromDB } from "../utils/user";
|
||||
|
||||
@@ -19,9 +19,14 @@ export default defineNitroPlugin(() => {
|
||||
}
|
||||
else
|
||||
{
|
||||
await db.update(userSessionsTable).set({
|
||||
db.update(userSessionsTable).set({
|
||||
timestamp: new Date(),
|
||||
}).where(and(eq(userSessionsTable.id, sql.placeholder('id')), eq(userSessionsTable.user_id, sql.placeholder('user_id')))).prepare().run({ id: session.id, user_id: session.user.id });
|
||||
|
||||
db.update(usersDataTable).set({
|
||||
lastTimestamp: new Date(),
|
||||
}).where(eq(usersDataTable.id, sql.placeholder('user_id'))).prepare().run({ id: session.id, user_id: session.user.id });
|
||||
|
||||
await refreshSessionFromDB(event, session.id);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user