Exemplo n.º 1
0
        public static void CreateOrUpdateSysPermission(string permissionCode, string moduleCode)
        {
            Task.Run(() =>
            {
                if (string.IsNullOrEmpty(permissionCode))
                {
                    return;
                }
                if (_sysPermissions.Any(i => i.Code == permissionCode && i.ModuleCode == moduleCode))
                {
                    return;
                }

                using (var db = new MoneyNoteDbContext())
                {
                    var existed = db.SysPermissions.FirstOrDefault(i => i.Code == permissionCode && i.ModuleCode == moduleCode);
                    if (existed == null)
                    {
                        db.SysPermissions.Add(new SysPermission {
                            Code = permissionCode, ModuleCode = moduleCode
                        });
                        db.SaveChanges();
                    }
                }
            });
        }
Exemplo n.º 2
0
        public IActionResult GetTree()
        {
            List <CmsCategory.Dto> allCat = new List <CmsCategory.Dto>();
            int uncategoryItems;

            using (var db = new MoneyNoteDbContext())
            {
                allCat = db.CmsCategories.Select(i => new CmsCategory.Dto
                {
                    Id         = i.Id,
                    ItemsCount = i.ItemsCount,
                    ParentId   = i.ParentId,
                    Title      = i.Title
                }).ToList();

                uncategoryItems = db.CmsContents.Where(i => db.CmsRelations.Select(r => r.ContentId).Distinct().Contains(i.Id) == false)
                                  .Count();
            }

            return(Json(new JsonResponse <CategoryTree> {
                data = new CategoryTree {
                    Data = allCat, UncategoryItemsCount = uncategoryItems
                }
            }));
        }
        public CategoryJsGridResult ListCategory(JsGridFilter filter)
        {
            filter             = filter ?? new JsGridFilter();
            filter.categoryIds = filter.categoryIds ?? new List <Guid>();
            filter.categoryIds.Where(i => i != null && i != Guid.Empty).ToList();
            List <CmsCategory> lst;

            using (var db = new MoneyNoteDbContext())
            {
                var query = db.CmsCategories.AsQueryable();
                if (!string.IsNullOrEmpty(filter.title))
                {
                    query = query.Where(i => i.Title.Contains(filter.title));
                }
                if (filter.findRootItem != null && filter.findRootItem == true)
                {
                    query = query.Where(i => i.ParentId == null || i.ParentId == Guid.Empty);
                }
                lst = query.Distinct().ToList();

                return(new CategoryJsGridResult {
                    data = lst, itemsCount = lst.Count
                });
            }
        }
Exemplo n.º 4
0
        public IActionResult CreateOrUpdate([FromBody] CmsCategory data)
        {
            if (string.IsNullOrEmpty(data.Title))
            {
                return(Json(new JsonResponse <string> {
                    code = 1, message = "Title can not be empty"
                }));
            }
            if (data.Id == null || data.Id == Guid.Empty)
            {
                data.Id = Guid.NewGuid();
            }

            using (var db = new MoneyNoteDbContext())
            {
                var exited = db.CmsCategories.FirstOrDefault(i => i.Id == data.Id);
                if (exited == null)
                {
                    db.CmsCategories.Add(data);
                }
                else
                {
                    exited.ParentId  = data.ParentId;
                    exited.Title     = data.Title;
                    exited.IsDeleted = data.IsDeleted;
                }

                db.SaveChanges();
            }
            return(Json(new JsonResponse <CmsCategory> {
                data = data
            }));
        }
Exemplo n.º 5
0
        public static void CreateOrUpdateSysModule(string code)
        {
            Task.Run(() =>
            {
                if (string.IsNullOrEmpty(code))
                {
                    return;
                }
                if (_sysModules.Any(i => i.Code == code))
                {
                    return;
                }

                using (var db = new MoneyNoteDbContext())
                {
                    var existed = db.SysModules.FirstOrDefault(i => i.Code == code);
                    if (existed == null)
                    {
                        db.SysModules.Add(new SysModule {
                            Code = code
                        });
                        db.SaveChanges();
                    }
                }
            });
        }
