Сервис-пользователей.md


Назначение

Будет хранить информацию о пользователях и связанные с ними данные.

Хранимые данные

  • паспортные данные
  • ИНН
  • список счетов пользователей

Реализация

БД

Таблица паспортов (passport)

passport_uuid passport_series passport_number name surname patronimic birth_date birth_location pick_up_point authority authority_date registration_adress
char(16) char(4) char(6) varchar(32) varchar(32) varchar(32) timestamp varchar(256) varchar(256) char(7) timestamp varchar(256)
  • passport_uuid - уникальный первичный ключ в формате uuid4
  • passport_series - серия паспорта, состоящая из 4 цифр
  • passport_number - номер паспорта, состоящий из 6 цифр
  • name - имя
  • surname - фамилия
  • patronimic - отчество
  • birth_date - дата рождения в виде строки формата “yyyy-MM-dd”
  • birth_location - место рождения в виде строки
  • pick_up_point - место выдачи паспорта в виде строки
  • authority - код пункта выдачи
  • authority_date - дата выдачи в виде строки формата “yyyy-MM-dd”
  • registration_adress - место регистрации прописки в виде строки

(passport_series, passport_number, authority) - уникальный набор значений

Таблица пользователей (users)

user_uuid passport_uuid user_inn user_accounts
char(16) char(16) char(20) json
  • user_uuid - уникальный первичный ключ формата uuid4
  • passport_uuid - уникальный внешний ключ из таблицы passport
  • user_inn - ИНН пользователя, представляющий из себя строку из 20 цифр
  • user_accounts имеет следующую структуру:
{
    "accounts": [
        "uuid_1",
        "uuid_2",
        ...
        "uuid_n"
    ]
}

Запросы к БД

  • добавить пользователя с паспортом
    • имя функции: add_user
    • параметры: все параметры, кроме uuid-ов
    • ответ: -
  • обновить паспорт пользователя
    • имя функции: update_passport
    • параметры: все паспортные данные
    • ответ: -
  • получить данные пользователя
    • имя функции: get_users_data
    • параметры: uuid пользователя
    • ответ: все данные пользователя
  • получить список счетов пользователя
    • имя функции: get_users_accounts
    • параметры: uuid пользователя
    • ответ: json со всеми счетами пользователя
  • добавить счёт пользователя в его список счетов
    • имя функции: add_acc_to_user
    • параметры: uuid пользователя и счёт
    • ответ: -

Структуры kafka

Входные

  • простой запрос:
{
    "saga_uuid": "...",
    "event_uuid": "...",
    "operation_name": "...",
    "additional_info": {
        "user_uuid": "",
        "additional_data": "..."
  }
}
  • составной запрос:
{
    "saga_uuid": "...",
    "event_uuid": "...",
    "operation_name": "...",
    "passport_data": {
        "series": "...",
        "number": "...",
        "fcs": {
            "name": "...",
            "surname": "...",
            "patronymic": "..."
        },
        "birth_date": "...",
        "birth_location": "...",
        "pick_up_point": "...",
        "authority": "...",
        "authority_date": "...",
        "registration_adress": "..."
    },
    "iser_inn": "..."
}

Выходные

  • ошибка:
{
    "saga_uuid": "...",
    "event_uuid": "...",
    "operation_name": "...",
    "status": 0,
    "info": "..."
}
  • удача выполнения простой операции:
{
  "saga_uuid": "...",
  "event_uuid": "...",
  "operation_name": "...",
  "info": "..."
}
  • полный набор данных:
{
    "saga_uuid": "...",
    "event_uuid": "...",
    "operation_name": "...",
    "full_data": {
        "passport_data": {
            "series": "...",
            "number": "...",
            "fcs": {
                "name": "...",
                "surname": "...",
                "patronymic": "..."
            },
            "birth_date": "...",
            "birth_location": "...",
            "pick_up_point": "...",
            "authority": "...",
            "authority_date": "...",
            "registration_adress": "..."
        },
        "user_inn": "...",
        "accounts": [
            "...",
            ...
        ]
    }
}
  • список счетов:
{
    "saga_uuid": "...",
    "event_uuid": "...",
    "operation_name": "...",
    "accounts": [
        "...",
        ...
    ]
}

Ошибки

  • ошибки, связанные с grpc
    • 410 - ErrorUnkonwnOperationName
    • 400 - ErrorInvalidInputData
  • ошибки уровня бизнес логики
    • 310 - ErrorUnMarshal
    • 300 - ErrorMarshal
    • 220 - ErrorUserNotFound
    • 210 - ErrorUserExists
    • 200 - ErrorAccountAlreadyExists
  • ошибки, связанные с репозиторием
    • 100 - другие ошибки, связанные с транзакциями
    • 070 - ErrorAddPassport
    • 060 - ErrorAddUser
    • 050 - ErrorGetPassport
    • 040 - ErrorGetUser
    • 030 - ErrorUpdatePassport
    • 020 - ErrorUpdateAccounts
    • 010 - ErrorGetUsersAccounts

Выполняемые запросы

  • добавить пользователя
  • получить данные пользователя
  • обновить паспортные данные пользователя
  • добавить счёт в список счетов пользователя
  • получить список счетов пользователя

Добавить пользователя

  • Наименование запроса
    • add_user
  • Описание
    • Добавляет нового пользователя
  • Интерфейс входных данных:
    • составной запрос
  • Ответ на данный запрос:
    • удача выполнения простой операции
    • ошибка
  • Возможные статусы в ошибочном результате:
    • пока статусы не определены

Получить данные пользователя

  • Наименование запроса
    • get_user_data
  • Описание
    • Возвращает полный список данных пользователя, в том числе и список счетов
  • Интерфейс входных данных:
    • простой запрос
  • Ответ на данный запрос:
    • список счетов
    • ошибка
  • Возможные статусы в ошибочном результате:
    • пока статусы не определены

Обновить паспортные данные пользователя

  • Наименование запроса
    • update_users_passport
  • Описание
    • Обновляет паспортные данные пользователя
  • Интерфейс входных данных:
    • составной запрос
  • Ответ на данный запрос:
    • удача выполнения простой операции
    • ошибка
  • Возможные статусы в ошибочном результате:
    • пока статусы не определены

Добавить счёт в список счетов пользователя

  • Наименование запроса
    • add_user_account
  • Описание
  • Интерфейс входных данных:
    • простой запрос
  • Ответ на данный запрос:
    • удача выполнения простой операции
    • ошибка
  • Возможные статусы в ошибочном результате:
    • пока статусы не определены

Получить список счетов пользователя

  • Наименование запроса
    • get_users_accounts
  • Описание
  • Интерфейс входных данных:
    • простой запрос
  • Ответ на данный запрос:
    • список счетов
    • ошибка
  • Возможные статусы в ошибочном результате:
    • пока статусы не определены
Ссылка на вики репозиторий