Skip to content

WeOnlyLiveOnce13/AI-Image-generation-RestAPI

Repository files navigation

AI SaaS REST API πŸš€πŸ§ 

NestJS TypeScript pnpm Node Prisma Jest

A modular NestJS + TypeScript starter for building AI-powered SaaS REST APIs. This project demonstrates:

  • API key based auth and lightweight user/account model
  • Image generation endpoints integrating with external AI APIs (e.g., OpenAI, Replicate) - Soon custom fine-tuned model
  • Prisma ORM for schema, migrations, and queries
  • Clean module separation and DI-friendly services

Highlights

  • πŸ–ΌοΈ Image generation endpoints integrating with external AI APIs (e.g., OpenAI, Replicate) - Soon custom fine-tuned model
  • πŸ” API key authentication and usage tracking
  • πŸ—„οΈ Prisma ORM for schema, migrations, and queries
  • 🧩 Clean module separation: controllers, services, DTOs, guards
  • πŸ§ͺ Unit + e2e tests with Jest and supertest
  • ⚑ Ready for local dev and production deployment

Why this repo:

  • Realistic, extendable baseline for SaaS APIs that need per-client API keys and usage tracking
  • Pattern examples: feature modules, DTOs, guards, providers, and Prisma integration
  • Practical image-generation flow (upload/init image, prompt, return asset URL)

Table of contents

  • Quickstart
  • Environment
  • Endpoints
  • Project structure
  • Prisma schema & DB
  • Testing
  • Common issues & troubleshooting
  • Contributing / License

Quickstart (development)

  1. Install deps: pnpm install

  2. Add environment variables (.env)

    • REPLICATE_API_TOKEN=...
    • DATABASE_URL="file:./dev.db" (or your PostgreSQL URL)
    • PORT=3000
    • APP_API_KEY_SECRET=your-signing-secret (See "Environment" section below for full list.)
  3. Run prisma migrations (dev) pnpm prisma migrate dev --name init

  4. Start dev server pnpm run start:dev

  5. Run tests pnpm run test pnpm run test:e2e

Environment variables

  • PORT (optional) β€” server port
  • DATABASE_URL β€” Prisma connection string
  • REPLICATE_API_TOKEN β€” token for image-generation provider
  • APP_API_KEY_SECRET β€” secret for generating API keys / HMAC
  • Optional third-party keys (OpenAI, Cloud storage, etc.)

API (high level)

  • POST /api/images/generate πŸ–ΌοΈ

    • Request: { prompt: string, base64_img?: string }
    • Response: { url: string }
    • Protected by API key guard (Header: x-api-key)
  • POST /api/api-keys πŸ”

    • Create/manage API keys for clients (admin-only)
  • Auth/usage endpoints

    • Basic examples in src/auth and src/api-key modules

Project structure (recommended, simplified)

  • src/
    • main.ts β€” bootstrap
    • app.module.ts β€” root module aggregation
    • app.controller.ts / app.service.ts β€” example
    • api-key/
      • api-key.module.ts
      • api-key.controller.ts
      • api-key.service.ts
      • dto/
    • auth/
      • auth.module.ts
      • guards/ (ApiKeyGuard, RolesGuard)
      • strategies/
    • db/
      • prisma.service.ts β€” Prisma client provider
      • migrations/
    • image-generation/
      • image-generation.module.ts
      • image-generation.controller.ts
      • image-generation.service.ts
      • dto/
    • utils/
      • logger, helpers, validators
  • prisma/
    • schema.prisma
    • migrations/
  • test/
    • app.e2e-spec.ts
  • package.json, pnpm-lock.yaml
  • .env.example
  • README.md

Prisma & Data Model (overview)

  • prisma/schema.prisma includes models like:
    • User (optional)
    • Account / Organization (optional)
    • ApiKey { id, keyHash, name, enabled, createdAt, lastUsedAt, ownerId }
    • Usage / Audit records for tracking request counts

Testing

  • Unit tests with Jest (src/**/*.spec.ts)
  • e2e tests in test/ using supertest against a test instance
  • Coverage: pnpm run test:cov

Common issues & troubleshooting

  • "Property 'url' does not exist on type 'object'": some provider SDKs return unknown-shaped objects β€” see image generation service guard code (src/image-generation/image-generation.service.ts) that safely narrows the response before reading .url
  • Verify REPLICATE_API_TOKEN and provider responses by logging the raw output during development
  • If Prisma errors occur, run prisma generate and migrate dev

About

A modular NestJS AI-powered SaaS REST APIs for image generation using stable diffusion

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published