Skip to content

Commit

Permalink
Merge pull request #4 from blazyy/server-components
Browse files Browse the repository at this point in the history
Server components
  • Loading branch information
blazyy authored Jul 10, 2024
2 parents 8a351f2 + 2fecfe1 commit fa1155a
Show file tree
Hide file tree
Showing 186 changed files with 796 additions and 1,752 deletions.
File renamed without changes.
29 changes: 29 additions & 0 deletions app/api/planner/boards/[boardId]/categories/[categoryId]/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// pages/api/planner/boards/[boardId]/categories/[categoryId]/route.ts
import { ExtendedNextRequest, Params, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

export const DELETE = withMiddleware(
async (req: ExtendedNextRequest, { params }: { params: Params }): Promise<NextResponse> => {
const { userId } = req
const { boardId, categoryId } = params

const docs = await Planner.findOne({ clerkUserId: userId })
const updateObject: any = {}

for (const [key, value] of Object.entries(docs.taskCards)) {
if ((value as any).category === categoryId) {
updateObject[`taskCards.${key}.category`] = 'unassigned'
}
}

if (Object.keys(updateObject).length > 0) {
await Planner.updateOne({ clerkUserId: userId }, { $set: updateObject })
}

await Planner.updateOne({ clerkUserId: userId }, { $unset: { [`categories.${categoryId}`]: '' } })
await Planner.updateOne({ clerkUserId: userId }, { $pull: { [`boards.${boardId}.categories`]: categoryId } })

return NextResponse.json({ status: 204 })
}
)
32 changes: 32 additions & 0 deletions app/api/planner/boards/[boardId]/categories/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// pages/api/planner/boards/[boardId]/categories/route.ts
import { ExtendedNextRequest, Params, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

interface AddNewCategoryRequestBody {
newCategoryDetails: { id: string; [key: string]: any }
}

export const POST = withMiddleware(
async (req: ExtendedNextRequest, { params }: { params: Params }): Promise<NextResponse> => {
const { userId } = req
const { boardId } = params
const { newCategoryDetails }: AddNewCategoryRequestBody = await req.json()

await Planner.updateOne(
{ clerkUserId: userId },
{
$set: {
[`categories.${newCategoryDetails.id}`]: newCategoryDetails,
},
}
)

await Planner.updateOne(
{ clerkUserId: userId },
{ $push: { [`boards.${boardId}.categories`]: newCategoryDetails.id } }
)

return NextResponse.json({ status: 201 })
}
)
25 changes: 25 additions & 0 deletions app/api/planner/boards/[boardId]/columns/[columnId]/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// pages/api/planner/boards/[boardId]/columns/[columnId]/route.ts
import { ExtendedNextRequest, Params, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

export const DELETE = withMiddleware(
async (req: ExtendedNextRequest, { params }: { params: Params }): Promise<NextResponse> => {
const { userId } = req
const { boardId, columnId } = params

await Planner.updateOne(
{ clerkUserId: userId },
{
$pull: {
[`boards.${boardId}.columns`]: columnId,
},
$unset: {
[`columns.${columnId}`]: 1,
},
}
)

return NextResponse.json({ status: 204 })
}
)
22 changes: 22 additions & 0 deletions app/api/planner/boards/[boardId]/columns/reorder/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { ExtendedNextRequest, Params, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

interface ChangeColumnOrderRequestBody {
newColumnOrder: string[]
}

export const PATCH = withMiddleware(
async (req: ExtendedNextRequest, { params }: { params: Params }): Promise<NextResponse> => {
const { userId } = req
const { boardId } = params
const { newColumnOrder }: ChangeColumnOrderRequestBody = await req.json()

await Planner.updateOne(
{ clerkUserId: userId, [`boards.${boardId}.id`]: boardId },
{ $set: { [`boards.${boardId}.columns`]: newColumnOrder } }
)

return NextResponse.json({ status: 204 })
}
)
29 changes: 29 additions & 0 deletions app/api/planner/boards/[boardId]/columns/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// pages/api/planner/boards/[boardId]/columns/route.ts
import { ExtendedNextRequest, Params, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

interface AddNewColumnRequestBody {
newColumnDetails: { id: string; [key: string]: any }
updatedColumns: string[]
}

export const POST = withMiddleware(
async (req: ExtendedNextRequest, { params }: { params: Params }): Promise<NextResponse> => {
const { userId } = req
const { boardId } = params
const { newColumnDetails, updatedColumns }: AddNewColumnRequestBody = await req.json()

await Planner.updateOne(
{ clerkUserId: userId },
{
$set: {
[`boards.${boardId}.columns`]: updatedColumns,
[`columns.${newColumnDetails.id}`]: newColumnDetails,
},
}
)

return NextResponse.json({ status: 201 })
}
)
35 changes: 35 additions & 0 deletions app/api/planner/boards/[boardId]/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { ExtendedNextRequest, Params, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

export const PATCH = withMiddleware(async (req: ExtendedNextRequest, { params }: { params: Params }) => {
const { userId } = req
const { boardId } = params
const { newName } = await req.json()
await Planner.updateOne(
{ clerkUserId: userId },
{
$set: {
[`boards.${boardId}.name`]: newName,
},
}
)
return NextResponse.json({ status: 200 })
})

export const DELETE = withMiddleware(async (req: ExtendedNextRequest, { params }: { params: Params }) => {
const { userId } = req
const { boardId } = params
await Planner.updateOne(
{ clerkUserId: userId },
{
$pull: {
boardOrder: boardId,
},
$unset: {
[`boards.${boardId}`]: '',
},
}
)
return NextResponse.json({ status: 204 })
})
26 changes: 26 additions & 0 deletions app/api/planner/boards/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { ExtendedNextRequest, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

export const POST = withMiddleware(async (req: ExtendedNextRequest) => {
const { userId } = req
const { boardId, boardName, unassignedCategoryDetails } = await req.json()
await Planner.updateMany(
{ clerkUserId: userId },
{
$push: {
boardOrder: boardId,
},
$set: {
[`boards.${boardId}`]: {
id: boardId,
name: boardName,
columns: [],
categories: [unassignedCategoryDetails.id],
},
[`categories.${unassignedCategoryDetails.id}`]: unassignedCategoryDetails,
},
}
)
return NextResponse.json({ status: 201 })
})
31 changes: 31 additions & 0 deletions app/api/planner/cards/[cardId]/move/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { ExtendedNextRequest, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

interface MoveCardRequestBody {
sourceColumnId: string
destColumnId: string
sourceColumnTaskCardIds: string[]
destColumnTaskCardIds: string[]
}

export const PATCH = withMiddleware(async (req: ExtendedNextRequest): Promise<NextResponse> => {
const { userId } = req
const { sourceColumnId, destColumnId, sourceColumnTaskCardIds, destColumnTaskCardIds }: MoveCardRequestBody =
await req.json()

await Planner.updateMany(
{
clerkUserId: userId,
$or: [{ [`columns.${sourceColumnId}.id`]: sourceColumnId }, { [`columns.${destColumnId}.id`]: destColumnId }],
},
{
$set: {
[`columns.${sourceColumnId}.taskCards`]: sourceColumnTaskCardIds,
[`columns.${destColumnId}.taskCards`]: destColumnTaskCardIds,
},
}
)

return NextResponse.json({ status: 204 })
})
30 changes: 30 additions & 0 deletions app/api/planner/cards/[cardId]/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { ExtendedNextRequest, Params, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

interface CardModificationRequestBody {
title?: string
content?: string
checked?: boolean
category?: string
}

export const PATCH = withMiddleware(
async (req: ExtendedNextRequest, { params }: { params: Params }): Promise<NextResponse> => {
const { userId } = req
const { cardId } = params
const body: CardModificationRequestBody = await req.json()

const [key, value] = Object.entries(body)[0]
const updateField = { [`taskCards.${cardId}.${key}`]: value }

await Planner.updateOne(
{ clerkUserId: userId },
{
$set: updateField,
}
)

return NextResponse.json({ status: 204 })
}
)
21 changes: 21 additions & 0 deletions app/api/planner/cards/[cardId]/subtasks/[subTaskId]/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { ExtendedNextRequest, Params, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

export const DELETE = withMiddleware(
async (req: ExtendedNextRequest, { params }: { params: Params }): Promise<NextResponse> => {
const { userId } = req
const { cardId, subTaskId } = params

// Remove the subtask from the subtask object using $unset
await Planner.updateOne({ clerkUserId: userId }, { $unset: { [`subTasks.${subTaskId}`]: '' } })

// Remove the subtask from the subtask list within the specified taskcard using $pull
await Planner.updateOne(
{ clerkUserId: userId, [`taskCards.${cardId}.id`]: cardId },
{ $pull: { [`taskCards.${cardId}.subTasks`]: subTaskId } }
)

return NextResponse.json({ status: 204 })
}
)
23 changes: 23 additions & 0 deletions app/api/planner/cards/[cardId]/subtasks/move/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// pages/api/planner/cards/[taskCardId]/subtasks/move/route.ts
import { ExtendedNextRequest, Params, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

interface MoveSubtaskRequestBody {
reorderedSubTasks: string[]
}

export const PATCH = withMiddleware(
async (req: ExtendedNextRequest, { params }: { params: Params }): Promise<NextResponse> => {
const { userId } = req
const { cardId } = params
const { reorderedSubTasks }: MoveSubtaskRequestBody = await req.json()

await Planner.updateOne(
{ clerkUserId: userId, [`taskCards.${cardId}.id`]: cardId },
{ $set: { [`taskCards.${cardId}.subTasks`]: reorderedSubTasks } }
)

return NextResponse.json({ status: 204 })
}
)
29 changes: 29 additions & 0 deletions app/api/planner/cards/[cardId]/subtasks/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// pages/api/planner/cards/[taskCardId]/subtasks/route.ts
import { ExtendedNextRequest, Params, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

interface AddNewSubTaskRequestBody {
newSubTaskDetails: { id: string; [key: string]: any }
newSubTasksOrder: string[]
}

export const POST = withMiddleware(
async (req: ExtendedNextRequest, { params }: { params: Params }): Promise<NextResponse> => {
const { userId } = req
const { cardId } = params
const { newSubTaskDetails, newSubTasksOrder }: AddNewSubTaskRequestBody = await req.json()

await Planner.updateOne(
{ clerkUserId: userId },
{
$set: {
[`taskCards.${cardId}.subTasks`]: newSubTasksOrder,
[`subTasks.${newSubTaskDetails.id}`]: newSubTaskDetails,
},
}
)

return NextResponse.json({ status: 201 })
}
)
29 changes: 29 additions & 0 deletions app/api/planner/categories/[categoryId]/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// pages/api/planner/categories/[categoryId]/route.ts
import { ExtendedNextRequest, Params, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

interface ChangeCategoryInfoRequestBody {
newName: string
newColor: string
}

export const PATCH = withMiddleware(
async (req: ExtendedNextRequest, { params }: { params: Params }): Promise<NextResponse> => {
const { userId } = req
const { categoryId } = params
const { newName, newColor }: ChangeCategoryInfoRequestBody = await req.json()

await Planner.updateOne(
{ clerkUserId: userId },
{
$set: {
[`categories.${categoryId}.name`]: newName,
[`categories.${categoryId}.color`]: newColor,
},
}
)

return NextResponse.json({ status: 201 })
}
)
19 changes: 19 additions & 0 deletions app/api/planner/columns/[columnId]/cards/[cardId]/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { ExtendedNextRequest, Params, withMiddleware } from '@/lib/middleware'
import Planner from '@/models/Planner'
import { NextResponse } from 'next/server'

export const DELETE = withMiddleware(
async (req: ExtendedNextRequest, { params }: { params: Params }): Promise<NextResponse> => {
const { userId } = req
const { columnId, cardId } = params

await Planner.updateOne({ clerkUserId: userId }, { $unset: { [`taskCards.${cardId}`]: '' } })

await Planner.updateOne(
{ clerkUserId: userId, [`columns.${columnId}.id`]: columnId },
{ $pull: { [`columns.${columnId}.taskCards`]: cardId } }
)

return NextResponse.json({ status: 204 })
}
)
Loading

0 comments on commit fa1155a

Please sign in to comment.