42 lines
1.3 KiB
JavaScript
42 lines
1.3 KiB
JavaScript
|
|
import { del } from '../../../lib/object-storage.js';
|
||
|
|
import { sql } from '../../../lib/sql.js';
|
||
|
|
import { getUserFromRequest } from '../../../lib/permission-middleware';
|
||
|
|
|
||
|
|
export default async function handler(req, res) {
|
||
|
|
try {
|
||
|
|
const user = await getUserFromRequest(req);
|
||
|
|
if (!user) {
|
||
|
|
return res.status(401).json({ error: 'Authentication required' });
|
||
|
|
}
|
||
|
|
|
||
|
|
const symbolId = parseInt(req.query.id, 10);
|
||
|
|
if (!Number.isInteger(symbolId)) {
|
||
|
|
return res.status(400).json({ error: 'Invalid symbol id' });
|
||
|
|
}
|
||
|
|
|
||
|
|
if (req.method !== 'DELETE') {
|
||
|
|
return res.status(405).json({ error: 'Method not allowed' });
|
||
|
|
}
|
||
|
|
|
||
|
|
const found = await sql`
|
||
|
|
SELECT id, image_url FROM custom_symbols
|
||
|
|
WHERE id = ${symbolId} AND user_id = ${user.userId}
|
||
|
|
`;
|
||
|
|
if (found.rows.length === 0) {
|
||
|
|
return res.status(404).json({ error: 'Symbol not found' });
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
await del(found.rows[0].image_url);
|
||
|
|
} catch (blobError) {
|
||
|
|
console.warn('Failed to delete symbol image:', blobError);
|
||
|
|
}
|
||
|
|
|
||
|
|
await sql`DELETE FROM custom_symbols WHERE id = ${symbolId}`;
|
||
|
|
return res.status(200).json({ message: 'Symbol deleted' });
|
||
|
|
} catch (error) {
|
||
|
|
console.error('Custom symbol API error:', error);
|
||
|
|
return res.status(500).json({ error: 'Internal server error' });
|
||
|
|
}
|
||
|
|
}
|