diff --git a/apps/backend/src/projects/schemas/project.schema.ts b/apps/backend/src/projects/schemas/project.schema.ts index 264c396..5a0154e 100644 --- a/apps/backend/src/projects/schemas/project.schema.ts +++ b/apps/backend/src/projects/schemas/project.schema.ts @@ -3,7 +3,7 @@ import { Document } from 'mongoose' export type ProjectDocument = Project & Document -@Schema({ timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' } }) +@Schema({ timestamps: { createdAt: 'createdAt', updatedAt: 'updatedAt' } }) export class Project { @Prop({ required: true }) name: string diff --git a/apps/backend/src/tasks/schemas/task.schema.ts b/apps/backend/src/tasks/schemas/task.schema.ts index 7c8d714..3491a77 100644 --- a/apps/backend/src/tasks/schemas/task.schema.ts +++ b/apps/backend/src/tasks/schemas/task.schema.ts @@ -5,7 +5,7 @@ import { Project } from '../../projects/schemas/project.schema' export type TaskDocument = Task & Document -@Schema({ timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' } }) +@Schema({ timestamps: { createdAt: 'createdAt', updatedAt: 'updatedAt' } }) export class Task { @Prop({ required: true }) title: string diff --git a/apps/backend/src/tasks/tasks.controller.ts b/apps/backend/src/tasks/tasks.controller.ts index 22013a7..15019fa 100644 --- a/apps/backend/src/tasks/tasks.controller.ts +++ b/apps/backend/src/tasks/tasks.controller.ts @@ -1,4 +1,13 @@ -import { Body, Controller, Delete, Get, Param, Patch, Post, Query } from '@nestjs/common' +import { + Body, + Controller, + Delete, + Get, + Param, + Patch, + Post, + Query, +} from '@nestjs/common' import { TasksService } from './tasks.service' import { Task } from './schemas/task.schema' import { CreateTaskDto } from './dto/create-task.dto' @@ -14,8 +23,12 @@ export class TasksController { } @Get() - findAll(@Query('projectId') projectId?: string, @Query('status') status?: string) { - return this.tasksService.findAll(projectId, status) + findAll( + @Query('projectId') projectId?: string, + @Query('status') status?: string, + @Query('sortBy') sortBy?: string, + ) { + return this.tasksService.findAll(projectId, status, sortBy) } @Get(':id') @@ -30,8 +43,8 @@ export class TasksController { @Patch(':id') async update( - @Param('id') id: string, - @Body() updateTaskDto: UpdateTaskDto, + @Param('id') id: string, + @Body() updateTaskDto: UpdateTaskDto, ): Promise { return this.tasksService.update(id, updateTaskDto) } diff --git a/apps/backend/src/tasks/tasks.service.ts b/apps/backend/src/tasks/tasks.service.ts index 67b91cf..43ff393 100644 --- a/apps/backend/src/tasks/tasks.service.ts +++ b/apps/backend/src/tasks/tasks.service.ts @@ -21,7 +21,11 @@ export class TasksService { return createdTask.save() } - async findAll(projectId?: string, status?: string): Promise { + async findAll( + projectId?: string, + status?: string, + sortBy = 'position', + ): Promise { const query: { projectId?: Types.ObjectId status?: string @@ -33,7 +37,10 @@ export class TasksService { if (status) query.status = status - return this.taskModel.find(query).sort({ position: -1 }).exec() + return this.taskModel + .find(query) + .sort({ [sortBy]: -1 }) + .exec() } async findOne(id: string): Promise { @@ -51,7 +58,11 @@ export class TasksService { update.projectId = new Types.ObjectId(updateTaskDto.projectId) const updatedTask = await this.taskModel - .findByIdAndUpdate(id, { $set: { ...updateTaskDto, ...update } }, { new: true }) + .findByIdAndUpdate( + id, + { $set: { ...updateTaskDto, ...update } }, + { new: true }, + ) .exec() if (!updatedTask) diff --git a/apps/frontend/src/api/tasks.ts b/apps/frontend/src/api/tasks.ts index cb9a3f2..a61a415 100644 --- a/apps/frontend/src/api/tasks.ts +++ b/apps/frontend/src/api/tasks.ts @@ -3,11 +3,12 @@ import type { TaskResponse } from './types' import type { Task } from '@/store' import { TaskStatus } from '@/store' -export function fetchAllTasks({ pId, status }: { pId?: string; status?: TaskStatus }) { +export function fetchAllTasks({ pId, status, sortBy }: { pId?: string; status?: TaskStatus; sortBy?: string }) { return http.get('/tasks', { params: { projectId: pId, status, + sortBy, }, }) } diff --git a/apps/frontend/src/api/types.ts b/apps/frontend/src/api/types.ts index a970b2d..ed0dc8d 100644 --- a/apps/frontend/src/api/types.ts +++ b/apps/frontend/src/api/types.ts @@ -7,13 +7,13 @@ export interface TaskResponse { projectId: string position: number _id: string - created_at: string - updated_at: string + createdAt: string + updatedAt: string } export interface ProjectResponse { - created_at: string + createdAt: string name: string - updated_at: string + updatedAt: string _id: string } diff --git a/apps/frontend/src/store/smartProjects.ts b/apps/frontend/src/store/smartProjects.ts index b652f69..847cf9a 100644 --- a/apps/frontend/src/store/smartProjects.ts +++ b/apps/frontend/src/store/smartProjects.ts @@ -42,8 +42,10 @@ export const useSmartProjects = defineStore('smartProjects', () => { export async function loadSmartProjectTasks(smartProjectName: string) { const status = smartProjectName === '已完成' ? TaskStatus.COMPLETED : TaskStatus.REMOVED + // 基于 updatedAt 来做排序 const rawTasks = await fetchAllTasks({ status, + sortBy: 'updatedAt', }) return rawTasks }