navigator.clipboard is undefined on non-HTTPS origins — add execCommand fallback. Also sync CLAUDE.md with actual project structure (Dockerfiles, nginx, CI, correct API/button descriptions). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.7 KiB
2.7 KiB
Blood Brain Barrier
Репозиторий: https://git.mikhailkilin.ru/killingdruid/blood-brain-barrier
Веб-приложение для хранения текстовых записей. Пользователь вводит текст через textarea, сохраняет в PostgreSQL, просматривает список всех записей с возможностью удаления и копирования.
Стек
- Frontend: React + TypeScript + Vite
- Backend: Rust (Axum + SQLx)
- БД: PostgreSQL
- Async runtime: Tokio
Структура проекта
blood-brain-barrier/
├── frontend/ # React-приложение (Vite)
│ ├── src/
│ │ ├── App.tsx # Основной компонент: textarea + список записей
│ │ ├── api.ts # Функции для запросов к API
│ │ └── main.tsx
│ ├── Dockerfile # Сборка фронтенда + nginx
│ ├── nginx.conf # Конфиг nginx для раздачи SPA и проксирования API
│ └── package.json
├── backend/ # Rust API (Axum)
│ ├── src/
│ │ ├── main.rs # Точка входа, подключение к БД, CORS, запуск сервера
│ │ ├── db.rs # Подключение к PostgreSQL, init_db
│ │ └── routes.rs # Хендлеры API
│ ├── Dockerfile # Сборка бэкенда
│ └── Cargo.toml
├── .woodpecker.yml # CI pipeline
├── docker-compose.yml # PostgreSQL
└── CLAUDE.md
База данных
Одна таблица entries:
CREATE TABLE entries (
id SERIAL PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
content TEXT NOT NULL
);
API
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/entries | Список записей (id, created_at — без content) |
| POST | /api/entries | Создать запись |
| DELETE | /api/entries/:id | Удалить запись по id |
| GET | /api/entries/:id/content | Получить контент записи (plain text) |
Frontend
- Сверху: большая
<textarea>+ кнопка "Create" - Ниже: список всех записей (новые сверху), у каждой кнопки "Delete" и "Copy"
- Копирование — через
navigator.clipboard.writeText()
Команды
# Frontend
cd frontend && npm run dev
# Backend
cd backend && cargo run
# PostgreSQL
docker-compose up -d