public async Task <int> CreateAsync(Term term) { Term?existingTerm = await this.termRepository.TryGetByUserAndLanguageAndContentAsync( term.UserId, term.LanguageCode, term.Content); if (existingTerm != null) { throw new BadRequestException("Term has already exist."); } await using (IDbContextTransaction transaction = this.dbTransaction.BeginTransaction()) { this.termRepository.Add(term); this.dbTransaction.SaveChanges(); this.logRepository.Add( new Log( Constants.TermCreatedEvent, new TermCreatedLogData( term.LanguageCode.ToString(), term.Content, term.LearningLevel.ToString() ), authenticationHelper.GetLoggedInUserName() ).WithEntity(nameof(Term), term.Id) ); this.dbTransaction.SaveChanges(); await transaction.CommitAsync(); } return(term.Id); }
/// <inheritdoc /> public async Task <TextReadModel> ReadAsync(int id, int userId) { Text?text = await this.textRepository.Queryable() .Where(t => t.Id == id && t.UserId == userId) .Select( t => new Text() { Id = t.Id, Title = t.Title, Bookmark = t.Bookmark, LanguageCode = t.LanguageCode, TermCount = t.TermCount, }) .SingleOrDefaultAsync(); if (text == null) { throw new NotFoundException("Text not found."); } text.LastReadAt = DateTime.UtcNow; this.textRepository.UpdateTextLastReadAt(text); this.logRepository.Add( new Log( Constants.TextReadEvent, new TextReadLogData(text.Id, text.LanguageCode.ToString()), authenticationHelper.GetLoggedInUserName() ).WithEntity(nameof(Text), text.Id) ); await this.dbTransaction.CommitAsync(); return(this.textReadMapper.Map(text)); }
public async Task EditAsync(TermEditModel termEditModel, int termId, int userId) { Term current = await this.termRepository.GetUserTermAsync(termId, userId); var before = new TermSnapShot(current.Content, current.LanguageCode.ToString(), current.LearningLevel.ToString()); Term edited = this.termEditMapper.Map(termEditModel, current); this.termRepository.Update(edited); var after = new TermSnapShot(current.Content, current.LanguageCode.ToString(), current.LearningLevel.ToString()); this.logRepository.Add( new Log( Constants.TermEditedEvent, new TermEditedEventData(before, after), authenticationHelper.GetLoggedInUserName() ).WithEntity(nameof(Term), current.Id) ); await this.dbTransaction.CommitAsync(); }