コード例 #1
0
        public bool AccessGrantedForUser(int taskId)
        {
            if (taskId <= 0)
            {
                return(false);
            }

            string UserId = HttpContextExtensions.GetUserId(httpContextAccessor);

            if (HttpContextExtensions.IsAdmin(httpContextAccessor))
            {
                return(true);
            }

            var myTasks = context.UsersInTasks.Where(t => t.MyTaskId == taskId
                                                     ).Join(context.TaskTrackerUser,
                                                            t => t.UserId,
                                                            f => f.UserId,
                                                            (t, f) => new
            {
                f.UserId
            }
                                                            ).Select(t => new { t.UserId });

            return(myTasks.Any(t => t.UserId == UserId));
        }
コード例 #2
0
        public async Task <APIResult> DeclineFriendRequest(UserFriendBL request)
        {
            var UserId = HttpContextExtensions.GetUserId(_httpcontext);
            var friend = _context.UserFriends.FirstOrDefault(uf => uf.FriendId == UserId && uf.UserId == request.FriendId);
            var user   = _context.Users.FirstOrDefault(u => u.Id == UserId);

            if (friend == null)
            {
                return new APIResult()
                       {
                           Success = false, Error = "Аргумент request содержит ссылку на несуществующего пользователя"
                       }
            }
            ;

            _context.UserFriends.Remove(friend);
            await _context.SaveChangesAsync();

            if (user != null)
            {
                await _mailService.SendAsync(new MailModelBL()
                {
                    To      = user.Email,
                    Subject = "Ваш запрос на добавление в друзья был отклонён",
                    Body    = "Чтобы посмотреть подробности перейдите по ссылке: <br> <a href=\"https://localhost:44347/Friends\">https://localhost:44347/Friends</a>"
                });
            }

            return(new APIResult()
            {
                Success = true
            });
        }
    }
コード例 #3
0
        public async Task <IEnumerable <UserFriendBL> > GetFriends()
        {
            var UserId   = HttpContextExtensions.GetUserId(_httpcontext);
            var requests = _context.UserFriends.Where(uf => (uf.UserId == UserId || uf.FriendId == UserId) && uf.IsApproved).ToList();
            var users    = await _userManager.GetUsersInRoleAsync("User");

            var usersList = users.ToList();

            var query = from request in requests
                        from user in usersList.Where(user => request.UserId == user.Id && request.UserId != UserId || request.FriendId == user.Id && request.FriendId != UserId)
                        .DefaultIfEmpty()
                        select new { request, user };

            return(query.Select(itm => new UserFriendBL()
            {
                UserId = itm.request.UserId == UserId ? itm.request.FriendId : itm.request.UserId,
                FriendId = itm.request.FriendId == UserId ? itm.request.UserId : itm.request.FriendId,
                AddDate = itm.request.AddDate,
                IsApproved = itm.request.IsApproved,
                Friend = new UserProfileBL()
                {
                    UserId = itm.user.Id,
                    Email = itm.user.Email,
                    FamilyName = itm.user.FamilyName,
                    Name = itm.user.Name,
                    Patronymic = itm.user.Patronymic,
                    Photo = itm.user.Photo,
                    Telephone = itm.user.PhoneNumber,
                    UserName = itm.user.UserName
                }
            }));
        }
コード例 #4
0
        public IEnumerable <TaskModelBL> GetNonSubTask(int TaskId)
        {
            IEnumerable <MyTask> list = null;

            if (HttpContextExtensions.IsAdmin(_httpcontext))
            {
                list = context.MyTasks.GetAll();
            }
            else
            {
                var idlist   = context.UsersInTasks.GetAll().Where(u => u.UserId == HttpContextExtensions.GetUserId(_httpcontext)).Select(u => u.MyTaskId);
                var subtasks = context.MyTasks.GetAll().Where(st => st.ParentTaskId == TaskId).Select(u => u.Id);
                list = context.MyTasks.GetAll().Where(t => idlist.Contains(t.Id) && t.Id != TaskId && !subtasks.Any(st => st == t.Id));
            }

            return(list.Select(task => new TaskModelBL()
            {
                Id = task.Id,
                Name = task.Name,
                StartDate = task.StartDate,
                TargetDate = task.TargetDate,
                EndDate = task.EndDate,
                Details = task.Details,
                IsRepeating = task.IsRepeating,
                TaskСategoryId = task.TaskСategoryId,
                TaskPriorityId = task.TaskPriorityId,
                ParentTaskId = task.ParentTaskId,
                files = null
            }));
        }
