public void CompleteQuest(int id, QuestCompletionDto completionData) { var quest = ldmeContext.Quests.Include(q => q.QuestOwner).Single(x => x.Id == id); if (quest.QuestOwnerId != completionData.CopletedBy || quest.QuestCreatorId != completionData.CopletedBy) { throw new Exception("Only owner or creator of this quest can complete it"); } if (!quest.Accepted) { throw new Exception("Cannot complete not accepted quest"); } if (quest.DeadlineDate.HasValue && ( (completionData.CompletionDate.HasValue && quest.DeadlineDate.Value < completionData.CompletionDate) || quest.DeadlineDate.Value < DateTime.UtcNow)) { throw new Exception("Cannot complete quest after its deadline"); } if (quest.FinishedDate.HasValue) { throw new Exception("Cannot complete already finished quest"); } if (quest.QuestType == QuestType.Daily) { ldmeContext.Repetitions.Add(new Repetition { CompletionDate = completionData.CompletionDate ?? DateTime.UtcNow, GoldGain = quest.GoldReward, HonorGain = quest.HonorReward, ReferencedQuest = quest, TagingPlayerId = completionData.CopletedBy }); } else { quest.QuestState = QuestState.Completed; quest.FinishedDate = completionData.CompletionDate ?? DateTime.UtcNow; } var questOwner = quest.QuestOwner; questOwner.Gold += quest.GoldReward; questOwner.Honor += quest.HonorReward; }
public void CompleteQuest(int id, QuestCompletionDto completionData) { var quest = questRepository.GetQuest(id); if (quest.QuestOwnerId != completionData.CopletedBy || quest.QuestCreatorId != completionData.CopletedBy) { throw new Exception("Only owner or creator of this quest can complete it"); } if (!quest.Accepted) { throw new Exception("Cannot complete not accepted quest"); } if (quest.DeadlineDate.HasValue && ( (completionData.CompletionDate.HasValue && quest.DeadlineDate.Value < completionData.CompletionDate) || quest.DeadlineDate.Value < DateTime.UtcNow)) { throw new Exception("Cannot complete quest after its deadline"); } if (quest.FinishedDate.HasValue) { throw new Exception("Cannot complete already finished quest"); } var questOwner = quest.QuestOwner; if (quest.QuestType == QuestType.Daily) { var rep = repRepository.CreateRepetition(quest, completionData.CopletedBy); questOwner.Gold += rep.GoldGain; questOwner.Honor += quest.HonorReward; } else { quest.QuestState = QuestState.Completed; quest.FinishedDate = completionData.CompletionDate ?? DateTime.UtcNow; questOwner.Gold += quest.GoldReward; questOwner.Honor += quest.HonorReward; } questRepository.SaveChanges(); }
public IActionResult Post(int id, [FromBody] QuestCompletionDto completionData) { if (ModelState.IsValid) { try { _logger.LogDebug("Trying to complete quest"); questDomain.CompleteQuest(id, completionData); return(Ok()); } catch (Exception e) { _logger.LogExceptions(e, this); return(this.HandleErrors(e)); } } return(BadRequest(new ErrorDto(ModelState))); }