Перейти к содержанию

User Service

User Service отвечает за пользователей, организации, группы и аутентификацию.

Обзор

Параметр Значение
Порт 8081
База данных postgres-user (dedicated)
Схема user_service

Ответственности

  • Регистрация и аутентификация пользователей
  • Telegram — основной способ
  • Email/password — альтернативный способ
  • Управление профилями
  • Запросы на создание организаций (одобрение админом)
  • Создание и управление организациями
  • Роли: Владелец (OWNER), Модератор (MODERATOR)
  • Группы для приватных событий
  • JWT token generation

API Endpoints

Authentication

Method Endpoint Description
POST /api/v1/auth/telegram Вход/регистрация через Telegram (основной)
POST /api/v1/auth/register Регистрация по email (альтернативный)
POST /api/v1/auth/login Вход по email/password (альтернативный)
POST /api/v1/auth/refresh Обновление токена
POST /api/v1/auth/logout Выход
POST /api/v1/auth/forgot-password Запрос сброса пароля
POST /api/v1/auth/reset-password Сброс пароля
POST /api/v1/auth/verify-email Подтверждение email

Users

Method Endpoint Description
GET /api/v1/users/me Текущий пользователь
PUT /api/v1/users/me Обновление профиля
PUT /api/v1/users/me/password Смена пароля
DELETE /api/v1/users/me Удаление аккаунта

Organization Requests

Method Endpoint Description
POST /api/v1/organization-requests Подать запрос на создание
GET /api/v1/organization-requests Список запросов (админ)
POST /api/v1/organization-requests/{id}/approve Одобрить (админ)
POST /api/v1/organization-requests/{id}/reject Отклонить (админ)

Organizations

Method Endpoint Description
GET /api/v1/organizations Список организаций пользователя
POST /api/v1/organizations Создание организации (после одобрения)
GET /api/v1/organizations/{id} Детали организации
PUT /api/v1/organizations/{id} Обновление организации
DELETE /api/v1/organizations/{id} Удаление организации

Organization Members

Method Endpoint Description
GET /api/v1/organizations/{id}/members Список членов
POST /api/v1/organizations/{id}/invite Приглашение (через Telegram)
PUT /api/v1/organizations/{id}/members/{userId} Изменение роли
DELETE /api/v1/organizations/{id}/members/{userId} Удаление члена

Groups

Method Endpoint Description
GET /api/v1/organizations/{id}/groups Список групп организации
POST /api/v1/organizations/{id}/groups Создание группы
GET /api/v1/groups/{id} Детали группы
PUT /api/v1/groups/{id} Обновление группы
DELETE /api/v1/groups/{id} Удаление группы
POST /api/v1/groups/{id}/invite Инвайт в группу
GET /api/v1/groups/{id}/members Члены группы
POST /api/v1/groups/join/{inviteCode} Вступить по инвайт-коду

Модель данных

erDiagram
    users ||--o{ organization_members : "belongs to"
    users ||--o{ organization_requests : "requests"
    organizations ||--o{ organization_members : "has"
    organizations ||--o{ groups : "has"
    groups ||--o{ group_members : "has"
    users ||--o{ group_members : "belongs to"
    users ||--o{ refresh_tokens : "has"

    users {
        uuid id PK
        string telegram_id UK
        string email UK
        string password_hash
        string first_name
        string last_name
        boolean email_verified
        timestamp last_login_at
        timestamp created_at
        timestamp deleted_at
    }

    organization_requests {
        uuid id PK
        uuid user_id FK
        string name
        string slug
        string description
        string status
        uuid reviewed_by FK
        timestamp reviewed_at
        timestamp created_at
    }

    organizations {
        uuid id PK
        string name
        string slug UK
        timestamp created_at
        timestamp deleted_at
    }

    organization_members {
        uuid id PK
        uuid organization_id FK
        uuid user_id FK
        string role
        uuid invited_by FK
        timestamp joined_at
    }

    groups {
        uuid id PK
        uuid organization_id FK
        string name
        string description
        string invite_code UK
        uuid created_by FK
        timestamp created_at
    }

    group_members {
        uuid id PK
        uuid group_id FK
        uuid user_id FK
        uuid invited_by FK
        timestamp joined_at
    }

    refresh_tokens {
        uuid id PK
        uuid user_id FK
        string token_hash
        timestamp expires_at
        boolean revoked
    }

Роли и права

Роль Описание
OWNER Владелец организации — полный контроль, удаление
MODERATOR Модератор — управление событиями, check-in, аналитика

Бизнес-правила: - OWNER может быть только один - OWNER не может изменить свою роль - Только OWNER может назначать/снимать роли

JWT Tokens

Access Token

Поле Описание
sub UUID пользователя
email Email пользователя
tenantId UUID текущей организации
roles Роли в текущей организации
exp Срок действия (15 минут)

Refresh Token

  • Хранится в БД (hashed)
  • Срок жизни: 7 дней
  • One-time use (rotation)

События (RabbitMQ)

Публикуемые

Event Описание
user.registered Пользователь зарегистрировался
user.updated Профиль обновлён
organization.request.created Запрос на создание организации
organization.created Организация создана
organization.member.added Член добавлен в организацию
group.created Группа создана
group.member.added Член добавлен в группу

Потребляемые

Нет — User Service не подписывается на события других сервисов.

Дальнейшее чтение