Protobuf контракт: https://github.com/DenisPopkov/protos
sso
├── cmd.............. Команды для запуска приложения и утилит
│ ├── migrator.... Утилита для миграций базы данных
│ └── sso......... Основная точка входа в сервис SSO
├── config........... Конфигурационные yaml-файлы
├── internal......... Внутренности проекта
│ ├── app.......... Код для запуска различных компонентов приложения
│ │ └── grpc.... Запуск gRPC-сервера
│ │ └── rest.... Запуск REST-сервера
│ ├── config....... Загрузка конфигурации
│ ├── domain
│ │ └── models.. Структуры данных и модели домена
│ ├── grpc
│ │ └── auth.... gRPC-хэндлеры сервиса Auth
│ ├── lib.......... Общие вспомогательные утилиты и функции
│ ├── services..... Сервисный слой (бизнес-логика)
│ │ ├── auth
│ │ ├── core
│ └── storage...... Слой работы с данными
│ └── sqlite.. Реализация на SQLite
├── migrations....... Миграции для базы данных
├── storage.......... Файлы хранилища, например SQLite базы данных
└── tests............ Функциональные тесты
GET http://localhost:4041/authors
Authorization: Bearer token
[
{
"id": 1001,
"name": "Фёдор Достоевский",
"image": "https://iili.io/JwdlP5B.png",
"clip": 1001,
"isFave": true
},
{
"id": 1002,
"name": "Лев Толстой",
"image": "https://iili.io/Jwdl6JV.png",
"clip": 1002,
"isFave": false
},
{
"id": 1003,
"name": "Антон Чехов",
"image": "https://iili.io/Jwdlg0x.png",
"clip": 1003,
"isFave": false
},
{
"id": 1004,
"name": "Всеволод Крестовский",
"image": "https://iili.io/Jwdlsb1.png",
"clip": 1004,
"isFave": false
}
]
GET http://localhost:4041/articles
Authorization: Bearer token
[
{
"id": 2001,
"name": "Как Толстой Войну и мир писал",
"description": "В СТАТЬЕ РАССКАЗЫВАЕМ ПРО ТО КАК ТОЛСТОЙ ВОЙНУ И МИР ПИСАЛ",
"image": "https://iili.io/JwdliOP.png",
"clip": 2001,
"isFave": true
},
{
"id": 2002,
"name": "Реализм в литературе",
"description": "В СТАТЬЕ РАССКАЗЫВАЕМ ПРО АВТОРОВ И КЛЮЧЕВЫЕ ПРОИЗВЕДЕНИЯ В ЭТОМ НАПРАВЛЕНИИ",
"image": "https://iili.io/JwdlbqJ.png",
"clip": 2002,
"isFave": false
}
]
GET http://localhost:4041/poets
Authorization: Bearer token
[
{
"id": 3001,
"name": "Мир Анны Ахматовой",
"image": "https://iili.io/JwdlQzF.png",
"clip": 3001,
"isFave": true
},
{
"id": 3002,
"name": "Ночь, улица, фонарь, аптека...",
"image": "https://iili.io/Jwdltsa.png",
"clip": 3002,
"isFave": false
}
]
GET http://localhost:4041/clip?clipId=1001
Authorization: Bearer token
{
"id": 1001,
"text": [
{
"title": "ранние годы",
"text": "Биография Федора Михайловича Достоевского началась 11 ноября 1821 года. За почти шесть десятков лет писатель прошел сложный путь: сидел в тюрьме, был на каторге, эмигрировал, проигрывался, скрывался от кредиторов, терял родных и близких. Но никогда не переставал писать. Все события из жизни Достоевский прямо или косвенно переносил в свои книги. Наверное, поэтому герои его произведений настолько отличаются друг от друга и принадлежат к разным социальным слоям"
},
{
"title": "дебют",
"text": "В конце мая 1845 года Федор Достоевский закончил свой первый роман «Бедные люди». Произведение восторженно приняли законодатели литературной моды тех лет — Николай Некрасов и Виссарион Белинский. Некрасов назвал начинающего писателя «новым Гоголем» и опубликовал роман в своем альманахе «Петербургский сборник"
},
{
"title": "каторга",
"text": "Впечатления от жизни в Омском остроге Федор Достоевский выразил в «Записках из Мертвого дома». Это произведение русской литературы стало одним из первых, рассказывающих о каторге и жизни заключенных, их быте и нравах. Для современников Достоевского «Записки из Мертвого дома» стали настоящим откровением. Иван Тургенев сравнивал произведение с «Адом» Данте, Александр Герцен — с фреской «Страшный суд» работы Микеланджело. О жанре «Записок» литературоведы спорят до сих пор: с одной стороны, произведение строится на воспоминаниях автора и могло бы считаться мемуарами, с другой — Достоевский ввел в повесть вымышленного героя и не всегда придерживался фактической и хронологической точности"
}
],
"quiz": {
"id": 1001,
"question": "Какие черты характеризуют творчество Федора Достоевского?",
"description": "В тексте отмечается, что все события из жизни Достоевского прямо или косвенно переносились им в свои книги. Это подчеркивает важность личных переживаний и жизненного опыта автора в его творчестве",
"image": "https://iili.io/JwdlP5B.png",
"answers": [
{
"id": 1001,
"text": "отражение личных переживаний и жизненного пути автора, включая сложные события из его биографии",
"isRight": true
},
{
"id": 1001,
"text": "вдохновение идеями романтизма, подчеркивание романтических идеалов и образов",
"isRight": false
},
{
"id": 1001,
"text": "детальное описание природы и ее влияния на характеры и сюжет произведений",
"isRight": false
}
]
},
"image": "https://iili.io/JwdlP5B.png"
}
GET http://localhost:4041/quiz?quizId=1001
Authorization: Bearer token
{
"id": 1001,
"question": "Какие черты характеризуют творчество Федора Достоевского?",
"description": "В тексте отмечается, что все события из жизни Достоевского прямо или косвенно переносились им в свои книги. Это подчеркивает важность личных переживаний и жизненного опыта автора в его творчестве",
"image": "https://iili.io/JwdlP5B.png",
"answers": [
{
"id": 1001,
"text": "отражение личных переживаний и жизненного пути автора, включая сложные события из его биографии",
"isRight": true
},
{
"id": 1001,
"text": "вдохновение идеями романтизма, подчеркивание романтических идеалов и образов",
"isRight": false
},
{
"id": 1001,
"text": "детальное описание природы и ее влияния на характеры и сюжет произведений",
"isRight": false
}
]
}
GET http://localhost:4041/user
Authorization: Bearer token
{
"name": "Фёдор Достоевский",
"image": "https://iili.io/JwdlbqJ.png"
}
PATCH http://localhost:4041/authors?authorId=1001
Content-Type: application/json
Authorization: Bearer token
{
"body": "Response body is empty"
}
PATCH http://localhost:4041/articles?articleId=2001
Authorization: Bearer token
{
"body": "Response body is empty"
}
PATCH http://localhost:4041/poets?poetId=3001
Authorization: Bearer token
{
"body": "Response body is empty"
}
DELETE http://localhost:4041/user
Authorization: Bearer token
{
"body": "Response body is empty"
}