You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
24 lines
916 B
24 lines
916 B
import { addFeed, getFeedForUser, syncFeed, toMeRssFeedDto } from "#server/service/rss";
|
|
import { RssUrlUnsafeError } from "#server/utils/rss-url";
|
|
|
|
export default defineWrappedResponseHandler(async (event) => {
|
|
const user = await event.context.auth.requireUser();
|
|
const body = await readBody<{ feedUrl: string }>(event);
|
|
try {
|
|
const created = await addFeed(user.id, body.feedUrl);
|
|
if (!created) {
|
|
throw createError({ statusCode: 500, statusMessage: "订阅创建失败" });
|
|
}
|
|
await syncFeed(created.id);
|
|
const row = await getFeedForUser(user.id, created.id);
|
|
if (!row) {
|
|
throw createError({ statusCode: 500, statusMessage: "订阅创建后读取失败" });
|
|
}
|
|
return R.success({ feed: toMeRssFeedDto(row) });
|
|
} catch (e) {
|
|
if (e instanceof RssUrlUnsafeError) {
|
|
throw createError({ statusCode: 400, statusMessage: e.message });
|
|
}
|
|
throw e;
|
|
}
|
|
});
|
|
|