コード例 #5
0
        public async Task <IEnumerable <UserFriendBL> > GetMyFriendRequests()
        {
            var UserId  = HttpContextExtensions.GetUserId(_httpcontext);
            var Friends = _context.UserFriends.Where(uf => uf.UserId == UserId).ToList();
            var users   = await _userManager.GetUsersInRoleAsync("User");

            var usersList = users.ToList();

            var query = from friend in Friends
                        join user in usersList on friend.FriendId equals user.Id
                        select new { friend = friend, friendUser = user };

            return(query.Select(itm => new UserFriendBL()
            {
                UserId = itm.friend.UserId,
                FriendId = itm.friend.FriendId,
                AddDate = itm.friend.AddDate,
                IsApproved = itm.friend.IsApproved,
                Friend = new UserProfileBL()
                {
                    UserId = itm.friendUser.Id,
                    Email = itm.friendUser.Email,
                    FamilyName = itm.friendUser.FamilyName,
                    Name = itm.friendUser.Name,
                    Patronymic = itm.friendUser.Patronymic,
                    Photo = itm.friendUser.Photo,
                    Telephone = itm.friendUser.PhoneNumber,
                    UserName = itm.friendUser.UserName
                }
            }));
        }
コード例 #6
0
        public IEnumerable <TaskEditGrantsBL> GetAll()
        {
            string UserId  = HttpContextExtensions.GetUserId(_httpcontext);
            var    taskIds = context.UsersInTasks.GetAll().Where(ut => ut.UserId == UserId && ut.UserInTaskTypeCode == 1).Select(ut => ut.MyTaskId);

            var list = (from MyTask in context.MyTasks.GetAll()
                        join TaskEditGrant in context.TaskEditGrants.GetAll() on MyTask.Id equals TaskEditGrant.TaskId
                        select new { task = MyTask, taskgrant = TaskEditGrant }).Where(itm => taskIds.Any(t => t == itm.task.Id) && itm.taskgrant.IsGranted == false);

            return(list.Select(t => new TaskEditGrantsBL()
            {
                TaskId = t.task.Id,
                Task = new TaskModelBL()
                {
                    Id = t.task.Id,
                    IsRepeating = t.task.IsRepeating,
                    Details = t.task.Details,
                    EndDate = t.task.EndDate,
                    Name = t.task.Name,
                    ParentTaskId = t.task.ParentTaskId,
                    TaskPriorityId = t.task.TaskPriorityId,
                    TargetDate = t.task.TargetDate,
                    TaskСategoryId = t.task.TaskСategoryId,
                    StartDate = t.task.StartDate
                },
                date = t.taskgrant.date,
                FriendId = t.taskgrant.FriendId,
                IsGranted = false
            }));
        }
コード例 #7
0
        public TaskModelBL GetById(int id)
        {
            bool editGrant = false;

            if (!CheckAccess(id, out MyTask task))
            {
                return(null);
            }

            string userId = HttpContextExtensions.GetUserId(_httpcontext);

            var grantModel = context.TaskEditGrants.GetAll().FirstOrDefault(gr => gr.TaskId == task.Id && gr.FriendId == userId);

            var isFriendTask = (context.UsersInTasks.GetAll().Where(ut => ut.MyTaskId == task.Id && ut.UserId == userId && ut.UserInTaskTypeCode == 2).Count() > 0);

            if (grantModel != null)
            {
                editGrant = grantModel.IsGranted;
            }
            else
            {
                if (isFriendTask)
                {
                    editGrant = false;
                }
                else
                {
                    editGrant = true;
                }
            }

            RepeatingTask repeatingTask = context.RepeatingTasks.GetById(id);

            return(new TaskModelBL
            {
                Id = task.Id,
                Name = task.Name,
                StartDate = task.StartDate,
                TargetDate = task.TargetDate,
                EndDate = task.EndDate,
                Details = task.Details,
                IsRepeating = task.IsRepeating,
                TaskСategoryId = task.TaskСategoryId,
                TaskPriorityId = task.TaskPriorityId,
                ParentTaskId = task.ParentTaskId,
                Multiplier = repeatingTask?.Multiplier,
                PeriodCode = repeatingTask?.PeriodCode,
                UserIds = context.UsersInTasks.GetAll().Where(ut => ut.MyTaskId == task.Id && ut.UserInTaskTypeCode == 2).Select(ut => ut.UserId).ToList(),
                files = _fileService.GetAll(id).ToList(),
                EditGrant = editGrant,
                UserId = userId,
                IsFriendTask = isFriendTask
            });
        }
