Подключить к клиенту graphql
Closed this issue · 37 comments
С чем связан запрос на фичу?
Необходимо добавить для всех страниц graphql запросы
Расскажите как вы это себе видите
Добавить query и mutation запросы на страницы:
- Профиль
- Мой профиль
- Поиск команд
- Команда
- Моя команда
- Поиск проектов
- Проект
- Мой проект
- Онбоардинг
DoD (критерий готовности)
На всех страницах проходят quiery и mutation запросы
Приложите пример реализаций
No response
Приложите материалы задачи
@Nelfimov
Что можно с CORS сделать?
Ошибка:
Access to fetch at 'https://stage.garnet.pet-project.habr.com/api/sandbox' from origin 'http://localhost:3020' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
@picolino посмотришь пожалуйста настройки cors?
Готово. На stage можно обращаться с localhost
@Amiditin fyi
@picolino теперь такая ошибка падает:
Access to fetch at 'https://stage.garnet.pet-project.habr.com/api/sandbox' from origin 'http://localhost:3020' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
@picolino собираем бинго из ошибок, на этот раз:
Chrome v119.0.6045.105:
Access to fetch at 'https://stage.garnet.pet-project.habr.com/api/sandbox' from origin 'http://localhost:3020' has been blocked by CORS policy: Cannot parse Access-Control-Allow-Methods response header field in preflight response.
FIrefox v119.0:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://stage.garnet.pet-project.habr.com/api/sandbox. (Reason: invalid token ‘["POST"’ in CORS header ‘Access-Control-Allow-Methods’).
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://stage.garnet.pet-project.habr.com/api/sandbox. (Reason: CORS request did not succeed). Status code: (null).
При загрузке аватарок падает 404, запрос:
mutation UserUploadAvatar($file: Upload!) {
userUploadAvatar(input: { file: $file }) {
id
avatarUrl
}
}
Вопросы:
- Чтобы получить все команды пользователя у нас есть запрос
teamsListByUser
, но для проектов аналогичного не нашел, т.е.projectsListByUser
, как можно их получить? И такой же вопрос по командамprojectsListByTeam
. - В payload
teamsListByUser
не хватает информации о количестве участников и проектов команды, которая необходима для этого ховер эффекта.
Чтобы получить все команды пользователя у нас есть запрос teamsListByUser, но для проектов аналогичного не нашел, т.е. projectsListByUser, как можно их получить? И такой же вопрос по командам projectsListByTeam.
query ProjectTeamParticipantsFilter - в инпуте айди проекта по которому надо отобрать команды-участников, в списке полученных объектов есть список из объектов пользователей-участников команды с их аватарками
Чтобы получить все команды пользователя у нас есть запрос teamsListByUser, но для проектов аналогичного не нашел, т.е. projectsListByUser, как можно их получить? И такой же вопрос по командам projectsListByTeam.
query ProjectTeamParticipantsFilter - в инпуте айди проекта по которому надо отобрать команды-участников, в списке полученных объектов есть список из объектов пользователей-участников команды с их аватарками
Этот вопрос про кейс, когда мы на странице пользователя/команды и нам нужно получить список проектов figma. А ProjectTeamParticipantsFilter
возвращает информацию о командах для конкретного проекта, верно?
При загрузке аватарок падает 404, запрос:
Добавь в запрос header:
GraphQL-preflight: 1
Он нужен по соображениям безопасности, поэтому отдает 404.
Но имей в виду, эндпоинты для взаимодействия с пользователем на редактирование должны выполняться под текущим пользователем. Сейчас у нас кратос не развернут на стейдже, нет нормальной регистрации и авторизации, к бекенду функционал "текущего пользователя" не подключен. Все запросы исполняются от системы. До момента развернутого и работоспособного кратоса с полным функционалом по регистрации и авторизации мы не сможем зафести фукнционал редактирования текущего пользователя.
Этот вопрос про кейс, когда мы на странице пользователя/команды и нам нужно получить список проектов figma.
Понял о чем ты, этих запросов действительно нет, добавлю
А
ProjectTeamParticipantsFilter
возвращает информацию о командах для конкретного проекта, верно?
Верно
Добавь в запрос header:
GraphQL-preflight: 1
Он нужен по соображениям безопасности, поэтому отдает 404.
В первый раз запрос прошел успешно, а при следующих выкидывает такую ошибку:
{
"errors": [
{
"message": "Unexpected Execution Error",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"userUploadAvatar"
]
}
]
}
Кейс редактирования аватара.
- Чтобы получить все команды пользователя у нас есть запрос
teamsListByUser
, но для проектов аналогичного не нашел, т.е.projectsListByUser
, как можно их получить? И такой же вопрос по командамprojectsListByTeam
.
@Amiditin добавил запросы ProjectFilterByTeamParticipantId
и ProjectFilterByUserParticipantId
@Demorey запрос teamsListByUser
на получение команд пользователя начал выдавать ошибку 500:
Запрос:
query UserGet($id: String!, $skip: Int!, $take: Int!) {
teamsListByUser(input: { userId: $id, skip: $skip, take: $take }) {
teams {
id
name
avatarUrl
}
}
}
Ошибка:
{
"errors": [
{
"message": "Unexpected Execution Error",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"teamsListByUser"
]
}
]
}
@Demorey запрос
teamsListByUser
на получение команд пользователя начал выдавать ошибку 500:
если тестили в стейдж, какой userId был
@Demorey запрос
teamsListByUser
на получение команд пользователя начал выдавать ошибку 500:если тестили в стейдж, какой userId был
system
@Demorey запрос
teamsListByUser
на получение команд пользователя начал выдавать ошибку 500:если тестили в стейдж, какой userId был
system
почистила бд, теперь проходит
2. В payload
teamsListByUser
не хватает информации о количестве участников и проектов команды, которая необходима для этого ховер эффекта.
судя по дизайну, нужны еще сразу аватарки участников?
- В payload
teamsListByUser
не хватает информации о количестве участников и проектов команды, которая необходима для этого ховер эффекта.судя по дизайну, нужны еще сразу аватарки участников?
Да, нужны, хотя бы первые 3
@Demorey запрос
teamsListByUser
на получение команд пользователя начал выдавать ошибку 500:
Аналогичная ситуация с projectsFilter
Запрос:
query ProjectFilters($search: String, $skip: Int!, $tags: [String!], $take: Int!) {
projectsFilter(input: {search: $search, skip: $skip, tags: $tags, take: $take}) {
projects {
id
projectName
avatarUrl
}
}
}
Variables:
{
"search": "",
"skip": 0,
"tags": [],
"take": 0
}
@Demorey запрос
teamsListByUser
на получение команд пользователя начал выдавать ошибку 500:Аналогичная ситуация с
projectsFilter
Тоже подчистил бд, сейчас вроде проходит запрос
@Amiditin добавил запросы ProjectFilterByTeamParticipantId и ProjectFilterByUserParticipantId
При запросе ProjectFilters
возвращается один проект с "ownerUserId": "system"
:
query ProjectFilters($search: String, $skip: Int!, $tags: [String!], $take: Int!) {
projectsFilter(input: {search: $search, skip: $skip, tags: $tags, take: $take}) {
projects {
id
projectName
avatarUrl
ownerUserId
}
}
}
variables
{
"search": "",
"skip": 0,
"tags": [],
"take": 0
}
При этом запрос projectFilterByUserParticipantId
с "id": "system"
возвращает пустой массив:
query UserGetProjects($id: String!) {
projectFilterByUserParticipantId(userId: $id) {
projects {
id
projectName
avatarUrl
}
}
}
variables
{
"id": "system"
}
Как я и говорил, у нас не будет адекватно работать функционал, связанный с пользователями, пока мы не настроим корректную регистрацию и авторизацию через kratos.
Предлагаю пока что жить на моках. В процессе сейчас добавление регистрации пользователей на бекенде, как закончим - полностью почистим базу (чтобы все было консистентным) и можно будет норм пользоваться и тестить.
не вижу в дизайне показа тегов для списка участников, будут правки?
Да, для списка участников теги не нужны.
@Nelfimov
Зарегался на stage, запросы c /api/sandbox проходят, но с локалхоста нет 401, куки добавлены и идентичны stage. Что-то ещё нужно сделать?
@Nelfimov
Зарегался на stage, запросы c /api/sandbox проходят, но с локалхоста нет 401, куки добавлены и идентичны stage. Что-то ещё нужно сделать?
Попробуй порт поменять на 3000 у приложения для локальной разработки. Иначе призываем бэк.
Проблема в том, что куки в браузере указываются для текущей страницы (localhost).
И при запросах на стейдж автоматически не передаются, так как другой домен. Секьюрити.
Если выполнять запросы напрямую с куками из curl или postman - все будет ок. Нужно курить доку\конфиги чтобы все заработало. Если вообще так можно
@Amiditin id можешь получить из kratos: https://www.ory.sh/docs/kratos/reference/api#tag/frontend/operation/toSession
@Amiditin возможно с нашего бэка можно вытащить - они же делают у себя дубликат id пользователя.
Эндпоинта на получение текущего юзера мы не делали, вся нужная инфа по текущему пользаку есть в кратосе, эндпоинт указали выше
@Amiditin id можешь получить из kratos: https://www.ory.sh/docs/kratos/reference/api#tag/frontend/operation/toSession
@Nelfimov Откуда мне взять flow.id
? в useFlow
ничего не лежит