using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System.Diagnostics.Metrics; using System.Security.Cryptography; using System.Text; using System.Text.Json; using Tiku.Application.Learning; using Tiku.Application.QuestionBanks; using Tiku.Application.Security; using Tiku.Domain.Common; using Tiku.Domain.Content; using Tiku.Domain.Learning; using Tiku.Domain.QuestionBanks; using Tiku.Infrastructure.Persistence; using ZLinq; namespace Tiku.Infrastructure.Learning; public sealed partial class LearningActivityService( TikuDbContext dbContext, IQuestionReferenceService questionReferenceService, IPublicQuestionAccessPolicy publicQuestionAccessPolicy, ITenantExecutionScope tenantExecutionScope, ILogger logger) : ILearningActivityService { private const int DefaultLimit = 100; private const int MaxLimit = 500; private static readonly Meter LearningMeter = new("Tiku.Learning"); private static readonly Counter IdempotencyReplays = LearningMeter.CreateCounter("tiku.learning.idempotency.replays"); private static readonly Counter AnswerConflicts = LearningMeter.CreateCounter("tiku.learning.answer.conflicts"); private static readonly Counter SubmissionConflicts = LearningMeter.CreateCounter("tiku.learning.submission.conflicts"); private static readonly Counter ScoringFailures = LearningMeter.CreateCounter("tiku.learning.scoring.failures"); }