PageRenderTime 49ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/Admin/MsSql.AspNet.Identity/Repositories/System/UserRepository.cs

https://gitlab.com/thanhhung95/managecourse
C# | 292 lines | 243 code | 35 blank | 14 comment | 17 complexity | 196557bd77e124b50607dd592a16da85 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Data.SqlClient;
  5. using System.Linq;
  6. namespace Manager.DataLayer.Repositories
  7. {
  8. public class UserRepository<TUser> where TUser : IdentityUser
  9. {
  10. private readonly string _connectionString;
  11. public UserRepository(string connectionString)
  12. {
  13. _connectionString = connectionString;
  14. }
  15. public void Insert(TUser user)
  16. {
  17. using (var conn = new SqlConnection(_connectionString))
  18. {
  19. var parameters = new Dictionary<string, object>
  20. {
  21. {"@Id", user.Id},
  22. {"@Email", (object) user.Email ?? DBNull.Value},
  23. {"@EmailConfirmed", user.EmailConfirmed},
  24. {"@PasswordHash", (object) user.PasswordHash ?? DBNull.Value},
  25. {"@SecurityStamp", (object) user.SecurityStamp ?? DBNull.Value},
  26. {"@PhoneNumber", (object) user.PhoneNumber ?? DBNull.Value},
  27. {"@PhoneNumberConfirmed", user.PhoneNumberConfirmed},
  28. {"@TwoFactorEnabled", user.TwoFactorEnabled},
  29. {"@LockoutEndDateUtc", (object) user.LockoutEndDateUtc ?? DBNull.Value},
  30. {"@LockoutEnabled", user.LockoutEnabled},
  31. {"@AccessFailedCount", user.AccessFailedCount},
  32. {"@UserName", user.UserName},
  33. {"@ParentId", user.ParentId}
  34. };
  35. MsSqlHelper.ExecuteNonQuery(conn, @"INSERT INTO AspNetUsers(Id,Email,EmailConfirmed,PasswordHash,SecurityStamp,
  36. PhoneNumber,PhoneNumberConfirmed,TwoFactorEnabled,LockoutEndDateUtc,LockoutEnabled,AccessFailedCount,UserName,CreatedDateUtc,ParentId)
  37. VALUES(@Id,@Email,@EmailConfirmed,@PasswordHash,@SecurityStamp,@PhoneNumber,@PhoneNumberConfirmed,
  38. @TwoFactorEnabled,@LockoutEndDateUtc,@LockoutEnabled,@AccessFailedCount,@UserName, GETUTCDATE(),@ParentId)", parameters);
  39. if (!user.LockoutEnabled)
  40. {
  41. InsertHistory(user.ParentId, user.Id, 1, user.StaffId);
  42. }
  43. }
  44. }
  45. public void InsertHistory(int AgencyId, string UserId, int ActionType, int StaffId)
  46. {
  47. var parameterHistories = new Dictionary<string, object>
  48. {
  49. {"@AgencyId", AgencyId},
  50. {"@UserId", UserId},
  51. {"@ActionType", ActionType},
  52. {"@StaffId", StaffId}
  53. };
  54. if (AgencyId > 0)
  55. {
  56. using (var conn = new SqlConnection(_connectionString))
  57. {
  58. MsSqlHelper.ExecuteScalar(conn, CommandType.StoredProcedure,
  59. @"UserHistory_Insert", parameterHistories);
  60. }
  61. //var parameterLock = new Dictionary<string, object>
  62. //{
  63. // {"@UserId", UserId}
  64. //};
  65. //using (var conn = new SqlConnection(_connectionString))
  66. //{
  67. // MsSqlHelper.ExecuteNonQuery(conn, @"UPDATE User_History SET IsLocked = 1 WHERE 1=1
  68. // AND UserId = @UserId AND IsLocked = 0", parameterLock);
  69. //}
  70. //using (var conn = new SqlConnection(_connectionString))
  71. //{
  72. // MsSqlHelper.ExecuteNonQuery(conn, @"INSERT INTO User_History(AgencyId,UserId,CreatedTime,ActionType,StaffId) VALUES
  73. //(@AgencyId,@UserId,GETUTCDATE(),@ActionType,@StaffId)", parameterHistories);
  74. //}
  75. }
  76. }
  77. public void Delete(TUser user)
  78. {
  79. using (var conn = new SqlConnection(_connectionString))
  80. {
  81. var parameters = new Dictionary<string, object>
  82. {
  83. {"@Id", user.Id}
  84. };
  85. MsSqlHelper.ExecuteNonQuery(conn, @"DELETE FROM AspNetUsers WHERE Id=@Id", parameters);
  86. }
  87. if (!user.LockoutEnabled)
  88. {
  89. InsertHistory(user.ParentId, user.Id, 2, user.StaffId);
  90. }
  91. }
  92. public IQueryable<TUser> GetAll()
  93. {
  94. List<TUser> users = new List<TUser>();
  95. using (var conn = new SqlConnection(_connectionString))
  96. {
  97. var reader = MsSqlHelper.ExecuteReader(conn, CommandType.Text,
  98. @"SELECT Id,Email,EmailConfirmed,
  99. PasswordHash,SecurityStamp,PhoneNumber,PhoneNumberConfirmed,TwoFactorEnabled,
  100. LockoutEndDateUtc,LockoutEnabled,AccessFailedCount,UserName,CreatedDateUtc FROM AspNetUsers", null);
  101. while (reader.Read())
  102. {
  103. var user = (TUser)Activator.CreateInstance(typeof(TUser));
  104. user.Id = reader["Id"].ToString();
  105. user.Email = reader["Email"].ToString();
  106. user.EmailConfirmed = Convert.ToBoolean(reader["EmailConfirmed"]);
  107. user.PasswordHash = reader["PasswordHash"].ToString();
  108. user.SecurityStamp = reader["SecurityStamp"].ToString();
  109. user.PhoneNumber = reader["PhoneNumber"].ToString();
  110. user.PhoneNumberConfirmed = Convert.ToBoolean(reader["PhoneNumberConfirmed"]);
  111. user.TwoFactorEnabled = Convert.ToBoolean(reader["TwoFactorEnabled"]);
  112. user.LockoutEndDateUtc = reader["LockoutEndDateUtc"] == DBNull.Value ? null : (DateTime?)reader["LockoutEndDateUtc"];
  113. user.LockoutEnabled = Convert.ToBoolean(reader["LockoutEnabled"]);
  114. user.AccessFailedCount = Convert.ToInt32(reader["AccessFailedCount"]);
  115. user.UserName = reader["UserName"].ToString();
  116. user.CreatedDateUtc = (DateTime)reader["CreatedDateUtc"];
  117. users.Add(user);
  118. }
  119. }
  120. return users.AsQueryable<TUser>();
  121. }
  122. public TUser GetById(string userId)
  123. {
  124. var user = (TUser)Activator.CreateInstance(typeof(TUser));
  125. using (var conn = new SqlConnection(_connectionString))
  126. {
  127. var parameters = new Dictionary<string, object>
  128. {
  129. {"@Id", userId}
  130. };
  131. var reader = MsSqlHelper.ExecuteReader(conn, CommandType.Text,
  132. @"SELECT Id,Email,EmailConfirmed,
  133. PasswordHash,SecurityStamp,PhoneNumber,PhoneNumberConfirmed,TwoFactorEnabled,
  134. LockoutEndDateUtc,LockoutEnabled,AccessFailedCount,UserName, CreatedDateUtc,ProviderId,StaffId FROM AspNetUsers WHERE Id=@Id", parameters);
  135. while (reader.Read())
  136. {
  137. user.Id = reader["Id"].ToString();
  138. user.Email = reader["Email"].ToString();
  139. user.EmailConfirmed = Convert.ToBoolean(reader["EmailConfirmed"]);
  140. user.PasswordHash = reader["PasswordHash"].ToString();
  141. user.SecurityStamp = reader["SecurityStamp"].ToString();
  142. user.PhoneNumber = reader["PhoneNumber"].ToString();
  143. user.PhoneNumberConfirmed = Convert.ToBoolean(reader["PhoneNumberConfirmed"]);
  144. user.TwoFactorEnabled = Convert.ToBoolean(reader["TwoFactorEnabled"]);
  145. user.LockoutEndDateUtc = reader["LockoutEndDateUtc"] == DBNull.Value ? null : (DateTime?)reader["LockoutEndDateUtc"];
  146. user.LockoutEnabled = Convert.ToBoolean(reader["LockoutEnabled"]);
  147. user.AccessFailedCount = Convert.ToInt32(reader["AccessFailedCount"]);
  148. user.UserName = reader["UserName"].ToString();
  149. user.CreatedDateUtc = (DateTime)reader["CreatedDateUtc"];
  150. user.ProviderId = Convert.ToInt32(reader["ProviderId"]);
  151. user.StaffId = Convert.ToInt32(reader["StaffId"]);
  152. }
  153. }
  154. return user;
  155. }
  156. public TUser GetByName(string userName)
  157. {
  158. var user = (TUser)Activator.CreateInstance(typeof(TUser));
  159. using (var conn = new SqlConnection(_connectionString))
  160. {
  161. var parameters = new Dictionary<string, object>
  162. {
  163. {"@UserName", userName}
  164. };
  165. var reader = MsSqlHelper.ExecuteReader(conn, CommandType.Text,
  166. @"SELECT Id,Email,EmailConfirmed,
  167. PasswordHash,SecurityStamp,PhoneNumber,PhoneNumberConfirmed,TwoFactorEnabled,
  168. LockoutEndDateUtc,LockoutEnabled,AccessFailedCount,UserName, CreatedDateUtc FROM AspNetUsers WHERE UserName=@UserName", parameters);
  169. while (reader.Read())
  170. {
  171. user.Id = reader["Id"].ToString();
  172. user.Email = reader["Email"].ToString();
  173. user.EmailConfirmed = Convert.ToBoolean(reader["EmailConfirmed"]);
  174. user.PasswordHash = reader["PasswordHash"].ToString();
  175. user.SecurityStamp = reader["SecurityStamp"].ToString();
  176. user.PhoneNumber = reader["PhoneNumber"].ToString();
  177. user.PhoneNumberConfirmed = Convert.ToBoolean(reader["PhoneNumberConfirmed"]);
  178. user.TwoFactorEnabled = Convert.ToBoolean(reader["TwoFactorEnabled"]);
  179. user.LockoutEndDateUtc = reader["LockoutEndDateUtc"] == DBNull.Value ? null : (DateTime?)reader["LockoutEndDateUtc"];
  180. user.LockoutEnabled = Convert.ToBoolean(reader["LockoutEnabled"]);
  181. user.AccessFailedCount = Convert.ToInt32(reader["AccessFailedCount"]);
  182. user.UserName = reader["UserName"].ToString();
  183. user.CreatedDateUtc = (DateTime)reader["CreatedDateUtc"];
  184. }
  185. }
  186. return user;
  187. }
  188. public TUser GetByEmail(string email)
  189. {
  190. var user = (TUser)Activator.CreateInstance(typeof(TUser));
  191. using (var conn = new SqlConnection(_connectionString))
  192. {
  193. var parameters = new Dictionary<string, object>
  194. {
  195. {"@Email", email}
  196. };
  197. var reader = MsSqlHelper.ExecuteReader(conn, CommandType.Text,
  198. @"SELECT Id,Email,EmailConfirmed,
  199. PasswordHash,SecurityStamp,PhoneNumber,PhoneNumberConfirmed,TwoFactorEnabled,
  200. LockoutEndDateUtc,LockoutEnabled,AccessFailedCount,UserName, CreatedDateUtc FROM AspNetUsers WHERE Email=@Email", parameters);
  201. while (reader.Read())
  202. {
  203. user.Id = reader["Id"].ToString();
  204. user.Email = reader["Email"].ToString();
  205. user.EmailConfirmed = Convert.ToBoolean(reader["EmailConfirmed"]);
  206. user.PasswordHash = reader["PasswordHash"].ToString();
  207. user.SecurityStamp = reader["SecurityStamp"].ToString();
  208. user.PhoneNumber = reader["PhoneNumber"].ToString();
  209. user.PhoneNumberConfirmed = Convert.ToBoolean(reader["PhoneNumberConfirmed"]);
  210. user.TwoFactorEnabled = Convert.ToBoolean(reader["TwoFactorEnabled"]);
  211. user.LockoutEndDateUtc = reader["LockoutEndDateUtc"] == DBNull.Value ? null : (DateTime?)reader["LockoutEndDateUtc"];
  212. user.LockoutEnabled = Convert.ToBoolean(reader["LockoutEnabled"]);
  213. user.AccessFailedCount = Convert.ToInt32(reader["AccessFailedCount"]);
  214. user.UserName = reader["UserName"].ToString();
  215. user.CreatedDateUtc = (DateTime)reader["CreatedDateUtc"];
  216. }
  217. }
  218. return user;
  219. }
  220. public void Update(TUser user)
  221. {
  222. if (user.LockoutEnabled && user.LockoutEndDateUtc != null)
  223. {
  224. InsertHistory(user.ParentId, user.Id, 2, user.StaffId);
  225. }
  226. if (!user.LockoutEnabled && user.LockoutEndDateUtc != null)
  227. {
  228. user.LockoutEndDateUtc = null;
  229. InsertHistory(user.ParentId, user.Id, 1, user.StaffId);
  230. }
  231. using (var conn = new SqlConnection(_connectionString))
  232. {
  233. var parameters = new Dictionary<string, object>
  234. {
  235. {"@NewId", user.Id},
  236. {"@Email", (object) user.Email ?? DBNull.Value},
  237. {"@EmailConfirmed", user.EmailConfirmed},
  238. {"@PasswordHash", (object) user.PasswordHash ?? DBNull.Value},
  239. {"@SecurityStamp", (object) user.SecurityStamp ?? DBNull.Value},
  240. {"@PhoneNumber", (object) user.PhoneNumber ?? DBNull.Value},
  241. {"@PhoneNumberConfirmed", user.PhoneNumberConfirmed},
  242. {"@TwoFactorEnabled", user.TwoFactorEnabled},
  243. {"@LockoutEndDateUtc", (object) user.LockoutEndDateUtc ?? DBNull.Value},
  244. {"@LockoutEnabled", user.LockoutEnabled},
  245. {"@AccessFailedCount", user.AccessFailedCount},
  246. {"@UserName", user.UserName},
  247. {"@Id", user.Id},
  248. {"@ProviderId", user.ProviderId},
  249. };
  250. MsSqlHelper.ExecuteNonQuery(conn, @"UPDATE AspNetUsers
  251. SET Id = @NewId,Email=@Email,EmailConfirmed=@EmailConfirmed,PasswordHash=@PasswordHash,SecurityStamp=@SecurityStamp,PhoneNumber=@PhoneNumber,PhoneNumberConfirmed=@PhoneNumberConfirmed,
  252. TwoFactorEnabled=@TwoFactorEnabled,LockoutEndDateUtc=@LockoutEndDateUtc,LockoutEnabled=@LockoutEnabled,AccessFailedCount=@AccessFailedCount,UserName=@UserName,ProviderId=@ProviderId
  253. WHERE Id=@Id", parameters);
  254. }
  255. }
  256. }
  257. }