Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,55 +34,32 @@ bool UpdateRole(Role role, bool updateRoleAgents = false)
#endregion

#region User
User? GetUserByEmail(string email)
=> throw new NotImplementedException();
User? GetUserByPhone(string phone, string type = UserType.Client, string regionCode = "CN")
=> throw new NotImplementedException();
User? GetAffiliateUserByPhone(string phone)
=> throw new NotImplementedException();
User? GetUserById(string id)
=> throw new NotImplementedException();
List<User> GetUserByIds(List<string> ids)
=> throw new NotImplementedException();
List<User> GetUsersByAffiliateId(string affiliateId)
=> throw new NotImplementedException();
User? GetUserByUserName(string userName)
=> throw new NotImplementedException();
void UpdateUserName(string userId, string userName)
=> throw new NotImplementedException();
Dashboard? GetDashboard(string userId = null)
=> throw new NotImplementedException();
void CreateUser(User user)
=> throw new NotImplementedException();
void UpdateExistUser(string userId, User user)
=> throw new NotImplementedException();
void UpdateUserVerified(string userId)
=> throw new NotImplementedException();
void AddDashboardConversation(string userId, string conversationId)
=> throw new NotImplementedException();
void RemoveDashboardConversation(string userId, string conversationId)
=> throw new NotImplementedException();
void UpdateDashboardConversation(string userId, DashboardConversation dashConv)
=> throw new NotImplementedException();
void UpdateUserVerificationCode(string userId, string verficationCode)
=> throw new NotImplementedException();
void UpdateUserPassword(string userId, string password)
=> throw new NotImplementedException();
void UpdateUserEmail(string userId, string email)
=> throw new NotImplementedException();
void UpdateUserPhone(string userId, string Iphone, string regionCode)
=> throw new NotImplementedException();
void UpdateUserIsDisable(string userId, bool isDisable)
=> throw new NotImplementedException();
void UpdateUsersIsDisable(List<string> userIds, bool isDisable)
=> throw new NotImplementedException();
PagedItems<User> GetUsers(UserFilter filter)
=> throw new NotImplementedException();
User? GetUserDetails(string userId, bool includeAgent = false)
=> throw new NotImplementedException();
bool UpdateUser(User user, bool updateUserAgents = false)
=> throw new NotImplementedException();

User? GetUserByEmail(string email) => throw new NotImplementedException();
User? GetUserByPhone(string phone, string type = UserType.Client, string regionCode = "CN") => throw new NotImplementedException();
User? GetUserByPhoneV2(string phone, string source = UserType.Internal, string regionCode = "CN") => throw new NotImplementedException();
User? GetAffiliateUserByPhone(string phone) => throw new NotImplementedException();
User? GetUserById(string id) => throw new NotImplementedException();
List<User> GetUserByIds(List<string> ids) => throw new NotImplementedException();
List<User> GetUsersByAffiliateId(string affiliateId) => throw new NotImplementedException();
User? GetUserByUserName(string userName) => throw new NotImplementedException();
void UpdateUserName(string userId, string userName) => throw new NotImplementedException();
Dashboard? GetDashboard(string id = null) => throw new NotImplementedException();
void CreateUser(User user) => throw new NotImplementedException();
void UpdateExistUser(string userId, User user) => throw new NotImplementedException();
void UpdateUserVerified(string userId) => throw new NotImplementedException();
void AddDashboardConversation(string userId, string conversationId) => throw new NotImplementedException();
void RemoveDashboardConversation(string userId, string conversationId) => throw new NotImplementedException();
void UpdateDashboardConversation(string userId, DashboardConversation dashConv) => throw new NotImplementedException();
void UpdateUserVerificationCode(string userId, string verficationCode) => throw new NotImplementedException();
void UpdateUserPassword(string userId, string password) => throw new NotImplementedException();
void UpdateUserEmail(string userId, string email) => throw new NotImplementedException();
void UpdateUserPhone(string userId, string Iphone, string regionCode) => throw new NotImplementedException();
void UpdateUserIsDisable(string userId, bool isDisable) => throw new NotImplementedException();
void UpdateUsersIsDisable(List<string> userIds, bool isDisable) => throw new NotImplementedException();
PagedItems<User> GetUsers(UserFilter filter) => throw new NotImplementedException();
List<User> SearchLoginUsers(User filter, string source = UserSource.Internal) =>throw new NotImplementedException();
User? GetUserDetails(string userId, bool includeAgent = false) => throw new NotImplementedException();
bool UpdateUser(User user, bool updateUserAgents = false) => throw new NotImplementedException();
#endregion

