Сервис управляет пользователями платформы: созданием, поиском, изменением контактных данных (телефон/email), базовыми профайлами (имя, фото, дата рождения) и их доступами. Контроль доступа - по данным текущей сессии (NBSession). Сервис предоставляет единый источник истины по пользовательским записям для остальных доменов.
GetMyUserAsync(): User - получить текущего пользователя по сессии; при отсутствии - исключение.GetUserAsync(userId): User - получить пользователя по Id (исключение, если не найден).GetUsersAsync(userIds[]): User[] - получить список пользователей по Id.GetUserOrNullAsync(userId): User? - получить пользователя или null, если не найден.GetUserOrNullByPhoneAsync(phone): User? - найти пользователя по номеру телефона.SearchUsersAsync(dataParted): User[] - поиск по части имени или телефона.SearchUsersByAccessesAsync(include[], exclude[], includeWithNoAccess): User[] - фильтрация по доступам (с опцией включать бездоступных).GetUsersWithAccessesAsync(): User[] - выборка всех пользователей с какими-либо доступами.CreateUserByPhoneAsync(phone): User - создать пользователя по номеру телефона.DeleteUserAsync(userId): void - пометить пользователя как удалённого.SetUserData(user: UserData): User - обновить данные профиля (имя, фото, дата рождения).ChangeUserPhoneAsync(userId, phone): User - изменить телефон.ChangeUserEmailAsync(userId, email): User - изменить email.SetUserAccess(userId, access): void - добавить доступ.UnsetUserAccess(userId, accessType): void - удалить доступ.SetUserAllAccesses(userId, accesses[]): void - заменить полный набор доступов.ProfilesService не является инициатором взаимодействий с другими сервисами. Другие сервисы (как и пользователи), у которых есть соответвующие права доступа могут вызывать любые методы.
Справочно: AuthService может создавать пользователя, получать данные пользователя, менять номер телефона.
long Id //Идентификатор, ключевое поле
DateTimeOffset Created //Когда создан
bool IsDeleted //Флаг удаления
string Name //Имя пользователя
string PhotoFile //Наименование файла иконки
DateTimeOffset? BirthDay //Дата рождения
Authenticator[] Auths //Набор аутентификаторов (телефон, емайл), более подробнее см. код
Access[] Accesses //Набор доступов ([доступ](/common/accessTypeEnum.md) и на сколько выдан)
Лёгкая DTO для обновления основных полей пользователя: Id, Name, PhotoFile, BirthDay. Содержит фабрику FromUser(User user) для удобного маппинга из полной модели. Используется в API SetUserData(UserData user).
long Id //Идентификатор, ключевое поле
string Name //Имя пользователя
string PhotoFile //Наименование файла иконки
DateTimeOffset? BirthDay //Дата рождения
User напрямую.GetUserOrNullByPhoneAsync → CreateUserByPhoneAsync, как в AuthService, гарантирует отсутствие дублей по номеру.DeleteUserAsync помечает пользователя как удалённого (IsDeleted = true в модели), что позволяет сохранять историю операций и ссылочную целостность. (Поле IsDeleted есть в User.)ChangeUserPhoneAsync/ChangeUserEmailAsync обновляют каналы аутентификации и связи, чтобы GetPhone()/GetEmail() возвращали корректные данные.Содержит таблицы и индексы
-- Migration 1
users (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
Created NUMBER NOT NULL,
IsDeleted BOOLEAN NOT NULL DEFAULT FALSE,
Name TEXT NOT NULL,
PhotoFile TEXT NOT NULL,
BirthDay NUMBER DEFAULT NULL,
Auths TEXT NOT NULL,
Accesses TEXT NOT NULL
)