client event
Для получения расписания тренировок и посещений клиента в заголовке авторизации нужно указать токен (авторизованного клиента) и клуб.
Расписание - это список тренировок на которые клиент может записаться. Это расписание почти не отличается от общего расписания в клубе. Для ускорения загрузки расписания можно использовать пагинацю, которая позволяет загрузить расписание постепенно. Для этого при запросе необходимо указать два параметра page
- номер страницы, pageSize
- размер страницы.
Важное отличие - это варианты оплаты. Если задан клиент, то в в каждой тренировке возвращается поле payments и cards. Эти поля показывают, какие есть варианты оплаты за эту конкретную тренировку.
startDate - начальная дата, если не указана, то используется сегодняшняя
startTime - время, начиная с которого показывать тренировки
startDateTime - дата и время, начиная с которого показывать тренировки (если указано startDateTime, то startDate и startTime не учитываются)
endDate - конечная дата, если не указана, то возвращаются все тренировки, начиная со startDate
endTime - время, до которого показывать тренировки
endDateTime - дата и время, до которого показывать тренировки (если указано endDateTime, то endDate и endTime не учитываются)
hall - ID зала, если не указан то показываются посещения по всем залам в клубе
zone - ID зоны, если не указан то показываются посещения по всем зонам в клубе
gender - пол посетителей
activityId - ID activity, если не указан показываются тренировки по всех типах тренировок
instructorId - ID инструктора, если не указан показываются тренировки всех инструкторов
complexityId - ID сложности, если не указан показываются тренировки по всех сложностях
myCards - показывать только тренировки на которых можно использовать абонемент пользователя(bool)
myVisits - показывать только тренировки, на которые записан пользователь(bool)
morning - показывать утренние тренировки (bool)
day - показывать дневные тренировки (bool)
evening - показывать вечерние тренировки (bool)
page - номер страницы
pageSize - количество тренировок на странице
Если зал не указан, то показываются все групповые тренировки, изо всех залов.
Если начало периода или конец периода не заданы, то показываются тренировки за один сегодняшний день.
Если morning/day/evening не выбраны, то показываются все тренировки, если выбраны все, тоже показываются все
Если номер страницы больше чем кол-во страниц при текущем pageSize, то придет пустой массив
query ClientEvents {
clientEvents(startDate: "2020-09-01", endDate: "2020-10-01", hall: 5, gender: 2, page:1, pageSize:20, activityId:149, instructorId:88745, myCards:true, myVisits:false, morning:true, day:false, evening:false) {
id
date
duration
title
seats
activity {
id
slug
title
description
image
}
complexity {
id
title
order
description
descriptionHtml
color
textColor
}
description
descriptionHtml
image
instructors {
id
firstName
lastName
instructorImage
}
hall
color
textColor
variant
gender
status
payment
payments {
choice
title
}
zone {
id
title
}
visitors{
avatar
name
gender
ageGroup {
title
}
}
ageInfo {
gender {
id
title
}
ageGroup {
id
title
}
tagTitle
tagDescription
tagKeywords
ogType
ogSiteName
ogTitle
ogDescription
ogImage
ogImageWidth
ogImageHeight
ogImageType
ogImageAlt
}
}
}
duration - время тренировки в минутах
cards - абонементы, которыми можно оплатить тренировку
status - текстовое поле
-1 - Заявка
2 - Liqpay
3 - Абонемент
4 - Счет
5 - Бронирование
10 - Portmone
11 - WayForPay
Поле payments показывает каким способом можно совершить авторизацию (оплату) тренировки и название этого способа
-1 - Заявка
2 - Liqpay
3 - Абонемент
4 - Счет
5 - Бронирование
11 - WayForPay
"payments": [
{
"choice": 4,
"title": "Оплатить со счета"
},
{
"choice": 2,
"title": "Оплатить онлайн"
}
],
1 - Групповая
2 - Индивидуальная
3 - Сплит
0 - Не определен
1 - Парень
2 - Девушка
Для получения информации об одной тренировке обязательно указать ID тренировки.
query ClientEventDetail {
clientEvent(id: 572668, profileId:123456) {
id
date
duration
title
seats
activity {
id
slug
title
description
image
}
complexity {
id
title
order
description
descriptionHtml
color
textColor
}
description
descriptionHtml
image
instructors {
id
firstName
lastName
instructorImage
}
hall
zone {
id
title
}
color
textColor
variant
gender
status
onlineUrl
clientsCount
clientsAge
clientsGender {
male
female
unknown
}
payment
payments {
title
choice
}
cards {
id
}
account
price
promocodePrice
options {
id
title
description
image
price
promocodePrice
}
family {
id
firstName
lastName
birthday
gender
relation
liqpay(clientReturnUrl: "url", eventId: 572668) {
data
signature
action
price
clientCommission
comment
}
wayforpay(clientReturnUrl: "url", eventId: 572668) {
price
}
}
liqpay(clientReturnUrl: "url") {
data
signature
action
price
clientCommission
comment
}
wayforpay(clientReturnUrl: "url") {
merchantAccount
merchantDomainName
merchantSignature
orderReference
orderDate
amount
currency
productName
productCount
productPrice
returnUrl
serviceUrl
action
price
clientCommission
comment
}
visitors{
avatar
name
ageGroup {
title
}
}
ageInfo {
gender {
id
title
}
ageGroup {
id
title
}
}
}
visitSet {
id
paidStatus
paid
paidByCard {
dueDate
amount
template {
title
subtitle
group {
title
}
}
}
liqpay(clientReturnUrl: "https://") {
data
signature
action
}
wayforpay(clientReturnUrl: "https://") {
merchantAccount
merchantDomainName
merchantSignature
orderReference
orderDate
amount
currency
productName
productCount
productPrice
returnUrl
serviceUrl
action
price
clientCommission
comment
}
status
visitOptions {
id
optionId
title
price
image
description
paid
}
refundable
payments {
choice
title
description
}
cards {
id
dueDate
template {
title
subtitle
amount
price
}
}
authorized
user {
id
firstName
lastName
avatar
}
}
}
payment (deprecated) - варианты оплат
payments - варианты и названия оплат, например "payments": [{"choice": 4,"title": "Оплатить со счета"},]
cards - абонементы, которыми можно оплатить тренировку
account - количество денег на счету. если разрешена оплата со счета, то дополнительно сравнивать цену и состояние счета не нужно (это не так просто, учитывая наличие цены с промокодом)
price - цена разового посещения
promocodePrice - цена разового посещения по промокоду. Если совпадает с price, то значит скидки нет
family - список семейных профилей. Используется для записи на тренировку одного из семейных профилей
onlineUrl - ссылка на онлайн тренировку. Доступна для клиентов оплативших тренировку. Доступна начиная с времени указанного в тренировке и до конца тренировки
zone - зона в которой проходит тренировква
visitors - массив профилей пользлвателей оплативших тренировку
options - массив доступных опций
-1 - Заявка
2 - Liqpay
3 - Абонемент
4 - Счет
5 - Бронирование
10 - Portmone
11 - WayForPay
liqpay - данные для кнопки оплаты Liqpay
wayforpay - данные для кнопки оплаты WayForPay
Необязательные параметры:
clientReturnUrl - строка, url на который буде перенаправлен клиент после совершения оплаты
liqpay(clientReturnUrl: "url")
Пример кнопки оплаты Liqpay
<form method="post" action="{{action}}" accept-charset="utf-8">
<input type="hidden" name="data" value="{{data}}">
<input type="hidden" name="signature" value="{{signature}}">
</form>
Пример кнопки оплаты WayForPay
<form method="post" action="https://secure.wayforpay.com/pay" accept-charset="utf-8">
<input type="hidden" name="merchantAccount" value="instasport_co">
<input type="hidden" name="merchantAuthType" value="SimpleSignature">
<input type="hidden" name="merchantDomainName" value="instasport.co">
<input type="hidden" name="merchantSignature" value="2b065fefa2686db641afc7a0f14248d7">
<input type="hidden" name="orderReference" value="16622 card 79322">
<input type="hidden" name="orderDate" value="1605871730">
<input type="hidden" name="amount" value="1000.00">
<input type="hidden" name="currency" value="UAH">
<input type="hidden" name="productName[]" value="Абонемент '79322 / A Q / TRX / 12 тренировок / 12'">
<input type="hidden" name="productCount[]" value="1">
<input type="hidden" name="productPrice[]" value="1000.00">
<input type="hidden" name="returnUrl" value="https://instasport.co/club/test/client/return/card/79322/">
<input type="hidden" name="serviceUrl" value="https://instasport.co/club/test/wayforpay/callback/">
</form>
'Время регистрации прошло',
'Тренировка уже началась',
'Тренировка прошла',
'Нет мест',
'Нет мест. Можно подать заявку',
'1 место',
'2 места',
'Вы уже подали заявку',
'Место на тренировке забронировано',
'Тренировка вам подарена',
'Тренировка оплачена за наличные',
'Тренировка оплачена кредитной картой',
'Тренировка оплачена абонементом',
'Тренировка оплачена со счета',
'Тренировка оплачена через терминал',
'Тренировка оплачена',
'Тренировка частично оплачена',
'Тренировка авторизована',
'Тренировка частичтно авторизована',
Статистическая информация о тренировке
Клиент который делает запрос учитывается в статистику.
clientsCount - оличество оплаченых тренировок, учитываются все тренировки, кроме заявок
clientsAge - список возрастов клиетов, учитываються только уникальные клиенты
clientsGender {male female unknown} - количество посетителей терировки дя каждого пола, учитываються только уникальные клиенты
ageInfo {gender {id title } ageGroup {id title}} - информация о поле и возрастной группе клиентов
Пример полученных данных
"clientsCount": 10,
"clientsAge": [
28,
26,
61,
26,
30,
20
],
"clientsGender": {
"male": 5,
"female": 1,
"unknown": 4
}
"ageInfo": [
{
"gender": {
"id": "2",
"title": "Девушка"
},
"ageGroup": {
"id": "6",
"title": "Группа С"
}
},
"gender": {
"id": "1",
"title": "Парень"
},
"ageGroup": {
"id": "1",
"title": "Молодежь"
}
},
],
После окончания тренировки, клиент оплативший и не пропустивший тренировку может оставить оценки тренировки. Возможность оценивания тренировки клиентом можно получить в поле markAllowed. Доступные критерии оценивания можно получить в поле criteria.
markAllowed - bool, возможность оставить оценку
criteria { - массив, критерии оценивания
title - название оценки
}
markHistory - массив, история оставленных оценок
query ClientEventDetail {
clientEvent(id: 572668) {
id
markAllowed
criteria {
id
title
}
markHistory{
portalCriterion {
id
title
}
mark
comment
dateCreated
profile {
id
}
}
}
Параметры запроса
eventId - int, ID тренировки. Обязательный параметр.
marks - JSON string, данные введенные клиентом. Обязательный параметр.
mutation MarkEvent {
MarkEvent(eventId: 772566, marks: "[{"id": "3", "mark": "3", "comment": "comment text"}, {"id": "4", "mark": "4", "comment": "comment text"}]") {
event{
id
markHistory {
portalCriterion{
title
}
mark
comment
}
}
}
Параметры запроса
eventId - int, ID тренировки. Обязательный параметр.
marks - JSON string, данные введенные клиентом. Обязательный параметр.
id - int, ID оценки которую необходимо оредактировать,
mark - int, оценка
comment - string, комментарий
mutation UpdateMarkEvent {
updateEventMark(eventId: 772566, marks: "[{"id": "27", "mark": "3", "comment": "comment text"}, {"id": "28", "mark": "4", "comment": "comment text"}]") {
event{
id
markHistory {
portalCriterion{
title
}
mark
comment
}
}
}
Параметры запроса
eventId - int, ID тренировки. Обязательный параметр.
mutation {
deleteEventMark(eventId:772566) {
event {
id
}
}
}