https://github.com/lagleki/gql
https://github.com/lagleki/gql
apollo-server docker docker-compose graphql mysql type-graphql typeorm
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/lagleki/gql
- Owner: lagleki
- Created: 2020-11-12T07:57:26.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-11-13T14:29:38.000Z (over 5 years ago)
- Last Synced: 2025-06-28T01:06:44.678Z (11 months ago)
- Topics: apollo-server, docker, docker-compose, graphql, mysql, type-graphql, typeorm
- Language: JavaScript
- Homepage:
- Size: 90.8 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
*English specs currently absent but just browse through the code*
# Особенности
* создает авторов, книги (книга привязана к автору по полю authorId)
* возвращает список авторов, список книг, список книг с авторами
* Имя автора не может превышать 255 символов
* Имя автора уникально для базы данных (нельзя создать двух авторов с одним именем)
* Имя книги уникально для автора (нельзя создать для одного автора две книги с совпадающим именем книги)
* тестирование проводилось только на Ubuntu 18.04.4 LTS
* некоторые отсутствующие планируемые/необязательные фичи отмечены в коде пометкой `todo`
* не для прода!
# Системные требования
* в ОС должен быть установлен Node.js>=12.0
* в ОС должна быть установлена MySQL/MariaDB или альтернативно Docker + Docker-Compose
# Установка
* Перейдите в папку репозитория (`cd gql`)
* если в системе не установлена MySQL/MariaDB, но установлен Docker, то установите MySQL через Docker:
* откройте файл `mysql/docker-compose.yml`
* отредактируйте его, поставив свободный порт, установив user и пароли к базе данных
* запустите docker-контейнер:
* для Ubuntu: `cd mysql ; docker-compose up -d ; cd ..` или `cd mysql ; sudo docker-compose up -d ; cd ..` в зависимости от типа установки Docker. Для остальных операционных систем выполните аналогичную команду
* убедитесь, что MySQL работает (лог docker-контейнеров доступен через `sudo docker-compose logs -f -t` или `docker-compose logs -f -t`) и что MySQL доступен на выбранном порту (по умолчанию в `docker-compose.yml` это порт 3306; для Ubuntu список портов можно посмотреть по `netstat -tulpn`)
* по умолчанию база данных будет хранить данные в папке `data`
* Создайте файл `backend/.env`
* Скопируйте содержимое файла `backend/.env-sample` в `backend/.env`
* Отредактируйте содержимое файла `backend/.env`. Ниже краткое объясение значений параметров:
```
PORT=3000 // свободный в системе (на хосте localhost) порт, по которому будет доступно GraphQL API проекта
MYSQL_HOST=localhost // MYSQL_HOST из /mysql/docker-compose.yml или хост доступной в системе MySQL / MariaDB
MYSQL_PORT=3306 // остальные параметры MySQL
MYSQL_DBNAME=db
MYSQL_USER=user
MYSQL_PASSWORD=password // пароль пользователя MySQL/MariaDB (не root-пользователя)
GRAPHQL_PLAYGROUND=true // сделать ли доступной функцию Playground для Apollo GraphQL-сервера
```
* Перейдите в папку репозитория (`gql`), если Вы не в ней
* установите зависимости:
* `cd backend ; npm i`
* запустите GraphQL API:
* `npm start`
* появится сообщение типа `GraphQL endpoint up'n'running at http://localhost:3000/`
* откройте этот адрес в браузере, получив доступ к GraphQL Playground
* в отдельном терминале перейдите в папку репозитория (`gql`) и запустите тесты:
* `cd backend ; npm test`
# Примеры GraphQL-запросов
Создание автора:
```
mutation {
createAuthor(params: {
name: "John Smith"
}){
authorId
name
}
}
```
Создание книги:
```
mutation {
createBook(
params: {
name: "ama bebe-1",
pageCount: 10,
authorId: "AUTHOR_ID"
}
) {
bookId
name
}
}
```
где вместо AUTHOR_ID необходимо вписать authorId из результата предыдущего запроса.
Повторное выполнение такого же запроса по созданию автора/книги приведет к ошибке (имя автора должно быть уникально, имя книги для автора должно быть уникально).
Получение списка авторов:
```
query {
authors{
authorId,
name
}
}
```
Получение списка книг без авторов:
```
{
books() {
name
}
}
```
Получение списка книг с авторами:
```
{
books() {
name
author {
name
}
}
}
```