Exemplo n.º 6
0
        public static void InitSupperAdmin()
        {
            lock (_lock)
            {
                using (var db = new MoneyNoteDbContext())
                {
                    var user = db.Users.FirstOrDefault(i => i.Username.Equals("supperadmin"));
                    if (user == null)
                    {
                        db.Users.Add(new User
                        {
                            Username = "******",
                            Password = HashPassword("123@123")
                        });
                        db.SaveChanges();
                    }

                    try
                    {
                        _userAlcs       = db.UserAcls.Where(i => i.IsDeleted == 0).ToList();
                        _sysModules     = db.SysModules.Where(i => i.IsDeleted == 0).ToList();
                        _sysPermissions = db.SysPermissions.Where(i => i.IsDeleted == 0).ToList();
                    }
                    catch { }
                }

                var tempAcls = _userAlcs.GroupBy(i => i.UserId).Select(i => new { UserId = i.Key, Acls = i.DefaultIfEmpty() }).ToList();
                foreach (var itm in tempAcls)
                {
                    _lookupUserAcls.Add(itm.UserId, itm.Acls.ToList());
                }
            }
        }
        public IActionResult SelectAll([FromBody] JsGridFilter filter)
        {
            filter             = filter ?? new JsGridFilter();
            filter.categoryIds = filter.categoryIds ?? new List <Guid>();
            filter.categoryIds.Where(i => i != null && i != Guid.Empty).ToList();
            long        itemsCount = 0;
            List <User> data       = new List <User>();

            List <UserAcl.Dto> acls = new List <UserAcl.Dto>();

            using (var db = new MoneyNoteDbContext())
            {
                var query = db.Users.Where(i => i.IsDeleted == 0);
                if (!string.IsNullOrEmpty(filter.title))
                {
                    query = query.Where(i => i.Username.Contains(filter.title));
                }
                if (filter.findRootItem != null && filter.findRootItem == true)
                {
                    query = query.Where(i => i.ParentId == null || i.ParentId == Guid.Empty);
                }

                if (!string.IsNullOrEmpty(filter.moduleCode))
                {
                    query = query.Join(db.UserAcls, u => u.Id, acl => acl.UserId, (u, acl) => new { u, acl })
                            .Where(i => i.acl.ModuleCode == filter.moduleCode).Select(i => i.u).Distinct();
                }
                if (!string.IsNullOrEmpty(filter.permissionCode))
                {
                    query = query.Join(db.UserAcls, u => u.Id, acl => acl.UserId, (u, acl) => new { u, acl })
                            .Where(i => i.acl.PermissionCode == filter.permissionCode).Select(i => i.u).Distinct();
                }
                query = query.Distinct().OrderByDescending(i => i.CreatedAt);

                itemsCount = query.LongCount();
                data       = query.Skip((filter.pageIndex - 1) * filter.pageSize).Take(filter.pageSize).ToList();

                var userIds = data.Select(i => i.Id).Distinct().ToList();

                acls = db.UserAcls.Where(i => userIds.Contains(i.UserId))
                       .Select(i => new UserAcl.Dto
                {
                    UserId         = i.UserId,
                    ModuleCode     = i.ModuleCode,
                    PermissionCode = i.PermissionCode
                })
                       .Distinct().ToList();

                return(Json(new JsonResponse <UserJsGridResult>
                {
                    data = new UserJsGridResult
                    {
                        data = data,
                        itemsCount = itemsCount,
                        ListUserAcl = acls
                    }
                }));
            }
        }
