Beispiel #1
0
        public static CanOpenSubTask CheckType(this CanOpenSubTask model)
        {
            var userSubTask = model.UserSubTasks.FirstOrDefault(c => c.Id == model.UserSubTaskId);

            model.CanOpen = userSubTask != null && userSubTask.SubTask.Type != SubTaskType.Code;

            return(model);
        }
Beispiel #2
0
        public static CanOpenSubTask CheckUserAdmin(this CanOpenSubTask model)
        {
            if (model.CanOpen)
            {
                return(model);
            }

            model.CanOpen = model.User.IsAdmin;
            return(model);
        }
Beispiel #3
0
        public static CanOpenSubTask CheckOnPassed(this CanOpenSubTask model)
        {
            if (model.CanOpen)
            {
                return(model);
            }

            var userSubTask = model.UserSubTasks.FirstOrDefault(l => l.Id == model.UserSubTaskId && l.IsPassed);

            model.CanOpen = userSubTask != null;

            return(model);
        }
Beispiel #4
0
        public static CanOpenSubTask CheckFirst(this CanOpenSubTask model)
        {
            if (model.CanOpen)
            {
                return(model);
            }

            var firstSubTask = model.UserSubTasks.FirstOrDefault();

            model.CanOpen = firstSubTask != null && firstSubTask.Id == model.UserSubTaskId;

            return(model);
        }
Beispiel #5
0
        public static CanOpenSubTask CheckAllPreviousPassed(this CanOpenSubTask model)
        {
            if (model.CanOpen)
            {
                return(model);
            }

            var previousSubTasks = model.UserSubTasks
                                   .Where(u => u.SubTask.Type == SubTaskType.Code)
                                   .TakeWhile(l => l.Id != model.UserSubTaskId).ToList();
            var allPreviousPassed = previousSubTasks.Any() && previousSubTasks.All(l => l.IsPassed);

            model.CanOpen = allPreviousPassed;

            return(model);
        }
        public async Task <bool> CanOpen(Guid userId, int userTaskHeadId, int userSubTaskId)
        {
            var userSubTasks = await GetUserSubTasksById(userId, userTaskHeadId);

            var user = await _repository.Find <User>(u => u.Id == userId);

            var canOpenSubTask = new CanOpenSubTask
            {
                CanOpen       = false,
                UserSubTaskId = userSubTaskId,
                UserSubTasks  = userSubTasks,
                User          = user
            };

            canOpenSubTask = canOpenSubTask
                             .CheckType()
                             .CheckFirst()
                             .CheckOnPassed()
                             .CheckAllPreviousPassed();

            return(true);
        }