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