Exemplo n.º 8
0
        public IActionResult CreateOrUpdate([FromBody] CmsContent data)
        {
            if (string.IsNullOrEmpty(data.Title))
            {
                return(Json(new JsonResponse <string> {
                    code = 1, message = "Title can not be empty"
                }));
            }
            if (data.Id == null || data.Id == Guid.Empty)
            {
                data.Id = Guid.NewGuid();
            }

            data = data.CalculateThumbnail();

            using (var db = new MoneyNoteDbContext())
            {
                var exited = db.CmsContents.FirstOrDefault(i => i.Id == data.Id);
                if (exited == null)
                {
                    data.CountView = 0;
                    db.CmsContents.Add(data);
                }
                else
                {
                    exited.ParentId        = data.ParentId;
                    exited.Title           = data.Title;
                    exited.Thumbnail       = data.Thumbnail;
                    exited.UrlRef          = data.UrlRef;
                    exited.Description     = data.Description;
                    exited.IsDeleted       = data.IsDeleted;
                    exited.ThumbnailWidth  = data.ThumbnailWidth;
                    exited.ThumbnailHeight = data.ThumbnailHeight;
                    exited.VideoWidth      = data.VideoWidth;
                    exited.VideoHeight     = data.VideoHeight;
                    exited.IsPublished     = data.IsPublished;
                }

                db.SaveChanges();

                var existed = db.CmsRelations.Where(i => i.ContentId == data.Id).ToList();
                db.RemoveRange(existed);
                db.SaveChanges();

                db.AddRange(data.CategoryIds.Select(c => new CmsRelation
                {
                    ContentId  = data.Id,
                    CategoryId = c
                }).ToList());
                db.SaveChanges();
            }

            return(Json(new JsonResponse <CmsContent> {
                data = data
            }));
        }
        public IActionResult SelectAllPermission()
        {
            using (var db = new MoneyNoteDbContext())
            {
                var query = db.SysPermissions.OrderBy(i => i.ModuleCode).ThenBy(i => i.Code).Where(i => i.IsDeleted == 0);

                return(Json(new JsonResponse <List <SysPermission> >
                {
                    data = query.ToList()
                }));
            }
        }
        public override void JobToDo()
        {
            var map = GetMapping();

            foreach (var m in map)
            {
                var vidsInChanl = _crawler.CrawlChannel(m.Key);
                var cateId      = Guid.Parse(m.Value);
                Task.Run(() =>
                {
                    try
                    {
                        using (var db = new MoneyNoteDbContext())
                        {
                            db.ChangeTracker.AutoDetectChangesEnabled = false;

                            foreach (var v in vidsInChanl)
                            {
                                var exited = db.CmsContents.FirstOrDefault(i => i.Title == v.Title);
                                var cid    = v.Id;
                                if (exited == null)
                                {
                                    cid = v.Id;
                                    db.CmsContents.Add(v);
                                }
                                else
                                {
                                    cid = exited.Id;
                                }

                                var r = db.CmsRelations.Where(i => i.ContentId == cid && i.CategoryId == cateId).FirstOrDefault();

                                if (r == null)
                                {
                                    db.CmsRelations.Add(new Identity.Enities.CmsRelation
                                    {
                                        ContentId  = cid,
                                        CategoryId = cateId
                                    });
                                }
                            }
                            db.SaveChanges();
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                });
            }
        }
 public IActionResult Delete([FromBody] User data)
 {
     using (var db = new MoneyNoteDbContext())
     {
         data = db.Users.FirstOrDefault(i => i.Id == data.Id && i.IsDeleted == 0);
         if (data != null)
         {
             data.IsDeleted = 1;
             db.SaveChanges();
         }
     }
     return(Json(new JsonResponse <User> {
         data = data
     }));
 }
        public JsonResponse <CmsContent> GetContent(ContentRequest request)
        {
            using (var db = new MoneyNoteDbContext())
            {
                var exited = db.CmsContents.FirstOrDefault(i => i.Id == request.id);
                if (exited != null)
                {
                    exited.CountView = exited.CountView + 1;
                    db.SaveChanges();
                }

                return(new JsonResponse <CmsContent> {
                    data = exited
                });
            }
        }
        static void Loop()
        {
            while (!_isStop)
            {
                try
                {
                    using (var db = new MoneyNoteDbContext())
                    {
                        var idsContent = db.CmsContents.Select(i => i.Id).ToList();
                        var noRelation = db.CmsRelations.Where(i => idsContent.Contains(i.ContentId) == false).ToList();
                        db.CmsRelations.RemoveRange(noRelation);
                        db.SaveChanges();
                    }
                    using (var db = new MoneyNoteDbContext())
                    {
                        var idsCat     = db.CmsCategories.Select(i => i.Id).ToList();
                        var noRelation = db.CmsRelations.Where(i => idsCat.Contains(i.CategoryId) == false).ToList();
                        db.CmsRelations.RemoveRange(noRelation);
                        db.SaveChanges();
                    }

                    List <CmsCategory> cats;
                    using (var db = new MoneyNoteDbContext())
                    {
                        cats = db.CmsCategories.ToList();

                        foreach (var c in cats)
                        {
                            c.ItemsCount = db.CmsRelations.Count(i => i.CategoryId == c.Id);
                        }
                    }
                    using (var db = new MoneyNoteDbContext())
                    {
                        db.SaveChangeWith_ModifiedFields(cats, i => i.ItemsCount);
                    }
                }
                catch (Exception ex)
                {
                }
                finally
                {
                    Thread.Sleep(60 * 1000);
                }
            }
        }
Exemplo n.º 14
0
        public IActionResult Delete([FromBody] CmsCategory data)
        {
            using (var db = new MoneyNoteDbContext())
            {
                data = db.CmsCategories.FirstOrDefault(i => i.Id == data.Id);
                if (data != null)
                {
                    db.RemoveRange(db.CmsRelations.Where(i => i.CategoryId == data.Id));

                    db.CmsCategories.Remove(data);

                    db.SaveChanges();
                }
            }
            return(Json(new JsonResponse <CmsCategory> {
                data = data
            }));
        }
Exemplo n.º 15
0
        public IActionResult Delete([FromBody] CmsContent data)
        {
            using (var db = new MoneyNoteDbContext())
            {
                data = db.CmsContents.FirstOrDefault(i => i.Id == data.Id);
                if (data != null)
                {
                    db.CmsContents.Remove(data);

                    var listRelation = db.CmsRelations.Where(i => i.ContentId == data.Id).ToList();

                    db.CmsRelations.RemoveRange(listRelation);

                    db.SaveChanges();
                }
            }
            return(Json(new JsonResponse <CmsContent> {
                data = data
            }));
        }
Exemplo n.º 16
0
        public IActionResult UpdateRelation([FromBody] ContentRelationModel data)
        {
            using (var db = new MoneyNoteDbContext())
            {
                var existed = db.CmsRelations.Where(i => i.ContentId == data.ContentId).ToList();
                db.RemoveRange(existed);
                db.SaveChanges();

                db.AddRange(data.CategoryIds.Select(c => new CmsRelation
                {
                    ContentId  = data.ContentId,
                    CategoryId = c
                }).ToList());
                db.SaveChanges();
            }

            return(Json(new JsonResponse <ContentRelationModel> {
                data = data
            }));
        }
Exemplo n.º 17
0
        public IActionResult YoutubeCrawl([FromBody] YoutubeCrawlRequest request)
        {
            try
            {
                var cmsContent = _youtubeCrawler.CrawlVideo(request.url, out Exception e);

                if (request.autoSave)
                {
                    using (var db = new MoneyNoteDbContext())
                    {
                        db.CmsContents.Add(cmsContent);
                        db.SaveChanges();
                    }
                }
                if (e == null)
                {
                    return(base.Json(new JsonResponse <CmsContent>
                    {
                        data = cmsContent
                    }));
                }
                else
                {
                    return(Json(new JsonResponse <CmsContent>
                    {
                        code = 1,
                        message = e.Message
                    }));
                }
            }
            catch (Exception ex)
            {
                return(Json(new JsonResponse <CmsContent>
                {
                    code = 1,
                    message = ex.Message
                }));
            }
        }
        public ContentJsGridResult ListContent(JsGridFilter filter, bool onlyPublished = false)
        {
            filter             = filter ?? new JsGridFilter();
            filter.categoryIds = filter.categoryIds ?? new List <Guid>();
            filter.categoryIds.Where(i => i != null && i != Guid.Empty).ToList();
            long itemsCount        = 0;
            List <CmsContent> data = new List <CmsContent>();
            //List<CmsCategory> listCategory = new List<CmsCategory>();
            List <CmsRelation.Dto> listRelation = new List <CmsRelation.Dto>();

            if (string.IsNullOrEmpty(filter.SortType) == false && filter.SortType.IndexOf("random") >= 0)
            {
                filter.SortType = _rnd.Next(1, 1000000) % 2 == 0 ? "oldest" : "newest";
            }
            using (var db = new MoneyNoteDbContext())
            {
                var query = db.CmsContents.AsQueryable();
                if (onlyPublished)
                {
                    query = query.Where(i => i.IsPublished == 1);
                }
                if (string.IsNullOrEmpty(filter.Type) == false && filter.Type.IndexOf("image") >= 0)
                {
                    query = query.Where(i => i.UrlRef == string.Empty || i.UrlRef == null);
                }
                if (string.IsNullOrEmpty(filter.Type) == false && filter.Type.IndexOf("video") >= 0)
                {
                    query = query.Where(i => i.UrlRef != string.Empty && i.UrlRef != null);
                }
                if (!string.IsNullOrEmpty(filter.title))
                {
                    query = query.Where(i => i.Title.Contains(filter.title));
                }
                if (!string.IsNullOrEmpty(filter.description))
                {
                    query = query.Where(i => i.Description.Contains(filter.description));
                }
                if (!string.IsNullOrEmpty(filter.urlRef))
                {
                    query = query.Where(i => i.UrlRef.Contains(filter.urlRef));
                }

                if (filter.findRootItem != null && filter.findRootItem == true)
                {
                    //query = query.Where(i => i.ParentId == null || i.ParentId == Guid.Empty);
                    var idsContentRelations = db.CmsRelations.Select(i => i.ContentId).Distinct().ToList();
                    query = query.Where(i => idsContentRelations.Contains(i.Id) == false);
                }
                else
                {
                    if (filter.categoryIds != null && filter.categoryIds.Count > 0)
                    {
                        query = query.Join(db.CmsRelations, c => c.Id, r => r.ContentId, (c, r) => new { c, r })
                                .Where(m => filter.categoryIds.Contains(m.r.CategoryId))
                                .Select(m => m.c);
                    }
                }
                if (filter.contentId != null && filter.contentId.Value != Guid.Empty)
                {
                    var id = filter.contentId.Value;
                    query = query.Where(i => i.Id == id);
                }
                query = query.Distinct().OrderByDescending(i => i.CreatedAt);

                itemsCount = query.LongCount();

                if (filter.pageSize > 0)
                {
                    int skip = (filter.pageIndex - 1) * filter.pageSize;
                    skip = skip < 0 ? 0 : skip;

                    query = query.Skip(skip).Take(filter.pageSize);
                }
                if (string.IsNullOrEmpty(filter.SortType) == false && filter.SortType.IndexOf("oldest") >= 0)
                {
                    query = query.OrderBy(i => i.CreatedAt);
                }
                else
                {
                    query = query.OrderByDescending(i => i.CreatedAt);
                }
                data = query.ToList();

                //listCategory = db.CmsCategories.Where(i => i.IsDeleted == 0).ToList();

                var contentIds = data.Select(i => i.Id).ToList();
                if (contentIds.Count > 0)
                {
                    listRelation = db.CmsRelations.Where(i => contentIds.Contains(i.ContentId))
                                   .Select(i => new CmsRelation.Dto {
                        CategoryId = i.CategoryId, ContentId = i.ContentId
                    })
                                   .Distinct().ToList();
                }

                //cbeadc96-a21a-4ab8-a69b-8a56c893ffce
            }
            data = data.Select((i) =>
            {
                return((i.ThumbnailWidth == 0 || i.ThumbnailHeight == 0) ? i.CalculateThumbnail() : i);
            }).ToList();
            return(new ContentJsGridResult
            {
                data = data,
                itemsCount = itemsCount,
                listRelation = listRelation,
                //listCategory = listCategory
            });
        }
        public IActionResult CreateOrUpdate([FromBody] User data)
        {
            if (string.IsNullOrEmpty(data.Username))
            {
                return(Json(new JsonResponse <string> {
                    code = 1, message = "Usenam can not be empty"
                }));
            }
            if (data.Id == null || data.Id == Guid.Empty)
            {
                data.Id = Guid.NewGuid();
            }

            var passwordHashed = string.Empty;

            if (!string.IsNullOrEmpty(data.Password))
            {
                passwordHashed = Auth.HashPassword(data.Password);
            }

            using (var db = new MoneyNoteDbContext())
            {
                var exited = db.Users.FirstOrDefault(i => i.Username == data.Username && i.IsDeleted == 0);
                if (exited == null)
                {
                    db.Users.Add(data);
                }
                else
                {
                    if (!string.IsNullOrEmpty(passwordHashed))
                    {
                        exited.Password = passwordHashed;
                    }
                }

                db.SaveChanges();
            }

            using (var db = new MoneyNoteDbContext())
            {
                var existed = db.UserAcls.Where(i => i.UserId == data.Id).ToList();
                db.UserAcls.RemoveRange(existed);
                db.SaveChanges();
            }
            if (data.Acls != null && data.Acls.Count > 0)
            {
                List <UserAcl> acls = data.Acls.Distinct().Select(i => new UserAcl
                {
                    Id             = Guid.NewGuid(),
                    ModuleCode     = i.ModuleCode,
                    PermissionCode = i.PermissionCode,
                    UserId         = data.Id
                }).ToList();
                using (var db = new MoneyNoteDbContext())
                {
                    db.UserAcls.AddRange(acls);
                    db.SaveChanges();
                }
            }

            data.Password = string.Empty;

            return(Json(new JsonResponse <User> {
                data = data
            }));
        }
Exemplo n.º 20
0
        public static bool Login(string username, string password, HttpContext context, out string token)
        {
            token = string.Empty;
            User user;

            if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
            {
                return(false);
            }

            var encryptPwd = HashPassword(password);

            using (var db = new MoneyNoteDbContext())
            {
                user = db.Users.FirstOrDefault(i => i.Username.Equals(username) && i.Password.Equals(encryptPwd));
            }

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

            token            = GenerateToken(username);
            user.LastLogedin = DateTime.Now;
            user.LastToken   = token;

            if (context != null)
            {
                context.Session.Set("__CurrentUserToken", UTF8Encoding.UTF8.GetBytes(token));
            }

            MemoryMessageBus.Instance.CacheSet(token, user, DateTime.Now.AddDays(1));
            if (user.Username == "supperadmin")
            {
                MemoryMessageBus.Instance.CacheSet($"{token}_module", new List <string> {
                    "SupperAdmin"
                });
                MemoryMessageBus.Instance.CacheSet($"{token}_permission", new List <string> {
                    "SupperAdmin"
                });
            }
            else
            {
                if (_lookupUserAcls.TryGetValue(user.Id, out List <UserAcl> userAcls) && userAcls != null && userAcls.Count > 0)
                {
                    MemoryMessageBus.Instance.CacheSet($"{token}_module", userAcls.Select(i => i.ModuleCode).Distinct().ToList());
                    MemoryMessageBus.Instance.CacheSet($"{token}_permission", userAcls.Select(i => i.PermissionCode).Distinct().ToList());
                }
            }
            Task.Run(() =>
            {
                using (var db = new MoneyNoteDbContext())
                {
                    var tempU         = db.Users.FirstOrDefault(i => i.Id == user.Id);
                    tempU.LastToken   = user.LastToken;
                    tempU.LastLogedin = user.LastLogedin;
                    db.SaveChanges();
                }
            });
            return(true);
        }
        public JsonResponse <ContentJsGridResult> GetContentRelated(ContentRelatedRequest request)
        {
            request.Type     = (request.Type ?? string.Empty).ToLower();
            request.SortType = (request.SortType ?? string.Empty).ToLower();

            if (string.IsNullOrEmpty(request.SortType) == false && request.SortType.IndexOf("random") >= 0)
            {
                request.SortType = _rnd.Next(1, 1000000) % 2 == 0 ? "oldest" : "newest";
            }

            using (var db = new MoneyNoteDbContext())
            {
                var query = db.CmsContents.Where(i => i.IsPublished == 1).Join(db.CmsRelations, c => c.Id, r => r.ContentId, (c, r) => new { c, r });
                if (string.IsNullOrEmpty(request.Type) == false && request.Type.IndexOf("image") >= 0)
                {
                    query = query.Where(i => i.c.UrlRef == string.Empty || i.c.UrlRef == null);
                }
                if (string.IsNullOrEmpty(request.Type) == false && request.Type.IndexOf("video") >= 0)
                {
                    query = query.Where(i => i.c.UrlRef != string.Empty && i.c.UrlRef != null);
                }

                var queryCat = query.AsQueryable();

                if (request.ContentId != null && request.ContentId != Guid.Empty)
                {
                    queryCat = queryCat.Where(i => i.r.ContentId == request.ContentId);
                }
                var categories = queryCat.Select(i => i.r.CategoryId).Distinct().ToList();

                var relation = queryCat.Select(i => new CmsRelation.Dto {
                    CategoryId = i.r.CategoryId, ContentId = i.r.ContentId
                })
                               .Distinct().ToList();

                var queryContent = query.Where(i => i.c.Id != request.ContentId)
                                   .Where(i => categories.Contains(i.r.CategoryId)).Select(i => i.c).Distinct();

                if (string.IsNullOrEmpty(request.Type) == false && request.SortType.IndexOf("oldest") >= 0)
                {
                    queryContent = queryContent.OrderBy(i => i.CreatedAt);
                }
                else
                {
                    queryContent = queryContent.OrderByDescending(i => i.CreatedAt);
                }

                var total = queryContent.Count();

                if (request.pageIndex != null && request.pageSize > 0)
                {
                    int skip = (request.pageIndex.Value - 1) * request.pageSize.Value;
                    skip = skip < 0 ? 0 : skip;

                    int take = request.pageSize.Value;
                    queryContent = queryContent.Skip(skip).Take(take);
                }

                var data = queryContent.ToList();

                return(new JsonResponse <ContentJsGridResult>
                {
                    data = new ContentJsGridResult
                    {
                        data = data,
                        itemsCount = total,
                        listRelation = relation
                    },
                });
            }
        }