Categorygithub.com/Dor1ma/Ozon_Test_Task
module
0.0.0-20240605181919-e38f05e09499
Repository: https://github.com/dor1ma/ozon_test_task.git
Documentation: pkg.go.dev

# README

Ozon_Test_Task

Система для добавления и чтения постов и комментариев с использованием GraphQL, аналогичную комментариям к постам на популярных платформах, таких как Хабр или Reddit.

Характеристики системы постов:

  • Можно просмотреть список постов.
  • Можно просмотреть пост и комментарии под ним.
  • Пользователь, написавший пост, может запретить оставление комментариев к своему посту.

Характеристики системы комментариев к постам:

  • Комментарии организованы иерархически, позволяя вложенность без ограничений.
  • Длина текста комментария ограничена до 2000 символов.
  • Система пагинации для получения списка комментариев.

Важно:

  • В качестве системы пагинации используется курсорная реализация, т.к. для подобных сервисов она должна подходить лучше станадартной реализации
  • В проекте выполнены дополнительные требования для реализации через GraphQL Subscriptions (комментарии доставляются асинхронно)
  • На большее количество тестов, к сожалению, не хватило времени

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

Прежде чем начать, убедитесь, что у вас установлены следующие компоненты:

  • Docker
  • Docker Compose

Шаги:

  1. Файл .env:

    Файл .env уже находится в корневой директории проекта. Для корректной работы настоятельно не рекомендую изменять переменные, кроме STORAGE_TYPE.

  2. Выбор типа хранилища:

    Для выбора типа хранилища необходимо поменять значение переменной STORAGE_TYPE. Возможные параметры:

    • in_memory - хранение данных in_memory
    • postgres - хранение данных в бд

    Пример:

    STORAGE_TYPE=in_memory
    
  3. Запуск сервиса

    Для запуска сервиса небходимо включить docker и запусить контейнеры командой:

    docker-compose up --build
    

    После запуска подключиться к GraphQL Playground можно будет подключиться по адресу:

    http://localhost:8080/
    

Примеры запросов

  • Создание поста:

     mutation {
        createPost(authorId:"1", title:"title", content: "content", allowComments: true) {
           id
           title
           content
           allowComments
        }
     }
    
  • Создание комментария:

     mutation {
        createComment(authorId:"2", postId:"id поста из предыдущего пункта", content: "i am content") {
           id
        }
     }
    
  • Получение постов:

     query GetPosts {
        posts(first: 10) {
           edges {
              cursor
              node {
                 id
                 title
                 content
                 allowComments
              }
           }
           pageInfo {
              hasNextPage
              endCursor
           }
        }
    }
    
  • Создание ответа:

    mutation {
       createReply(authorId:"12", postId:"id поста, на комментарий которого мы хотим добавить ответ", content: "i am content") {
          id
       }
    }
    
  • Получение комментариев под постом:

    query getComment {
       comments(postId:"1") {
          edges{
             node{
                id
                postId
                parentId
                replies(first:10) {
                   edges {
                      node {
                         id
                         postId
                         parentId
                         replies {
                            edges {
                               node {
                                  id
                                  parentId
                               }
                            }
                         }
                      }
                   }
                }
             }
          }
          pageInfo {
             endCursor
          }
       }
    }
    

Детальная документация

С более подробной документацией вы можете ознакомиться в окне GraphQL Playground, перейда во вкладку "Show Documentation Explorer"

# Packages

No description provided by the author
No description provided by the author