navix/backend/README.md
2025-12-10 08:33:04 +02:00

136 lines
3.1 KiB
Markdown

# Navix Backend - PostgreSQL Setup Guide
## Setup Instructions
### 1. Install PostgreSQL
**Windows:**
```bash
# Download from https://www.postgresql.org/download/windows/
# Or use chocolatey:
choco install postgresql
```
**Linux/WSL:**
```bash
sudo apt update
sudo apt install postgresql postgresql-contrib
```
**macOS:**
```bash
brew install postgresql
```
### 2. Start PostgreSQL Service
**Windows:**
```bash
# PostgreSQL should start automatically as a service
# Or start manually:
pg_ctl -D "C:\Program Files\PostgreSQL\{version}\data" start
```
**Linux/WSL:**
```bash
sudo service postgresql start
```
**macOS:**
```bash
brew services start postgresql
```
### 3. Create Database and Schema
```bash
# Run the schema file as postgres superuser
psql -U postgres -f backend/schema.sql
# This will:
# 1. Create a dedicated 'navix_user' database user
# 2. Create the 'navix' database owned by navix_user
# 3. Create all tables and schemas
# 4. Grant appropriate privileges
# IMPORTANT: Change the password in the SQL file before running!
# Edit backend/schema.sql and change 'navix_secure_password_change_me' to a strong password
```
### 4. Configure Environment Variables
Copy `.env.example` to `.env` and update with your settings:
```bash
cp .env.example .env
```
Edit `.env` with your actual database credentials and JWT secret key.
### 5. Install Python Dependencies
```bash
cd backend
pip install -r requirements.txt
```
### 6. Run the Backend
```bash
python main.py
```
## API Endpoints
### Authentication
- `POST /api/auth/register` - Register new user
- `POST /api/auth/login` - Login and get JWT token
- `GET /api/auth/me` - Get current user info (requires auth)
### Sections
- `GET /api/sections` - Get all sections with apps (requires auth)
- `POST /api/sections` - Create new section (requires auth)
### Apps
- `POST /api/apps` - Create new app (requires auth)
- `PUT /api/apps/{app_id}` - Update app (requires auth)
- `DELETE /api/apps/{app_id}` - Delete app (requires auth)
### Legacy (YAML-based)
- `GET /api/apps` - Get apps from YAML file
- `POST /api/add_app` - Add app to YAML file
- `POST /api/edit_app` - Edit app in YAML file
- `POST /api/delete_app` - Delete app from YAML file
## Authentication Flow
1. **Register**: `POST /api/auth/register` with `{username, email, password}`
2. **Login**: `POST /api/auth/login` with `{username, password}` → Returns JWT token
3. **Use Token**: Include in Authorization header: `Bearer {token}`
## Testing with cURL
```bash
# Register
curl -X POST http://localhost:8000/api/auth/register \
-H "Content-Type: application/json" \
-d '{"username":"testuser","email":"test@example.com","password":"password123"}'
# Login
curl -X POST http://localhost:8000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"testuser","password":"password123"}'
# Get sections (use token from login)
curl -X GET http://localhost:8000/api/sections \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
```
## Database Schema
- **users**: User accounts with authentication
- **sections**: User-specific app sections
- **apps**: Applications within sections
Each user has their own personal view with their own sections and apps.