public Result ChangeRole(long groupUserId, string roleId, string userId)
        {
            _logger.LogInformation($"Changing GroupUser role. GroupUserId {groupUserId}, roleId {roleId}");

            Result roleValidResult = RoleIsValid(roleId);

            if (roleValidResult.Failure)
            {
                return(Result.Fail(roleValidResult.Errors));
            }

            List <RoleListData> canAssigneGroupRoles = _groupUserStore.CanAssigneGroupRoles();

            if (!canAssigneGroupRoles.Any(x => x.Id == roleId))
            {
                _logger.LogError($"User does not have permission to assign role. RoleId {roleId}");
                return(Result.Fail("no_permission", "No Permission"));
            }

            Result <GroupUserEntity> getGroupUserResult = _groupUserStore.Get(groupUserId);

            if (getGroupUserResult.Failure)
            {
                return(Result.Fail(getGroupUserResult.Errors));
            }

            GroupUserEntity groupUser = getGroupUserResult.Value;

            List <RoleListData> canManageGroupRoles = _groupUserStore.CanManageGroupRoles();

            if (!canManageGroupRoles.Any(x => x.Id != groupUser.RoleId))
            {
                _logger.LogError($"User does not have permission to manage role. GroupUserId {groupUserId} RoleId {roleId}");
                return(Result.Fail("no_permission", "No Permission"));
            }

            if (!_groupUserStore.CanChangeOwnRole())
            {
                if (groupUser.UserId == userId)
                {
                    _logger.LogError($"User can not change his own role");
                    return(Result.Fail("user_can_not_change_his_own_role", "User can not change his own role"));
                }
            }

            groupUser.UpdateRole(roleId);

            bool updateResult = _groupUserRepository.Update(groupUser);

            if (!updateResult)
            {
                _logger.LogError($"Failed to change group user role. GroupUserId {groupUserId}, roleId {roleId}");
                return(Result.Fail("failed_to_cahnge_group_user_role", "Failed to change GroupUser role"));
            }

            return(Result.Ok());
        }
Example #2
0
        public async Task <Result <List <TimeRangeStatisticsModel> > > GetRegistrationStatistics(string groupId, TimeRangeRequest timeRangeRequest)
        {
            ValidationResult validationResult = _timeRangeRequestValidator.Validate(timeRangeRequest);

            if (!validationResult.IsValid)
            {
                _logger.LogError($"Invalid {typeof(TimeRangeRequest).Name} model");
                return(Result.Fail <List <TimeRangeStatisticsModel> >(validationResult.ToResultError()));
            }

            IBaseSpecification <GroupUserEntity, DateTimeOffset> specification = SpecificationBuilder
                                                                                 .Create <GroupUserEntity>()
                                                                                 .Where(x => x.User._CreatedDate != null)
                                                                                 .Where(x => x.User._CreatedDate >= timeRangeRequest.From)
                                                                                 .Where(x => x.User._CreatedDate < timeRangeRequest.To)
                                                                                 .Where(x => x.GroupId == groupId)
                                                                                 .Select(x => x.User._CreatedDate.Value)
                                                                                 .Build();

            List <DateTimeOffset> dateTimes = await _groupUserStore.Get(specification);

            List <TimeRangeStatisticsModel> viewModel = dateTimes
                                                        .GroupBy(x => new { x.UtcDateTime.Year, x.UtcDateTime.Month, x.UtcDateTime.Day })
                                                        .Select(x => new TimeRangeStatisticsModel(
                                                                    dateTime: new DateTime(x.Key.Year, x.Key.Month, x.Key.Day, 0, 0, 0, DateTimeKind.Utc),
                                                                    value: x.Count()))
                                                        .ToList();

            DateTime dateTime = new DateTime(
                timeRangeRequest.From.UtcDateTime.Year,
                timeRangeRequest.From.UtcDateTime.Month,
                timeRangeRequest.From.UtcDateTime.Day,
                0,
                0,
                0,
                DateTimeKind.Utc);

            for (; dateTime < timeRangeRequest.To; dateTime = dateTime.AddDays(1))
            {
                bool exists = viewModel
                              .Where(x => x.DateTime == dateTime)
                              .Any();

                if (!exists)
                {
                    viewModel.Add(new TimeRangeStatisticsModel(
                                      dateTime: dateTime,
                                      value: 0));
                }
            }

            viewModel = viewModel
                        .OrderBy(x => x.DateTime)
                        .ToList();

            return(Result.Ok(viewModel));
        }
Example #3
0
        private async Task <Result> ChangeRoleAsync(long groupUserId, string roleId, string userId)
        {
            _logger.LogInformation($"Changing GroupUser role. GroupUserId {groupUserId}, roleId {roleId}");

            Result roleValidResult = await RoleIsValid(roleId);

            if (roleValidResult.Failure)
            {
                return(Result.Fail(roleValidResult));
            }

            List <RoleListData> canAssigneGroupRoles = _groupUserStore.CanAssigneGroupRoles();

            if (!canAssigneGroupRoles.Any(x => x.Id == roleId))
            {
                _logger.LogError($"User does not have permission to assign role. RoleId {roleId}");
                return(Result.Fail(NO_PERMISSION));
            }

            Core.Models.Result.Result <GroupUserEntity> getGroupUserResult = _groupUserStore.Get(groupUserId);
            if (getGroupUserResult.Failure)
            {
                return(getGroupUserResult.ToNewResult());
            }

            GroupUserEntity groupUser = getGroupUserResult.Value;

            List <RoleListData> canManageGroupRoles = _groupUserStore.CanManageGroupRoles();

            if (!canManageGroupRoles.Any(x => x.Id != groupUser.RoleId))
            {
                _logger.LogError($"User does not have permission to manage role. GroupUserId {groupUserId} RoleId {roleId}");
                return(Result.Fail(NO_PERMISSION));
            }

            if (!_groupUserStore.CanChangeOwnRole())
            {
                if (groupUser.UserId == userId)
                {
                    _logger.LogError($"User can not change his own role");
                    return(Result.Fail(USER_CAN_NOT_CHANGE_HIS_OWN_ROLE));
                }
            }

            groupUser.UpdateRole(roleId);

            bool updateResult = await _groupUserDAO.Update(groupUser);

            if (!updateResult)
            {
                _logger.LogError($"Failed to change group user role. GroupUserId {groupUserId}, roleId {roleId}");
                return(Result.Fail(FAILED_TO_CAHNGE_GROUP_USER_ROLE));
            }

            return(Result.Ok());
        }