From 436948ed3212129795686c57d065b3ad1f734de7 Mon Sep 17 00:00:00 2001 From: jinsir <874871581@qq.com> Date: Sun, 23 Feb 2025 20:23:18 +0800 Subject: [PATCH] xxx --- .../department/department.controller.ts | 2 +- .../src/models/goods/goods.controller.ts | 41 +++++++++++++ apps/server/src/models/goods/goods.module.ts | 13 ++++ apps/server/src/models/goods/goods.service.ts | 4 ++ apps/server/src/trpc/trpc.module.ts | 2 + apps/web/src/app/main/home/page.tsx | 61 ++++++++++++++++--- config/nginx/conf.d/web.conf | 9 +-- package.json | 3 +- packages/common/prisma/schema.prisma | 50 +++++++++++++-- 9 files changed, 164 insertions(+), 21 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/department/department.controller.ts b/apps/server/src/models/department/department.controller.ts index 7c4f063..c871c58 100755 --- a/apps/server/src/models/department/department.controller.ts +++ b/apps/server/src/models/department/department.controller.ts @@ -84,4 +84,4 @@ export class DepartmentController { }; } } -} +} \ No newline at end of file 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..f14b858 --- /dev/null +++ b/apps/server/src/models/goods/goods.controller.ts @@ -0,0 +1,41 @@ +import { Controller, Get, Query, Param } from '@nestjs/common'; + +@Controller('goods') +export class GoodsController { + constructor() { + console.log('goods controller') + } + + // 示例1:基本查询参数 + @Get('hello') + getHello(@Query('name') name?: string) { + return { + message: 'Hello World!', + name: name || 'Guest' + }; + } + + // 示例2:路径参数 + @Get('detail/:id') + getDetail(@Param('id') id: string) { + return { + id: id, + detail: `Detail for product ${id}` + }; + } + + // 示例3:多个查询参数 + @Get('search') + searchProducts( + @Query('keyword') keyword: string, + @Query('page') page: number = 1, + @Query('limit') limit: number = 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..e569130 --- /dev/null +++ b/apps/server/src/models/goods/goods.module.ts @@ -0,0 +1,13 @@ +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..8270b7a --- /dev/null +++ b/apps/server/src/models/goods/goods.service.ts @@ -0,0 +1,4 @@ +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..2f7f3a5 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 7c1e5a3..743f588 100755 --- a/apps/web/src/app/main/home/page.tsx +++ b/apps/web/src/app/main/home/page.tsx @@ -1,10 +1,53 @@ -import { api } from "@nice/client" -import { useEffect } from "react" +import { api } from "@nice/client"; +import { apiClient } from "@web/src/utils"; -export default function HomePage() { - const { data } = api.staff.findMany.useQuery({ take: 10 }) - useEffect(() => { - console.log(data) - }, [data]) - return <>Home -} \ No newline at end of file +import { Button, Tag } from "antd"; + +import { useEffect, useMemo, useState } from "react"; +function HomePage() { + // 使用 useQuery 钩子从 API 获取数据 + + const { data } = api.staff.findMany.useQuery({ + take: 10 + }); + + // 定义 counter 状态和更新函数 + const [counter, setCounter] = useState(0); + + // 使用 useMemo 记忆化 counterText,仅在 counter 变化时重新计算 + const counterText = useMemo(() => { + return `当前计数为: ${counter}`; + }, [counter]); + + const getData = async()=>{ + const res = @wait apiClient.get(*/goods/hello*) + console.log(res) + } + + // 使用 useEffect 在 data 变化时打印 data + useEffect(() => { + apiClient.get(“/goods/hello”) + }, [data]); + + return ( +
+ {counterText} +
+ + +
+ {/* 如果 data 存在,遍历并渲染每个项目的 username */} + {data?.map((item) => ( +
+ {item.username} +
+ ))} +
+ ); +} + +export default HomePage; \ No newline at end of file diff --git a/config/nginx/conf.d/web.conf b/config/nginx/conf.d/web.conf index 00fbbf1..bf90259 100755 --- a/config/nginx/conf.d/web.conf +++ b/config/nginx/conf.d/web.conf @@ -27,7 +27,8 @@ server { # 压缩HTTP版本 gzip_http_version 1.1; # 压缩的文件类型 - gzip_types text/plain + gzip_types + text/plain text/css application/json application/javascript @@ -90,8 +91,8 @@ server { add_header 'Access-Control-Allow-Origin' '$http_origin' always; add_header 'Access-Control-Allow-Credentials' 'true' always; add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always; - add_header 'Access-Control-Allow-Headers' - 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization' + add_header 'Access-Control-Allow-Headers' + 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization' always; } # 内部认证服务位置 @@ -110,4 +111,4 @@ server { proxy_set_header Host $host; proxy_set_header X-Query-Params $query_string; } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 8a85a11..8156253 100755 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "pnpm run --parallel dev", - "db:clear": "pnpm --filter common run db:clear" + "db:clear": "pnpm --filter common run db:clear", + "studio": "pnpm --filter common run studio" }, "keywords": [], "author": "insiinc", diff --git a/packages/common/prisma/schema.prisma b/packages/common/prisma/schema.prisma index 4780725..021f720 100755 --- a/packages/common/prisma/schema.prisma +++ b/packages/common/prisma/schema.prisma @@ -245,13 +245,8 @@ model PostAncestry { // 复合索引优化 // 索引建议 - @@index([ancestorId]) // 针对祖先的查询 - @@index([descendantId]) // 针对后代的查询 - @@index([ancestorId, descendantId]) // 组合索引,用于查询特定的祖先-后代关系 - @@index([relDepth]) // 根据关系深度的查询 - @@map("post_ancestry") -} +} model Message { id String @id @default(cuid()) url String? @@ -328,4 +323,47 @@ model Resource { @@index([type]) @@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