コード例 #8
0
        public IEnumerable <TaskModelBL> GetAll()
        {
            if (HttpContextExtensions.IsAdmin(_httpcontext))
            {
                return(context.MyTasks.GetAll().Select(task => new TaskModelBL()
                {
                    Id = task.Id,
                    Name = task.Name,
                    StartDate = task.StartDate,
                    TargetDate = task.TargetDate,
                    EndDate = task.EndDate,
                    Details = task.Details,
                    IsRepeating = task.IsRepeating,
                    TaskСategoryId = task.TaskСategoryId,
                    TaskPriorityId = task.TaskPriorityId,
                    ParentTaskId = task.ParentTaskId,
                    files = null,
                    IsFriendTask = false
                }));
            }
            else
            {
                var UserId = HttpContextExtensions.GetUserId(_httpcontext);
                var list   = (from MyTask in context.MyTasks.GetAll()
                              join UserInTask in context.UsersInTasks.GetAll() on MyTask.Id equals UserInTask.MyTaskId
                              select new { task = MyTask, usersintask = UserInTask })
                             .Where(x => x.usersintask.UserId == UserId).ToList();

                return(list.Select(item => new TaskModelBL()
                {
                    Id = item.task.Id,
                    Name = item.task.Name,
                    StartDate = item.task.StartDate,
                    TargetDate = item.task.TargetDate,
                    EndDate = item.task.EndDate,
                    Details = item.task.Details,
                    IsRepeating = item.task.IsRepeating,
                    TaskСategoryId = item.task.TaskСategoryId,
                    TaskPriorityId = item.task.TaskPriorityId,
                    ParentTaskId = item.task.ParentTaskId,
                    files = null,
                    IsFriendTask = (item.usersintask.UserInTaskTypeCode == 2)
                }));
            }
        }
コード例 #9
0
        public async Task <APIResult> ChangePassword(ChangePasswordModel model)
        {
            if (model.OldPassword == model.NewPassword)
            {
                return(new APIResult()
                {
                    Success = false, Error = "Старый и новый пароли совпадают."
                });
            }
            string UserId = HttpContextExtensions.GetUserId(_context);

            ApplicationUser user = await _userManager.FindByIdAsync(UserId);

            if (user != null)
            {
                IdentityResult result =
                    await _userManager.ChangePasswordAsync(user, model.OldPassword, model.NewPassword);

                if (result.Succeeded)
                {
                    return(new APIResult()
                    {
                        Success = true
                    });
                }
                else
                {
                    return(new APIResult()
                    {
                        Success = false, Error = result.Errors.FirstOrDefault().Description
                    });
                }
            }
            else
            {
                return(new APIResult()
                {
                    Success = false, Error = "Пользователь не найден"
                });
            }
        }
コード例 #10
0
        public async Task <IEnumerable <UserProfileBL> > GetNonFriends()
        {
            var UserId   = HttpContextExtensions.GetUserId(_httpcontext);
            var Friends  = _context.UserFriends.Where(uf => uf.UserId == UserId).Select(uf => uf.FriendId).ToList();
            var Requests = _context.UserFriends.Where(uf => uf.FriendId == UserId).Select(uf => uf.UserId).ToList();
            var users    = await _userManager.GetUsersInRoleAsync("User");

            var userslist = users.Where(user => user.Id != UserId).ToList();

            return(userslist.Where(user => !Friends.Any(item => item == user.Id) && !Requests.Any(item => item == user.Id)).Select(user => new UserProfileBL()
            {
                UserId = user.Id,
                Email = user.Email,
                FamilyName = user.FamilyName,
                Name = user.Name,
                Patronymic = user.Patronymic,
                Photo = user.Photo,
                Telephone = user.PhoneNumber,
                UserName = user.UserName
            }));
        }
