Skip to content

CrudBooks - app for storing books and other files with description and metadata in gofile storage

Notifications You must be signed in to change notification settings

AlixMil/crud-books-app

Repository files navigation

CrudBooks Backend App 📚

Crud books - приложение для хранения книг, и любых других файлов в формате PDF.

image

Содержание 🌍

  1. Установка
  2. Использование
  3. Глоссарий
  4. Используемые технологии
  5. Покрытие тестами

Установка 🏭

Для запуска приложения нужно обязательно получить gofile API_KEY, данный сервис выступает в роли хранилища, отвечает за сохранение и выдачу файлов на скачивание: https://gofile.io/

Docker-compose 🍰

Перед установкой убедитесь, что система имеет установленный docker engine

  1. Выполните в консоли следующие команды:
$ go mod tidy
$ docker pull mongo
  1. Замените следующие переменные окружения в файле "Docker-compose.yml", тег "environment":
- GOFILE_SERVICE_API_KEY=YOUR_GOFILE_SERVICE_API_KEY
- JWT_SECRET=YOUR_JWT_SECRET
  1. Запустите приложение при помощи команды
$ docker-compose up

Использование 🐾

Общение с приложением, происходит посредством отправки HTTP запросов следующего содержания:

GetBooks (для не авторизованных пользователей)

GET /books

Response 200,

[
    {
        "Id": "643ff7ec8ddc071105dc4842",
        "Title": "Book",
        "Description": "Book description",
        "FileToken": "FILETOKEN",
        "Url": "https://gofile.io/",
        "OwnerEmail": "[email protected]"
    }
]

Поддерживается система фильтров и сортировки, подробнее

Register

POST /register

{
	"email": "[email protected]",
	"password": "123"
}

Response 200,

{
	"token": "YOUR JWT TOKEN"
}

Login

POST /login

{
	"email": "[email protected]",
	"password": "123"
}

Response 200,

{
	"token": "YOUR JWT TOKEN"
}

Upload File

POST /files

Обязательно наличие Authorization заголовка в запросе.

Content-Type: multipart/form-data

Пример запроса:

$ curl -X POST localhost:4001
-H "Content-Type: multipart/form-data" 
-d "file=your_file" 

Response 200,

{
    "fileToken": "5dfb4383-a312-438c-8dbf-1f3ce6fb1060"
}

GetBooks (для авторизованных пользователей)

GET /books

Обязательно наличие Authorization заголовка в запросе.

Response 200,

[
    {
        "Id": "643ff7ec8ddc071105dc4842",
        "Title": "Book",
        "Description": "Book description",
        "FileToken": "FILETOKEN",
        "Url": "https://gofile.io/",
        "OwnerEmail": "[email protected]"
    }
]

Поддерживается система фильтров и сортировки, подробнее

Create Book

POST /books

Обязательно наличие Authorization заголовка в запросе.

Тело запроса в формате JSON

{
	"fileToken": "5a70f95c-d7ff-4cd9-ae05-dcce2d68860e",
	"title": "Book",
	"description": ""
}

Response 200, "FILE_TOKEN"

Get Book

GET /books/{:bookID}

Обязательно наличие Authorization заголовка в запросе.

Response 200, ""

{
    "fileURL": "https://gofile.io/",
    "title": "Book",
    "description": "Book description"
}

Update Book

POST /books/{:bookID}

Обязательно наличие Authorization заголовка в запросе.

Тело запроса в формате JSON

{
	"fileToken": "5a70f95c-d7ff-4cd9-ae05-dcce2d68860e",
	"title": "Book",
	"description": ""
}

Response 200, "Book data successfully updated!"

Delete Book

DELETE /books/{:bookID}

Обязательно наличие Authorization заголовка в запросе.

Response 200, ""

Глоссарий 📘

Authorization заголовок

Заголовок должен быть во всех запросах, оптравляемых к путям, требующим авторизации. Заголовок несет в себе JWT токен авторизации для идентификации пользователя.

Пример заголовка

Authorization: Bearer YOUR_JWT_TOKEN

Система фильтров и сортировок

Запросы книг GetBooks (для авторизованных и не авторизованных пользователей) позволяют использовать дополнительные параметры для фильтрации, сортировки, лимитирования и сдвига выдачи.
Пример запроса с поиском по названию книги, или части названия.

GET /books?search=НАЗВАНИЕ_КНИГИ

Добавление лимита выдачи

GET /books?limit=15

Параметр offset, для исключения из выдачи части книг (полезен при создании пагинации)

GET /books?offset=15

Пример запроса с поиском по названию, лимитом выдачей и offset параметром

GET /books?search=Сойер&limit=10&offset=10

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

Покрытие тестами 🔎

Total Coverage: 72.5%

About

CrudBooks - app for storing books and other files with description and metadata in gofile storage

Resources

Stars

Watchers

Forks