Skip to content

Slncr/notes-api

Repository files navigation

📝 Notes API

RESTful API для работы с заметками. Поддерживает фильтрацию, сериализацию, AI-переписывание текста и интерактивную Swagger-документацию.


🚀 Функциональность

  • CRUD-операции с заметками
  • ✅ Фильтрация по параметру archived
  • ✅ Ответы в формате JSON
  • ✅ Интеграция с OpenAI GPT для переписывания текста в нужном стиле
  • ✅ Полная Swagger-документация (/api-docs)
  • ✅ Покрытие тестами с помощью RSpec
  • ✅ Сериализация через ActiveModel::Serializer
  • ✅ Использование ООП и чистой архитектуры

🧠 AI-переписывание текста

При создании или получении заметки можно задать стиль (rewrite_mode), в котором будет переписан текст:

rewrite_mode Стиль
0 Вежливый (polite)
1 Радостный (cheerful)
2 Загадочный (mysterious)

🎯 Пример:

POST /api/v1/notes

{
  "title": "Планы",
  "body": "Ты ничего не успеваешь",
  "rewrite_mode": 0
}

📤 Ответ:

{
  "title": "Планы",
  "body": "Пожалуйста, постарайтесь организовать свое время более эффективно 🙏"
}

📂 Структура API

Метод Путь Описание
GET /api/v1/notes Список всех заметок (поддерживает ?archived=true)
GET /api/v1/notes/:id Получить одну заметку (можно передать rewrite_mode)
POST /api/v1/notes Создать заметку (можно указать rewrite_mode)
PUT /api/v1/notes/:id Обновить заметку
DELETE /api/v1/notes/:id Удалить заметку

🔧 Установка и запуск

git clone https://github.com/Slncr/notes-api.git
cd notes-api

bundle install
rails db:create db:migrate

🌍 Переменные окружения

Создайте .env или используйте переменные системы:

OPENAI_API_KEY=your_openai_api_key
PROXY_URL=http://your_proxy_if_needed

✅ Запуск тестов

bundle exec rspec

📚 Swagger UI

После запуска сервера, Swagger доступен по адресу:

http://localhost:3333/api-docs

🧠 Используемые технологии

  • Ruby on Rails 7
  • PostgreSQL / SQLite
  • RSpec
  • Rswag (Swagger)
  • OpenAI API
  • ActiveModel::Serializer

🎉 Удачи!

About

simple api for notes with openai-api integration

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages