# Sheetless Server

A Go-based server for hosting and managing PDF music sheets with user authentication.

## Features

- User registration and JWT-based authentication
- Upload, list, and download PDF music sheets
- SQLite database for data persistence
- RESTful API with Gin framework

## API Endpoints

### Authentication
- `POST /auth/register` - Register a new user
- `POST /auth/login` - Login and get JWT token

### Music Sheets (requires authentication)
- `POST /api/sheets/upload` - Upload a PDF music sheet
- `GET /api/sheets` - List all music sheets
- `GET /api/sheets/download/:id` - Download a specific sheet

## Development Setup

1. Enter the development environment:
   ```bash
   nix develop
   ```

2. Download dependencies:
   ```bash
   go mod tidy
   ```

3. Run the server:
   ```bash
   go run main.go
   ```

## Building

To build the project:
```bash
go build -o sheetless-server main.go
```

## Usage Examples

### Register a user:
```bash
curl -X POST http://localhost:8080/auth/register \
  -H "Content-Type: application/json" \
  -d '{"username":"testuser","email":"test@example.com","password":"password123"}'
```

### Login:
```bash
curl -X POST http://localhost:8080/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"testuser","password":"password123"}'
```

### Upload a sheet (replace TOKEN with actual JWT):
```bash
curl -X POST http://localhost:8080/api/sheets/upload \
  -H "Authorization: Bearer TOKEN" \
  -F "title=My Sheet" \
  -F "file=@sheet.pdf"
```

### List sheets:
```bash
curl -H "Authorization: Bearer TOKEN" http://localhost:8080/api/sheets
```