Beispiel #1
0
        /// <summary>
        /// 添加给定的用户到给定的队伍中。
        /// </summary>
        /// <param name="team">队伍句柄。</param>
        /// <param name="user">用户句柄。</param>
        /// <exception cref="ArgumentNullException"/>
        /// <exception cref="TeamNotFoundException"/>
        /// <exception cref="UserNotFoundException"/>
        public void AddUserToTeam(TeamHandle team, UserHandle user)
        {
            if (team == null)
            {
                throw new ArgumentNullException(nameof(team));
            }
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            m_factory.WithContext(context =>
            {
                TeamProfileEntity teamEntity = context.QueryTeamProfileEntity(team.TeamId);
                if (teamEntity == null)
                {
                    throw new TeamNotFoundException(team);
                }

                UserProfileEntity userEntity = context.QueryUserProfileEntity(user.Username);
                if (userEntity == null)
                {
                    throw new UserNotFoundException(user);
                }

                teamEntity.Members.Add(userEntity);
                context.SaveChanges();
            });
        }
Beispiel #2
0
        /// <summary>
        /// 在数据库中创建一个新的队伍实体对象。
        /// </summary>
        /// <returns>新创建的队伍句柄。</returns>
        public TeamHandle CreateTeam()
        {
            TeamProfileEntity entity = new TeamProfileEntity();

            m_factory.WithContext(context =>
            {
                entity = context.AddTeamProfileEntity(entity);
                context.SaveChanges();
            });

            return(TeamHandle.FromTeamEntity(entity));
        }
Beispiel #3
0
        /// <summary>
        /// 根据指定的队伍查询参数查询队伍句柄。
        /// </summary>
        /// <param name="query">查询参数。</param>
        /// <returns>查询到的队伍句柄结果对象。</returns>
        /// <exception cref="ArgumentNullException"/>
        public ReadOnlyCollection <TeamHandle> QueryTeams(TeamQueryParameter query)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }
            if (query.QueryByName && query.Name == null)
            {
                throw new ArgumentNullException(nameof(query.Name));
            }
            if (query.QueryByLeader && query.Leader == null)
            {
                throw new ArgumentNullException(nameof(query.Leader));
            }

            return(m_factory.WithContext(context =>
            {
                IQueryable <TeamProfileEntity> set = context.GetAllTeamProfiles();
                if (query.QueryByName)
                {
                    set = UserDataContext.QueryTeamProfileEntityByName(set, query.Name);
                }
                if (query.QueryByLeader)
                {
                    set = UserDataContext.QueryTeamProfileEntityByLeader(set, query.Leader);
                }

                // 对查询结果进行排序以准备分页。
                set = set.OrderBy(ent => ent.Id);

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

                List <TeamHandle> handles = new List <TeamHandle>();
                foreach (TeamProfileEntity ent in set)
                {
                    handles.Add(TeamHandle.FromTeamEntity(ent));
                }

                return new ReadOnlyCollection <TeamHandle>(handles);
            }));
        }
Beispiel #4
0
        /// <summary>
        /// 从数据库中移除给定的队伍。
        /// </summary>
        /// <param name="team">要移除的队伍句柄。</param>
        /// <exception cref="ArgumentNullException"/>
        public void RemoveTeam(TeamHandle team)
        {
            if (team == null)
            {
                throw new ArgumentNullException(nameof(team));
            }

            m_factory.WithContext(context =>
            {
                TeamProfileEntity entity = context.QueryTeamProfileEntity(team.TeamId);
                if (entity == null)
                {
                    return;
                }

                context.RemoveTeamProfileEntity(entity);
                context.SaveChanges();
            });
        }
Beispiel #5
0
        /// <summary>
        /// 从给定的队伍中移除给定的用户。
        /// </summary>
        /// <param name="team">队伍句柄。</param>
        /// <param name="user">用户句柄。</param>
        /// <exception cref="ArgumentNullException"/>
        /// <exception cref="TeamNotFoundException"/>
        /// <exception cref="UserNotFoundException"/>
        public void RemoveUserFromTeam(TeamHandle team, UserHandle user)
        {
            if (team == null)
            {
                throw new ArgumentNullException(nameof(team));
            }
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            m_factory.WithContext(context =>
            {
                TeamProfileEntity teamEntity = context.QueryTeamProfileEntity(team.TeamId);
                if (teamEntity == null)
                {
                    throw new TeamNotFoundException(team);
                }

                UserProfileEntity userEntity = context.QueryUserProfileEntity(user.Username);
                if (userEntity == null)
                {
                    throw new UserNotFoundException(user);
                }

                foreach (UserProfileEntity teamUser in teamEntity.Members)
                {
                    if (string.Compare(teamUser.Username, userEntity.Username, false) == 0)
                    {
                        teamEntity.Members.Remove(teamUser);
                        break;
                    }
                }

                context.SaveChanges();
            });
        }
 /// <summary>
 /// 使用给定的队伍句柄和异常消息创建 TeamException 类的新实例。
 /// </summary>
 /// <param name="handle"></param>
 /// <param name="message"></param>
 public TeamException(TeamHandle handle, string message) : base(message)
 {
     Handle = handle;
 }
 /// <summary>
 /// 使用给定的队伍句柄创建 TeamException 类的新实例。
 /// </summary>
 /// <param name="handle">队伍句柄。</param>
 public TeamException(TeamHandle handle) : base($"队伍 {handle.TeamId} 触发了异常。")
 {
     Handle = handle;
 }