32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
|
|
import { PERMISSIONS } from '@/lib/auth/rbac';
|
|
import { AuthError } from '@/lib/auth/session';
|
|
import { parseTransferPayload, requireAssetAccess, transferAsset } from '../../_lib';
|
|
|
|
type Params = { params: Promise<{ id: string }> };
|
|
|
|
export async function POST(request: NextRequest, { params }: Params) {
|
|
try {
|
|
const { id } = await params;
|
|
const { organization, session } = await requireAssetAccess(PERMISSIONS.assetTransfer);
|
|
const payload = parseTransferPayload(await request.json());
|
|
|
|
await transferAsset(organization.id, id, session.user.id, payload);
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message: 'Asset transferred successfully'
|
|
});
|
|
} catch (error) {
|
|
if (error instanceof AuthError) {
|
|
return NextResponse.json({ message: error.message }, { status: error.status });
|
|
}
|
|
|
|
if (error instanceof Error) {
|
|
return NextResponse.json({ message: error.message }, { status: 400 });
|
|
}
|
|
|
|
return NextResponse.json({ message: 'Unable to transfer asset' }, { status: 500 });
|
|
}
|
|
}
|