Skip to content

Latest commit

 

History

History
230 lines (181 loc) · 5.8 KB

File metadata and controls

230 lines (181 loc) · 5.8 KB

✅ HOÀN THÀNH - Prisma + PostgreSQL

🎉 Tóm tắt

Đã tích hợp thành công Prisma ORM với database PostgreSQL (Neon.tech)!

✅ Đã làm gì?

1. Cài đặt Prisma

  • ✅ @prisma/client v6.17.1
  • ✅ prisma v6.17.1

2. Thêm Database URL

File .env:

DATABASE_URL="postgresql://neondb_owner:npg_fKNT7GeL0YJO@ep-plain-heart-adfo87lf-pooler.c-2.us-east-1.aws.neon.tech/neondb?sslmode=require&channel_binding=require"

3. Tạo Schema

File prisma/schema.prisma:

model User {
  id        String   @id @default(uuid())  // UUID tự động
  email     String   @unique                // Không trùng
  username  String   @unique                // Không trùng
  password  String                          // Mật khẩu đã hash
  createdAt DateTime @default(now())        // Tự động
  updatedAt DateTime @updatedAt             // Tự động cập nhật

  @@map("users")  // Tên table trong DB
}

4. Chạy Migration

✅ Migration đã chạy: 20251020070440_init
✅ Table đã tạo: users
✅ Database: neondb trên Neon.tech

5. Cập nhật Code

UsersService - TRƯỚC (Lưu trong RAM):

private users: User[] = [];  // Mất data khi restart

UsersService - SAU (Lưu vào PostgreSQL):

constructor(private prisma: PrismaService) {}

// Lưu vào database
await this.prisma.user.create({
  data: { email, username, password }
});

📦 Files mới

  1. src/prisma/prisma.service.ts - Service kết nối DB
  2. src/prisma/prisma.module.ts - Module global
  3. prisma/schema.prisma - Schema database
  4. prisma/migrations/ - Lịch sử migration
  5. .yarnrc.yml - Fix Yarn PnP issue
  6. PRISMA-SETUP.md - Hướng dẫn chi tiết
  7. PRISMA-COMPLETE.md - Tổng kết (English)

🔄 Thay đổi

App Module

imports: [
  PrismaModule,  // ← Thêm mới
  AuthModule,
  UsersModule,
  RabbitmqModule,
]

Users Service

  • ❌ Không còn dùng array trong RAM
  • ✅ Dùng Prisma query PostgreSQL
  • ✅ findByEmail, findById, create... đều query DB

🎯 Tính năng

Dữ liệu bền vững - Lưu vào PostgreSQL, không mất khi restart
Type-safe - TypeScript types tự động generate
UUID - ID tự động sinh, unique
Timestamps - createdAt/updatedAt tự động
Unique constraints - Email và username không trùng
RabbitMQ vẫn hoạt động - Push message khi đăng ký

🧪 Test

1. Đăng ký user (lưu vào PostgreSQL)

yarn start:dev  # Start server

curl -X POST http://localhost:4000/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "test@db.com",
    "username": "testuser",
    "password": "test123456"
  }'

2. Xem data trong Prisma Studio

yarn prisma:studio
# Mở http://localhost:5555
# Click vào table "User"
# Bạn sẽ thấy user vừa tạo!

📊 Thông tin Database

  • Loại: PostgreSQL
  • Host: Neon.tech (cloud)
  • Database: neondb
  • Table: users
  • Connection: SSL + Pooling

🚀 Commands

Lệnh Mô tả
yarn start:dev Start server
yarn prisma:studio Mở giao diện quản lý DB
yarn prisma:migrate Tạo migration mới
yarn prisma:generate Generate Prisma Client

✅ Flow hoàn chỉnh

1. User đăng ký qua POST /auth/register
         ↓
2. AuthService.register() được gọi
         ↓
3. UsersService.create() → Lưu vào PostgreSQL
         ↓
4. RabbitMQ Producer push message vào queue "backendnode"
         ↓
5. Trả về JWT token cho client

📝 Logs thành công

[NestFactory] Starting Nest application...
[InstanceLoader] PrismaModule dependencies initialized +11ms  ✅
[InstanceLoader] UsersModule dependencies initialized +0ms
[NestApplication] Nest application successfully started +924ms
🚀 Auth Server running at: http://localhost:4000/

🎉 Kết quả

PostgreSQL đã kết nối thành công
Users được lưu vào database
RabbitMQ vẫn hoạt động bình thường
JWT auth vẫn hoạt động
Swagger docs vẫn ok

🔍 Verify

Cách 1: Dùng Prisma Studio

yarn prisma:studio
# Vào http://localhost:5555
# Xem table "User"

Cách 2: Kiểm tra logs

Khi đăng ký user mới:

[AuthService] New user registration: test@db.com
[RabbitmqProducerService] Publishing message directly to queue: backendnode
[AuthService] User registration sent to RabbitMQ queue 'backendnode': test@db.com

🐛 Troubleshooting

Lỗi: "PrismaClient is not generated"

Giải pháp:

yarn install  # Chạy lại để generate

Lỗi: "Can't connect to database"

Kiểm tra:

  • DATABASE_URL trong .env đúng chưa
  • Internet connection
  • Neon.tech database còn hoạt động không

Lỗi: Yarn PnP conflicts

Đã fix: Tạo file .yarnrc.yml với nodeLinker: node-modules

📚 Tài liệu

  • PRISMA-SETUP.md - Hướng dẫn chi tiết (English)
  • PRISMA-COMPLETE.md - Tổng kết (English)
  • PRISMA-SUMMARY-VI.md - File này (Tiếng Việt)

💡 Tips

  1. Luôn chạy migration khi thay đổi schema
  2. Dùng Prisma Studio để xem data trực quan
  3. Backup database trước khi migrate production
  4. Xem logs để debug kết nối DB

🚀 Sẵn sàng Production

✅ Database connection pooling
✅ SSL enabled
✅ Auto-generated UUIDs
✅ Timestamps tự động
✅ Error handling
✅ Type safety


Status: ✅ HOÀN THÀNH
Database: PostgreSQL (Neon.tech)
ORM: Prisma v6.17.1
Table: users
Migration: Applied

Chúc mừng! Hệ thống đã sẵn sàng với PostgreSQL! 🎉