Skip to content

surojcodes/prisma-crud

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

5 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Prisma CRUD

Setup Prisma 7 with TypeScript (Full ESM support)

A modern, fully-typed CRUD application built with Prisma 7, TypeScript, and PostgreSQL. This project demonstrates best practices for setting up Prisma with full ESM (ECMAScript Module) support, including Docker containerization for database management.


🎯 Features

  • βœ… Prisma 7 - Latest ORM for Node.js and TypeScript
  • βœ… Full ESM Support - Native ES modules throughout
  • βœ… TypeScript - Complete type safety and excellent IDE support
  • βœ… PostgreSQL - Robust relational database
  • βœ… Docker Compose - Easy database setup and management
  • βœ… Type-safe Adapter - Using @prisma/adapter-pg for PostgreSQL

πŸ“‹ Prerequisites

  • Node.js (v18 or higher recommended)
  • npm or yarn package manager
  • Docker and Docker Compose (for PostgreSQL)

πŸš€ Getting Started

1. Clone the Repository

git clone https://github.com/surojcodes/prisma-crud.git
cd prisma-crud

2. Install Dependencies

npm install

3. Set Up Environment Variables

Copy the example environment file:

cp .env.example .env

The .env file should contain:

DATABASE_URL="postgresql://postgres:password@localhost:5432/my_prisma_app?schema=public"

4. Start PostgreSQL with Docker

docker-compose up -d

This will start a PostgreSQL 16 database container with the following credentials:

  • User: postgres
  • Password: password
  • Database: my_prisma_app
  • Port: 5432

5. Set Up the Database Schema

Run Prisma migrations:

npx prisma migrate dev

This will:

  • Create your database schema from the Prisma schema
  • Generate Prisma Client

6. Build and Run

Build the TypeScript code:

npm run build

Start the application:

npm start

πŸ“ Project Structure

prisma-crud/
β”œβ”€β”€ src/                    # TypeScript source code
β”œβ”€β”€ prisma/                 # Prisma configuration and migrations
β”‚   β”œβ”€β”€ schema.prisma      # Database schema definition
β”‚   └── migrations/        # Database migration files
β”œβ”€β”€ dist/                   # Compiled JavaScript output
β”œβ”€β”€ docker-compose.yml      # Docker database setup
β”œβ”€β”€ prisma.config.ts        # Prisma CLI configuration
β”œβ”€β”€ package.json            # Project dependencies and scripts
β”œβ”€β”€ tsconfig.json           # TypeScript configuration
β”œβ”€β”€ .env.example            # Environment variables template
└── .gitignore              # Git ignore rules

πŸ“¦ Dependencies

Production Dependencies

Development Dependencies


πŸ› οΈ Available Scripts

# Build TypeScript to JavaScript
npm run build

# Start the application
npm start

# Run Prisma migrations
npx prisma migrate dev

# Open Prisma Studio (GUI for database)
npx prisma studio

# Generate Prisma Client
npx prisma generate

# Reset database (be careful!)
npx prisma migrate reset

πŸ—„οΈ Docker Commands

Start the Database

docker-compose up -d

Stop the Database

docker-compose down

View Database Logs

docker-compose logs -f db

Access PostgreSQL CLI

docker-compose exec db psql -U postgres -d my_prisma_app

πŸ”§ Configuration Files

tsconfig.json

TypeScript compiler configuration with ESM support:

  • Target: ES2020
  • Module: ESNext
  • Module Resolution: Node

prisma.config.ts

Prisma CLI configuration for development:

  • Schema location: prisma/schema.prisma
  • Migrations path: prisma/migrations
  • Database URL from environment variables

docker-compose.yml

PostgreSQL service configuration:

  • Image: PostgreSQL 16
  • Container name: my-prisma-db
  • Credentials: postgres / password
  • Database: my_prisma_app
  • Data persistence: Named volume postgres_data

πŸ“ Usage Example

After setting up the database, you can use Prisma Client in your TypeScript code:

import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

async function main() {
  // Create
  const user = await prisma.user.create({
    data: {
      email: 'user@example.com',
      name: 'John Doe',
    },
  })

  // Read
  const allUsers = await prisma.user.findMany()

  // Update
  const updated = await prisma.user.update({
    where: { id: user.id },
    data: { name: 'Jane Doe' },
  })

  // Delete
  await prisma.user.delete({
    where: { id: user.id },
  })
}

main()
  .then(async () => {
    await prisma.$disconnect()
  })
  .catch(async (e) => {
    console.error(e)
    await prisma.$disconnect()
    process.exit(1)
  })

πŸ“š Resources


πŸ“ License

ISC - See LICENSE file for details


πŸ‘¨β€πŸ’» Author

Suroj M - GitHub


🀝 Contributing

Contributions are welcome! Feel free to open issues and pull requests.


πŸ“ž Support

For questions or issues, please open an issue in the GitHub repository.

About

A modern, fully-typed CRUD application built with Prisma 7, TypeScript, and PostgreSQL.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors