club - instasport/club-api GitHub Wiki

Информация о клубе

Через интерфейс системы можно получить информацию о клубе:

  • Название, описание клуба, обложку клуба, логотип
  • Список залов клуба с адресами и расположением на карте
  • Расписание тренировок в залах и кто тренирует
  • Абонементы клуба
  • Анонсы мероприятий клуба
  • Статьи клуба (блог)
  • Информацию о товарах из магазина клуба

Общая информация о клубе

Для получения информации о клубе в заголовке авторизации обязательно нужно указать ключ и клуб.

Можно запрашивать только те поля, которые нужны.

Список полей

title - длинное название клуба (может быть слоган)
titleShort - короткое название клуба
icon - логотип клуба (ссылка на графический файл в формате 1:1)
image - обложка клуба (ссылка на графический файл в формате 3:1)
slug - название клуба в системе (часть URL)
descriptionHeader - заголовок описания клуба
description - описание клуба. Может быть просто текст, а может содержать HTML
descriptionHtml - описание клуба в HTML или нет (true|false)
rules - правила клуба (текст)
phone - телефон клуба
address - адрес клуба без указания города
clubStatus - статус клуба, int
clubStatusDetail - статус клуба, string
    0 - "Тест"
    1 - "Настройка"
    2 - "Открыт"
    3 - "В архиве"
    4 - "Запрещен"
    5 - "На проверке"

city - город, где расположен клуб
  slug - название города, как URL
  title - название города, как текст

halls - список залов клуба
  title - название зала
  image - обложка зала (ссылка на графический файл в формате 3:1)
  description - описание зала. Может быть просто текст, а может содержать HTML
  descriptionHtml - описание зала в HTML или нет (true|false)
  phone - телефон зала
  address - адрес зала без указания города
  latitude - широта (для отображения на карте)
  longitude - долгота (для отображения на карте)
  timeOpen - время открытия зала
  timeClose - время закрытия зала
  zones - зоны клуба
      instructors - список инструкторов, у которых есть запланированые тренировки
      title - название зоны
      zoneType - тип зоны (1 - общая зона, 2 - зона для тренировок)

activities - спортивные направления тренировок клуба
activities(hallId: 208) - спортивные направления тренировок зала
  slug - название направления, как URL
  title - название направления
  description - описание направления
  image - обложка направления (ссылка на графический файл в формате 2:1)

advantages - блок преимущества клуба
  title - название преимущества (максимум 50 символов)
  description - описание преимущества (максимум 300 символов)
  image - изображение. Размер 200x200 px

discoverClubChoices - варианты выбора откуда клиент узнал о клубе
  id 
  title - название варианта
discoverClubRequired - обязательный выбор клиентом откуда он узнал о клубе при принятии правил
darkTheme - темная тема или нет
primaryColor - основной фон
secondaryColor - дополнительный фон
primaryTextColor - цвет текста (хорошо виден на обоих фонах)
secondaryTextColor - акцентированный цвет текста (хорошо виден на обоих фонах)

cardOpenpriceEnabled - показывать цены на абонементы без регистрации
blogEnabled - наличие блогов
announceEnabled - наличие будущих анонсов
storeEnabled - наличие товаров в магазине
pilotEnabled - разрешены пробные тренировки
qrEnabled - клуб использует промокод

googleTag - Google Tag ID
facebookPixel - Facebook Pixel ID

Ссылки на соц сети клуба
contactFacebook 
contactInstagram
contactYoutube
contactTelegram
contactLinkedin

GraphQL запрос

query Club {
  club {
    id
    title
    titleShort
    icon
    image
    slug
    descriptionHeader
    description
    descriptionHtml
    rules
    city {
      id
      slug
      title
    }
    halls {
      id
      title
      image
      description
      descriptionHtml
      address
      phone
      latitude
      longitude
      timeOpen
      timeClose
      instructors {
        id
        firstName
        lastName
        instructorImage
      }
      zones(zoneType: 1) {
          id
          title
          zoneType
      }
    }
    activities {
      id
      slug
      title   
      description
      image
    }
    advantages {
      title 
      description
      image
    }
    primaryColor
    primaryTextColor
    secondaryColor
    secondaryTextColor
    primaryColorIntensity
    secondaryColorIntensity
    blogEnabled
    announceEnabled
    storeEnabled
    pilotEnabled
    qrEnabled
    googleTag
    facebookPixel
    contactFacebook 
    contactInstagram
    contactYoutube
    contactTelegram
    contactViber
    contactLinkedin
    contactTiktok
    phoneRequired
    cardEnabled
    clubScheduleEnabled
    cardOpenpriceEnabled
    cashbackLimit
  }
}

Запросы из командной строки

curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ club {id, title, titleShort, icon, image} }" }' https://instasport.co/api/

curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ club {id activities {id slug title image}}}" }' https://instasport.co/api/

Информация о зале

Для получения информации о зале в заголовке авторизации обязательно нужно указать ключ и клуб.

Необязательные параметры

Эти параметры используются для получения списка инструкторов и направлений тренировок зала за период времени.

startDate - начало периода. Например 2021-03-03
endDate - конец периода. Например 2021-03-07

Список полей

startDate - Время первой тренировки в зале(за все время)
endDate - Время последней, на данный момент, тренировки в зале 

instructors - список всех инструкторов зала. В запрос можно передавать необязательные парамтры startDate и endDate,
для фильтрации инструктовов по датам тренировок в зале.
Например если передать startDate: "2021-03-03", endDate: "2021-03-07", в список инструкторов будут включены инстукторы,
которые имеют тренировки в указанный промежуток времени.

activities - список направлений тренировок зала. Для получения направлений в необходимый промежуток времени в запрос можно
передать необязательные параметры startDate и endDate.
Если startDate и endDate не указаны, то список будет содержать все направления для будущих тренировок зала.

zones - список зон клуба. Для получения тренировочных зон необходимо передать параметр zoneType со значением 2, общие зоны - 1.
Если не указывать параметр zoneType, то будут возвращены все зоны.

eventComplexities - список сложностей тренировок. Для получения сложностей в необходимый промежуток времени в запрос можно
передать необязательные параметры startDate и endDate.

eventGenders - список полов посетителей тренировок. Для получения полов в необходимый промежуток времени в запрос можно
передать необязательные параметры startDate и endDate.

query Hall {
  hall(id: 5, startDate: "2021-03-03", endDate: "2021-03-07") {
    id
    title
    image
    description
    descriptionHtml
    address
    phone
    latitude
    longitude
    timeOpen
    timeClose
    startDate
    endDate
    eventGenders
    instructors{
      id
      firstName
      lastName
      instructorImage
    }
    activities{
        id
        title
        slug
        image
    }
    zones(zoneType: 1) {
        id
        title
    }
    eventComplexities {
        id
        title
    }
  }
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ hall(id: 5) {id title image instructors {firstName lastName}} }" }' https://instasport.co/api/

Расписание

Для получения расписания в заголовке авторизации обязательно нужно указать ключ и клуб.

Чтобы выбрать конкретный зал в расписании нужно при вызове функции указать номер зала.

query Events {
  events(hall: 5) {
    id
    date
    title
    activity {
      id
      slug
      title   
      description
      image
    }
    description
    descriptionHtml
    image
    instructors {
      id
      firstName
      lastName
      instructorImage
    }
    hall
    color
    textColor
  }
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ events(hall: 5) {id date title activity {slug title image} instructors {id firstName lastName instructorImage} color textColor}}" }' https://instasport.co/api/

Получение данных об одной тренировке

query Event {
  event(id: 50000) {
    id
    date
    title
    activity {
      id
      slug
      title   
      description
      image
    }
    description
    descriptionHtml
    image
    instructors {
      id
      firstName
      lastName
      instructorImage
    }
    hall
    color
    textColor
  }
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ event(id: 50000) {id date title activity {slug title image} instructors {id firstName lastName avatar} color textColor}}" }' https://instasport.co/api/

Блог

Для получения статей блога в заголовке авторизации обязательно нужно указать ключ и клуб.

query Blogs {
  blogs {
    slug
    date
    title
    subtitle
    introduction
    content
    coverImage
    ads
    bannerImage
  }
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ blogs { date slug title }}" }' https://instasport.co/api/

Запрос конкретной статьи по slug. slug статьи - уникальный для всей системы

