{"id":19670801,"url":"https://github.com/fivan999/anika","last_synced_at":"2026-05-01T20:32:57.167Z","repository":{"id":253582082,"uuid":"836694544","full_name":"fivan999/ANIKA","owner":"fivan999","description":"ANIKA - система хранения, обработки и передачи действий клиентов компаний-партнёров","archived":false,"fork":false,"pushed_at":"2024-09-14T15:18:54.000Z","size":2459,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-27T04:50:02.958Z","etag":null,"topics":["auth","fastapi","jwt","postgres"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fivan999.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-01T11:13:49.000Z","updated_at":"2024-09-14T15:18:57.000Z","dependencies_parsed_at":"2024-08-17T22:23:01.315Z","dependency_job_id":"330803dc-8d48-40da-81fe-dee80ecef912","html_url":"https://github.com/fivan999/ANIKA","commit_stats":null,"previous_names":["fivan999/expohack","fivan999/anika"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fivan999/ANIKA","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fivan999%2FANIKA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fivan999%2FANIKA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fivan999%2FANIKA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fivan999%2FANIKA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fivan999","download_url":"https://codeload.github.com/fivan999/ANIKA/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fivan999%2FANIKA/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32512665,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auth","fastapi","jwt","postgres"],"created_at":"2024-11-11T17:07:14.296Z","updated_at":"2026-05-01T20:32:57.125Z","avatar_url":"https://github.com/fivan999.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ANIKA - система хранения, обработки и передачи действий клиентов компаний-партнёров\n\n## Содержание\n\n- [ANIKA - система хранения, обработки и передачи действий клиентов компаний-партнёров](#anika---система-хранения-обработки-и-передачи-действий-клиентов-компаний-партнёров)\n  - [Содержание](#содержание)\n  - [Презентация](#презентация)\n  - [О проекте](#о-проекте)\n    - [Описание и основные возможности](#описание-и-основные-возможности)\n    - [Пример использования ANIKA](#пример-использования-anika)\n    - [Преимущества ANIKA](#преимущества-anika)\n  - [Архитектура](#архитектура)\n    - [Общий обзор](#общий-обзор)\n    - [Компоненты системы](#компоненты-системы)\n      - [1. Nginx (API Gateway)](#1-nginx-api-gateway)\n      - [2. Микросервис авторизации](#2-микросервис-авторизации)\n      - [3. Микросервис топиков](#3-микросервис-топиков)\n      - [4. Микросервис сообщений](#4-микросервис-сообщений)\n    - [Взаимодействие между микросервисами](#взаимодействие-между-микросервисами)\n    - [Схема взаимодействия](#схема-взаимодействия)\n  \n## [Презентация](/presentation.pptx)\n\n## О проекте\n\n### Описание и основные возможности\n\n**Топики для обмена данными**:\nКаждая компания-партнер может создать несколько \"топиков\" - тематических каналов, в которые через API она будет отправлять данные, потенциально полезные для других партнеров. Топики позволяют структурировать данные и упрощают процесс их обмена.\n\n**Контроль доступа**:\nКомпания, отправляющая данные, может устанавливать список партнеров, которым разрешено просматривать данные из определенного топика. Это обеспечит безопасность и конфиденциальность передаваемой информации.\n\n**Автоматическое получение данных**:\nПартнеры, которым разрешен доступ к данным из топика, могут подписаться на автоматическое получение этих данных. Данные будут отправляться на указанный API-endpoint, что позволяет моментально интегрировать их в собственные системы и оперативно реагировать на новые возможности.\n\n### Пример использования ANIKA\n\n**Выбор автомобиля**:\nКлиент решил приобрести автомобиль в компании \"АвтоЭкспресс\". Он посетил автосалон и выбрал подходящую машину.\n\n**Отправка данных**:\n\"АвтоЭкспресс\" отправляет информацию о выборе клиента в топик \"Выбор машины\" на платформе ANIKA.\n\n**Получение данных**:\nБанк \"ЭкспоБанк\", подписанный на этот топик, мгновенно получает данные на свой API-endpoint. Теперь \"ЭкспоБанк\" знает, что этот клиент заинтересован в покупке автомобиля и может предложить ему кредит на выгодных условиях.\n\n### Преимущества ANIKA\n\n- **Удобство и эффективность**: Система топиков и автоматическая рассылка данных упрощают обмен информацией между партнерами.\n- **Безопасность и конфиденциальность**: Гибкие настройки доступа обеспечивают надежную защиту данных.\n- Быстрая интеграция: API-интерфейсы позволяют легко интегрировать полученные данные в существующие системы и приложения.\n- **Существенное снижение расходов на лидогенерацию**: ANIKA помогает компаниям уменьшить затраты на привлечение новых клиентов. Благодаря автоматической передаче данных и интеграции с партнерскими системами, компании могут оперативно реагировать на действия клиентов и предлагать им релевантные продукты и услуги. Это снижает необходимость в дорогостоящих маркетинговых кампаниях и рекламных стратегиях, направленных на привлечение новых клиентов, поскольку данные о потенциальных клиентах поступают напрямую от партнеров.\n\nТаким образом, ANIKA решает проблему коммуникации между компаниями-партнерами и дает им возможность быстро привлекать подходящих для них клиентов.\n\n## Архитектура\n\n### Общий обзор\n\nСистема состоит из нескольких ключевых компонентов, работающих в связке для обработки запросов пользователей и выполнения необходимых операций. Входящие запросы проходят через API Gateway (Nginx), который проксирует их на соответствующие микросервисы.\n\n### Компоненты системы\n\n#### 1. Nginx (API Gateway)\n\n- **Функция**: Принимает все входящие HTTP-запросы от клиентов и проксирует их в соответствующие микросервисы.\n- **Процесс**:\n  1. Получает запрос от клиента.\n  2. Прокси запрос на микросервис авторизации для проверки подлинности.\n  3. Получает user_id и partner_id из микросервиса авторизации.\n  4. Добавляет user_id и partner_id в заголовки запроса.\n  5. Прокси запрос в нужный микросервис для выполнения операции.\n\n#### 2. Микросервис авторизации\n\n- **Функция**: Проверяет JWT токены и извлекает user_id и partner_id.\n- **Технологии**: PostgreSQL для хранения данных о пользователях.\n- **Процесс**:\n  1. Nginx отправляет запрос с JWT токеном в микросервис авторизации.\n  2. Микросервис декодирует и проверяет токен.\n  3. Извлекает user_id и partner_id из токена.\n  4. Возвращает user_id и partner_id в ответе.\n  5. Nginx добавляет эти данные в заголовки запроса и перенаправляет его дальше.\n\n#### 3. Микросервис топиков\n\n- **Функция**: Управляет темами (CRUD операции) и взаимодействует с PostgreSQL.\n- **Технологии**: PostgreSQL для хранения данных о темах.\n- **Процесс**:\n  1. Запросы, связанные с операциями по темам, перенаправляются через Nginx в микросервис топиков.\n  2. Микросервис выполняет соответствующую CRUD операцию в базе данных PostgreSQL.\n  3. Возвращает результат операции обратно через Nginx к клиенту.\n\n#### 4. Микросервис сообщений\n\n- **Функция**: Обрабатывает сообщения (отправка, поиск) и взаимодействует с MongoDB.\n- **Технологии**: MongoDB для хранения сообщений.\n- **Процесс**:\n  1. Запросы на отправку или поиск сообщений перенаправляются через Nginx в микросервис сообщений.\n  2. Микросервис выполняет необходимую операцию с использованием MongoDB.\n  3. Для отправки сообщений микросервис сообщений использует вебхуки, полученные через микросервис топиков. Все сообщения отправляются по необходимым ссылкам вебхуков.\n  4. Если требуется, микросервис сообщений взаимодействует с микросервисом топиков для получения информации о доступных темах и правах доступа.\n  5. Результат операции возвращается клиенту через Nginx.\n\n### Взаимодействие между микросервисами\n\n- **Микросервис сообщений и микросервис топиков**:\n  - Микросервис сообщений использует вебхуки, предоставленные микросервисом топиков, для отправки сообщений.\n  - Микросервис сообщений может запросить информацию о темах, правах доступа и других данных, связанных с темами, у микросервиса топиков.\n  \n- **Отсутствие взаимодействия**:\n  - Микросервис авторизации изолирован от других микросервисов и не взаимодействует напрямую с микросервисом топиков или микросервисом сообщений.\n\n### Схема взаимодействия\n\n1. **Запросы от клиента**:\n   - Клиент → Nginx (API Gateway)\n   - Nginx → Микросервис авторизации (проверка JWT токена)\n   - Микросервис авторизации → Nginx (response с user_id и partner_id)\n   - Nginx → Микросервис топиков или Микросервис сообщений (в зависимости от типа запроса)\n\n2. **Микросервис топиков**:\n   - Микросервис топиков → База данных PostgreSQL\n   - База данных PostgreSQL → Микросервис топиков (response)\n   - Микросервис топиков → Nginx (response)\n\n3. **Микросервис сообщений**:\n   - Микросервис сообщений → База данных MongoDB\n   - Микросервис сообщений → Микросервис топиков (для получения вебхуков, пермишенов, топиков, если требуется)\n   - Микросервис топиков → Микросервис сообщений (вебхуки)\n   - Микросервис сообщений → Nginx (response)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffivan999%2Fanika","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffivan999%2Fanika","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffivan999%2Fanika/lists"}