protected override VerseData OnPostVerseForPoem(Poem poem, AddVerseModel verseModel, VerseEngineeringUser user) { Verse verse = verseService.GetById(verseModel.Id); if (verse == null) { verse = InsertCandidateVerseWithNoPreviousScratchVerseDefined(poem.Id, verseModel, user.UserId); return Mapper.Map<VerseData>(verse); } if ((verse.VerseType is ScratchVerseType) == false) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent("Only Scratch verses can be submited to Candidates") }); } if (verse.AuthorProfileId != user.UserId) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Forbidden) { Content = new StringContent("You are not allowed to modify verse which wasn't written by you") }); } if (poem.Id != verse.PoemId) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent("Poem identifier is not equivalent with verse identifier") }); } verseService.UpdateVerse(verse, verseService.GetVerseType<CandidateVerseType>()); var response = Mapper.Map<VerseData>(verse); signalizerFactory.GetSignal<CandidateVerseAddedSignal<Raw>>() .FromUser(user.UserId, user.Name) .Send(poem.Id, response); return response; }
protected override VerseData OnPostVerseForPoem(Poem poem, AddVerseModel verseModel, VerseEngineeringUser user) { Verse verse = new Verse { AuthorProfileId = user.UserId, FromIpAddress = string.Empty, LastEdit = DateTime.UtcNow, WrittenAt = DateTime.UtcNow, Location = string.Empty, OrderNr = 0, PoemId = poem.Id, Text = verseModel.Text, }; verseService.Insert<ScratchVerseType>(verse); return Mapper.Map<VerseData>(verse); }
protected override VerseData OnPostVerseForPoem(Poem poem, AddVerseModel verseModel, VerseEngineeringUser user) { Verse verse = verseService.GetById(verseModel.Id); if (verse == null) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound) { Content = new StringContent("No verse with such idetifier was found") }); } if (verse.VerseType is CandidateVerseType == false) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent("Only Candidate verses can be submited to Poem") }); } if (poem.CurrentGm != user.UserId) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Forbidden) { Content = new StringContent("You are not allowed to post poem verses unless you are game master") }); } if (poem.Id != verse.PoemId) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent("Poem identifier is not equivalent with verse identifier") }); } verseService.UpdateVerse(verse, verseService.GetVerseType<PoemVerseType>()); VerseData response = Mapper.Map<VerseData>(verse); signalizerFactory.GetSignal<PoemVerseAddedSignal<Raw>>() .FromUser(user.UserId, user.Name) .Send(poem.Id, response); if (IsGameMasterChanged(poem.CurrentGm, verse.AuthorProfileId)) { UpdateGameMaster(poem, verse); signalizerFactory.GetSignal<PoemGameMasterChangedSignal<Raw>>() .FromUser(user.UserId, user.Name) .Send(poem.Id, Mapper.Map<UserProfileData>(poem.CurrentGameMasterUserProfile)); } return response; }
public VerseData PostVerseForPoem(AddVerseModel verseModel, [ModelBinder(typeof(VerseEngineeringApiUserBinder))] VerseEngineeringUser user) { Poem poem = GetPoemFromRequestForUser(verseModel.PoemId, user); return OnPostVerseForPoem(poem, verseModel, user); }
protected abstract VerseData OnPostVerseForPoem(Poem poem, AddVerseModel verseModel, VerseEngineeringUser user);
private Verse InsertCandidateVerseWithNoPreviousScratchVerseDefined(long poemId, AddVerseModel verseModel, long userId) { Verse verse = new Verse { AuthorProfileId = userId, FromIpAddress = string.Empty, LastEdit = DateTime.UtcNow, WrittenAt = DateTime.UtcNow, Location = string.Empty, OrderNr = 0, PoemId = poemId, Text = verseModel.Text, }; verseService.Insert<CandidateVerseType>(verse); return verse; }