コード例 #11
0
        public async Task <APIResult> AddFriendRequest(UserFriendBL request)
        {
            if (request == null)
            {
                return new APIResult()
                       {
                           Success = false, Error = "Аргумент request = null"
                       }
            }
            ;

            var UserId = HttpContextExtensions.GetUserId(_httpcontext);
            var user   = _context.Users.FirstOrDefault(u => u.Id == UserId);

            var model = new UserFriend()
            {
                AddDate    = request.AddDate,
                IsApproved = request.IsApproved,
                FriendId   = request.FriendId,
                UserId     = UserId
            };

            _context.UserFriends.Add(model);
            await _context.SaveChangesAsync();

            if (user != null)
            {
                await _mailService.SendAsync(new MailModelBL()
                {
                    To      = user.Email,
                    Subject = $"Вам отправлен запрос на добавление в друзья от {user.UserName}",
                    Body    = "Чтобы принять запрос перейдите по ссылке: <br> <a href=\"https://localhost:44347/Friends\">https://localhost:44347/Friends</a>"
                });
            }

            return(new APIResult()
            {
                Success = true
            });
        }
コード例 #12
0
        public async Task <UserFriendBL> GetFriendRequest(string FriendId)
        {
            var UserId = HttpContextExtensions.GetUserId(_httpcontext);

            if (UserId == null)
            {
                return(null);
            }
            var friend = _context.UserFriends.FirstOrDefault(uf => uf.FriendId == FriendId && uf.UserId == UserId);

            if (friend == null)
            {
                return(null);
            }

            var user = await _userManager.FindByIdAsync(FriendId);

            return(new UserFriendBL()
            {
                UserId = friend.UserId,
                FriendId = friend.FriendId,
                AddDate = friend.AddDate,
                IsApproved = friend.IsApproved,
                Friend = new UserProfileBL()
                {
                    UserId = user.Id,
                    Email = user.Email,
                    FamilyName = user.FamilyName,
                    Name = user.Name,
                    Patronymic = user.Patronymic,
                    Photo = user.Photo,
                    Telephone = user.PhoneNumber,
                    UserName = user.UserName
                }
            });
        }
コード例 #13
0
        private bool CheckAccess(int id, out MyTask task)
        {
            task = null;
            if (id <= 0)
            {
                return(false);
            }

            task = context.MyTasks.GetById(id);

            if (task == null)
            {
                return(false);
            }

            return(HttpContextExtensions.IsAdmin(_httpcontext) || context.UsersInTasks.GetAll().Any(u => u.MyTaskId == id && u.UserId == HttpContextExtensions.GetUserId(_httpcontext)));
        }
コード例 #14
0
        public bool Create(TaskModelBL model)
        {
            if (model == null)
            {
                return(false);
            }

            string UserId = HttpContextExtensions.GetUserId(_httpcontext);

            var user = context.TaskTrackerUser.GetAll().FirstOrDefault(x => x.UserId == UserId);

            if (user == null)
            {
                user = new TaskTrackerUser()
                {
                    UserId = UserId
                };
                context.TaskTrackerUser.Create(user);
            }

            MyTask task = new MyTask
            {
                Name           = model.Name,
                StartDate      = DateTime.Now,
                TargetDate     = model.TargetDate,
                Details        = model.Details,
                IsRepeating    = model.IsRepeating,
                TaskСategoryId = model.TaskСategoryId,
                TaskPriorityId = model.TaskPriorityId,
                ParentTaskId   = model.ParentTaskId
            };

            context.MyTasks.Create(task);

            var UserInTask = new UsersInTask()
            {
                Task               = task,
                UserId             = UserId,
                TaskTrackerUser    = user,
                UserInTaskTypeCode = 1
            };

            context.UsersInTasks.Create(UserInTask);

            if (model.Multiplier != null && model.PeriodCode != null)
            {
                RepeatingTask repeatingTask = new RepeatingTask
                {
                    Task       = task,
                    PeriodCode = (int)model.PeriodCode,
                    Multiplier = (int)model.Multiplier
                };
                context.RepeatingTasks.Create(repeatingTask);
            }

            context.SaveChanges();

            foreach (FileModelBL fl in model.files)
            {
                _fileService.Create(task.Id, fl);
            }

            return(true);
        }