diff --git a/src/app/api/posts/route.ts b/src/app/api/posts/route.ts index fa3c30d..9434ebc 100644 --- a/src/app/api/posts/route.ts +++ b/src/app/api/posts/route.ts @@ -3,6 +3,7 @@ import database from '../database'; import { PostRequest, ScheduleRequest } from '@/utils'; import post from './post'; import { ObjectId } from 'mongodb'; +import { HttpStatusCode } from 'axios'; export async function POST(req: NextRequest) { const { sessionId, content, platforms }: PostRequest = await req.json(); @@ -12,7 +13,7 @@ export async function POST(req: NextRequest) { if (typeof sessionId !== 'string') return NextResponse.json( { - message: 'Invalid structure, required param `id=`', + message: 'Invalid structure', }, { status: 400 } ); @@ -47,12 +48,16 @@ export async function PUT(req: NextRequest) { const { sessionId, scheduled, content, platforms }: ScheduleRequest = await req.json(); - if (typeof sessionId !== 'string') + if ( + typeof sessionId !== 'string' || + typeof scheduled !== 'string' || + typeof content !== 'string' + ) return NextResponse.json( { - message: 'Invalid structure, required param `id=`', + message: 'Invalid structure', }, - { status: 400 } + { status: HttpStatusCode.BadRequest } ); const session = await database.sessions.findOne({ @@ -64,7 +69,7 @@ export async function PUT(req: NextRequest) { { message: 'Invalid session', }, - { status: 404 } + { status: HttpStatusCode.NotFound } ); database.schedules.insertOne({ @@ -78,7 +83,7 @@ export async function PUT(req: NextRequest) { { message: 'ok', }, - { status: 200 } + { status: HttpStatusCode.Ok } ); } @@ -90,7 +95,7 @@ export async function GET(req: NextRequest) { { message: 'Invalid structure, required param `id=`', }, - { status: 400 } + { status: HttpStatusCode.BadRequest } ); const session = await database.sessions.findOne({ @@ -102,7 +107,7 @@ export async function GET(req: NextRequest) { { message: 'Invalid session', }, - { status: 404 } + { status: HttpStatusCode.NotFound } ); const schedules = await database.schedules @@ -116,6 +121,52 @@ export async function GET(req: NextRequest) { message: 'ok', schedules, }, + { status: HttpStatusCode.Ok } + ); +} + +export async function DELETE(req: NextRequest) { + const url = new URL(req.url); + const sessionId = url.searchParams.get('id'); + const date = url.searchParams.get('date'); + + if (typeof sessionId !== 'string' || typeof date !== 'string') + return NextResponse.json( + { + message: 'Invalid structure, required param `id=` and `date=`', + }, + { status: HttpStatusCode.BadRequest } + ); + + const session = await database.sessions.findOne({ + _id: new ObjectId(sessionId), + }); + + if (!session) + return NextResponse.json( + { + message: 'Invalid session', + }, + { status: HttpStatusCode.NotFound } + ); + + const result = await database.schedules.deleteMany({ + account: session.user, + scheduled: date, + }); + + if (result.deletedCount === 0) + return NextResponse.json( + { + message: 'Schedule not found', + }, + { status: HttpStatusCode.NotFound } + ); + + return NextResponse.json( + { + message: 'ok', + }, { status: 200 } ); } diff --git a/src/app/calendar/page.tsx b/src/app/calendar/page.tsx index 584023b..a3b0505 100644 --- a/src/app/calendar/page.tsx +++ b/src/app/calendar/page.tsx @@ -22,7 +22,7 @@ import { format, parse } from 'date-fns'; import PostDialog, { today } from './postDialog'; import axios from 'axios'; import Cookies from 'js-cookie'; -import { ScheduleRequest } from '@/utils'; +import { Schedule, ScheduleRemoveRequest, ScheduleRequest } from '@/utils'; function closestChild(children: any, clientX: number, clientY: number) { let closestElement = null; @@ -186,6 +186,19 @@ function CalendarApp() { calendar.events.remove( parseInt(selected) ); + + axios.delete( + `http://localhost:3000/api/posts`, + { + params: { + id: sessionId, + date: format( + date, + 'y-MM-dd hh:mm' + ), + } satisfies ScheduleRemoveRequest, + } + ); } }} className="" diff --git a/src/app/calendar/postDialog.tsx b/src/app/calendar/postDialog.tsx index 54de687..4444cc2 100644 --- a/src/app/calendar/postDialog.tsx +++ b/src/app/calendar/postDialog.tsx @@ -133,6 +133,7 @@ export default function PostDialog({ start: format(date, 'y-MM-dd hh:mm'), end: format(end, 'y-MM-dd hh:mm'), }); + axios.put('http://localhost:3000/api/posts', { scheduled: format(date, 'y-MM-dd hh:mm'), sessionId, diff --git a/src/utils.ts b/src/utils.ts index eee2168..0b813e3 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -12,6 +12,11 @@ export interface ScheduleRequest extends PostRequest { scheduled: string; } +export interface ScheduleRemoveRequest { + date: string; + id: string; +} + /* Database types */