profile - instasport/club-api GitHub Wiki

Клубный профиль

При регистрации в системе Instasport у клиента создается личный профиль типа User. При вступлении в клуб у клиента создается клубный профиль типа Profile

В каждом клубе у клиента может быть несколько клубных профилей. Один основной и дополнительные. Дополнительные клубные профили используются для членов семьи.

Клиент может изменять только свой личный профиль. Клубные профили могут изменять только менеджеры клуба.

Создание клубного профиля

Порядок создания клубного профиля для клиентов не зарегистрированных в клубе:

  1. Показываем страницу - Принять правила клуба. На странице показываются правила клуба, условия договора и условия конфиденциальности Instasport. Необходимые данные можно получить в запросе Club
   rules - текстовое поле. Правила клуба
   offer - текстовое поле. Условия договора клуба
   serviceAgreement - текстовое поле. Условия конфиденциальности Instasport
  1. После того, как клиент соглашается с правилами клуба и условиями договоров, создаем профиль в клубе. Для создания профиля в клубе необходимо быть авторизованным, иметь access token и указать клуб. В результате запроса будет создан клубный профиль.

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

origin - int. Обязательный параметр, который показывает откуда совершается запрос
Сайт Instasport -  2
Сайт клуба(плагин) -  3
Телеграм бот - 4
Приложение - 5
discoverClubId - id варианта откуда клиент узнал о клубе, все варианты можно получить в запросе query Club. Необязательный параметр
mutation CreateProfile {
  createProfile(origin: 3, discoverClubId: 328) {
    profile {
      id
      firstName
      lastName
      gender
      birthday
      rules_accepted
    }
  }
}
  1. Принимаем правила клуба. Для принятий правил клуба необходимо быть авторизованным, иметь клубный профиль и указать клуб.
mutation AcceptRules {
  acceptRules {
    profile {
      id
      rules_accepted
    }
  }
}

Изменение клубного профиля

mutation UpdateProfile {
  updateProfile() {
    profile {
      showInEvent
      smsEnabled
      emailEnabled
      gcalendarEnabled
      promocode
    }
  }
}
showInEvent - показывать в списке гостей на тренировке
smsEnabled - разрешить SMS уведомления
emailEnabled - разрешить email уведомления
gcalendarEnabled - разрешить добавлять тренировки в Google календарь
promocode - добавить промокод

Удаление клубного профиля

Удаление основного профиля

Этим методом нельзя удалить семейный профиль

mutation DeleteProfile {
  deleteProfile {
    ok
  }
}

Удаление основного профиля и всех семейных профилей

mutation DeleteAllProfiles {
  deleteAllProfiles {
    ok
  }
}

Удаление семейного профиля

Этим методом нельзя удалить основной профиль

mutation DeleteFamilyProfile {
  deleteFamilyProfile(familyProfileId: ID) {
    ok
  }
}

Cоздание заявки на связь с менеджером/пробную тренировку.

Клиенты у которых нет клубного профиля и клиенты с клубным профилем со статусами "Не определено", "Зарегистрировался сам. Сайт Instasport", "Зарегистрировался сам. Сайт клуба", "Зарегистрировался сам. Телеграм бот", "Зарегистрировался сам. Приложение" могут оставлять заявку на связь з менеджером/пробную тренировку. Возможность подачи такой заявки можно определить по полю leadAllowed в клубном профиле.

Мутация для создания заявки:

Параметры

   origin - int. Обязательный параметр. Канал подачи заявки. 5 для мобильного приложения, 3 для сайта клуба (плагина). 
   eventId - int. ID тренировки. Необязательный параметр. Используется для подачи заявки на пробную тренировку
mutation {
    createLead(origin:1, eventId:716144){
        profile {
            id
        }
    }
}

Если у клиента уже есть профиль, то статус этого профиля будет изменен на "Заявка". Если у клиента нет клубного профиля, то будет создан новый профиль со статусом "Заявка".

Чтение личных данных в клубном профиле

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

Основной профиль клиента в клубе

С помощью этой функции можно прочитать все личные данные.

query Profile {
  profile {
    id
    phone
    email
    firstName
    lastName
    birthday
    gender
    manager
    super
    instructor
    relation
    account
    cashbackAccount
    leadStatus
    leadAllowed - Bool. Показывает возможность подачи заяви на связь с менеджером
    visitsCount - количетсво оплаченых тренировок в клуба за период указанный в настройках клуба
    clubVisitsCount - количесто посещений клуба за период указанный в настройках клуба
  }
}

