Files
blood-brain-barrier/CLAUDE.md
Mikhail Kilin 570e0ca643
All checks were successful
ci/woodpecker/push/build Pipeline was successful
Rewrite app: entries → projects with S3 file storage
Replace flat text entries with project-based structure.
Each project has name, local/corp fields, content textarea,
and file upload (up to 100MB) stored in MinIO S3.
New API: CRUD projects + file download + content copy.
Frontend: two views (project list + project page).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 13:50:28 +03:00

95 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Blood Brain Barrier
**Репозиторий:** https://git.mikhailkilin.ru/killingdruid/blood-brain-barrier
Веб-приложение для управления проектами с текстовыми полями и файлами. Главная страница — список проектов, клик по проекту — страница проекта с полями (local, corp), textarea (content) и загрузкой файлов в MinIO S3.
## Стек
- **Frontend:** React + TypeScript + Vite
- **Backend:** Rust (Axum + SQLx + rust-s3)
- **БД:** PostgreSQL
- **Файлы:** MinIO S3
- **Async runtime:** Tokio
## Структура проекта
```
blood-brain-barrier/
├── frontend/ # React-приложение (Vite)
│ ├── src/
│ │ ├── App.tsx # Две view: ProjectList + ProjectPage
│ │ ├── api.ts # Функции для запросов к API
│ │ ├── App.css # Стили
│ │ └── main.tsx
│ ├── Dockerfile # Сборка фронтенда + nginx
│ ├── nginx.conf # Nginx: SPA + проксирование API (110MB limit)
│ └── package.json
├── backend/ # Rust API (Axum)
│ ├── src/
│ │ ├── main.rs # Точка входа, AppState, роуты
│ │ ├── db.rs # Подключение к PostgreSQL, init_db
│ │ ├── s3.rs # Инициализация MinIO S3 bucket
│ │ └── routes.rs # Хендлеры API (projects + файлы)
│ ├── Dockerfile # Сборка бэкенда
│ └── Cargo.toml
├── .woodpecker.yml # CI pipeline
├── docker-compose.yml # PostgreSQL
└── CLAUDE.md
```
## База данных
```sql
CREATE TABLE IF NOT EXISTS projects (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
local TEXT NOT NULL DEFAULT '',
corp TEXT NOT NULL DEFAULT '',
content TEXT NOT NULL DEFAULT '',
file_name TEXT,
file_key TEXT,
file_size BIGINT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
```
## API
| Метод | Путь | Описание |
|--------|----------------------------|---------------------------------------|
| GET | /api/projects | Список проектов (id, name, created_at)|
| POST | /api/projects | Создать проект (JSON: {name}) |
| GET | /api/projects/:id | Получить проект целиком |
| PUT | /api/projects/:id | Обновить (multipart: local, corp, content, file?) |
| DELETE | /api/projects/:id | Удалить проект + файл из S3 |
| GET | /api/projects/:id/file | Скачать файл |
| GET | /api/projects/:id/content | Получить content (plain text) |
## Frontend
- **Главная:** список проектов + инпут для создания нового
- **Страница проекта:** поля Local/Corp, textarea Content, загрузка файла, кнопки Save/Copy text/Download file/Delete
## Команды
```bash
# Frontend
cd frontend && npm run dev
# Backend
cd backend && cargo run
# PostgreSQL
docker-compose up -d
```
## Env vars (backend)
- `DATABASE_URL` — PostgreSQL connection string
- `S3_ENDPOINT` — MinIO endpoint (default: http://localhost:9000)
- `S3_ACCESS_KEY` — MinIO access key (default: minioadmin)
- `S3_SECRET_KEY` — MinIO secret key (default: minioadmin)
- `S3_BUCKET` — bucket name (default: bbb)
- `S3_REGION` — S3 region (default: us-east-1)