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

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;
}
});