using TeleWave.Application.Common.Models;
namespace TeleWave.Application.Common.Interfaces;
public sealed record CurrentUserProfile(Guid Id, string UserName, Guid RoleId, string Role, bool IsBlocked);
public sealed record UserSummaryDto(
Guid Id,
string UserName,
string Role,
bool IsBlocked,
DateTimeOffset CreatedAt
);
public interface IIdentityService
{
/// Создаёт пользователя и назначает роль по умолчанию (см. Infrastructure/Identity/RoleNames).
Task> CreateUserAsync(
string userName,
string password,
CancellationToken cancellationToken
);
Task> ValidateCredentialsAsync(
string userName,
string password,
CancellationToken cancellationToken
);
Task GetProfileAsync(Guid userId, CancellationToken cancellationToken);
Task ChangePasswordAsync(
Guid userId,
string currentPassword,
string newPassword,
CancellationToken cancellationToken
);
Task ChangeUserNameAsync(
Guid userId,
string newUserName,
CancellationToken cancellationToken
);
/// Удаляет аккаунт (самоудаление или удаление админом).
Task DeleteUserAsync(Guid userId, CancellationToken cancellationToken);
Task BlockUserAsync(Guid userId, CancellationToken cancellationToken);
Task UnblockUserAsync(Guid userId, CancellationToken cancellationToken);
Task> ListUsersAsync(
int page,
int pageSize,
string? search,
Guid? roleId,
bool? isBlocked,
CancellationToken cancellationToken
);
Task GetUserAsync(Guid userId, CancellationToken cancellationToken);
}