Mysql(Prisma) Provider

This provider sets up MySQL connectivity with Prisma for Express projects, including environment validation, Prisma client setup, and a starter schema.

Features

  • Type-safe environment validation with Zod
  • Prisma client configured for development and production logging
  • Starter Prisma schema for MySQL with a User model

Installation Guide

npx servercn-cli add pr mysql-prisma

File Structure

  • src/configs/env.ts
  • src/configs/prisma.ts
  • src/prisma/schema.prisma
  • src/shared/configs/env.ts
  • src/shared/configs/prisma.ts
  • src/prisma/schema.prisma

Environment Configuration

src/configs/env.ts
import "dotenv-flow/config";
import { z } from "zod";
 
export const envSchema = z.object({
  NODE_ENV: z
    .enum(["development", "test", "production"])
    .default("development"),
  PORT: z.string().regex(/^\d+$/, "PORT must be a number").transform(Number),
  DATABASE_URL: z.url(),
  CORS_ORIGIN: z.url(),
  LOG_LEVEL: z
    .enum(["fatal", "error", "warn", "info", "debug", "trace"])
    .default("info")
});
 
export type Env = z.infer<typeof envSchema>;
 
const result = envSchema.safeParse(process.env);
 
if (!result.success) {
  console.error("❌ Invalid environment configuration");
  console.error(z.prettifyError(result.error));
  process.exit(1);
}
 
export const env: Readonly<Env> = Object.freeze(result.data);
 
export default env;

Prisma Client

src/configs/prisma.ts
import { PrismaClient } from "@prisma/client";
import env from "./env";
 
const prisma = new PrismaClient({
  log: env.NODE_ENV === "development" ? ["query", "warn", "error"] : ["error"]
});
 
export default prisma;

Prisma Schema

src/prisma/schema.prisma
generator client {
  provider = "prisma-client-js"
}
 
datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}
 
model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String?
  password  String
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

Usage

import prisma from "./configs/prisma";
 
const users = await prisma.user.findMany();

Example .env

NODE_ENV=development
PORT=8000
DATABASE_URL=mysql://username:password@localhost:3306/mydb
CORS_ORIGIN=http://localhost:3000
LOG_LEVEL=info

File & Folder Structure

Loading files...

Installation

npx servercn-cli add provider mysql-prisma