Browse Source

feat(api): public paginated posts, timeline, and reading lists

Made-with: Cursor
main
npmrun 8 hours ago
parent
commit
dcfd2fe05f
  1. 29
      server/api/public/profile/[publicSlug]/posts/index.get.ts
  2. 29
      server/api/public/profile/[publicSlug]/reading/index.get.ts
  3. 29
      server/api/public/profile/[publicSlug]/timeline/index.get.ts

29
server/api/public/profile/[publicSlug]/posts/index.get.ts

@ -0,0 +1,29 @@
import { defineEventHandler, createError, getQuery } from "h3";
import { dbGlobal } from "drizzle-pkg/lib/db";
import { users } from "drizzle-pkg/lib/schema/auth";
import { and, eq } from "drizzle-orm";
import { normalizePublicListPage } from "#server/utils/public-pagination";
import { getPublicPostsPageBySlug } from "#server/service/posts";
export default defineEventHandler(async (event) => {
const publicSlug = event.context.params?.publicSlug;
if (!publicSlug || typeof publicSlug !== "string") {
throw createError({ statusCode: 400, statusMessage: "无效主页" });
}
const [owner] = await dbGlobal
.select({ id: users.id })
.from(users)
.where(and(eq(users.publicSlug, publicSlug), eq(users.status, "active")))
.limit(1);
if (!owner) {
throw createError({ statusCode: 404, statusMessage: "未找到" });
}
const q = getQuery(event);
const page = normalizePublicListPage(q.page);
const data = await getPublicPostsPageBySlug(publicSlug, page);
return R.success(data);
});

29
server/api/public/profile/[publicSlug]/reading/index.get.ts

@ -0,0 +1,29 @@
import { defineEventHandler, createError, getQuery } from "h3";
import { dbGlobal } from "drizzle-pkg/lib/db";
import { users } from "drizzle-pkg/lib/schema/auth";
import { and, eq } from "drizzle-orm";
import { normalizePublicListPage } from "#server/utils/public-pagination";
import { getPublicRssPageBySlug } from "#server/service/rss";
export default defineEventHandler(async (event) => {
const publicSlug = event.context.params?.publicSlug;
if (!publicSlug || typeof publicSlug !== "string") {
throw createError({ statusCode: 400, statusMessage: "无效主页" });
}
const [owner] = await dbGlobal
.select({ id: users.id })
.from(users)
.where(and(eq(users.publicSlug, publicSlug), eq(users.status, "active")))
.limit(1);
if (!owner) {
throw createError({ statusCode: 404, statusMessage: "未找到" });
}
const q = getQuery(event);
const page = normalizePublicListPage(q.page);
const data = await getPublicRssPageBySlug(publicSlug, page);
return R.success(data);
});

29
server/api/public/profile/[publicSlug]/timeline/index.get.ts

@ -0,0 +1,29 @@
import { defineEventHandler, createError, getQuery } from "h3";
import { dbGlobal } from "drizzle-pkg/lib/db";
import { users } from "drizzle-pkg/lib/schema/auth";
import { and, eq } from "drizzle-orm";
import { normalizePublicListPage } from "#server/utils/public-pagination";
import { getPublicTimelinePageBySlug } from "#server/service/timeline";
export default defineEventHandler(async (event) => {
const publicSlug = event.context.params?.publicSlug;
if (!publicSlug || typeof publicSlug !== "string") {
throw createError({ statusCode: 400, statusMessage: "无效主页" });
}
const [owner] = await dbGlobal
.select({ id: users.id })
.from(users)
.where(and(eq(users.publicSlug, publicSlug), eq(users.status, "active")))
.limit(1);
if (!owner) {
throw createError({ statusCode: 404, statusMessage: "未找到" });
}
const q = getQuery(event);
const page = normalizePublicListPage(q.page);
const data = await getPublicTimelinePageBySlug(publicSlug, page);
return R.success(data);
});
Loading…
Cancel
Save