ScientificReport
MembershipService.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Security.Claims;
11 
12 namespace ScientificReport.BLL.Services
13 {
15  {
16  private readonly MembershipRepository _membershipRepository;
17  private readonly UserProfileRepository _userProfileRepository;
18  private readonly DepartmentRepository _departmentRepository;
19 
21  {
22  _membershipRepository = new MembershipRepository(context);
23  _userProfileRepository = new UserProfileRepository(context);
24  _departmentRepository = new DepartmentRepository(context);
25  }
26 
27  public virtual IEnumerable<Membership> GetAll()
28  {
29  return _membershipRepository.All();
30  }
31 
32  public virtual IEnumerable<Membership> GetAllWhere(Func<Membership, bool> predicate)
33  {
34  return GetAll().Where(predicate);
35  }
36 
37  public virtual IEnumerable<Membership> GetItemsByRole(ClaimsPrincipal userClaims)
38  {
39  IEnumerable<Membership> items;
40  if (UserHelpers.IsAdmin(userClaims))
41  {
42  items = _membershipRepository.All();
43  }
44  else if (UserHelpers.IsHeadOfDepartment(userClaims))
45  {
46  var department = _departmentRepository.Get(r => r.Head.UserName == userClaims.Identity.Name);
47  items = _membershipRepository.AllWhere(m => department.Staff.Contains(m.User));
48  }
49  else
50  {
51  var user = _userProfileRepository.Get(u => u.UserName == userClaims.Identity.Name);
52  items = _membershipRepository.AllWhere(m => m.User.Id == user.Id);
53  }
54 
55  return items;
56  }
57 
58  public virtual IEnumerable<Membership> GetPageByRole(int page, int count, ClaimsPrincipal userClaims)
59  {
60  return GetItemsByRole(userClaims).Skip((page - 1) * count).Take(count).ToList();
61  }
62 
63  public virtual int GetCountByRole(ClaimsPrincipal userClaims)
64  {
65  return GetItemsByRole(userClaims).Count();
66  }
67 
68  public virtual Membership GetById(Guid id)
69  {
70  return _membershipRepository.Get(id);
71  }
72 
73  public virtual Membership Get(Func<Membership, bool> predicate)
74  {
75  return _membershipRepository.Get(predicate);
76  }
77 
78  public virtual void CreateItem(MembershipModel model)
79  {
80  _membershipRepository.Create(new Membership
81  {
82  Type = model.MemberOf,
83  MembershipInfo = model.MembershipInfo,
84  User = model.User
85  });
86  }
87 
88  public virtual void UpdateItem(MembershipEditModel model)
89  {
90  var membership = GetById(model.Id);
91  if (membership == null)
92  {
93  return;
94  }
95 
96  membership.Type = model.MemberOf;
97  membership.MembershipInfo = model.MembershipInfo;
98  _membershipRepository.Update(membership);
99  }
100 
101  public virtual void DeleteById(Guid id)
102  {
103  _membershipRepository.Delete(id);
104  }
105 
106  public virtual bool Exists(Guid id)
107  {
108  return _membershipRepository.Get(id) != null;
109  }
110  }
111 }
virtual IEnumerable< Membership > GetItemsByRole(ClaimsPrincipal userClaims)
virtual void CreateItem(MembershipModel model)
static bool IsHeadOfDepartment(ClaimsPrincipal user)
Definition: UserHelpers.cs:13
virtual IEnumerable< Membership > GetPageByRole(int page, int count, ClaimsPrincipal userClaims)
virtual IEnumerable< Membership > GetAllWhere(Func< Membership, bool > predicate)
static bool IsAdmin(ClaimsPrincipal user)
Definition: UserHelpers.cs:8
virtual void UpdateItem(MembershipEditModel model)
virtual int GetCountByRole(ClaimsPrincipal userClaims)
virtual IEnumerable< Membership > GetAll()
virtual Membership Get(Func< Membership, bool > predicate)
MembershipService(ScientificReportDbContext context)