8000 GitHub - amandakelake/nest-shop-cart: Shop cart backend:NestJS/Prisma/PostgresQL/GraphQL/Stripe/Docker-Compose
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

amandakelake/nest-shop-cart

Repository files navigation

Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Coverage Discord Backers on Open Collective Sponsors on Open Collective Support us

Shop cart

Tech Stack: NestJS + Prisma + PostgresQL + GraphQL + Stripe + Docker-Compose

Setup prisma + postgres with docker-compose

pnpm install prisma -D
pnpm npm install @prisma/client

# 生成 prisma.schema文件
pnpm prisma init

.env文件配置DATABASE_URL

DATABASE_URL="postgresql://root:123@localhost:5432/nest_shop_cart_db?schema=public"
# 配置来自于docker-compose配置的postgres
version: '3.9'

services:
  postgres:
    image: postgres:latest
    ports:
      - 5432:5432
    volumes:
      - ~/apps/postgres:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=123
      - POSTGRES_USER=root
      - POSTGRES_DB=nest_shop_cart_db

prisma.schema配置model

docker-compose up -d启动 postgres服务

pnpm prisma migrate dev初始化数据库,生成prisma client

pnpm prisma studio来查看数据库GUI

nest 集成 prisma

推荐 nestjs-prisma

import { Logger, Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { loggingMiddleware, PrismaModule } from 'nestjs-prisma';

@Module({
  imports: [PrismaModule.forRoot({
    isGlobal: true,
    prismaServiceOptions: {
      middlewares: [
        loggingMiddleware({
          logger: new Logger('PrismaMiddleware'),
          logLevel: 'log',
        }),
      ],
    },
  })],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

做了任何schema相关的更改,记得要evolving本地的prisma client Introduction to Prisma Client | Prisma Documentation

pnpm prisma generate

不然代码无法识别如 this.prisma.product.findMany()中的model

nest 集成 graphql

NestJS | GraphQL - A progressive Node.js framework

// app.module.ts
@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      playground: true,
      sortSchema: true,
      autoSchemaFile: 'src/schema.graphql',
    }),
	// ...
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {
}

然后执行nest g resource product,会自动插入product相关的代码,包括schema.graphql文件

Prisma Seed

// prisma/seed.ts
// 多准备一份seed数据,放在 prisma/seedData.ts
import products from './seedData';
import { PrismaService } from 'nestjs-prisma';

const prisma = new PrismaService();

(function seed() {
  products.forEach(async (product) => {
    await prisma.product.create({
      data: {
        name: product.name,
        description: product.description,
        price: product.price,
        image: product.image,
        brand: product.brand,
      },
    });
  });
})();

package.json增加如下命令

{
  "name": "nest-shop-cart",
  "scripts": {
    "db:seed": "prisma db seed",
    "db:studio": "prisma studio"
  },
  "prisma": {
    "seed": "ts-node prisma/seed.ts"
  }
}

yarn run db:seed初始化数据

yarn run db:studio查看数据表

Stripe

https://docs.stripe.com/get-started/development-environment?lang=node

brew install stripe/stripe-cli/stripe

stripe login

FrontEnd Graphql

Introduction (GraphQL-Codegen)

Error

Pnpm + Prisma 无法识别Model,无法resolve @prisma/client

因为pnpm的node_modules是通过软链接到全局的store,prisma client generate时没有将对应的类型文件生成到./nodu_modules/@prisma/client路径,导致TS无法识别对应的类型

解决方案:将pnpm换回yarn或者npm即可

License

Nest is MIT licensed.

About

Shop cart backend:NestJS/Prisma/PostgresQL/GraphQL/Stripe/Docker-Compose

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0