Esempio n. 1
0
    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);
    }
Esempio n. 2
0
    /// <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));
    }
Esempio n. 3
0
    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();
    }