query BlogArticle {
  blog(slug: "ioga-na-rassvete-11") {
    slug
    date
    title
    subtitle
    introduction
    content
    coverImage
    ads
    bannerImage
  }
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ blog(slug: \"ioga-na-rassvete-11\") { date slug title subtitle introduction content coverImage }}" }' https://instasport.co/api/

Анонсы событий

Анонсы содержат дату, название, короткое описание и полное описание, кроме этого они еще могут ссылаться на тренировку (но это необязательно)

Для получения анонсов событий в заголовке авторизации обязательно нужно указать ключ и клуб.

enrollEnabled - bool, показывает возможность записи на событие без тренировки.
eventEnrollEnabled - bool, показывает наличие тренировки в анонсе события.
isEnrolled - bool, True если клиент уже записан на событие без тренировки, False в других случаях.

Если в анонсе указна тренировка (enrollEnabled в таком случае будет False, eventEnrollEnabled - True),то запись происходит на тренировку, возможность записи и способы оплаты можно получить в поле event.

Если в анонсе не указана тренировка (enrollEnabled - True, eventEnrollEnabled - False), то поле enrollEnabled отображает возможность записи на событие.

query Announces {
  announces {
    date
    title
    shortDescription
    description
    descriptionHtml
    enrollEnabled
    eventEnrollEnabled
    isEnrolled
    event {
      template {
        headline
      }
    }
    image
  }
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ announces { date title shortDescription description descriptionHtml event { template { headline }} image }}" }' https://instasport.co/api/

Запись на анонсированые события

Запись на событие без тренировки

Параметры

announce - Id анонса, обязательный параметр
familyProfileId - Id профиля для записи семейных профилей
mutation AnnounceEnroll {
    announceEnroll(announce:258) {
        announce{
                    id
        }
    }
}

Отмена записи на событие без тренировки

mutation AnnounceDecline {
    announceDecline(announce:258) {
        announce {
            id
        }
    }
}

Запись и отмена записи на событие с тренировкой

Запись на такие события происходит как на обычные тренировки https://github.com/instasport/club-api/wiki/visit. Необходимую информацию можно получить в поле event.

Товары

Секции товаров

Все товары разбиты на секции товаров, который одинаковые для всех клубов (на подобии спортивных направлений)

query ProductSections {
  productSections {
    id
    title
  }
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ productSections {id title} }" }' https://instasport.co/api/

Категории товаров

В клубе товары разбиты по категориям (эти категории уникальны для каждого клуба). Для получения категории товаров в заголовке авторизации обязательно нужно указать ключ и клуб.

query Categories {
  productCategories {
    id
    title
  }
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ productCategories {id title} }" }' https://instasport.co/api/

Все товары

Для получения товаров в заголовке авторизации обязательно нужно указать ключ и клуб.

query Products {
  products {
    id
    title
    description
    price
    section {
      id
      title
    }
    category {
      id
      title
    }
    imageProduct {
      id
      image
    }
  }
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ products {id title section {id title}} }" }' https://instasport.co/api/

Подробнее о товаре по id

Для получения сведений о товаре в заголовке авторизации обязательно нужно указать ключ и клуб.

query Product {
  product(id: 515) {
    id
    title
    description
    price
    section {
      id
      title
    }
    category {
      id
      title
    }
    imageProduct {
      id
      image
    }
  }
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ product(id: 515) {id title section {id title}} }" }' https://instasport.co/api/

Зоны клуба

Запрос на получение зoны по id

    id - int, обязательный параметр, id зоны

Список полей

id - ID зоны
zoneType - тип зоны, 1 - общая зона, 2 - зона для тренировки
title - название зоны
criteria - массив критериев оценивания для зоны. PortalCriterionType
    id - id критерия
    title - название критерия
markHistory - история оценок зоны
    id - id истории оценки
    mark - оценка
    comment - комментарий
    portalCriterion - критерий оценивания. PortalCriterionType
        id - id критерия
        title - название критерия

Запроc для получения массива зон

Параметры запроса

    zoneType - int, тип зоны. 2 - зоны для тренировок (для расписания), 1 - общие зоны. Необязательный параметр.
    hall  - int, ID зала. Используется для получения зон для конкретного зала. Необязательный параметр
query zone {
    zone(id: 8){
        id
        title
        criteria {
            id
            title
        }
        markHistory {
            id
            mark
            comment
            portalCriterion {
                id 
                title
           }
        }
    }
}

Список зон клуба

query zone {
    zones(hall:208, zoneType:1){
        id
        title
        criteria {
            id
            title
        }
        markHistory {
            id
            mark
            comment
            portalCriterion {
                id 
                title
           }
        }
    }
}

Оценить зону клуба

Параметры запроса

Все параметры обязательные

zoneId - id зоны
marks - данные полученные от пользователя
    id - id критерия оценивания
    mark - оценка от 1 до 5
    comment - комментарий
mutation MarkZone {
    markZone(zoneId: 8, marks: "[{"id": "4", "mark": "4", "comment": "comment text"}, {"id": "5", "mark": "5", "comment": "text"}]") {
        zone {
            id
            markHistory {
                id
                portalCriterion{
                    title
            }
            mark
            comment
            }
        }
    }
}

Редактироване оценки зоны

Параметры запроса

Все параметры обязательные

zoneId - id зоны
marks - данные полученные от пользователя
    id - id оценки
    mark - оценка от 1 до 5
    comment - комментарий
mutation UpdateZoneMark {
    updateZoneMark(zoneId: 8, marks: "[{"id": "4", "mark": "4", "comment": "comment text"}, {"id": "5", "mark": "5", "comment": "text"}]") {
        zone {
            id
            markHistory {
                id
                portalCriterion{
                    title
            }
            mark
            comment
            }
        }
    }
}

Удалить оценку

mutation {
    deleteZoneMark(zoneId: 8 markId: 58) {
        zone{
            id
        }
    }
}

В результате запросов markZone deleteZoneMark будет возвращен объект zone - ZoneType, с полями аналогичными query zone