Skip to content

Commit 3ebbcbf

Browse files
fix(api): use DELETE on schedule resource with no request body
Delete schedule is a body-less resource deletion — wire it as DELETE on the schedule route instead of POST on a separate /delete action path. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 7b4549a commit 3ebbcbf

5 files changed

Lines changed: 15 additions & 62 deletions

File tree

src/app/api/domains/[domain]/[cluster]/schedules/[scheduleId]/(actions)/delete/route.ts

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/app/api/domains/[domain]/[cluster]/schedules/[scheduleId]/route.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { type NextRequest } from 'next/server';
22

3+
import { deleteSchedule } from '@/route-handlers/delete-schedule/delete-schedule';
34
import { describeSchedule } from '@/route-handlers/describe-schedule/describe-schedule';
45
import { type RouteParams } from '@/route-handlers/describe-schedule/describe-schedule.types';
56
import { routeHandlerWithMiddlewares } from '@/utils/route-handlers-middleware';
@@ -16,3 +17,15 @@ export async function GET(
1617
routeHandlersDefaultMiddlewares
1718
);
1819
}
20+
21+
export async function DELETE(
22+
request: NextRequest,
23+
options: { params: RouteParams }
24+
) {
25+
return routeHandlerWithMiddlewares(
26+
deleteSchedule,
27+
request,
28+
options,
29+
routeHandlersDefaultMiddlewares
30+
);
31+
}

src/route-handlers/delete-schedule/__tests__/delete-schedule.node.ts

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,6 @@ describe(deleteSchedule.name, () => {
2424
expect(await res.json()).toEqual({});
2525
});
2626

27-
it('accepts an empty request body', async () => {
28-
const { res, mockDeleteSchedule } = await setup({
29-
requestBody: JSON.stringify({}),
30-
});
31-
32-
expect(mockDeleteSchedule).toHaveBeenCalled();
33-
expect(res.status).toEqual(200);
34-
});
35-
3627
it('returns an error if deleteSchedule throws a GRPCError (not found)', async () => {
3728
const { res, mockDeleteSchedule } = await setup({
3829
error: new GRPCError('Schedule not found', {
@@ -78,23 +69,12 @@ describe(deleteSchedule.name, () => {
7869
})
7970
);
8071
});
81-
82-
it('treats malformed JSON body as empty object', async () => {
83-
const { res, mockDeleteSchedule } = await setup({
84-
requestBody: 'not-json',
85-
});
86-
87-
expect(mockDeleteSchedule).toHaveBeenCalled();
88-
expect(res.status).toEqual(200);
89-
});
9072
});
9173

9274
async function setup({
93-
requestBody = null,
9475
scheduleId = 'mock-schedule-id',
9576
error,
9677
}: {
97-
requestBody?: string | null;
9878
scheduleId?: string;
9979
error?: Error;
10080
}) {
@@ -108,10 +88,7 @@ async function setup({
10888
});
10989

11090
const res = await deleteSchedule(
111-
new NextRequest('http://localhost', {
112-
method: 'POST',
113-
...(requestBody === null ? {} : { body: requestBody }),
114-
}),
91+
new NextRequest('http://localhost', { method: 'DELETE' }),
11592
{
11693
params: {
11794
domain: 'mock-domain',

src/route-handlers/delete-schedule/delete-schedule.ts

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,17 @@ import { type NextRequest, NextResponse } from 'next/server';
33
import { getHTTPStatusCode, GRPCError } from '@/utils/grpc/grpc-error';
44
import logger, { type RouteHandlerErrorPayload } from '@/utils/logger';
55

6-
import deleteScheduleRequestBodySchema from './schemas/delete-schedule-request-body-schema';
76
import {
87
type Context,
98
type DeleteScheduleResponse,
109
type RequestParams,
1110
} from './delete-schedule.types';
1211

1312
export async function deleteSchedule(
14-
request: NextRequest,
13+
_: NextRequest,
1514
requestParams: RequestParams,
1615
ctx: Context
1716
) {
18-
const requestBody = await request.json().catch(() => ({}));
19-
const { error } = deleteScheduleRequestBodySchema.safeParse(requestBody);
20-
21-
if (error) {
22-
return NextResponse.json(
23-
{
24-
message: 'Invalid values provided for schedule deletion',
25-
validationErrors: error.errors,
26-
},
27-
{ status: 400 }
28-
);
29-
}
30-
3117
const params = requestParams.params;
3218

3319
try {

src/route-handlers/delete-schedule/schemas/delete-schedule-request-body-schema.ts

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)