Closed ssagg closed 3 months ago
@Nelfimov @aliceinapple привет. Таймер на карточке пользователя за что у нас отвечает? и Чекбоксы в карточке только, как визуальная информация, какие сервисы подключены, или они активные? подразумевается какой-то экшн при нажатии?
@aliceinapple ^
@ssagg
Таймер на карточке пользователя за что у нас отвечает? и Чекбоксы в карточке только, как визуальная информация, какие сервисы подключены, или они активные? подразумевается какой-то экшн при нажатии?
Не знакома с проектом, есть ссылка на дизайн, чтобы я могла посмотреть полную картину?
@ssagg
Чекбоксы в карточке только, как визуальная информация, какие сервисы подключены, или они активные? подразумевается какой-то экшн при нажатии?
Судя по тому что я вижу, в дизайне нет поля для редактирования добавленных сервисов, похоже, что они нужны просто для отображения информации (подключенные сервисы)
Таймер на карточке пользователя за что у нас отвечает?
Тут не понятно, для чего он, @Nelfimov помоги
Тут не понятно, для чего он, @Nelfimov помоги
Можно же задать вопрос в фигме дизайнеру.
@Nelfimov подскажи пожалуйста каких пользователей выводить. 2 варианта:
висят приглашения
в организцаю
всех пользователей
во всех организациях
, к которым у нас есть доступ
(первый запрос) -> фильтр на уникальность
. + пользователи с висячими приглашениями
(второй запрос)
таймер в UI
)
айди пользователя
(почту/email
) и время приглашения
?Непонятно о какой "эту страницу" идет речь. Если это индексная, то 2.
- [ ] запись времени отправки приглашения (куда?)
- [ ] чтение времени отправки приглашения (откуда?)
@Nelfimov подскажи пожалуйста какой инструмент лучше использовать для таких минимальных записей на локалку?
будет что-то +- такое:
[
{
userEmail,
githubUserId,
invitationTime,
}
...
]
false
удалять запись из БД
в конвенции нашел вот этот абзац + инвайт мы отсылаем на 4 сервиса. следовательно карточка у нас должна трекать 7 позиций:
апи гитхаба
)??смотри доки фигмы
)??смотри доки дискорд
)нужен бот для этого
)2FA
(апи гитхаба
)GPG
(апи гитхаба
)avatar
(@Nelfimov дай саппорт по этому поинту. где будем проверять аватар? или нужно чтобы он был прям везде одинаковый?)
юсернейм
в гитхабе
и записать его тоже (зачем?)users
мы получаем данные из: github-api
всех юсеров из всех организаций, к которым у приложения есть доступ (смотри страницу organizations
, все эти вещи поотдельности ты уже делал)."висячие юсеры"
. на объект этого юсера повесить специальный ярлычок, типа pending: true
pending
- приоритетная запись)
pending
вывести на верх, отделить divider'ом?
.email&username
(+github-user-id?)
email&username
будут ходить запросы из предыдущего абзаца (которых семь штук)"старичкам"
там еще есть бейдж и удаление из орг-ии
email
email
в github
, figma
и discord
должен совпадатьgithub
и telegram
должен совпадать. либо начальная его часть, н-р: @someusername
@someusername_telegramPostfix
- дай саппорт по этому поинту. где будем проверять аватар? или нужно чтобы он был прям везде одинаковый?)
Пока ограничимся аватаром в гх.
Насчёт бд - не усложняешь? Как минимум гх даёт доступ к чтению пендингов
не усложняешь
возможно усложняю, завтра пересмотрю
И давай идти постепенно вместе - реализуем одну интеграцию за другой.
Какие то из них будем думать как сделать вместе.
Важно чтобы мы не тормозили к нашему дедлайну - конец следующей недели.
Насчёт бд - не усложняешь? Как минимум гх даёт доступ к чтению пендингов
по этому моменту не понимаю, как сделать так, чтобы мы мы могли трекать время онбординга после того, как пользователь добавился в организацию. например время онбордина - 48 часов, но пользователь присоединился к организации сразу, не выполнив всех условий. соответственно таймер получить мы не сможем
@TorinAsakura сейчас в проекте у нас только фронт. Для трекинга времени онбординга нужно где-то хранить дату направления инвайта. Варианты вижу такие:
local storage
- в какой то момент может взорваться от объема данных. Придется предусмотреть очистку.api
nextjs
построить взаимодействие с бд.api
.И давай идти постепенно вместе - реализуем одну интеграцию за другой.
а я везде пишу вывод всех юсеров со всех организаций, сейчас подумал о том, что инвайт у нас идет на "стандартную организацию"
, которую сохраняем в env
.
вопрос вот в чем: выводить всех юсеров из всех организаций? или выводить юсера из "дефолнтной"?
выводить всех юсеров из всех организаций?
Да
следовательно карточка у нас должна трекать 7 позиций:
- [ ] 1. пользователь присоединился к основной команде гитхаб (
апи гитхаба
)- [ ] 2. ползьватель присоединился к команде в фигма (
??смотри доки фигмы
)- [ ] 3. пользователь присоединился к группе дискорд (
??смотри доки дискорд
)- [ ] 4. пользователь присоединился к чату телеграм (
нужен бот для этого
)- [ ] 5. в гитхаб настроенна
2FA
(апи гитхаба
)- [ ] 6. в гитхаб настроенно
GPG
(апи гитхаба
)- [ ] 7. в дизайне есть пункт
avatar
(@Nelfimov дай саппорт по этому поинту. где будем проверять аватар? или нужно чтобы он был прям везде одинаковый?)
@Nelfimov посмотри пожалуйста вот эти пункты, может чтото забыл или лишнее добавил. сейчас карточку рефакторю, собираю запрос на всех юсеров
@Nelfimov посмотри пожалуйста вот эти пункты, может чтото забыл или лишнее добавил. сейчас карточку рефакторю, собираю запрос на всех юсеров
Ок
@Nelfimov, по БД так и не определились
Нужны уточнения:
- [x] 1. пользователь присоединился к основной команде гитхаб (
апи гитхаба
)- [ ] 2. ползьватель присоединился к команде в фигма (
??смотри доки фигмы
)- [ ] 3. пользователь присоединился к группе дискорд (
??смотри доки дискорд
)- [ ] 4. пользователь присоединился к чату телеграм (
нужен бот для этого
)- [ ] 5. в гитхаб настроенна
2FA
(апи гитхаба
)- [ ] 6. в гитхаб настроенно
GPG
(апи гитхаба
)- [ ] 7. в дизайне есть пункт
avatar
(@Nelfimov дай саппорт по этому поинту. где будем проверять аватар? или нужно чтобы он был прям везде одинаковый?)
graphqlApi
и rest
)graphqlApi
и rest
)avatarUrl
, которое в любом случае будет не пустой строкой
, поэтому как сделать проверку на аватар? что-то типа userHasAvatar
- нет. пока переключусь на другие сервисы.
Telegraf
. нам нужен всего один метод у бота, если это можно быстро реализовать без библиотеки, я сделаю так.true
, если они есть в массиве.5. Не могу найти ендпоинт в АПИ (смотрел и
graphqlApi
иrest
)
https://stackoverflow.com/a/55003560
6. Не могу найти ендпоинт в АПИ (смотрел и
graphqlApi
иrest
)
Пока пропусти - для проверки этого нужен коммит пользователя.
7. Если у пользователя нет аватара, гитхаб ставит свою заглушку. По апи мы получаем свойство
avatarUrl
, которое в любом случае будетне пустой строкой
, поэтому как сделать проверку на аватар? что-то типаuserHasAvatar
- нет.
Посмотри не подчиняется ли дефолтная аватарка некоему правилу в URL. Если так - просто проверяешь на соответствие маске.
- через апи фигмы не могу получить участников команды, такого метода нет (находил несколько постов (относительно недавних) на их формуме, люди просят этот метод). Есть метод по получению лога активности, там должна быть (в детали пока не вдавался) информация по недавним вступлениям в организацию. получу её, профильтрую и буду проставлять мемберам
true
, если они есть в массиве.GET /v1/teams/{team_id}/projects
Там будут collaborators
- дискорд апи еще не смотрел.
- телеграм мне будет сделать проще всего, я уже делал проверку по пользователям в группе
@Nelfimov на этом моменте встреваю
telegram-user-id
гитхаба
нам не приходят эти данные, приходит только username
и email
.telegram-user-id
после того, как пользователь вел чат с ботом. отправляя сообщение от лица бота, нам приходит response
с chat-id
, который совпадает с айди пользователя
telegram-bot-api
нет функции поиска
- телеграм мне будет сделать проще всего, я уже делал проверку по пользователям в группе
@Nelfimov на этом моменте встреваю
- мы можем сделать поиск по участникам телеграм чата, только при помощи
telegram-user-id
- с
гитхаба
нам не приходят эти данные, приходит толькоusername
и- мы можем узнать
telegram-user-id
после того, как пользователь вел чат с ботом. отправляя сообщение от лица бота, нам приходитresponse
сchat-id
, который совпадает сайди пользователя
- в
telegram-bot-api
нет функции поиска
Попробуй так:
- посмотреть через бота кто в чате
- сопоставить ник в тг с ником в гх
да, это понимаю
я не могу получить список всех мемберов, потомучто в апи телеграм бота
нету такого метода.
нашел только этот:
user_id
, username
не принимает@TorinAsakura пока не вижу как можно проверить наличие телеги через бота. Только если делать какую-то схему с написанием сообщения на бота, а затем проверять через API.
Как-то по другому можно реализовать или выпиливаем?
@TorinAsakura пока не вижу как можно проверить наличие телеги через бота. Только если делать какую-то схему с написанием сообщения на бота, а затем проверять через API.
Как-то по другому можно реализовать или выпиливаем?
вообще, вот такая штука есть: https://gram.js.org/tl/channels/GetParticipants#channelsgetparticipants
Там будут
collaborators
@Nelfimov по этому
эндпоинту
точноcollaborators
должны приходить? в доках такой инфы нет, и на мойзапрос
приходитответ
безcollaborators
. тестового сотрудника добавил.
Вышли твой ответ
Вышли твой ответ
{
"name": "Kirill Ivanov's team",
"projects": [
{
"id": "75174931",
"name": "Team project"
}
]
}
Все разрешения токену дал?
ошибка импорта может быть изза точки
в названии пакета?
app-1 | Module not found: Can't resolve 'discord'
app-1 | > 1 | import { Client } from 'discord.js'
app-1 | 2 | import { GatewayIntentBits } from 'discord.js'
app-1 | 3 | import { Partials } from 'discord.js'
app-1 | 4 |
app-1 |
Все разрешения токену дал?
щас перепроверю
Все разрешения токену дал?
максимальные разрешения, результат не изменился
Попробуй еще раз посмотреть https://www.figma.com/developers/api
Если метода нет - пропускаем.
Обязательно отпишись.
Обязательно отпишись.
в доках
вот такой пример response
указан, собственно какой и приходит:
по имени member
, collaborator
, team
во всей документации искал - пусто
в ендпоинте
акитвити лога
есть такое свойство:
в
ендпоинте
акитвити лога
есть такое свойство:
Без ссылок тяжело понимать о чем речь
в
ендпоинте
акитвити лога
есть такое свойство:Без ссылок тяжело понимать о чем речь
https://www.figma.com/developers/api#activity-logs-action-types
вот такой пункт обнаружил сейчас:
у нас не Enterprise plan
случайно?
у нас не
Enterprise plan
случайно?
@TorinAsakura вопрос по фигме.
@effektivnayarabota1 идем параллельно дальше.
у нас не
Enterprise plan
случайно?@TorinAsakura вопрос по фигме.
@effektivnayarabota1 идем параллельно дальше.
Нет конечно
@Nelfimov
походу разобрался.
обновил next
до последней 14й версии, добавил в вебпак вот такую запись:
webpackConfig.module.rules.push({
test: /\.node$/,
loader: 'node-loader',
})
discord.js
расширил regex
в webpackConfig
, чтобы он читал этот пакет. есть внутренние пакеты, которые тоже с точкой
// в названии пакета есть ".js", поэтому меняю регекс
webpackConfig.plugins.push(
new webpack.NormalModuleReplacementPlugin(new RegExp(/^(\.{1,2}\/)+\S*\.js$/), function (
/** @type {{ request: string }} */
resource
) {
resource.request = resource.request.replace('.js', '')
})
)
добавил внутренний пакет zlib-sync
в packageExtentions
, была ошибка зависимостей.
скрипт исполняется на сервере, сделал апи роут http://localhost:3000/api/get-discord-server-members
актуальный код в ветке feat/users-page
app-1 | (node:34) Warning: [Warning] The runtime detected new information in a PnP file; reloading the API instance (/workspace/.pnp.cjs)
app-1 | (Use `node --trace-warnings ...` to show where the warning was created)
app-1 | ▲ Next.js 14.1.0
app-1 | - Local: http://localhost:3000
app-1 | - Environments: .env
app-1 | - Experiments (use at your own risk):
app-1 | · externalDir
app-1 | · esmExternals
app-1 | · outputFileTracingRoot
app-1 |
app-1 | ✓ Ready in 6.1s
app-1 | ○ Compiling /api/get-discord-server-members ...
app-1 | ⨯ ../../../../.yarn/cache/undici-npm-6.13.0-1545cd855e-4ec2038e95.zip/node_modules/undici/lib/web/fetch/util.js
app-1 | Module parse failed: Unexpected token (693:63)
app-1 | | // 5. If object is not a default iterator object for interface,
app-1 | | // then throw a TypeError.
app-1 | > if (typeof this !== "object" || this === null || !(#target in this)) {
app-1 | | throw new TypeError(`'next' called on an object that does not implement interface ${name} Iterator.`);
app-1 | | }
app-1 |
app-1 | Import trace for requested module:
app-1 | ../../../../.yarn/cache/undici-npm-6.13.0-1545cd855e-4ec2038e95.zip/node_modules/undici/lib/web/fetch/util.js
app-1 | ../../../../.yarn/cache/undici-npm-6.13.0-1545cd855e-4ec2038e95.zip/node_modules/undici/lib/web/fetch/index.js
app-1 | ../../../../.yarn/cache/undici-npm-6.13.0-1545cd855e-4ec2038e95.zip/node_modules/undici/index.js
app-1 | ../../../../.yarn/cache/discord.js-npm-14.15.3-0c74284e59-b18decbe8a.zip/node_modules/discord.js/src/util/DataResolver.js
app-1 | ../../../../.yarn/cache/discord.js-npm-14.15.3-0c74284e59-b18decbe8a.zip/node_modules/discord.js/src/index.js
app-1 | ../../../../.yarn/__virtual__/@globals-third-party-service-data-virtual-8cd9a1abbe/1/globals/third-party-service-data/src/hooks/get-discord-server-members.hook.ts
app-1 | ../../../../.yarn/__virtual__/@globals-third-party-service-data-virtual-8cd9a1abbe/1/globals/third-party-service-data/src/hooks/index.ts
app-1 | ../../../../.yarn/__virtual__/@globals-third-party-service-data-virtual-8cd9a1abbe/1/globals/third-party-service-data/src/index.ts
app-1 | ../../../api/get-discord-server-members/src/get-discord-server-members.api.ts
app-1 | ../../../api/get-discord-server-members/src/index.ts
app-1 | ./app/api/get-discord-server-members/route.ts
app-1 | <w> [webpack.cache.PackFileCacheStrategy] Caching failed for pack: Error: ENOENT: no such file or directory, rename '/workspace/app/entrypoints/renderer/src/.next/cache/webpack/client-development-fallback/1.pack.gz_' -> '/workspace/app/entrypoints/renderer/src/.next/cache/webpack/client-development-fallback/1.pack.gz'
app-1 | ⨯ ../../../../.yarn/cache/undici-npm-6.13.0-1545cd855e-4ec2038e95.zip/node_modules/undici/lib/web/fetch/util.js
app-1 | Module parse failed: Unexpected token (693:63)
app-1 | | // 5. If object is not a default iterator object for interface,
app-1 | | // then throw a TypeError.
app-1 | > if (typeof this !== "object" || this === null || !(#target in this)) {
app-1 | | throw new TypeError(`'next' called on an object that does not implement interface ${name} Iterator.`);
app-1 | | }
app-1 |
app-1 | Import trace for requested module:
app-1 | ../../../../.yarn/cache/undici-npm-6.13.0-1545cd855e-4ec2038e95.zip/node_modules/undici/lib/web/fetch/util.js
app-1 | ../../../../.yarn/cache/undici-npm-6.13.0-1545cd855e-4ec2038e95.zip/node_modules/undici/lib/web/fetch/index.js
app-1 | ../../../../.yarn/cache/undici-npm-6.13.0-1545cd855e-4ec2038e95.zip/node_modules/undici/index.js
app-1 | ../../../../.yarn/cache/discord.js-npm-14.15.3-0c74284e59-b18decbe8a.zip/node_modules/discord.js/src/util/DataResolver.js
app-1 | ../../../../.yarn/cache/discord.js-npm-14.15.3-0c74284e59-b18decbe8a.zip/node_modules/discord.js/src/index.js
app-1 | ../../../../.yarn/__virtual__/@globals-third-party-service-data-virtual-8cd9a1abbe/1/globals/third-party-service-data/src/hooks/get-discord-server-members.hook.ts
app-1 | ../../../../.yarn/__virtual__/@globals-third-party-service-data-virtual-8cd9a1abbe/1/globals/third-party-service-data/src/hooks/index.ts
app-1 | ../../../../.yarn/__virtual__/@globals-third-party-service-data-virtual-8cd9a1abbe/1/globals/third-party-service-data/src/index.ts
app-1 | ../../../api/get-discord-server-members/src/get-discord-server-members.api.ts
app-1 | ../../../api/get-discord-server-members/src/index.ts
app-1 | ./app/api/get-discord-server-members/route.ts
app-1 | ✓ Compiled /_error in 271ms (553 modules)
app-1 | ⚠ Fast Refresh had to perform a full reload due to a runtime error.
@TorinAsakura пока не вижу как можно проверить наличие телеги через бота. Только если делать какую-то схему с написанием сообщения на бота, а затем проверять через API.
Как-то по другому можно реализовать или выпиливаем?
погоди, о каком боте идёт речь? Через кого ты хочешь проверять наличие телеги, а главное какой и для чего? Ничего не понимаю
@TorinAsakura пока не вижу как можно проверить наличие телеги через бота. Только если делать какую-то схему с написанием сообщения на бота, а затем проверять через API. Как-то по другому можно реализовать или выпиливаем?
погоди, о каком боте идёт речь? Через кого ты хочешь проверять наличие телеги, а главное какой и для чего? Ничего не понимаю
в условаия онбордина входит телеграм, это по дизайну как я понял речь идет о подключении к чату
я выписывал условия онбординга, у меня сеь штук получилось
@TorinAsakura пока не вижу как можно проверить наличие телеги через бота. Только если делать какую-то схему с написанием сообщения на бота, а затем проверять через API. Как-то по другому можно реализовать или выпиливаем?
погоди, о каком боте идёт речь? Через кого ты хочешь проверять наличие телеги, а главное какой и для чего? Ничего не понимаю
в условаия онбордина входит телеграм, это по дизайну как я понял речь идет о подключении к чату
я выписывал условия онбординга, у меня сеь штук получилось
чот вы тут намудрили, нам просто нужно проверить, что пользователь с нужным нам никнеймом находится в нашей группе, организации, сервере
@TorinAsakura пока не вижу как можно проверить наличие телеги через бота. Только если делать какую-то схему с написанием сообщения на бота, а затем проверять через API. Как-то по другому можно реализовать или выпиливаем?
погоди, о каком боте идёт речь? Через кого ты хочешь проверять наличие телеги, а главное какой и для чего? Ничего не понимаю
в условаия онбордина входит телеграм, это по дизайну как я понял речь идет о подключении к чату
я выписывал условия онбординга, у меня сеь штук получилось
в телеге и дискорде мы спокойно можем получить эти данные посредством апи, там элементарный запрос на апи
с фигмой, к сожалению облом, там вообще нет никаких нативных средств (да и не нативных), так что фигму пока можем убирать из этой итерации
@TorinAsakura пока не вижу как можно проверить наличие телеги через бота. Только если делать какую-то схему с написанием сообщения на бота, а затем проверять через API. Как-то по другому можно реализовать или выпиливаем?
погоди, о каком боте идёт речь? Через кого ты хочешь проверять наличие телеги, а главное какой и для чего? Ничего не понимаю
в условаия онбордина входит телеграм, это по дизайну как я понял речь идет о подключении к чату я выписывал условия онбординга, у меня сеь штук получилось
в телеге и дискорде мы спокойно можем получить эти данные посредством апи, там элементарный запрос на апи
с фигмой, к сожалению облом, там вообще нет никаких нативных средств (да и не нативных), так что фигму пока можем убирать из этой итерации
в telegram bot api
есть только такой метод, чтобы вытащить мембера из группы:
он принимает user id
, а user id
нам не приходит. можно узнать его по юсернейму только после взаимодействия с ботом
есть вот такая штука. это не bot api, а полный апи телеграмма, типо приложение телеграмм. мы будем его использовать? должно сработать. https://gram.js.org/tl/channels/GetParticipants#channelsgetparticipants
@Nelfimov дискорд делаю по гайду, что ты скинул
он у меня запустился только после того, как добавил WS_NO_BUFFER_UTIL=true
в .env
source
много времени на это уже потратил, он не работает.
сейчас такая ошибка:
app-1 | at async Client.eval (webpack-internal:///(rsc)/./app/api/get-discord-server-members/route.ts:27:23) {
app-1 | requestBody: { files: undefined, json: undefined },
app-1 | rawError: { message: 'Unknown Guild', code: 10004 },
app-1 | code: 10004,
app-1 | status: 404,
app-1 | method: 'GET',
app-1 | url: 'https://discord.com/api/v10/guilds/1267841184915521570?with_counts=true'
app-1 | }
ошибки постепенно решаю, но на это уходит время
пробовал сделать http запрос
- была ошбика на авторизации, вернулся к этой библиотеке.
@Nelfimov дискорд делаю по гайду, что ты скинул он у меня запустился только после того, как добавил
WS_NO_BUFFER_UTIL=true
в.env
source много времени на это уже потратил, он не работает. сейчас такая ошибка:app-1 | at async Client.eval (webpack-internal:///(rsc)/./app/api/get-discord-server-members/route.ts:27:23) { app-1 | requestBody: { files: undefined, json: undefined }, app-1 | rawError: { message: 'Unknown Guild', code: 10004 }, app-1 | code: 10004, app-1 | status: 404, app-1 | method: 'GET', app-1 | url: 'https://discord.com/api/v10/guilds/1267841184915521570?with_counts=true' app-1 | }
- айди гильдии копирую по гайду, из интерфейса приложения, он совпадает с url гильдии в браузере.
- бот состоит в гильдии
- по разрешениям вроде все ок
ошибки постепенно решаю, но на это уходит время
пробовал сделать
http запрос
- была ошбика на авторизации, вернулся к этой библиотеке.
так, ты интеграциями пока не заморачивайся, делай пока только фронтовые куски, данные пока тупо мокай, с интеграциями это вообще будет отдельный стрим…когда-нибудь
@Nelfimov заем ты ему это дал? Тут мне-то нужно посидеть подумать, а ты его швырнул на это.
@Nelfimov подскажи пожалуйста, почему ts
себя так ведет
жалуется на то, что свойства id
не существует, хотя оно существует
@Nelfimov подскажи пожалуйста, почему
ts
себя так ведет жалуется на то, что свойстваid
не существует, хотя оно существует
С чем связан запрос на фичу?
Поление данных репозитория, трансляция на фронт
Расскажите как вы это себе видите
[x] рендер списка пользователей
[ ] рендер выполненных условий онбординга
[x] рендер прогрессбара (зависим от количества выполненных условий онбординга)
[x] рендер таймера
[x] рендер кнопки количества организаций
Definition of done (критерий готовности)
Получены данные от API
Приложите пример реализаций
https://www.figma.com/design/2vNHefkDcMKAFSnw69RbMM/Team-management-system
Приложите материалы задачи
No response