You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

IRestaurantRoleRepository.cs 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using Microsoft.EntityFrameworkCore;
  2. using ProRestaurant.DBContexts;
  3. using ProRestaurant.Models.Accounts;
  4. using ProRestaurant.Models.Restaurants;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. namespace ProRestaurant.Repository.Restaurants
  8. {
  9. public interface IRestaurantRoleRepository
  10. {
  11. List<RestaurantRole> GetRoles(int restaurantId);
  12. RestaurantRole GetRole(int id);
  13. RestaurantRolePremission GetPremission(int id);
  14. void Insert(RestaurantRole Role);
  15. void Update(RestaurantRole Role);
  16. void Delete(RestaurantRole Role);
  17. void Save();
  18. }
  19. public class RestaurantRoleRepository : IRestaurantRoleRepository
  20. {
  21. private readonly DBContext dBContext;
  22. public RestaurantRoleRepository(DBContext db)
  23. {
  24. dBContext = db;
  25. }
  26. public void Delete(RestaurantRole Role)
  27. {
  28. dBContext.Remove(Role);
  29. Save();
  30. }
  31. public RestaurantRolePremission GetPremission(int id)
  32. {
  33. var prem = dBContext.RestaurantRolePremissions.Where(p => p.Id == id).FirstOrDefault();
  34. if (prem == null)
  35. {
  36. prem = new RestaurantRolePremission();
  37. }
  38. return prem;
  39. }
  40. public RestaurantRole GetRole(int id)
  41. {
  42. var role = dBContext.RestaurantRoles.Include("Permissions").Where(r => r.Id == id).FirstOrDefault();
  43. if (role == null)
  44. {
  45. role = new RestaurantRole
  46. {
  47. Permissions = new List<RestaurantRolePremission>(),
  48. Users = new List<User>()
  49. };
  50. }
  51. else
  52. {
  53. var userIDs = dBContext.RestaurantUserRestaurantRoles.Where(r => r.RestaurantRoleId == role.Id).Select(r => r.UserId).ToList();
  54. role.Users = dBContext.Users.Where(u => userIDs.Contains(u.Id)).ToList();
  55. }
  56. return role;
  57. }
  58. public List<RestaurantRole> GetRoles(int restaurantId)
  59. {
  60. return dBContext.RestaurantRoles.Where(r => r.RestaurantId == restaurantId).ToList();
  61. }
  62. public void Insert(RestaurantRole Role)
  63. {
  64. var users = Role.Users;
  65. Role.Users = null;
  66. dBContext.Add(Role);
  67. Save();
  68. foreach (var user in users)
  69. {
  70. var userRole = new RestaurantUserRestaurantRole
  71. {
  72. UserId = user.Id,
  73. RestaurantRoleId = Role.Id
  74. };
  75. dBContext.Add(userRole);
  76. }
  77. Save();
  78. }
  79. public void Save()
  80. {
  81. dBContext.SaveChanges();
  82. }
  83. public void Update(RestaurantRole Role)
  84. {
  85. var prems = Role.Permissions;
  86. Role.Permissions = null;
  87. var users = Role.Users;
  88. Role.Users = null;
  89. var usersList = dBContext.RestaurantUserRestaurantRoles.Where(r => r.RestaurantRoleId == Role.Id).Select(r => r.UserId).ToList();
  90. var userObjectList = users.Select(u => u.Id).ToList();
  91. foreach(var user in users)
  92. {
  93. if (!usersList.Contains(user.Id))
  94. {
  95. var userRole = new RestaurantUserRestaurantRole
  96. {
  97. UserId = user.Id,
  98. RestaurantRoleId = Role.Id
  99. };
  100. dBContext.Add(userRole);
  101. }
  102. }
  103. var remove = dBContext.RestaurantUserRestaurantRoles.Where(r => r.RestaurantRoleId == Role.Id && !userObjectList.Contains(r.UserId.Value)).ToList();
  104. foreach (var rem in remove)
  105. {
  106. dBContext.Remove(rem);
  107. }
  108. foreach (var prem in prems)
  109. {
  110. if (prem.Id == 0)
  111. {
  112. prem.RoleId = Role.Id;
  113. dBContext.Add(prem);
  114. }
  115. else
  116. {
  117. dBContext.Entry(prem).State = EntityState.Modified;
  118. }
  119. }
  120. dBContext.Entry(Role).State = EntityState.Modified;
  121. Save();
  122. }
  123. }
  124. }