Giter Site home page Giter Site logo

qa-guru / niffler Goto Github PK

View Code? Open in Web Editor NEW
28.0 6.0 94.0 49.57 MB

Niffler. The coin keeper by QA.GURU based on Spring Boot microservices.

License: MIT License

Dockerfile 0.12% Shell 0.95% Java 77.41% CSS 3.75% HTML 0.60% JavaScript 17.04% FreeMarker 0.12%

niffler's Introduction

Технологии, использованные в Niffler

Рекомендуемые материалы к просмотру (прочтению):

Схема проекта Niffler

Минимальные предусловия для работы с проектом Niffler

0. Если у вас ОС Windows

Во-первых, и в-главных, необходимо использовать bash terminal, а не powershell. Во-вторых, для запуска фронтенда локально необходимо использовать команду npm run build:windows, если не работает стандартная команда npm run build:dev В-третьих, если у вас что-то не работает - пишите в TG чат группы - будем вместе дополнять README, т.к. изначально проект разработан под nix

1. Установить docker (Если не установлен)

Мы будем использовать docker для БД (Postgres), кроме того, будем запускать микросервисы в едином docker network при помощи docker-compose

Установка на Windows

Установка на Mac (Для ARM и Intel разные пакеты)

Установка на Linux

После установки и запуска docker daemon необходимо убедиться в работе команд docker, например docker -v:

User-MacBook-Pro ~ % docker -v
Docker version 20.10.14, build a224086

2. Спуллить контейнер postgres:15.1, zookeeper и kafka версии 7.3.2

docker pull postgres:15.1
docker pull confluentinc/cp-zookeeper:7.3.2
docker pull confluentinc/cp-kafka:7.3.2

После pull вы увидите спуленный image командой docker images

mitriis-MacBook-Pro ~ % docker images            
REPOSITORY                 TAG              IMAGE ID       CREATED         SIZE
postgres                   15.1             9f3ec01f884d   10 days ago     379MB
confluentinc/cp-kafka      7.3.2            db97697f6e28   12 months ago   457MB
confluentinc/cp-zookeeper  7.3.2            6fe5551964f5   7 years ago     451MB

3. Создать volume для сохранения данных из БД в docker на вашем компьютере

docker volume create pgdata

4. Запустить БД, zookeeper и kafka 3-мя последовательными командами:

Запустив скрипт (Для Windows необходимо использовать bash terminal: gitbash, cygwin или wsl)

User-MacBook-Pro  niffler % bash localenv.sh

Или выполнив последовательно команды, для *nix:

docker run --name niffler-all -p 5432:5432 -e POSTGRES_PASSWORD=secret -v pgdata:/var/lib/postgresql/data -d postgres:15.1

docker run --name=zookeeper -e ZOOKEEPER_CLIENT_PORT=2181 -p 2181:2181 -d confluentinc/cp-zookeeper:7.3.2

docker run --name=kafka -e KAFKA_BROKER_ID=1 \
-e KAFKA_ZOOKEEPER_CONNECT=$(docker inspect zookeeper --format='{{ .NetworkSettings.IPAddress }}'):2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
-e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
-e KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 \
-e KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1 \
-p 9092:9092 -d confluentinc/cp-kafka:7.3.2

Для Windows (Необходимо использовать bash terminal: gitbash, cygwin или wsl):

docker run --name niffler-all -p 5432:5432 -e POSTGRES_PASSWORD=secret -v pgdata:/var/lib/postgresql/data -d postgres:15.1

docker run --name=zookeeper -e ZOOKEEPER_CLIENT_PORT=2181 -p 2181:2181 -d confluentinc/cp-zookeeper:7.3.2

docker run --name=kafka -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=$(docker inspect zookeeper --format='{{ .NetworkSettings.IPAddress }}'):2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 -e KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 -e KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1 -p 9092:9092 -d confluentinc/cp-kafka:7.3.2

confluentinc/cp-docker-images#801 (comment)

5. Установить одну из программ для визуальной работы с Postgres

Например, DBeaver или Datagrip. Мы рекомендуем бесплатную PgAdmin 4.

6. Подключиться к БД postgres (host: localhost, port: 5432, user: postgres, pass: secret, database name: postgres) из PgAdmin и создать пустые БД микросервисов

create
    database "niffler-userdata" with owner postgres;
create
    database "niffler-spend" with owner postgres;
create
    database "niffler-currency" with owner postgres;
create
    database "niffler-auth" with owner postgres;

7. Установить Java версии 21. Это необходимо, т.к. проект использует синтаксис Java 21