Поле leadStatus

0 - Не определено
1 - Без статуса
2 - Заявка
3 - Был контакт
4 - Зарегистрировался сам. Сайт Instasport
5 - Зарегистрировался сам. Сайт клуба
6 - Зарегистрировался сам. Телеграм бот
7 - Зарегистрировался сам. Приложение
8 - Зарегистрирован менеджером
9 - Записался сам. Сайт Instasport
10 - Записался сам. Сайт клуба
11 - Записался сам. Телеграм бот
12 - Записался сам. Приложение
13 - Записан менеджером
14 - Был на пробной
15 - Оплатил тренировку
16 - Оплатил абонемент
17 - Закончился абонемент

Поле relation

0 - основной профиль
1 - член семьи
2 - друг
3 - ребенок
4 - дочь
5 - сын
6 - брат
7 - сестра
8 - мать
9 - отец
10 - муж
11 - жена

Все личные профили одного клиента

query Family {
  family {
    id
    phone
    email
    firstName
    lastName
    birthday
    gender
    manager
    super
    instructor
    relation
  }
}

Все профили в клубе

Нужно указывать API Key и Club slug

Все профили в клубе всех клиентов

query Profiles {
  profiles {
    id
    phone
    email
    firstName
    lastName
    birthday
    gender
    manager
    super
    instructor
    relation
    account
    cashbackAccount
  }
}
curl -X POST -H "Content-Type: application/json" -H "Authorization: Key Ajsgwf3SLdcGpiXLPpzc29poWermmEkR6/xNqkS4onk= test" --data '{ "query": "{ profiles {id, firstName, lastName , manager, super, instructor}}" }' https://instasport.co/api/

Профиль в клубе по ID

Нужно указывать API Key и Club slug

query Profile {
  profile(id: 12345) {
    id
    phone
    email
    firstName
    lastName
    birthday
    gender
    manager
    super
    instructor
    relation
    account
    cashbackAccount
  }
}

Вывод кешбэка на счет клиента

Нужно указывать Access Token и Club slug

Кешбэк будет выведен на счет клиента если кешбэк счет равен или привышает порог для зачисления на счет клиента

mutation CashbackTransfer {
    cashbackTransfer {
        profile {
            account
            cashbackAccount
        }
    }
}

Cоздание и удаление семейных профилей

Соотношения между семейными профилями

    0 - Главный аккаунт
    1 - Семья
    2 - Друг
    3 - Ребенок
    4 - Дочь
    5 - Сын
    6 - Брат
    7 - Сестра
    8 - Мать
    9 - Отец
    10 - Муж
    11 - Жена

Создание семейного профиля

В результате запроса будет создан и возвращен новый профиль ProfileType. Главный профиль может быть только один. В тело запроса на создание семейного профиля можно добавить аватар для семейного профиля, размер изображения 600x600px

fetchBody.append("avatar", fileData.file, "image.png");

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

firstName - строка. Имя нового профиля
lastName - строка. Фамилия нового профиля
relation - int. Семейное отношение к основному профилю

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

gender - int. Пол нового профиля
birthday - date. Дата рождения нового профиля
mutation СreateFamilyProfile {
    createFamilyProfile(firstName: "First Name", lastName: "Last Name", relation: 5, gender: 2, birthday: "2020-09-01"){
        familyProfile {
            id
        }
    }
}

Обновление семейного профиля

В результате запроса будет обновлен и возвращен профиль ProfileType. Главный профиль может быть только один. В тело запроса на создание семейного профиля можно добавить аватар для семейного профиля, размер изображения 600x600px

fetchBody.append("avatar", fileData.file, "image.png");

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

familyProfileId - int. Id профиля для обновления

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

gender - int. Пол нового профиля
birthday - date. Дата рождения нового профиля
firstName - строка. Имя нового профиля
lastName - строка. Фамилия нового профиля
relation - int. Семейное отношение к основному профилю
mutation UpdateFamilyProfile {
    updateFamilyProfile(familyProfileId: 12345, firstName: "First Name", lastName: "Last Name", relation: 5, gender: 2, birthday: "2020-09-01"){
        familyProfile {
            id
        }
    }
}

Удаление семейного профиля

В результате запроса профиль с указанным ID будет удален. Главный профиль нельзя удалить. Профили с посещениями и активированными абонементами невозможно удалить.

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

familyProfileId - int. Id профиля к удалению
mutation {
    deleteFamilyProfile(familyProfileId: 95022){
        ok
    }
}