ScientificReport
ConferenceService.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 ConferenceRepository _conferenceRepository;
17  private readonly ReportThesisRepository _reportThesisRepository;
18  private readonly DepartmentRepository _departmentRepository;
19  private readonly UserProfileRepository _userProfileRepository;
20 
22  {
23  _conferenceRepository = new ConferenceRepository(context);
24  _reportThesisRepository = new ReportThesisRepository(context);
25  _departmentRepository = new DepartmentRepository(context);
26  _userProfileRepository = new UserProfileRepository(context);
27  }
28 
29  public virtual IEnumerable<Conference> GetAll()
30  {
31  return _conferenceRepository.All();
32  }
33 
34  public virtual IEnumerable<Conference> GetAllWhere(Func<Conference, bool> predicate)
35  {
36  return GetAll().Where(predicate);
37  }
38 
39  public virtual IEnumerable<Conference> GetItemsByRole(ClaimsPrincipal userClaims)
40  {
41  IEnumerable<Conference> items;
42  if (UserHelpers.IsAdmin(userClaims))
43  {
44  items = _conferenceRepository.All();
45  }
46  else if (UserHelpers.IsHeadOfDepartment(userClaims))
47  {
48  var department = _departmentRepository.Get(r => r.Head.UserName == userClaims.Identity.Name);
49  items = _conferenceRepository.AllWhere(a => GetParticipators(a.Id).Any(u => department.Staff.Contains(u)));
50  }
51  else
52  {
53  var user = _userProfileRepository.Get(u => u.UserName == userClaims.Identity.Name);
54  items = _conferenceRepository.AllWhere(a => GetParticipators(a.Id).Any(u => u.Id == user.Id));
55  }
56 
57  return items;
58  }
59 
60  public virtual IEnumerable<Conference> GetPageByRole(int page, int count, ClaimsPrincipal userClaims)
61  {
62  return GetItemsByRole(userClaims).Skip((page - 1) * count).Take(count).ToList();
63  }
64 
65  public virtual int GetCountByRole(ClaimsPrincipal userClaims)
66  {
67  return GetItemsByRole(userClaims).Count();
68  }
69 
70  public virtual Conference GetById(Guid id)
71  {
72  return _conferenceRepository.Get(id);
73  }
74 
75  public virtual Conference Get(Func<Conference, bool> predicate)
76  {
77  return _conferenceRepository.Get(predicate);
78  }
79 
80  public virtual void CreateItem(Conference conference)
81  {
82  _conferenceRepository.Create(conference);
83  }
84 
85  public virtual void UpdateItem(Conference conference)
86  {
87  _conferenceRepository.Update(conference);
88  }
89 
90  public virtual void DeleteById(Guid id)
91  {
92  _conferenceRepository.Delete(id);
93  }
94 
95  public virtual bool Exists(Guid id)
96  {
97  return _conferenceRepository.Get(id) != null;
98  }
99 
100  public virtual IEnumerable<ReportThesis> GetReportTheses(Guid id)
101  {
102  return _reportThesisRepository.AllWhere(t => t.Conference.Id.Equals(id));
103  }
104 
105  public virtual IEnumerable<UserProfile> GetParticipators(Guid id)
106  {
107  var theses = GetReportTheses(id).ToList();
108  IList<UserProfile> participators = new List<UserProfile>();
109  foreach (var thesis in theses)
110  {
111  participators = participators.Concat(thesis.UserProfilesReportTheses.Select(t => t.UserProfile)).ToList();
112  }
113  return participators;
114  }
115  }
116 }
virtual Conference Get(Func< Conference, bool > predicate)
virtual void CreateItem(Conference conference)
virtual void UpdateItem(Conference conference)
virtual IEnumerable< Conference > GetItemsByRole(ClaimsPrincipal userClaims)
static bool IsHeadOfDepartment(ClaimsPrincipal user)
Definition: UserHelpers.cs:13
virtual IEnumerable< Conference > GetAllWhere(Func< Conference, bool > predicate)
virtual IEnumerable< Conference > GetPageByRole(int page, int count, ClaimsPrincipal userClaims)
static bool IsAdmin(ClaimsPrincipal user)
Definition: UserHelpers.cs:8
virtual IEnumerable< Conference > GetAll()
virtual IEnumerable< UserProfile > GetParticipators(Guid id)
virtual int GetCountByRole(ClaimsPrincipal userClaims)
ConferenceService(ScientificReportDbContext context)
virtual IEnumerable< ReportThesis > GetReportTheses(Guid id)