habralab / garnet-team

Habr Pet-Projects Battle Contest: Group Activity and Rating Network
https://garnet.pet-project.habr.com
MIT License
10 stars 0 forks source link

Подключить к клиенту graphql #207

Closed Amiditin closed 1 year ago

Amiditin commented 1 year ago

С чем связан запрос на фичу?

Необходимо добавить для всех страниц graphql запросы

Расскажите как вы это себе видите

Добавить query и mutation запросы на страницы:

DoD (критерий готовности)

На всех страницах проходят quiery и mutation запросы

Приложите пример реализаций

No response

Приложите материалы задачи

https://stage.garnet.pet-project.habr.com/api/sandbox/

Amiditin commented 1 year ago

@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.

Nelfimov commented 1 year ago

@picolino посмотришь пожалуйста настройки cors?

picolino commented 1 year ago

@picolino посмотришь пожалуйста настройки cors?

Готово. На stage можно обращаться с localhost

@Amiditin fyi

Amiditin commented 1 year ago

@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 commented 1 year ago

@Amiditin проверь еще разок

Amiditin commented 1 year ago

@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).

Amiditin commented 1 year ago

@picolino @Demorey @gfg7

При загрузке аватарок падает 404, запрос:

mutation UserUploadAvatar($file: Upload!) {
  userUploadAvatar(input: { file: $file }) {
    id
    avatarUrl
  }
}

Вопросы:

  1. Чтобы получить все команды пользователя у нас есть запрос teamsListByUser, но для проектов аналогичного не нашел, т.е. projectsListByUser, как можно их получить? И такой же вопрос по командам projectsListByTeam.
  2. В payload teamsListByUser не хватает информации о количестве участников и проектов команды, которая необходима для этого ховер эффекта.
Demorey commented 1 year ago

Чтобы получить все команды пользователя у нас есть запрос teamsListByUser, но для проектов аналогичного не нашел, т.е. projectsListByUser, как можно их получить? И такой же вопрос по командам projectsListByTeam.

query ProjectTeamParticipantsFilter - в инпуте айди проекта по которому надо отобрать команды-участников, в списке полученных объектов есть список из объектов пользователей-участников команды с их аватарками

Amiditin commented 1 year ago

Чтобы получить все команды пользователя у нас есть запрос teamsListByUser, но для проектов аналогичного не нашел, т.е. projectsListByUser, как можно их получить? И такой же вопрос по командам projectsListByTeam.

query ProjectTeamParticipantsFilter - в инпуте айди проекта по которому надо отобрать команды-участников, в списке полученных объектов есть список из объектов пользователей-участников команды с их аватарками

Этот вопрос про кейс, когда мы на странице пользователя/команды и нам нужно получить список проектов figma. А ProjectTeamParticipantsFilter возвращает информацию о командах для конкретного проекта, верно?

picolino commented 1 year ago

@Amiditin

При загрузке аватарок падает 404, запрос:

Добавь в запрос header:

GraphQL-preflight: 1

Он нужен по соображениям безопасности, поэтому отдает 404.


Но имей в виду, эндпоинты для взаимодействия с пользователем на редактирование должны выполняться под текущим пользователем. Сейчас у нас кратос не развернут на стейдже, нет нормальной регистрации и авторизации, к бекенду функционал "текущего пользователя" не подключен. Все запросы исполняются от системы. До момента развернутого и работоспособного кратоса с полным функционалом по регистрации и авторизации мы не сможем зафести фукнционал редактирования текущего пользователя.

Demorey commented 1 year ago

Этот вопрос про кейс, когда мы на странице пользователя/команды и нам нужно получить список проектов figma.

Понял о чем ты, этих запросов действительно нет, добавлю

А ProjectTeamParticipantsFilter возвращает информацию о командах для конкретного проекта, верно?

Верно

Amiditin commented 1 year ago

@picolino

Добавь в запрос header:

GraphQL-preflight: 1 Он нужен по соображениям безопасности, поэтому отдает 404.

В первый раз запрос прошел успешно, а при следующих выкидывает такую ошибку:

{
  "errors": [
    {
      "message": "Unexpected Execution Error",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "userUploadAvatar"
      ]
    }
  ]
}

Кейс редактирования аватара.

picolino commented 1 year ago

Кейс редактирования аватара.

@Amiditin фикс на stage

Demorey commented 1 year ago
  1. Чтобы получить все команды пользователя у нас есть запрос teamsListByUser, но для проектов аналогичного не нашел, т.е. projectsListByUser, как можно их получить? И такой же вопрос по командам projectsListByTeam.