#region Agent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ public interface IUserService
{
Task<User> GetUser(string id);
Task<PagedItems<User>> GetUsers(UserFilter filter);
Task<List<User>> SearchLoginUsers(User filter);
Task<User?> GetUserDetails(string userId, bool includeAgent = false);
Task<bool> IsAdminUser(string userId);
Task<UserAuthorization> GetUserAuthorizations(IEnumerable<string>? agentIds = null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,23 @@ public partial class FileRepository
return query.FirstOrDefault();
}

public User? GetUserByPhoneV2(string phone, string? source = UserType.Internal, string regionCode = "CN")
{
var query = Users.Where(x => x.Phone == phone);

if (!string.IsNullOrEmpty(source))
{
query = query.Where(x => x.Type == source);
}

if (!string.IsNullOrEmpty(regionCode))
{
query = query.Where(x => x.RegionCode == regionCode);
}

return query.FirstOrDefault();
}

public User? GetAffiliateUserByPhone(string phone)
{
return Users.FirstOrDefault(x => x.Phone == phone && x.Type == UserType.Affiliate);
Expand Down Expand Up @@ -128,6 +145,65 @@ public PagedItems<User> GetUsers(UserFilter filter)
};
}

public List<User> SearchLoginUsers(User filter, string source = UserSource.Internal)
{
List<User> searchResult = new List<User>();

// search by filters
if (!string.IsNullOrWhiteSpace(filter.Id))
{
var curUser = Users.FirstOrDefault(x => x.Source == source && x.Id == filter.Id.ToLower());
User user = curUser != null ? curUser : null;
if (user != null)
{
searchResult.Add(user);
}
}
else if (!string.IsNullOrWhiteSpace(filter.Phone) && !string.IsNullOrWhiteSpace(filter.RegionCode))
{
string[] regionCodeData = filter.RegionCode.Split('|');
if (regionCodeData.Length == 2)
{
string phoneNoCallingCode = filter.Phone;
string phoneWithCallingCode = filter.Phone;
if (!filter.Phone.StartsWith('+'))
{
phoneNoCallingCode = filter.Phone;
phoneWithCallingCode = $"{regionCodeData[1]}{filter.Phone}";
}
else
{
phoneNoCallingCode = filter.Phone.Replace(regionCodeData[1], "");
}
searchResult = Users.AsQueryable()
.Where(x => x.Source == source && (x.Phone == phoneNoCallingCode || x.Phone == phoneWithCallingCode) && x.RegionCode == regionCodeData[0])
.ToList();
}
}
else if (!string.IsNullOrWhiteSpace(filter.Email))
{
var curUser = Users.AsQueryable().FirstOrDefault(x => x.Source == source && x.Email == filter.Email.ToString());
User user = curUser != null ? curUser : null;
if (user != null)
{
searchResult.Add(user);
}
}


if (searchResult.Count == 0 && !string.IsNullOrWhiteSpace(filter.UserName))
{
var curUser = Users.AsQueryable().FirstOrDefault(x => x.Source == source && x.UserName == filter.UserName);
User user = curUser != null ? curUser : null;
if (user != null)
{
searchResult.Add(user);
}
}

return searchResult;
}

