Пример #1
0
        /// <summary>
        /// 建立車隊
        /// </summary>
        /// <param name="teamInfo">teamInfo</param>
        /// <returns>string</returns>
        public async Task <string> Register(TeamInfoDto teamInfo)
        {
            try
            {
                Tuple <TeamData, string> createTeamDataResult = await this.CreateTeamData(teamInfo);

                if (!string.IsNullOrEmpty(createTeamDataResult.Item2))
                {
                    return(createTeamDataResult.Item2);
                }

                TeamData teamData  = createTeamDataResult.Item1;
                bool     isSuccess = await this.teamRepository.CreateTeamData(teamData);

                if (!isSuccess)
                {
                    return("建立車隊失敗.");
                }

                return(string.Empty);
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Register Error >>> Data:{JsonConvert.SerializeObject(teamInfo)}\n{ex}");
                return("建立車隊發生錯誤.");
            }
        }
Пример #2
0
        /// <summary>
        /// 取得車隊資訊
        /// </summary>
        /// <param name="teamCommand">teamCommand</param>
        /// <returns>Tuple(TeamInfoDto, string)</returns>
        public async Task <Tuple <TeamInfoDto, string> > GetTeamInfo(TeamCommandDto teamCommand)
        {
            try
            {
                bool verifyTeamCommandResult = this.VerifyTeamCommand(teamCommand, false, true, false, false, false, false);
                if (!verifyTeamCommandResult)
                {
                    this.logger.LogError($"Get Team Info Fail For Verify TeamCommand >>> TeamID:{teamCommand.TeamID} TargetID:{teamCommand.TargetID}");
                    return(Tuple.Create <TeamInfoDto, string>(null, "取得車隊資訊失敗."));
                }

                TeamData teamData = await this.teamRepository.GetTeamData(teamCommand.TeamID);

                if (teamData == null)
                {
                    return(Tuple.Create <TeamInfoDto, string>(null, "車隊不存在."));
                }

                if (teamData.TeamBlacklistIDs.Contains(teamCommand.TargetID))
                {
                    return(Tuple.Create <TeamInfoDto, string>(null, "會員已被車隊設為黑名單."));
                }

                TeamInfoDto teamInfo = await this.OnTransformTeamDataNews(teamData, teamCommand.TargetID);

                return(Tuple.Create(teamInfo, string.Empty));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Get Team Info Error >>> TeamID:{teamCommand.TeamID} TargetID:{teamCommand.TargetID}\n{ex}");
                return(Tuple.Create <TeamInfoDto, string>(null, "取得車隊資訊發生錯誤."));
            }
        }
Пример #3
0
        /// <summary>
        /// 車隊資料更新處理
        /// </summary>
        /// <param name="teamInfo">teamInfo</param>
        /// <param name="teamData">teamData</param>
        /// <returns>string</returns>
        private async Task <string> UpdateTeamDataHandler(TeamInfoDto teamInfo, TeamData teamData)
        {
            if (!string.IsNullOrEmpty(teamInfo.TeamName))
            {
                bool isRepeatTeamName = await this.teamRepository.VerifyTeamDataByTeamName(teamInfo.TeamName);

                if (isRepeatTeamName)
                {
                    return("車隊名稱重複.");
                }

                teamData.TeamName = teamInfo.TeamName;
            }

            if (!string.IsNullOrEmpty(teamInfo.TeamLocation))
            {
                teamData.TeamLocation = teamInfo.TeamLocation;
            }

            if (!string.IsNullOrEmpty(teamInfo.TeamInfo))
            {
                teamData.TeamInfo = teamInfo.TeamInfo;
            }

            if (!string.IsNullOrEmpty(teamInfo.TeamPhoto))
            {
                teamData.TeamPhoto = teamInfo.TeamPhoto;
            }

            if (!string.IsNullOrEmpty(teamInfo.TeamCoverPhoto))
            {
                teamData.TeamCoverPhoto = teamInfo.TeamCoverPhoto;
            }

            if (teamInfo.TeamSearchStatus != (int)TeamSearchStatusType.None)
            {
                teamData.TeamSearchStatus = teamInfo.TeamSearchStatus;
            }

            if (teamInfo.TeamExamineStatus != (int)TeamExamineStatusType.None)
            {
                teamData.TeamExamineStatus = teamInfo.TeamExamineStatus;
            }

            return(string.Empty);
        }
Пример #4
0
        /// <summary>
        /// 轉換車隊最新消息資料
        /// </summary>
        /// <param name="teamData">teamData</param>
        /// <param name="targetID">targetID</param>
        /// <returns>TeamInfoDto</returns>
        private async Task <TeamInfoDto> OnTransformTeamDataNews(TeamData teamData, string targetID)
        {
            TeamInfoDto teamInfo = this.mapper.Map <TeamInfoDto>(teamData);

            teamInfo.HasNewAnnouncement = !teamData.HaveSeenAnnouncementMemberIDs.Contains(targetID);
            IEnumerable <EventData> eventDatas = await eventRepository.GetEventDataListOfTeam(teamData.TeamID);

            foreach (EventData eventData in eventDatas)
            {
                if (!eventData.HaveSeenMemberIDs.Contains(targetID))
                {
                    teamInfo.HasNewEvent = true;
                    break;
                }
            }

            return(teamInfo);
        }
Пример #5
0
        public async Task <IActionResult> Post(TeamInfoDto teamInfo)
        {
            try
            {
                string result = await this.teamService.Register(teamInfo);

                if (string.IsNullOrEmpty(result))
                {
                    return(Ok("建立車隊成功."));
                }

                return(BadRequest(result));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Register Error >>> Data:{JsonConvert.SerializeObject(teamInfo)}\n{ex}");
                return(BadRequest("建立車隊發生錯誤."));
            }
        }
