From d87a7a6a98d1c7371cd41b50143271af033aa67c Mon Sep 17 00:00:00 2001 From: Li1304553726 <1304553726@qq.com> Date: Sun, 23 Feb 2025 20:20:19 +0800 Subject: [PATCH] 2.23 --- .../src/models/goods/goods.controller.ts | 45 +++++++++++++++++++ apps/server/src/models/goods/goods.module.ts | 8 ++++ apps/server/src/models/goods/goods.service.ts | 6 +++ apps/server/src/trpc/trpc.module.ts | 2 + apps/web/src/app/main/home/page.tsx | 17 ++++--- packages/common/prisma/schema.prisma | 41 +++++++++++++++++ 6 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 apps/server/src/models/goods/goods.controller.ts create mode 100644 apps/server/src/models/goods/goods.module.ts create mode 100644 apps/server/src/models/goods/goods.service.ts diff --git a/apps/server/src/models/goods/goods.controller.ts b/apps/server/src/models/goods/goods.controller.ts new file mode 100644 index 0000000..8a5ed4e --- /dev/null +++ b/apps/server/src/models/goods/goods.controller.ts @@ -0,0 +1,45 @@ +import { Controller, Get, Query, Param } from '@nestjs/common'; + +// 定义商品相关的控制器,路由前缀为 /goods +@Controller('goods') +export class GoodsController { + // 构造函数,在控制器实例化时执行 + constructor() { + console.log('goods controller') // 打印日志,用于调试 + } + // 示例1:基本查询参数 + // GET /goods/hello?name=xxx + @Get('hello') + getHello(@Query('name') name?: string) { + return { + message: 'Hello World!', // 固定返回消息 + name: name || 'Guest' // 返回传入的name参数,如果未传入则返回'Guest' + }; + } + + // 示例2:路径参数 + // GET /goods/detail/123 + @Get('detail/:id') + getDetail(@Param('id') id: string) { + return { + id: id, // 返回路径参数中的id + detail: `Detail for product ${id}` // 返回包含id的详细信息 + }; + } + + // 示例3:多个查询参数 + // GET /goods/search?keyword=xxx&page=2&limit=20 + @Get('search') + searchProducts( + @Query('keyword') keyword: string, // 搜索关键词 + @Query('page') page: number = 1, // 页码,默认值为1 + @Query('limit') limit: number = 10 // 每页数量,默认值为10 + ) { + return { + keyword, // 返回搜索关键词 + page, // 返回当前页码 + limit, // 返回每页数量 + results: [] // 返回搜索结果(示例中为空数组) + }; + } +} \ No newline at end of file diff --git a/apps/server/src/models/goods/goods.module.ts b/apps/server/src/models/goods/goods.module.ts new file mode 100644 index 0000000..9a0291d --- /dev/null +++ b/apps/server/src/models/goods/goods.module.ts @@ -0,0 +1,8 @@ +import { Module } from '@nestjs/common'; +import { GoodsService } from './goods.service'; +import { GoodsController } from './goods.controller'; +@Module({ + providers: [GoodsService], + controllers: [GoodsController] +}) +export class GoodsModule {} \ No newline at end of file diff --git a/apps/server/src/models/goods/goods.service.ts b/apps/server/src/models/goods/goods.service.ts new file mode 100644 index 0000000..ed0e4c2 --- /dev/null +++ b/apps/server/src/models/goods/goods.service.ts @@ -0,0 +1,6 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class GoodsService { + +} \ No newline at end of file diff --git a/apps/server/src/trpc/trpc.module.ts b/apps/server/src/trpc/trpc.module.ts index 222c9c9..f9b9e75 100755 --- a/apps/server/src/trpc/trpc.module.ts +++ b/apps/server/src/trpc/trpc.module.ts @@ -16,6 +16,7 @@ import { RoleMapModule } from '@server/models/rbac/rbac.module'; import { TransformModule } from '@server/models/transform/transform.module'; import { ResourceModule } from '@server/models/resource/resource.module'; +import { GoodsModule } from '@server/models/goods/goods.module'; @Module({ imports: [ @@ -33,6 +34,7 @@ import { ResourceModule } from '@server/models/resource/resource.module'; VisitModule, WebSocketModule, ResourceModule, + GoodsModule ], controllers: [], providers: [TrpcService, TrpcRouter, Logger], diff --git a/apps/web/src/app/main/home/page.tsx b/apps/web/src/app/main/home/page.tsx index e3d0133..1795b1d 100755 --- a/apps/web/src/app/main/home/page.tsx +++ b/apps/web/src/app/main/home/page.tsx @@ -2,20 +2,22 @@ import { api } from '@nice/client'; import { useState, useEffect, useMemo } from 'react'; import { Button } from 'antd'; import People from '../component/People'; +import { apiClient } from '@web/src/utils'; // 主页入口组件,负责渲染首页内容 function HomePage() { - // 使用trpc查询接口获取员工列表(取前10条记录) - // const { data } = api.staff.findMany.useQuery({ - // take: 10, // 限制查询结果数量 - // }); + const [counter, setCounter] = useState(0); const counterText = useMemo(() => { return `当前值:${counter}` }, [counter]); +const getData = async () => { + const res = await apiClient.get('/goods/hello', { - // useEffect(() => { - // console.log(data); - // }, [data]); + }); + useEffect(() => { + getData(); + },[]) + console.log(res); return (
@@ -27,5 +29,6 @@ function HomePage() {
); } +} //export {HomePage}; MainRoute也要+{} export default HomePage; \ No newline at end of file diff --git a/packages/common/prisma/schema.prisma b/packages/common/prisma/schema.prisma index 4780725..fb5acbe 100755 --- a/packages/common/prisma/schema.prisma +++ b/packages/common/prisma/schema.prisma @@ -329,3 +329,44 @@ model Resource { @@index([createdAt]) @@map("resource") } + +//商品表 +model Goods { + id String @id @default(cuid()) // 商品ID + name String @unique // 商品名称 + description String? // 商品描述 + price Float @default(0.0)// 商品价格 + images String[] @default([]) // 商品图片 + tags Tag[] @relation("GoodsTags") // 多对多关系 + reviews Review[] // 一对多关系 + createdAt DateTime @default(now()) @map("created_at") // 创建时间 + updatedAt DateTime @updatedAt @map("updated_at") // 更新时间 + deletedAt DateTime? @map("deleted_at") // 删除时间,可为空 + @@index([name]) + @@map("goods") +} + +// 标签表 +model Tag { + id String @id @default(cuid()) + name String @unique + goods Goods[] @relation("GoodsTags") + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @updatedAt @map("updated_at") + deletedAt DateTime? @map("deleted_at") + @@map("tag") +} + +model Review { + id String @id @default(cuid()) + content String + rating Int @default(0) + goodsId String @map("goods_id") + goods Goods @relation(fields: [goodsId], references: [id]) + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @updatedAt @map("updated_at") + deletedAt DateTime? @map("deleted_at") + @@index([goodsId]) + @@index([rating]) + @@map("review") +} \ No newline at end of file