public User? GetUserDetails(string userId, bool includeAgent = false)
{
if (string.IsNullOrWhiteSpace(userId)) return null;
Expand Down
93 changes: 57 additions & 36 deletions src/Infrastructure/BotSharp.Core/Users/Services/UserService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@ record = db.GetUserByUserName(user.UserName);

if (record == null && !string.IsNullOrWhiteSpace(user.Phone))
{
//if (user.Type != "internal")
//{
// record = db.GetUserByPhoneV2(user.Phone, regionCode: (string.IsNullOrWhiteSpace(user.RegionCode) ? "CN" : user.RegionCode));
//}

record = db.GetUserByPhone(user.Phone, regionCode: (string.IsNullOrWhiteSpace(user.RegionCode) ? "CN" : user.RegionCode));
}

Expand Down Expand Up @@ -477,11 +482,17 @@ public async Task<Token> ActiveUser(UserActivationModel model)
var id = model.UserName;
var db = _services.GetRequiredService<IBotSharpRepository>();
var record = id.Contains("@") ? db.GetUserByEmail(id) : db.GetUserByUserName(id);

if (record == null)
{
record = db.GetUserByPhone(id, regionCode: (string.IsNullOrWhiteSpace(model.RegionCode) ? "CN" : model.RegionCode));
}

//if (record == null)
//{
// record = db.GetUserByPhoneV2(id, regionCode: (string.IsNullOrWhiteSpace(model.RegionCode) ? "CN" : model.RegionCode));
//}

if (record == null)
{
return default;
Expand Down Expand Up @@ -570,6 +581,18 @@ public async Task<bool> VerifyEmailExisting(string email)
return false;
}

public async Task<List<User>> SearchLoginUsers(User filter)
{
if (filter == null)
{
return new List<User>();
}

var db = _services.GetRequiredService<IBotSharpRepository>();

return db.SearchLoginUsers(filter);
}

public async Task<bool> VerifyPhoneExisting(string phone, string regionCode)
{
if (string.IsNullOrWhiteSpace(phone))
Expand Down Expand Up @@ -609,21 +632,12 @@ public async Task<bool> SendVerificationCodeNoLogin(User user)
public async Task<User> ResetVerificationCode(User user)
{
var db = _services.GetRequiredService<IBotSharpRepository>();
User record = null;
if (!string.IsNullOrEmpty(user.Email) && !string.IsNullOrEmpty(user.Phone))
if (!string.IsNullOrWhiteSpace(user.Email) && !string.IsNullOrWhiteSpace(user.Phone))
{
return null;
}

if (!string.IsNullOrEmpty(user.Phone))
{
record = db.GetUserByPhone(user.Phone, regionCode: user.RegionCode);
}

if (!string.IsNullOrEmpty(user.Email))
{
record = db.GetUserByEmail(user.Email);
}
User? record = GetLoginUserByUniqueFilter(user, db);

if (record == null)
{
Expand All @@ -638,6 +652,36 @@ record = db.GetUserByEmail(user.Email);
return record;
}

private static User? GetLoginUserByUniqueFilter(User user, IBotSharpRepository db)
{
User? record = null;
if (!string.IsNullOrWhiteSpace(user.Id))
{
record = db.GetUserById(user.Id);
}

if (record == null && !string.IsNullOrWhiteSpace(user.Phone))
{
record = db.GetUserByPhone(user.Phone, regionCode: string.IsNullOrWhiteSpace(user.RegionCode) ? "CN" : user.RegionCode);
//if (record == null)
//{
// record = db.GetUserByPhoneV2(user.Phone, regionCode: string.IsNullOrWhiteSpace(user.RegionCode) ? "CN" : user.RegionCode);
//}
}

if (record == null && !string.IsNullOrWhiteSpace(user.Email))
{
record = db.GetUserByEmail(user.Email);
}

if (record == null && !string.IsNullOrWhiteSpace(user.UserName))
{
record = db.GetUserByUserName(user.UserName);
}

return record;
}

public async Task<bool> SendVerificationCodeLogin()
{
var db = _services.GetRequiredService<IBotSharpRepository>();
Expand Down Expand Up @@ -677,17 +721,7 @@ public async Task<bool> ResetUserPassword(User user)
}
var db = _services.GetRequiredService<IBotSharpRepository>();

User? record = null;

if (!string.IsNullOrEmpty(user.Email))
{
record = db.GetUserByEmail(user.Email);
}

if (!string.IsNullOrEmpty(user.Phone))
{
record = db.GetUserByPhone(user.Phone, regionCode: (string.IsNullOrWhiteSpace(user.RegionCode) ? "CN" : user.RegionCode));
}
User? record = GetLoginUserByUniqueFilter(user, db);

if (record == null)
{
Expand All @@ -712,20 +746,7 @@ public async Task<bool> SetUserPassword(User user)
}
var db = _services.GetRequiredService<IBotSharpRepository>();

User? record = null;

if (!string.IsNullOrEmpty(user.Id))
{
record = db.GetUserById(user.Id);
}
else if (!string.IsNullOrEmpty(user.Phone))
{
record = db.GetUserByPhone(user.Phone, regionCode: (string.IsNullOrWhiteSpace(user.RegionCode) ? "CN" : user.RegionCode));
}
else if (!string.IsNullOrEmpty(user.Email))
{
record = db.GetUserByEmail(user.Email);
}
User? record = GetLoginUserByUniqueFilter(user, db);

if (record == null)
{
Expand Down
Loading