ScientificReport
ScientificWorkService.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;
12 
13 namespace ScientificReport.BLL.Services
14 {
16  {
17  private readonly ScientificWorkRepository _scientificWorkRepository;
18  private readonly UserProfileRepository _userProfileRepository;
19  private readonly DepartmentRepository _departmentRepository;
20 
22  {
23  _scientificWorkRepository = new ScientificWorkRepository(context);
24  _userProfileRepository = new UserProfileRepository(context);
25  _departmentRepository = new DepartmentRepository(context);
26  }
27 
28  public virtual IEnumerable<ScientificWork> GetAll()
29  {
30  return _scientificWorkRepository.All();
31  }
32 
33  public virtual IEnumerable<ScientificWork> GetAllWhere(Func<ScientificWork, bool> predicate)
34  {
35  return _scientificWorkRepository.AllWhere(predicate);
36  }
37 
38  public virtual IEnumerable<ScientificWork> GetItemsByRole(ClaimsPrincipal userClaims)
39  {
40  IEnumerable<ScientificWork> items;
41  if (UserHelpers.IsAdmin(userClaims))
42  {
43  items = _scientificWorkRepository.All();
44  }
45  else if (UserHelpers.IsHeadOfDepartment(userClaims))
46  {
47  var department = _departmentRepository.Get(r => r.Head.UserName == userClaims.Identity.Name);
48  items = _scientificWorkRepository.AllWhere(a => a.UserProfilesScientificWorks.Any(u => department.Staff.Contains(u.UserProfile)));
49  }
50  else
51  {
52  var user = _userProfileRepository.Get(u => u.UserName == userClaims.Identity.Name);
53  items = _scientificWorkRepository.AllWhere(a => a.UserProfilesScientificWorks.Any(u => u.UserProfile.Id == user.Id));
54  }
55 
56  return items;
57  }
58 
59  public virtual IEnumerable<ScientificWork> GetPageByRole(int page, int count, ClaimsPrincipal userClaims)
60  {
61  return GetItemsByRole(userClaims).Skip((page - 1) * count).Take(count).ToList();
62  }
63 
64  public virtual int GetCountByRole(ClaimsPrincipal userClaims)
65  {
66  return GetItemsByRole(userClaims).Count();
67  }
68 
69  public virtual ScientificWork GetById(Guid id)
70  {
71  return _scientificWorkRepository.Get(id);
72  }
73 
74  public virtual ScientificWork Get(Func<ScientificWork, bool> predicate)
75  {
76  return _scientificWorkRepository.Get(predicate);
77  }
78 
79  public virtual void CreateItem(ScientificWork item)
80  {
81  _scientificWorkRepository.Create(item);
82  }
83 
84  public virtual void UpdateItem(ScientificWork item)
85  {
86  _scientificWorkRepository.Update(item);
87  }
88 
89  public virtual void DeleteById(Guid id)
90  {
91  _scientificWorkRepository.Delete(id);
92  }
93 
94  public virtual bool Any(Func<ScientificWork, bool> predicate)
95  {
96  return _scientificWorkRepository.AllWhere(predicate).Any();
97  }
98 
99  public virtual bool Exists(Guid id)
100  {
101  return Any(r => r.Id == id);
102  }
103 
104  public virtual IEnumerable<UserProfile> GetAuthors(Guid id)
105  {
106  var scientificWork = _scientificWorkRepository.Get(id);
107  IEnumerable<UserProfile> authors = null;
108  if (scientificWork != null)
109  {
110  authors = scientificWork.UserProfilesScientificWorks.Select(u => u.UserProfile);
111  }
112 
113  return authors;
114  }
115 
116  public virtual void AddAuthor(Guid id, Guid authorId)
117  {
118  var scientificWork = _scientificWorkRepository.Get(id);
119  var author = _userProfileRepository.Get(authorId);
120  if (scientificWork.UserProfilesScientificWorks.Any(u => u.UserProfile.Id == authorId))
121  {
122  return;
123  }
124 
125  scientificWork.UserProfilesScientificWorks.Add(new UserProfilesScientificWorks
126  {
127  ScientificWork = scientificWork,
128  UserProfile = author
129  });
130  _scientificWorkRepository.Update(scientificWork);
131  }
132 
133  public virtual void RemoveAuthor(Guid id, Guid authorId)
134  {
135  var scientificWork = _scientificWorkRepository.Get(id);
136  if (scientificWork.UserProfilesScientificWorks.All(u => u.UserProfile.Id != authorId))
137  {
138  return;
139  }
140 
141  scientificWork.UserProfilesScientificWorks = scientificWork.UserProfilesScientificWorks
142  .Where(u => u.UserProfile.Id != authorId).ToList();
143  _scientificWorkRepository.Update(scientificWork);
144  }
145  }
146 }
virtual IEnumerable< ScientificWork > GetAllWhere(Func< ScientificWork, bool > predicate)
virtual IEnumerable< ScientificWork > GetPageByRole(int page, int count, ClaimsPrincipal userClaims)
static bool IsHeadOfDepartment(ClaimsPrincipal user)
Definition: UserHelpers.cs:13
virtual int GetCountByRole(ClaimsPrincipal userClaims)
virtual bool Any(Func< ScientificWork, bool > predicate)
static bool IsAdmin(ClaimsPrincipal user)
Definition: UserHelpers.cs:8
virtual IEnumerable< ScientificWork > GetItemsByRole(ClaimsPrincipal userClaims)
virtual IEnumerable< UserProfile > GetAuthors(Guid id)
ScientificWorkService(ScientificReportDbContext context)
virtual ScientificWork Get(Func< ScientificWork, bool > predicate)
virtual IEnumerable< ScientificWork > GetAll()