# Prisma-NestJS API Example Project

This is an example project demonstrating how to use the Prisma-NestJS API generator library to quickly build a RESTful API with NestJS and Prisma.

## Features

- Auto-generated controllers and DTOs from your Prisma schema
- Proper handling of relations in DTOs
- Swagger API documentation
- Decimal type support
- Proper error handling with automatic 404 responses for missing resources

## Getting Started

### Prerequisites

- Node.js (v18+)
- npm or yarn

### Installation

1. Create a `.env` file with your database connection string:
   ```
   DATABASE_URL="file:./dev.db"
   ```

2. Install dependencies:
   ```bash
   npm install
   ```

3. Generate the Prisma client and NestJS API components:
   ```bash
   npm run prisma:generate
   ```

4. Create the initial database migration:
   ```bash
   npm run prisma:migrate:dev -- --name init
   ```

5. Build and run the application:
   ```bash
   npm run build
   npm run start
   ```

### API Documentation

Once the application is running, you can access the Swagger documentation at:
```
http://localhost:3000/api
```

## Project Structure

- `prisma/` - Contains the Prisma schema and migrations
- `src/` - Source code for the application
  - `generated/` - Auto-generated controllers and DTOs from Prisma schema
  - `user/`, `post/`, etc. - Module files for each entity
  - `prisma.service.ts` - Prisma client service for NestJS
  - `main.ts` - Application entry point
  - `app.module.ts` - Root module of the application

## How It Works

This example project directly references the TypeScript source files from the prisma-nest-api library (rather than using a compiled version). The configuration in `tsconfig.json` sets up path mappings to include the library's source files in the compilation process.

Key points:
- Uses the `file:../` reference in package.json to reference the local library
- Configured tsconfig.json with paths to allow importing from the library source
- Imports the library's TypeScript files directly, ensuring any changes to the library are immediately available

This approach allows you to develop and test changes to the library in real-time without having to build the library separately.