@Amiditin добавил запросы ProjectFilterByTeamParticipantId и ProjectFilterByUserParticipantId

Amiditin commented 1 year ago

@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" ] } ] } ```
gfg7 commented 1 year ago

@Demorey запрос teamsListByUser на получение команд пользователя начал выдавать ошибку 500:

если тестили в стейдж, какой userId был

Amiditin commented 1 year ago

@Demorey запрос teamsListByUser на получение команд пользователя начал выдавать ошибку 500:

если тестили в стейдж, какой userId был

system

gfg7 commented 1 year ago

@Demorey запрос teamsListByUser на получение команд пользователя начал выдавать ошибку 500:

если тестили в стейдж, какой userId был

system

почистила бд, теперь проходит

gfg7 commented 1 year ago

2. В payload teamsListByUser не хватает информации о количестве участников и проектов команды, которая необходима для этого ховер эффекта.

судя по дизайну, нужны еще сразу аватарки участников?

Amiditin commented 1 year ago
  1. В payload teamsListByUser не хватает информации о количестве участников и проектов команды, которая необходима для этого ховер эффекта.

судя по дизайну, нужны еще сразу аватарки участников?

Да, нужны, хотя бы первые 3

Amiditin commented 1 year ago

@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 commented 1 year ago

@Demorey запрос teamsListByUser на получение команд пользователя начал выдавать ошибку 500:

Аналогичная ситуация с projectsFilter

Тоже подчистил бд, сейчас вроде проходит запрос

Amiditin commented 1 year ago

@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"
}
picolino commented 1 year ago

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

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

Amiditin commented 1 year ago

@Demorey @gfg7 Для запросов teamParticipantFilter, teamUserJoinRequestsShow, teamJoinInvitationsShow можно в респонс добавить полностью информацию о пользователе? (имя, аватар, теги)

gfg7 commented 1 year ago

@Amiditin

Для запросов teamParticipantFilter можно в респонс добавить полностью информацию о пользователе? (имя, аватар, теги)

не вижу в дизайне показа тегов для списка участников, будут правки?

имя, аватар

добавлено в рамках https://github.com/habralab/garnet-team/issues/223

teamUserJoinRequestsShow, teamJoinInvitationsShow

добавлю

Amiditin commented 1 year ago

не вижу в дизайне показа тегов для списка участников, будут правки?

Да, для списка участников теги не нужны.

Amiditin commented 1 year ago

@Nelfimov Зарегался на stage, запросы c /api/sandbox проходят, но с локалхоста нет 401, куки добавлены и идентичны stage. Что-то ещё нужно сделать?

Nelfimov commented 1 year ago

@Nelfimov Зарегался на stage, запросы c /api/sandbox проходят, но с локалхоста нет 401, куки добавлены и идентичны stage. Что-то ещё нужно сделать?

Попробуй порт поменять на 3000 у приложения для локальной разработки. Иначе призываем бэк.

picolino commented 1 year ago

Проблема в том, что куки в браузере указываются для текущей страницы (localhost). И при запросах на стейдж автоматически не передаются, так как другой домен. Секьюрити.

Если выполнять запросы напрямую с куками из curl или postman - все будет ок. Нужно курить доку\конфиги чтобы все заработало. Если вообще так можно

Amiditin commented 1 year ago

@picolino @Nelfimov Как можно получить id авторизованного пользователя?

Nelfimov commented 1 year ago

@Amiditin id можешь получить из kratos: https://www.ory.sh/docs/kratos/reference/api#tag/frontend/operation/toSession

Nelfimov commented 1 year ago

@Amiditin возможно с нашего бэка можно вытащить - они же делают у себя дубликат id пользователя.

picolino commented 1 year ago

Эндпоинта на получение текущего юзера мы не делали, вся нужная инфа по текущему пользаку есть в кратосе, эндпоинт указали выше

Amiditin commented 1 year ago

@Amiditin id можешь получить из kratos: https://www.ory.sh/docs/kratos/reference/api#tag/frontend/operation/toSession

@Nelfimov Откуда мне взять flow.id? в useFlow ничего не лежит

Nelfimov commented 1 year ago

@Amiditin А зачем тебе flow.id? Там обычный запрос на эндпоинт с текущими куками кратоса

gfg7 commented 1 year ago

teamUserJoinRequestsShow, teamJoinInvitationsShow можно в респонс добавить полностью информацию о пользователе? (имя, аватар, теги)

https://github.com/habralab/garnet-team/issues/225