예제 #1
0
            public async Task <Result <ModuleItem> > Handle(Contract request, CancellationToken cancellationToken)
            {
                try
                {
                    //if (request.UserRole == "Admin" || request.UserRole == "HumanResources" || request.UserRole == "Student")
                    //{
                    if (String.IsNullOrEmpty(request.ModuleId))
                    {
                        return(Result.Fail <ModuleItem>("Id da Trilha não informado"));
                    }


                    var qry = await _db.Database
                              .GetCollection <ModuleItem>("Modules")
                              .FindAsync(x => x.Id == ObjectId.Parse(request.ModuleId), cancellationToken: cancellationToken);

                    var module = await qry.FirstOrDefaultAsync(cancellationToken : cancellationToken);

                    if (module != null)
                    {
                        var typeResult = ActionType.Create(3);

                        var actionsColl  = _db.Database.GetCollection <Action>("Actions");
                        var actionsQuery = await actionsColl.FindAsync(x =>
                                                                       x.Type == typeResult.Data &&
                                                                       x.ModuleId == request.ModuleId &&
                                                                       x.CreatedBy == ObjectId.Parse(request.UserId)
                                                                       );

                        var actions = await actionsQuery.ToListAsync();

                        var watchedContents = actions.Select(x => x.ContentId).ToList();
                        watchedContents = watchedContents.Distinct().ToList();

                        for (int j = 0; j < module.Subjects.Count; j++)
                        {
                            for (int k = 0; k < module.Subjects[j].Contents.Count; k++)
                            {
                                var  contentId = module.Subjects[j].Contents[k].Id.ToString();
                                bool watched   = watchedContents.Contains(contentId);
                                module.Subjects[j].Contents[k].Watched = watched;
                            }
                        }
                    }

                    return(Result.Ok(module));
                }
                catch (Exception ex)
                {
                    return(Result.Fail <ModuleItem>("Acesso Negado"));
                }
            }
예제 #2
0
            public async Task <Result <Action> > Handle(Contract request, CancellationToken cancellationToken)
            {
                try
                {
                    var pageResult = ActionPage.Create(request.PageId);
                    if (pageResult.IsFailure)
                    {
                        return(Result.Fail <Action>(pageResult.Error));
                    }

                    var typeResult = ActionType.Create(request.TypeId);
                    if (typeResult.IsFailure)
                    {
                        return(Result.Fail <Action>(typeResult.Error));
                    }

                    var action = Action.Create(
                        pageResult.Data, request.Description, typeResult.Data, request.UserId,
                        request.ModuleId, request.EventId,
                        request.SubjectId, request.ContentId,
                        request.Concept, request.SupportMaterialId, request.QuestionId
                        );

                    if (action.IsFailure)
                    {
                        return(Result.Fail <Action>(action.Error));
                    }

                    await _db.ActionCollection.InsertOneAsync(
                        action.Data, cancellationToken : cancellationToken
                        );

                    return(action);
                }
                catch (Exception err)
                {
                    Console.WriteLine(err.Message);
                    throw err;
                }
            }
예제 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public List <ActionType> GetAllActionTypes()
        {
            var actionTypes = new List <ActionType>();

            try
            {
                using (var dbc = DatabaseHelper.GetConnector())
                    using (var cmd = dbc.BuildStoredProcedureCommand("spGetAllActionTypes"))
                        using (var rdr = cmd.ExecuteReader())
                        {
                            while (rdr.Read())
                            {
                                actionTypes.Add(ActionType.Create(rdr));
                            }
                        }
            }
            catch (Exception ex)
            {
                _log.Error(ex);
            }

            return(actionTypes);
        }
예제 #4
0
            public async Task <Result> Handle(Contract request, CancellationToken cancellationToken)
            {
                try
                {
                    var typeResult = ActionType.Create(request.TypeId);

                    await _db.ActionCollection.DeleteManyAsync(x =>
                                                               x.ModuleId == request.ModuleId &&
                                                               x.SubjectId == request.SubjectId &&
                                                               x.ContentId == request.ContentId &&
                                                               x.Type == typeResult.Data &&
                                                               x.CreatedBy == ObjectId.Parse(request.UserId),
                                                               cancellationToken : cancellationToken
                                                               );

                    return(Result.Ok());
                }
                catch (Exception err)
                {
                    Console.WriteLine(err.Message);
                    throw err;
                }
            }
예제 #5
0
            public async Task <Result <TrackItem> > Handle(Contract request, CancellationToken cancellationToken)
            {
                if (String.IsNullOrEmpty(request.TrackId))
                {
                    return(Result.Fail <TrackItem>("Id da Trilha não informado"));
                }

                var trackId = ObjectId.Parse(request.TrackId);

                var track = await GetTrackById(trackId, cancellationToken);

                var trackItem = new TrackItem
                {
                    Id      = track.Id,
                    Title   = track.Title,
                    Modules = new List <ModuleItem>()
                };

                if (track == null)
                {
                    return(Result.Fail <TrackItem>("Trilha não existe"));
                }

                var typeResult = ActionType.Create(3);

                var actionsColl  = _db.Database.GetCollection <Action>("Actions");
                var actionsQuery = await actionsColl.FindAsync(x =>
                                                               x.Type == typeResult.Data &&
                                                               x.CreatedBy == ObjectId.Parse(request.UserId)
                                                               );

                var actions = await actionsQuery.ToListAsync();

                var watchedContents = actions.Select(x => x.ContentId).ToList();

                watchedContents = watchedContents.Distinct().ToList();

                var moduleIds = track.ModulesConfiguration.Select(x => x.ModuleId).ToList();

                var qry = await _db.Database
                          .GetCollection <ModuleItem>("Modules")
                          .FindAsync(x => moduleIds.Contains(x.Id), cancellationToken: cancellationToken);

                var modules = await qry.ToListAsync(cancellationToken : cancellationToken);

                if (modules != null)
                {
                    for (int i = 0; i < modules.Count; i++)
                    {
                        for (int j = 0; j < modules[i].Subjects.Count; j++)
                        {
                            for (int k = 0; k < modules[i].Subjects[j].Contents.Count; k++)
                            {
                                var  contentId = modules[i].Subjects[j].Contents[k].Id.ToString();
                                bool watched   = watchedContents.Contains(contentId);
                                modules[i].Subjects[j].Contents[k].Watched = watched;
                            }
                        }
                    }
                    trackItem.Modules = modules;
                }

                return(Result.Ok(trackItem));
            }