/// <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("建立車隊發生錯誤."); } }
/// <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, "取得車隊資訊發生錯誤.")); } }
/// <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); }
/// <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); }
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("建立車隊發生錯誤.")); } }
/// <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, "取得會員的車隊資訊列表發生錯誤.")); } }
/// <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)); }
/* * TeamInfoView */ /// <summary> /// Map using Automapper /// </summary> public static TeamInfoView MapToDbView(this TeamInfoDto dto) { return(Mapper.Map <TeamInfoView>(dto)); }