Пример #1
0
 /// <summary>
 /// 获取特定被操作实体的满足特定条件的操作人id集合
 /// </summary>
 /// <param name="operatedId">被操作实体的id</param>
 /// <param name="page">页数</param>
 /// <param name="pagesize">每页数量</param>
 /// <param name="operatedType">被操作实体类型</param>
 /// <param name="operation">操作类型</param>
 /// <returns>操作者id集合</returns>
 public List <Guid> GetOperatorIds(Guid operatedId, int page = 0, int pagesize = 10,
                                   OperatedType operatedType = OperatedType.Article, Operation operation = Operation.Star)
 {
     return(collection.AsQueryable().Where(a => a.OperatedObjectInfo.type == operatedType
                                           & a.Operation == operation & a.OperatedObjectInfo.Id == operatedId)
            .Select(a => a.Operator.Id).Skip(page * pagesize).Take(pagesize).ToList());
 }
Пример #2
0
 public OperatedObjectInfo(Guid id, OperatedType opType, Dictionary <string, object> _infos, Guid?userid = null)
 {
     OperatedUserId = userid.GetValueOrDefault(Guid.Empty);
     type           = opType;
     Id             = id;
     Infos          = _infos ?? new Dictionary <string, object>();
 }
Пример #3
0
        /// <summary>
        /// 获取对当前实例的推荐实例
        /// </summary>
        /// <param name="articleId"></param>
        /// <param name="op"></param>
        /// <param name="operatedType"></param>
        /// <param name="num"></param>
        /// <returns></returns>
        public IEnumerable <Guid> GetRecEntities(Guid articleId, Operation op, OperatedType operatedType, int num = 10)
        {
            var ids = collection.AsQueryable().Where(l => l.OperatedObjectInfo.Id == articleId && l.Operation == op &&
                                                     l.OperatedObjectInfo.type == operatedType && l.IsDeleted == false).Select(a => a.OperatedObjectInfo).GroupBy(a => a.OperatedUserId)
                      .OrderByDescending(g => g.Count()).Take(num).AsEnumerable().Select(g => g.Key);

            return(ids);
        }
Пример #4
0
 /// <summary>
 /// 获取某人满足特定条件的操作中被操作物体的id的集合
 /// </summary>
 /// <param name="id">操作者id</param>
 /// <param name="page">页数</param>
 /// <param name="pagesize">每页数量</param>
 /// <param name="operatedType">被操作实体类型</param>
 /// <param name="operation">操作类型</param>
 /// <param name="exFilter"></param>
 /// <returns>被操作实体的id集合</returns>
 public async ValueTask <IEnumerable <Guid> > GetXXXedIds(Guid id, int page         = 0, int?pagesize = 10,
                                                          OperatedType operatedType = OperatedType.Article, Operation operation = Operation.Star,
                                                          FilterDefinition <Auditlog <TUserBrief> > exFilter = null)
 {
     return(await GetAsync(a => a.OperatedObjectInfo.Id, page, pagesize, orderBy : "CreateTime", true,
                           filterBuilder.Eq(a => a.OperatedObjectInfo.type, operatedType)
                           & filterBuilder.Eq(a => a.Operation, operation)
                           & filterBuilder.Eq(a => a.Operator.Id, id)
                           & (exFilter ?? filterBuilder.Empty)));
 }
Пример #5
0
 public async ValueTask <Guid> GetLastXXXedGuid(string userid, Operation op, OperatedType operatedType)
 {
     try
     {
         return(await FindFirstAsync(l => l.Operator.Id == Guid.Parse(userid) && l.Operation == op &&
                                     l.OperatedObjectInfo.type == operatedType && l.IsDeleted == false, a => a.OperatedObjectInfo.Id,
                                     Builders <Auditlog <TUserBrief> > .Sort.Descending(a => a.CreateTime)));
     }
     catch (Exception)
     {
         return(Guid.Empty);
     }
 }
Пример #6
0
        public async ValueTask UnXXXAsync(string userid, Guid id, Operation op, OperatedType operatedType)
        {
            await Task.Yield();

            var ids = collection.AsQueryable().Where(a => a.OperatedObjectInfo.type == operatedType
                                                     & a.Operation == op & a.Operator.Id == Guid.Parse(userid) &
                                                     a.OperatedObjectInfo.Id == id).Select(a => a.Id).ToList();

            if (ids.Count == 0)
            {
                throw new _400Exception("Have not stared before!");
            }
            await collection.DeleteManyAsync(Builders <Auditlog <TUserBrief> > .Filter.In(a => a.Id, ids));
        }
Пример #7
0
 /// <summary>
 /// 检验某特定操作(eg:收藏/点赞)是否之前被执行过
 /// </summary>
 /// <param name="userid"></param>
 /// <param name="id">被操作物体的id</param>
 /// <param name="op">操作类型</param>
 /// <param name="operatedType">被操作物体类型</param>
 /// <param name="exFilter"></param>
 /// <returns></returns>
 public async ValueTask <bool> IsXXXBefore(string userid, Guid id, Operation op, OperatedType operatedType,
                                           FilterDefinition <Auditlog <TUserBrief> > exFilter = null)
 {
     return(await AnyAsync(filterBuilder.Eq(a => a.OperatedObjectInfo.type, operatedType)
                           & filterBuilder.Eq(a => a.Operation, op)
                           & filterBuilder.Eq(a => a.OperatedObjectInfo.Id, id)
                           & filterBuilder.Eq(a => a.Operator.Id, Guid.Parse(userid))
                           & (exFilter ?? filterBuilder.Empty)));
 }
Пример #8
0
        public async ValueTask <IEnumerable <string> > GetCollectionNames(Guid userid, Operation op, OperatedType operatedType, int num = 10)
        {
            var re = collection.Distinct(l => l.OperatedObjectInfo.Infos["colname"], l => l.Operator.Id == userid && l.Operation == op &&
                                         l.OperatedObjectInfo.type == operatedType && l.IsDeleted == false);

            return((await re.ToListAsync()).Cast <string>());
        }
Пример #9
0
 public async ValueTask LogEntityAsync(string userId,
                                       Guid entityId, Operation operation, OperatedType operatedType = OperatedType.Article, Guid?operatedUserId = null,
                                       Dictionary <string, object> infos = null)
 => await LogAsync(Guid.Parse(userId), operation,
                   new OperatedObjectInfo(entityId, operatedType, infos, operatedUserId));