示例#1
0
        /// <summary>
        /// 使用给定的提交 ID 查询提交句柄。
        /// </summary>
        /// <param name="submissionId">提交 ID。</param>
        /// <returns>查询到的提交句柄。若给定的提交 ID 不存在,返回 null。</returns>
        public SubmissionHandle QuerySubmissionById(int submissionId)
        {
            SubmissionEntity entity
                = m_factory.WithContext(context => context.QuerySubmissionEntityById(submissionId));

            if (entity == null)
            {
                return(null);
            }

            return(SubmissionHandle.FromSubmissionEntity(entity));
        }
示例#2
0
        /// <summary>
        /// 使用给定的查询参数查询用户提交。
        /// </summary>
        /// <param name="query">查询参数。</param>
        /// <returns>一个包含了所有的查询结果的结果对象。</returns>
        /// <exception cref="ArgumentNullException"/>
        public ReadOnlyCollection <SubmissionHandle> QuerySubmissions(SubmissionQueryParameter query)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }
            if (query.QueryByProblemId && query.ProblemId == null)
            {
                throw new ArgumentNullException(nameof(query.ProblemId));
            }
            if (query.QueryByUsername && query.Username == null)
            {
                throw new ArgumentNullException(nameof(query.Username));
            }

            return(m_factory.WithContext(context =>
            {
                IQueryable <SubmissionEntity> set = context.QuerySubmissionEntities(query.GetQueryHandle());

                // 将所有实体对象按照创建时间排序以准备随时分页并显示。
                if (query.OrderByDescending)
                {
                    set = set.OrderByDescending(item => item.CreationTimestamp);
                }
                else
                {
                    set = set.OrderBy(item => item.CreationTimestamp);
                }

                if (query.EnablePageQuery)
                {
                    set = set.Page(query.PageQuery);
                }

                List <SubmissionHandle> handles = new List <SubmissionHandle>();
                foreach (SubmissionEntity ent in set)
                {
                    handles.Add(SubmissionHandle.FromSubmissionEntity(ent));
                }

                return new ReadOnlyCollection <SubmissionHandle>(handles);
            }));
        }
示例#3
0
        /// <summary>
        /// 获取当前正处在等待评测状态的用户提交中创建时间最早的一条用户提交的句柄。
        /// </summary>
        /// <returns>当前正处在等待评测状态的用户提交中创建时间最早的一条用户提交的句柄。若不存在这样的用户提交,返回 null。</returns>
        public SubmissionHandle GetPendingListFront()
        {
            SubmissionQueryHandle query = new SubmissionQueryHandle()
            {
                VerdictStatus    = DatabaseVerdictStatus.Pending,
                UseVerdictStatus = true
            };

            IList <SubmissionEntity> set = m_factory.WithContext(context => context.QuerySubmissionEntities(query)
                                                                 .OrderBy(entity => entity.CreationTimestamp).Take(1).ToList());

            if (set.Count == 0)
            {
                return(null);
            }
            else
            {
                return(SubmissionHandle.FromSubmissionEntity(set[0]));
            }
        }
示例#4
0
 /// <summary>
 /// 使用给定到的用户提交句柄与异常信息创建 SubmissionException 类的新实例。
 /// </summary>
 /// <param name="handle">用户提交句柄。</param>
 /// <param name="message">异常消息。</param>
 public SubmissionException(SubmissionHandle handle, string message) : base(message)
 {
     Handle = handle;
 }
示例#5
0
 /// <summary>
 /// 使用给定的用户提交句柄创建 SubmissionException 类的新实例。
 /// </summary>
 /// <param name="handle">用户提交句柄。</param>
 public SubmissionException(SubmissionHandle handle) : base($"用户提交 {handle.SubmissionId} 引发异常。")
 {
     Handle = handle;
 }