Пример #6
0
        /// <summary>
        /// 取得會員的車隊資訊列表
        /// </summary>
        /// <param name="teamCommand">teamCommand</param>
        /// <returns>Tuple(TeamInfoArray, string)</returns>
        public async Task <Tuple <dynamic[], string> > GetTeamInfoListOfMember(TeamCommandDto teamCommand)
        {
            try
            {
                string memberID = teamCommand.TargetID;
                if (string.IsNullOrEmpty(memberID))
                {
                    return(Tuple.Create <dynamic[], string>(null, "會員編號無效."));
                }

                IEnumerable <TeamData> teamDatas = await this.teamRepository.GetTeamDataListOfMember(memberID);

                TeamData    leaderTeamData = teamDatas.Where(data => data.TeamLeaderID.Equals(memberID)).FirstOrDefault();
                TeamInfoDto leaderTeamInfo = null;
                if (leaderTeamData != null)
                {
                    (teamDatas as List <TeamData>).Remove(leaderTeamData);
                    leaderTeamInfo = await this.OnTransformTeamDataNews(leaderTeamData, memberID);
                }

                IEnumerable <TeamInfoDto> teamInfos = new List <TeamInfoDto>();
                foreach (TeamData teamData in teamDatas)
                {
                    TeamInfoDto teamInfo = await this.OnTransformTeamDataNews(teamData, memberID);

                    (teamInfos as List <TeamInfoDto>).Add(teamInfo);
                }

                dynamic[] myTeamInfo = new dynamic[] { leaderTeamInfo, teamInfos };
                return(Tuple.Create(myTeamInfo, string.Empty));
            }
            catch (Exception ex)
            {
                this.logger.LogError($"Get Team Info List Of Member Error >>> MemberID:{teamCommand.TargetID}\n{ex}");
                return(Tuple.Create <dynamic[], string>(null, "取得會員的車隊資訊列表發生錯誤."));
            }
        }
Пример #7
0
        /// <summary>
        /// 創建新車隊資料
        /// </summary>
        /// <param name="teamInfo">teamInfo</param>
        /// <returns>Tuple(TeamData, string)</returns>
        private async Task <Tuple <TeamData, string> > CreateTeamData(TeamInfoDto teamInfo)
        {
            if (string.IsNullOrEmpty(teamInfo.TeamLeaderID))
            {
                return(Tuple.Create <TeamData, string>(null, "創建人會員編號無效."));
            }
            else
            {
                bool isMultipleTeam = await this.teamRepository.VerifyTeamDataByTeamLeaderID(teamInfo.TeamLeaderID);

                if (isMultipleTeam)
                {
                    return(Tuple.Create <TeamData, string>(null, "無法建立多個車隊."));
                }
            }

            if (string.IsNullOrEmpty(teamInfo.TeamName))
            {
                return(Tuple.Create <TeamData, string>(null, "車隊名稱無效."));
            }
            else
            {
                bool isRepeatTeamName = await this.teamRepository.VerifyTeamDataByTeamName(teamInfo.TeamName);

                if (isRepeatTeamName)
                {
                    return(Tuple.Create <TeamData, string>(null, "車隊名稱重複."));
                }
            }

            if (string.IsNullOrEmpty(teamInfo.TeamLocation))
            {
                return(Tuple.Create <TeamData, string>(null, "車隊所在地無效."));
            }

            if (string.IsNullOrEmpty(teamInfo.TeamInfo))
            {
                return(Tuple.Create <TeamData, string>(null, "車隊簡介無效."));
            }

            if (string.IsNullOrEmpty(teamInfo.TeamPhoto))
            {
                return(Tuple.Create <TeamData, string>(null, "未上傳車隊頭像."));
            }

            if (string.IsNullOrEmpty(teamInfo.TeamCoverPhoto))
            {
                return(Tuple.Create <TeamData, string>(null, "未上傳車隊封面."));
            }

            if (teamInfo.TeamSearchStatus == (int)TeamSearchStatusType.None)
            {
                return(Tuple.Create <TeamData, string>(null, "未設定搜尋狀態."));
            }

            if (teamInfo.TeamExamineStatus == (int)TeamExamineStatusType.None)
            {
                return(Tuple.Create <TeamData, string>(null, "未設定審核狀態."));
            }

            DateTime createDate = DateTime.Now;
            TeamData teamData   = this.mapper.Map <TeamData>(teamInfo);

            teamData.TeamID                        = this.GetSerialID(createDate);
            teamData.TeamCreateDate                = createDate;
            teamData.TeamSaveDeadline              = createDate.AddDays(60);
            teamData.TeamViceLeaderIDs             = new List <string>();
            teamData.TeamPlayerIDs                 = new List <string>();
            teamData.TeamApplyForJoinIDs           = new List <string>();
            teamData.TeamInviteJoinIDs             = new List <string>();
            teamData.TeamBlacklistIDs              = new List <string>();
            teamData.TeamBlacklistedIDs            = new List <string>();
            teamData.HaveSeenAnnouncementMemberIDs = new List <string>();
            return(Tuple.Create(teamData, string.Empty));
        }
Пример #8
0
 /*
  * TeamInfoView
  */
 /// <summary>
 /// Map using Automapper
 /// </summary>
 public static TeamInfoView MapToDbView(this TeamInfoDto dto)
 {
     return(Mapper.Map <TeamInfoView>(dto));
 }