Версию установленной Java необходимо проверить командой java -version

User-MacBook-Pro ~ % java -version
openjdk version "21.0.1" 2023-10-17 LTS
OpenJDK Runtime Environment Temurin-21.0.1+12 (build 21.0.1+12-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.1+12 (build 21.0.1+12-LTS, mixed mode)

Если у вас несколько версий Java одновременно - то хотя бы одна из них должна быть 21 Если java не установлена вовсе, то рекомендую установить OpenJDK (например, из https://adoptium.net/en-GB/temurin/releases/)

8. Установить пакетый менеджер для сборки front-end npm

Инструкция. Рекомендованная версия Node.js - 18.13.0 (LTS)

Запуск Niffler локальное в IDE:

1. Выбрать какой фронтенд предполагается запускать - REST или GraphQL, и перейти в соответсвующий каталог

для REST:

User-MacBook-Pro niffler % cd niffler-frontend

или для GraphQL:

User-MacBook-Pro niffler % cd niffler-frontend-gql

2. Запустить фронтенд (сначала обновить зависимости)

Для *nix:

User-MacBook-Pro niffler-frontend % npm i
User-MacBook-Pro niffler-frontend % npm run build:dev

Для Windows:

User-MacBook-Pro niffler-frontend % npm i
User-MacBook-Pro niffler-frontend % npm run build:windows

3. Прописать run конфигурацию для всех сервисов niffler-* - Active profiles local

Для этого зайти в меню Run -> Edit Configurations -> выбрать main класс -> указать Active profiles: local Инструкция.

4 Запустить сервис Niffler-auth c помощью gradle или командой Run в IDE:

  • Запустить сервис auth
User-MacBook-Pro niffler % cd niffler-auth
User-MacBook-Pro niffler-auth % gradle bootRun --args='--spring.profiles.active=local'

Или просто перейдя к main-классу приложения NifflerAuthApplication выбрать run в IDEA (предварительно удостовериться что выполнен предыдущий пункт)

5 Запустить в любой последовательности другие сервисы: niffler-currency, niffler-spend, niffler-gateway, niffler-userdata

Запуск Niffler в докере:

1. Создать бесплатную учетную запись на https://hub.docker.com/ (если отсутствует)

2. Создать в настройках своей учетной записи access_token

Инструкция.

3. Выполнить docker login с созданным access_token (в инструкции это описано)

4. Прописать в etc/hosts элиас для Docker-имени

  • frontend: 127.0.0.1 frontend.niffler.dc,
  • auth: 127.0.0.1 auth.niffler.dc
  • gateway: 127.0.0.1 gateway.niffler.dc
User-MacBook-Pro niffler % vi /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
127.0.0.1       frontend.niffler.dc
127.0.0.1       auth.niffler.dc
127.0.0.1       gateway.niffler.dc

5. Перейти в корневой каталог проекта

User-MacBook-Pro niffler % cd niffler

6. Запустить все сервисы, если необходим фронтенд GraphQL, то это указывается аргументом к скрипту:

для REST:

User-MacBook-Pro  niffler % bash docker-compose-dev.sh

для GraphQL:

User-MacBook-Pro  niffler % bash docker-compose-dev.sh gql

Текущая версия docker-compose-dev.sh удалит все запущенные Docker контейнеры в системе, поэтому если у вас есть созданные контейнеры для других проектов - отредактируйте строку posh docker rm $(docker ps -a -q), чтобы включить в grep только те контейнеры, что непосредственно относятся к niffler.

Niffler при запуске в докере будет работать для вас по адресу http://frontend.niffler.dc:80, этот порт НЕ НУЖНО указывать в браузере, таким образом переходить напрямую по ссылке http://frontend.niffler.dc

Если при выполнении скрипта вы получили ошибку

* What went wrong:
Execution failed for task ':niffler-auth:jibDockerBuild'.
> com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException: 
Build to Docker daemon failed, perhaps you should make sure your credentials for 'registry-1.docker.io...

То необходимо убедиться, что в $USER/.docker/config.json файле отсутствует запись "credsStore": "desktop" При наличии такого ключа в json, его надо удалить. Если файл пустой, то возможно не выполнен docker login. Если выполнялся, то надо создать файл руками по пути $USER/.docker/config.json с содержимым,

 {
        "auths": {
                "https://index.docker.io/v1/": {}
        },
        "currentContext": "desktop-linux"
}

Создание своего docker repository для форка Niffler и сборка своих докер контейнеров

1. Войти в свою УЗ на https://hub.docker.com/ и последовательно создать публичные репозитории

  • niffler-frontend
  • niffler-frontend-gql
  • niffler-userdata
  • niffler-spend
  • niffler-gateway
  • niffler-currency
  • niffler-auth

Допустим, что ваш username на https://hub.docker.com - foobazz

2. заменить в файле docker.properties (в корне проекта) IMAGE_PREFIX=qaguru на IMAGE_PREFIX=foobazz

3. заменить в файле build.gradle (в корне проекта) dockerHubName = "qaguru" на dockerHubName = "foobazz"

4. Перейти в корневой каталог проекта

User-MacBook-Pro niffler % cd niffler

5. Собрать все имеджи, запушить и запустить niffler одной командой, если необходим фронтенд GraphQL, то это указывается аргументом к скрипту:

для REST:

User-MacBook-Pro  niffler % bash docker-compose-dev.sh push

для GraphQL:

User-MacBook-Pro  niffler % bash docker-compose-dev.sh gql push

Запуск e-2-e тестов в Docker network изолированно Niffler в докере:

1. Перейти в корневой каталог проекта

User-MacBook-Pro niffler % cd niffler

2. Запустить все сервисы и тесты, если необходим фронтенд GraphQL, то это указывается аргументом к скрипту:

для REST:

User-MacBook-Pro  niffler % bash docker-compose-e2e.sh

для GraphQL:

User-MacBook-Pro  niffler % bash docker-compose-e2e.sh gql

3. Selenoid UI доступен по адресу: http://localhost:9090/

niffler's People

Contributors

dtuchs avatar georg3k avatar gitstanhub avatar irinastyazhkina avatar omen4th avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

niffler's Issues

[BUG] Профиль пользователя. Категории расходов не отсортированы в алфавитном порядке

Предусловие:

  • Выполнена авторизация в приложении
  • Добавлены категории расходов

Шаги для воспроизведения бага

  1. Перейти в профиль пользователя

Ожидаемое поведение:
Категории отсортированы в алфавитном порядке.

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

Скриншот:
image

[BUG] Отсутствуют кнопки принять / отклонить предложения дружбы.

Предусловие
Создано два тестовых пользователя user1 и user2

Шаги для воспроизведения бага

  1. Авторизоваться как user1
  2. Пройти в раздел all_people
  3. Нажать кнопку "add friend" в строке user2
  4. Авторизоваться как user2
  5. Пройти в раздел friends

Ожидаемое поведение
Должны отображаться две кнопки, "принять", "отклонить"

Фактический результат
Отображается кнопка "add friend", в БД данные сохраняются корректно.
Окружение
У меня windows 11

Скриншоты/ Видео
image
Дополнительно
Повторное нажатие отрабатывает корректно (статус 500, хотя было бы лучше указать сообщение конкретную причину, почему именно статус 500, если на данный момент данное поведение корректно), но этой кнопки быть не должно.

Первый клик
image
Второй клик
image

fetch("http://127.0.0.1:8090/addFriend", {
  "headers": {
    "accept": "application/json",
    "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
    "authorization": "Bearer eyJraWQiOiI0MzUyYjY3Ny0xOGE3LTRiYWItOWFhYi00NGM0ZDc3ODNjODUiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ1c2VyMiIsImF1ZCI6ImNsaWVudCIsImF6cCI6ImNsaWVudCIsImlzcyI6Imh0dHA6Ly8xMjcuMC4wLjE6OTAwMCIsImV4cCI6MTY5NDQ2NDY5NiwiaWF0IjoxNjk0NDYyODk2fQ.FKO-g1GC2d6eQxc88OKaCNk9N3ufFmAdqEhuz-YYaCkdVY59NsC_C_mVl6zMa87iguKwf9lMLeBuoNUYZo3miTSqbrnpJLvrzqMl4bm3DL4_n3IPj8_9F2VtzOx_q59ZilNaqGyX5S-k-SuHVnWnY3Xj3FDYEXunPmxv2w-_Q3uAS9RyM2gCdt31oWJI0Be0sHU1o4mlL4306zCY4WEbqwI2iDRk24nbHS1Z1l3FsOMBNxIj7F5iQGX3-rBYjcfAi_fsekJ_aKlefpjMSRY8BkZis_IyxpKZ8Bc9DXv9oWoG6EkpTZJw-RTszGeDeV96bI4W5ZK9YhaoUbsWvWz5Mw",
    "content-type": "application/json",
    "sec-ch-ua": "\"Chromium\";v=\"116\", \"Not)A;Brand\";v=\"24\", \"Google Chrome\";v=\"116\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-site"
  },
  "referrer": "http://127.0.0.1:3000/",
  "referrerPolicy": "strict-origin-when-cross-origin",
  "body": "{\"username\":\"user1\"}",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
});

POST /addFriend HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
Authorization: Bearer eyJraWQiOiI0MzUyYjY3Ny0xOGE3LTRiYWItOWFhYi00NGM0ZDc3ODNjODUiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ1c2VyMiIsImF1ZCI6ImNsaWVudCIsImF6cCI6ImNsaWVudCIsImlzcyI6Imh0dHA6Ly8xMjcuMC4wLjE6OTAwMCIsImV4cCI6MTY5NDQ2NDY5NiwiaWF0IjoxNjk0NDYyODk2fQ.FKO-g1GC2d6eQxc88OKaCNk9N3ufFmAdqEhuz-YYaCkdVY59NsC_C_mVl6zMa87iguKwf9lMLeBuoNUYZo3miTSqbrnpJLvrzqMl4bm3DL4_n3IPj8_9F2VtzOx_q59ZilNaqGyX5S-k-SuHVnWnY3Xj3FDYEXunPmxv2w-_Q3uAS9RyM2gCdt31oWJI0Be0sHU1o4mlL4306zCY4WEbqwI2iDRk24nbHS1Z1l3FsOMBNxIj7F5iQGX3-rBYjcfAi_fsekJ_aKlefpjMSRY8BkZis_IyxpKZ8Bc9DXv9oWoG6EkpTZJw-RTszGeDeV96bI4W5ZK9YhaoUbsWvWz5Mw
Connection: keep-alive
Content-Length: 20
Content-Type: application/json
Cookie: JSESSIONID=1FC1BC9F7EC971ED0A71CB59D4C52E52
Host: 127.0.0.1:8090
Origin: http://127.0.0.1:3000
Referer: http://127.0.0.1:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
sec-ch-ua: "Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"


HTTP/1.1 500
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: http://127.0.0.1:3000
Access-Control-Allow-Credentials: true
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json
Transfer-Encoding: chunked
Date: Mon, 11 Sep 2023 20:17:01 GMT
Connection: close


[BUG] Профиль пользователя. Не обновляется веб-элемент аватарки при повторной установке текущего изображения

Предусловие
Пользователь авторизован. Открыт профиль пользователя.

Шаги для воспроизведения бага

  1. Установить аватар. Сохранить изменения.
  2. Повторно установить тот же самый аватар. Сохранить изменения.

Ожидаемое поведение
После повторного сохранения изменений на UI отобразится выбранный аватар (картинка).

Фактический результат
На UI не отображается выбранный аватар. Система отображает состояние выбора аватара (Choose file).

Видео-репорт
https://drive.google.com/file/d/18I99vL_vzXUz5p3u_VkU2KvohFNoL3He/view?usp=sharing

image

[BUG] Профиль пользователя. Необработанная ошибка при добавлении числа категорий превышающих лимит

Предусловие:

  • Выполнена авторизация в приложении
  • Добавлено 8 категорий расходов

Шаги для воспроизведения бага:

  1. Выполнить добавление 9-й категории в список

Ожидаемое поведение:
Запрос на добавление вернул ошибку проксируемую с сервиса spend "406 NOT_ACCEPTABLE "Can`t add over than 7 categories for user: '..."]".

Фактический результат:
"Writing [{timestamp=Sun Aug 13 11:06:32 UTC 2023, status=500, error=Internal Server Error, path=/category}]"

Скриншот:
image

[BUG] Учёт расходов. Отмена редактирования записи расходов после изменений приводит к визуальному восстановлению предыдущего состояния записи

Предусловие:

  • Выполнена авторизация в приложении
  • Добавлена категория расходов
  • Добавлена новая запись по расходам

Шаги для воспроизведения бага

  1. Перейти в режим редактирования записи
  2. Изменить любой доступный пункт
  3. Сохранить изменения
  4. Перейти в режим редактирования записи
  5. Закрыть режим редактирования

Ожидаемое поведение:
В интерфейсе отображается текущая информация по записи.

Фактический результат:
В интерфейсе отображается информация по записи, которая была указана до редактирования.

Видео:
edit_description

[BUG]Не работает удаление друзей

Предусловие
два юзера должны быть в друзьях друг у друга

Шаги для воспроизведения бага

  1. Авторизоваться
  2. Перейти на /friends или /people
  3. Нажать на кнопку удаления друзей(remove friend)
    image
  4. Перегрузить текущую страницу

Ожидаемое поведение
На странице /friends соответствующая запись исчезла со страницы
На странице /people кнопка удаления друга и надпись "You are friends" исчезла у соответствующей записи таблицы, вместо них теперь кнопка добавления друга.

Фактический результат
Пользователи по-прежнему в друзьях друг у друга, соответствующие записи не удалены из бд niffler-userdata.friends

Дополнительно
Предположительно, дефект рядом с https://github.com/qa-guru/niffler-st2/blob/782f389aa8def71a36824ff42f187f5f84e6f9b2/niffler-userdata/src/main/java/niffler/service/UserDataService.java#L178

[BUG] Учёт расходов. Кнопка удаления записи доступна после очистки списка

Предусловие:

  • Выполнена авторизация в приложении
  • Добавлена категория расходов
  • Добавлена новая запись по расходам

Шаги для воспроизведения бага

  1. Выбрать в списке запись по расходам (через чекбокс)
  2. Удалить категорию из списка
  3. Повторно нажать на кнопку удаления категории из списка

Ожидаемое поведение:
Кнопка удаления недоступна для взаимодействия при отсутствии выбранных записей.

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

Видео:
delete

[BUG] Список всех пользователей.

Предусловие
Зарегистрировать трех или более пользователей в системе (например, user1, user2, user3)

Шаги для воспроизведения бага

  1. Авторизоваться под пользователем user3
  2. Перейти в раздел All People
  3. Убедиться, что у user3 отображаются user1 и user2
  4. Разлогиниться и авторизоваться под user1
  5. Перейти в раздел All People
  6. Выбрать в списке отображаемых пользователей user2 и отправить ему запрос на дружбу
  7. Разлогиниться и авторизоваться под user3
    ...

Ожидаемое поведение
У user3 в списке пользователей по-прежнему будут отображаться user1 и user2

Фактический результат
У user3 пустой список пользователей
(в моем случае - в нем только пользователь barsic, у которого нет ни друзей, ни запросов на дружбу). У пользователей, не имеющих друзей или отправленные/принятые запросы в друзья не отображаются другие пользователи, у которых друзья или такие запросы есть.

Окружение
От окружения не зависит

Скриншоты/ Видео

это user2:
Screenshot_12
это user3:
Screenshot_13

Дополнительно
Ошибка в этой части кода https://github.com/qa-guru/niffler-st4/blob/755958860113739d622ffa9a3278ec6966db82ff/niffler-userdata/src/main/java/guru/qa/niffler/service/UserDataService.java#L83-L103 и связана с тем, что inviteToMe и inviteFromMe

[BUG] Друзья. Отклонение запроса в друзья не работает

Предусловие
У пользователя есть запрос в друзья (invitation).
Пользователь авторизован. Открыт профиль пользователя.

Шаги для воспроизведения бага

  1. Открыть страницу Друзья.
  2. Отклонить приглашение (decline).
  3. Обновить страницу.

...

Ожидаемое поведение
После обновления страницы отклоненный запрос не отображается.

Фактический результат
После обновления страницы запрос, отклоненный на шаге 2, отображается.

Дополнительно
Не удаляется запись в базе: currentUser.removeInvites(friendToDecline);

[BUG] Пользователь может добавить категорию трат без названия

Предусловие
Открыта страница профайла пользователя

Шаги для воспроизведения бага

  1. Оставить пустым инпут "Category name"
  2. Кликнуть на кнопку "Create"

  1. Ввести в инпут "Category name" один или несколько пробелов
  2. Кликнуть на кнопку "Create"

Ожидаемое поведение
Отображается уведомление об ошибке

Фактический результат
Система принимает пустое название категории

Видео
Добавление категории с пустым значением в инпуте:
empty

Добавление категорий с пробелами в инпуте:
spaces

[BUG] 400 ошибка при переходе из экрана регистрации на экран логина, будучи авторизованным

Предусловие
Пример - "юзер авторизован", выйти из экрана трат. На странице авторизации кликнуть на кнопку регистрации и затем кликнуть снизу на кнопку "Sign in!".

Шаги для воспроизведения бага

  1. Авторизоваться
  2. Выйти из экрана трат на страницу авторизацию, по кнопку сверху справа
  3. Зайти на страницу регистрации
  4. Кликнуть на кнопку "Sign in!"

Ожидаемое поведение
Переход на страницу с логином или сразу на личную страницу трат.

Фактический результат
Белый экран с ошибкой:
"Whitelabel Error Page"
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Feb 05 22:26:47 GET 2023
There was an unexpected error (type=Bad Request, status=400).

Скриншоты/ Видео
Ошибка

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.