public async Task <MissionCompletionResult> CompleteMission(string missionId, MissionProof missionProof) { //TODO validate image urls if (string.IsNullOrEmpty(missionId)) { return((MissionCompletionResult)OperationResult.NotFound); } var userId = this.GetCurrentUserId(); return(await _missionRequestService.CompleteMission(userId, missionId, missionProof)); }
/// <summary> /// Completes the mission. /// </summary> /// <param name="userId">The user id.</param> /// <param name="missionId">The mission id.</param> /// <param name="missionProof">The mission proof.</param> /// <returns>Task{MissionCompletionResult}.</returns> public async Task <MissionCompletionResult> CompleteMission( string userId, string missionId, MissionProof missionProof) { var user = await _userRepository.GetUser(userId); if (user == null) { return(new MissionCompletionResult(OperationResultStatus.Error, "User was not found")); } var currentMission = user.ActiveMissionIds.FirstOrDefault(m => m.MissionId == missionId); if (currentMission == null) { return(new MissionCompletionResult(OperationResultStatus.Error, "Mission was not found")); } var mission = await _missionRepository.GetMission(missionId); var missionRequest = new MissionRequest { Mission = mission, User = user, MissionId = missionId, UserId = userId, Proof = missionProof, LastUpdateDate = DateTime.UtcNow, Status = MissionRequestStatus.AutoApproval }; var possibleUniqueMissionType = UniqueMissionsDictionary.GetMissionType(missionRequest.MissionId); if (possibleUniqueMissionType != null) { return (await UniqueMissionProcessor.Process( possibleUniqueMissionType, missionRequest, _missionRequestRepository, _userRepository, _ratingService)); } if (mission.ExecutionType == ExecutionType.PhotoCreation || mission.ExecutionType == ExecutionType.TextCreation || mission.ExecutionType == ExecutionType.Video) { missionRequest.Status = MissionRequestStatus.NotChecked; var addResult = await _missionRequestRepository.AddMissionRequest(missionRequest); if (addResult.Status != OperationResultStatus.Success) { return(MissionCompletionResult.FromOperationResult(addResult)); } return(new MissionCompletionResult { MissionCompletionStatus = MissionCompletionStatus.Waiting }); } return(await ProcessAutoApprovedMissions(missionRequest)); }