Илья
Alexander
Maks
так он же последний, не?
Например у записи номер 1 последний статус НОРМ, у записи 2 последний статус ЗБС, а норм уже был. И тебе нужно получить только те, у кого сейчас НОРМ
Alexander
вообще последний статус можно и в первой таблице хранить
Maks
просто было интересно как это еще можно решить АДЕКВАТНО
Alexander
ты скажешь не нормализовано. так ведь в таком случае как сейчас может быть кейс, что статуса и вовсе нет, а он должен быть
Alexander
есть еще вариант. завести дату, в запросе сделать order by dt DESC, и сделать псевдо поле first_element(state) last_state. where last_state = ""
Alexander
first_element - это уже надо для субд твоей смотреть как реализовать
Alexander
есесна group by нужен
Alexander
SELECT a.id, first_element(b.status) last_status
FROM a
INNER JOIN b ON ...
GROUP BY a.id
WHERE last_status = "ЗБС"
ORDER BY b.dt DESC
Alexander
вопрос в том, что производительность может быть не огонь, если надо супер быстро
Maks
select * from quest
left join (select quest_id, max(id) as status_id
from quest_status
group by quest_id) as statuses
on quest.id = statuses.quest_id
inner join quest_status
on statuses.status_id = quest_status.id
where quest_status.status in ('PROCESS');
Maks
тут много памяти требуется конечно
Maks
и естественно просядет производительность
Maks
но можно типа так
Shakir
Привет, друзья, как вы видите, я генерирую токен jwt, но он говорит, что подпись недействительна.
Shakir
Павел
Denis Pershin
Так ты воткни секрет там где your 256 bit key и проверь
Null
Хороших книг по Go много, потока «Golang для инженеров» от Слёрма – три.
Мы запускаем наш третий поток курса по Go, на котором обучаем инженеров с опытом разным полезным фичам: созданию своего API сервера, запуску контейнеров, взаимодействию с Docker и и Kubernetes.
На выходе вы станете разговаривать с Go на одном языке (буквально), сможете создавать сложные программы, взаимодействовать с другими инструментами и работать с кастомными операторами.
GOтовы погрузиться в поток? Тогда вам сюда: https://slurm.club/3a8VtJe
Если займете место на курсе сегодня, получите приятную мелочь: скидку 10%. Просто скопируйте промокод GO-3_10.
Tony
Подскажите, делаю restapi. После входа юзера, отдаю токен для последующих обращений. Как правильно потом опередить, что за юзер долбится - прошивать в токене uuid или пихать при входите токен в базу пользователей, в строку конкретного?
Anton
обычно в токене записывают id юзера или что-то в этом роде, чтобы потом накинуть мидлвару на нужные эндпоинты, где будет чекаться что юзер с токеном, а не мимокрок
ну и из токена парсить гораздо легче, чем "токен в базу пользователей", если я верно понял о чем ты
AO
JWT?
Maks
Но в целом можно в jwt хранить айди пользователя и по айди лазить в базу за ролями.
Maks
в случае с ролями это более менее решение, на 1 запрос в бд меньше а иногда и вообще запросов в бд не будет (в зависимости от запроса)
Maks
А вот если нужно иметь возможность сбрасывать доступ пользователем с других устройств и что бы это было мгновенно а не после истечения токена - то тут токен уже не подойдет
Anton
Valeriy
Tony
Tony
Tony
Tony
Может всё-таки писать токен юзеру в базу? А то как выйти? Как у сбера, вышел и вошёл под другими учётными
Maks
что бы выйти - ты просто токен на клиенте удаляешь
Maks
и всё
Maks
И больше ты войти не можешь
Tony
Tony
Тоже тема, но пока не так важна )
Valeriy
Maks
Ну в целом сейчас ты можешь использовать вообще любую авторизацию.
Maks
Это вообще не важно
Maks
Я бы для начала юзал базовую авторизацию, ибо какая разница
Tony
Спасибо
Maks
разве что для spa нужно данные иметь какие то о пользователе
Maks
а потом уже можно будет любую авторизацию прикрутить
Maks
главное это делать отдельным модулем и мидлварем
Maks
что бы можно было менять способ авторизации и аутентификации не меняя код нигде кроме этого модуля
Evgeny
Tony
umdnt 📻
bruh
umdnt 📻
как скажешь
Alexander
Alexander
В смысле в свой токен нельзя чужой айди засунуть?
Valeriy
В смысле в свой токен нельзя чужой айди засунуть?
Смотри, вот токен eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NTM5OTA3NDksImlzcyI6InN0YWdlLXZpemJsIiwic3ViIjoiZjMyMDNkMTItODUxNS00OGYyLTk4ODEtN2Q0ZmYxNWI1OTcxIiwiaXNfbW9kZXIiOnRydWUsInR5cGUiOiJwcml2YXRlX3BlcnNvbiJ9.zsBFlByvXVyx0Ck4UbNPMlV9jvJeGRXGXgCDOp5qg-0
Как пример
На этом сайте ты можешь его задекодить https://jwt.io/
Чтобы посмотреть какая там инфа
Maks
Если ты только sha256/512 не знаешь)
Valeriy
Valeriy
А создать левый нельзя так как есть секрет, который знает только бэкенд
Alexander
ну айди ок. а всякие другие вещи вроде прав. инвалидировать токен, чтобы клиент попросил новый после смены каких-то данных?
Valeriy
https://www.youtube.com/watch?v=Y41nrrMcOew
Valeriy
Вот хороший видос
Alexander
типа по токену из базы меньше 1мс получить нужные данные. не проще не зашивать туда инфу, а понести такую не очень страшную жертву?
Valeriy
Valeriy
Evgeny
да лишняя нагрузка на всё вообще
Alexander
ну в рамках 1мс, если все работает нормально. нагрузка на чтение - не страшно. зато консистентная инфа без заморочек
Maks
Evgeny
да откуда 1мс-то
Maks
Плюс когда таблицы становятся все больше и больше время трже может начать расти
Evgeny
у нас что всё на одной машине крутится
Alexander
Alexander
я уж не знаю какой страшный должен быть юзкейс когда запрос вроде
SELECT u.* FROM user u
INNER JOIN token t ON t.user_id = u.id
WHERE t.token = 'fdffsdfdsf'
был больше 1 мс