diff --git a/apps/server/src/main.ts b/apps/server/src/main.ts index 8b82ed1..91928ec 100755 --- a/apps/server/src/main.ts +++ b/apps/server/src/main.ts @@ -4,19 +4,27 @@ import { TrpcRouter } from './trpc/trpc.router'; import { WebSocketService } from './socket/websocket.service'; async function bootstrap() { + // 创建NestJS应用实例 const app = await NestFactory.create(AppModule); // 启用 CORS 并允许所有来源 app.enableCors({ origin: '*', }); + + // 获取WebSocket服务实例并初始化 const wsService = app.get(WebSocketService); await wsService.initialize(app.getHttpServer()); + + // 获取tRPC路由实例并应用中间件 const trpc = app.get(TrpcRouter); trpc.applyMiddleware(app); + // 设置服务器端口,优先使用环境变量中的值,默认3000 const port = process.env.SERVER_PORT || 3000; + // 启动应用,监听指定端口 await app.listen(port); } +// 启动应用 bootstrap(); 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..2ec8f88 --- /dev/null +++ b/apps/server/src/models/goods/goods.controller.ts @@ -0,0 +1,9 @@ +import { Controller, Get } from '@nestjs/common'; + +@Controller('goods') +export class GoodsController { + @Get('hello') + getHello(): string { + return 'Hello World!'; + } +} 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..6989b7b --- /dev/null +++ b/apps/server/src/models/goods/goods.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { GoodsService } from './goods.service'; +import { GoodsController } from './goods.controller'; + +@Module({ + providers: [GoodsService], + controllers: [GoodsController] +}) +export class GoodsModule {} 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..f5e6cc7 --- /dev/null +++ b/apps/server/src/models/goods/goods.service.ts @@ -0,0 +1,6 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class GoodsService { + +} diff --git a/apps/web/src/app/main/home/page.tsx b/apps/web/src/app/main/home/page.tsx index 7c1e5a3..3697ead 100755 --- a/apps/web/src/app/main/home/page.tsx +++ b/apps/web/src/app/main/home/page.tsx @@ -1,10 +1,39 @@ import { api } from "@nice/client" -import { useEffect } from "react" +import { Button, Tag } from "antd" +import { useEffect, useMemo, useState } from "react" -export default function HomePage() { - const { data } = api.staff.findMany.useQuery({ take: 10 }) +function HomePage() { + const { data } = api.staff.findMany.useQuery({ + take: 10 + }) + const [counter, setCounter] = useState(0) + const counterText = useMemo(() => { + return `当前计数为:${counter}` + }, [counter]) useEffect(() => { console.log(data) }, [data]) - return <>Home -} \ No newline at end of file + return
+ {counterText} +
+ + +
+ + { + data?.map(i => { + return
+ {i.username} +
+ }) + } +
+} +// export { HomePage } +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..935a217 100755 --- a/packages/common/prisma/schema.prisma +++ b/packages/common/prisma/schema.prisma @@ -329,3 +329,46 @@ 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