Files
money.sori.studio/server/api/share-links/index.post.ts
2026-08-13 17:47:01 +09:00

36 lines
1.0 KiB
TypeScript

import { randomBytes } from 'node:crypto'
import { addDays } from 'date-fns'
import { readBody, createError } from 'h3'
import { prisma } from '../../utils/db'
import { requireUser } from '../../utils/auth'
export default defineEventHandler(async (event) => {
const user = await requireUser(event)
const body = await readBody<{ name?: string; days?: number }>(event)
const days = Number(body.days || 7)
if (!Number.isFinite(days) || days < 1 || days > 365) {
throw createError({ statusCode: 400, statusMessage: 'Invalid expiration days' })
}
const link = await prisma.shareLink.create({
data: {
userId: user.id,
token: randomBytes(24).toString('base64url'),
name: body.name?.trim().slice(0, 40) || '공유 링크',
expiresAt: addDays(new Date(), days)
}
})
return {
id: link.id,
name: link.name,
token: link.token,
expiresAt: link.expiresAt,
revokedAt: link.revokedAt,
lastViewedAt: link.lastViewedAt,
createdAt: link.createdAt,
active: true
}
})