Initial web
This commit is contained in:
64
web/app/api/charts/[id]/route.ts
Normal file
64
web/app/api/charts/[id]/route.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import pool from '@/lib/db';
|
||||
import { withAuth } from '@/lib/apiHelpers';
|
||||
|
||||
export const PUT = withAuth(async (req: NextRequest, { params }) => {
|
||||
const { id } = await params;
|
||||
const body = await req.json();
|
||||
const {
|
||||
title, pos_x, pos_y, width, height,
|
||||
signal_type, chart_type, viz_type,
|
||||
filter_items_regex, y_scale,
|
||||
series_limit, order_by,
|
||||
} = body;
|
||||
|
||||
const hasFilterCombinators = 'filter_combinators' in body;
|
||||
const hasFilterItems = 'filter_items' in body;
|
||||
const hasFilterItemsExclude = 'filter_items_exclude' in body;
|
||||
const hasYMin = 'y_min' in body;
|
||||
const hasYMax = 'y_max' in body;
|
||||
|
||||
const result = await pool.query(
|
||||
`UPDATE charts SET
|
||||
title = COALESCE($1, title),
|
||||
pos_x = COALESCE($2, pos_x),
|
||||
pos_y = COALESCE($3, pos_y),
|
||||
width = COALESCE($4, width),
|
||||
height = COALESCE($5, height),
|
||||
signal_type = COALESCE($6, signal_type),
|
||||
chart_type = COALESCE($7, chart_type),
|
||||
viz_type = COALESCE($8, viz_type),
|
||||
filter_combinators = CASE WHEN $9::boolean THEN $10::text[] ELSE filter_combinators END,
|
||||
filter_items = CASE WHEN $11::boolean THEN $12::text[] ELSE filter_items END,
|
||||
filter_items_exclude = CASE WHEN $13::boolean THEN $14::text[] ELSE filter_items_exclude END,
|
||||
filter_items_regex = COALESCE($15, filter_items_regex),
|
||||
y_min = CASE WHEN $16::boolean THEN $17::double precision ELSE y_min END,
|
||||
y_max = CASE WHEN $18::boolean THEN $19::double precision ELSE y_max END,
|
||||
y_scale = COALESCE($20, y_scale),
|
||||
series_limit = COALESCE($21, series_limit),
|
||||
order_by = COALESCE($22, order_by)
|
||||
WHERE id = $23
|
||||
RETURNING *`,
|
||||
[
|
||||
title, pos_x, pos_y, width, height, signal_type, chart_type, viz_type,
|
||||
hasFilterCombinators, body.filter_combinators ?? null,
|
||||
hasFilterItems, body.filter_items ?? null,
|
||||
hasFilterItemsExclude, body.filter_items_exclude ?? null,
|
||||
filter_items_regex,
|
||||
hasYMin, body.y_min ?? null,
|
||||
hasYMax, body.y_max ?? null,
|
||||
y_scale,
|
||||
series_limit, order_by,
|
||||
id,
|
||||
],
|
||||
);
|
||||
if (result.rowCount === 0) return NextResponse.json({ error: 'Not found' }, { status: 404 });
|
||||
return NextResponse.json(result.rows[0]);
|
||||
});
|
||||
|
||||
export const DELETE = withAuth(async (_req: NextRequest, { params }) => {
|
||||
const { id } = await params;
|
||||
const result = await pool.query('DELETE FROM charts WHERE id = $1', [id]);
|
||||
if (result.rowCount === 0) return NextResponse.json({ error: 'Not found' }, { status: 404 });
|
||||
return NextResponse.json({ ok: true });
|
||||
});
|
||||
Reference in New Issue
Block a user