# Vtorio - File Upload & Management System A Next.js-based file upload and management system with PostgreSQL database storage and comprehensive API documentation. ## Features - **File Upload**: Upload files via web interface or API - **File Management**: List, view, and download uploaded files - **Database Storage**: Files stored in PostgreSQL with metadata - **API Documentation**: Interactive Swagger/OpenAPI documentation - **REST API**: Full RESTful API for programmatic access ## Quick Start ### Prerequisites - Node.js 18+ - PostgreSQL database - npm or yarn ### Installation 1. Clone the repository 2. Install dependencies: ```bash npm install ``` 3. Set up environment variables: ```bash cp .env.example .env # Edit .env with your database credentials ``` 4. Set up the database: ```bash npx prisma migrate dev ``` 5. Start the development server: ```bash npm run dev ``` The application will be available at `http://localhost:3000` (or next available port). ## API Documentation ### Interactive Documentation Visit `http://localhost:3000/api-docs` for interactive Swagger UI documentation where you can: - Test all API endpoints - Upload files via the web interface - View response schemas and examples - Download files directly ### API Endpoints | Method | Endpoint | Description | |--------|----------|-------------| | POST | `/api/upload` | Upload a file (multipart/form-data) | | GET | `/api/files` | List all uploaded files with metadata | | GET | `/api/files/{id}` | Download a specific file by ID | | GET | `/api/openapi.json` | Raw OpenAPI specification | ### Example Usage #### Upload a file via curl: ```bash curl -X POST http://localhost:3000/api/upload \ -F "file=@/path/to/your/file.pdf" ``` #### List all files: ```bash curl http://localhost:3000/api/files ``` #### Download a file: ```bash curl http://localhost:3000/api/files/{file-id} --output downloaded-file.pdf ``` ## Database Schema The application uses Prisma ORM with the following schema: - **File**: Stores file data and metadata - `id`: Unique identifier - `filename`: Original filename - `mimetype`: MIME type of the file - `size`: File size in bytes - `data`: Binary file content - `createdAt`: Upload timestamp - `updatedAt`: Last update timestamp ## Development ### Database Management ```bash # Reset database npx prisma migrate reset # View database npx prisma studio # Generate new migration npx prisma migrate dev --name your-migration-name ``` ### Environment Variables Create a `.env` file with: ``` DATABASE_URL="postgresql://username:password@localhost:5432/vtorio" ``` ## Deployment ### Docker ```bash # Build and run with Docker Compose docker-compose up --build ``` ### Vercel 1. Push to GitHub 2. Import project on Vercel 3. Add environment variables 4. Deploy ## Technologies Used - **Next.js 15** - React framework - **TypeScript** - Type safety - **PostgreSQL** - Database - **Prisma** - ORM - **Tailwind CSS** - Styling - **Swagger UI** - API documentation - **Docker** - Containerization ## License MIT License - see LICENSE file for details.