Esempio n. 1
0
 public ApiController(
     AntiPlagiarismDb db,
     ISubmissionsRepo submissionsRepo, ISnippetsRepo snippetsRepo, ITasksRepo tasksRepo,
     IClientsRepo clientsRepo, IWorkQueueRepo workQueueRepo,
     IMostSimilarSubmissionsRepo mostSimilarSubmissionsRepo,
     IManualSuspicionLevelsRepo manualSuspicionLevelsRepo,
     PlagiarismDetector plagiarismDetector,
     CodeUnitsExtractor codeUnitsExtractor,
     IServiceScopeFactory serviceScopeFactory,
     NewSubmissionHandler newSubmissionHandler,
     IOptions <AntiPlagiarismConfiguration> configuration)
     : base(clientsRepo, db)
 {
     this.submissionsRepo            = submissionsRepo;
     this.snippetsRepo               = snippetsRepo;
     this.tasksRepo                  = tasksRepo;
     this.workQueueRepo              = workQueueRepo;
     this.mostSimilarSubmissionsRepo = mostSimilarSubmissionsRepo;
     this.manualSuspicionLevelsRepo  = manualSuspicionLevelsRepo;
     this.plagiarismDetector         = plagiarismDetector;
     this.codeUnitsExtractor         = codeUnitsExtractor;
     this.newSubmissionHandler       = newSubmissionHandler;
     this.serviceScopeFactory        = serviceScopeFactory;
     this.configuration              = configuration.Value;
 }
Esempio n. 2
0
        private async Task UpdateSnippetsFromSubmissionAsync(ISnippetsRepo snippetsRepo, Submission submission)
        {
            var occurences = new HashSet <Tuple <int, int> >(
                (await snippetsRepo.GetSnippetsOccurrencesForSubmissionAsync(submission).ConfigureAwait(false))
                .Select(o => Tuple.Create(o.SnippetId, o.FirstTokenIndex))
                );

            foreach (var(firstTokenIndex, snippet) in submissionSnippetsExtractor.ExtractSnippetsFromSubmission(submission))
            {
                var foundSnippet = await snippetsRepo.GetOrAddSnippetAsync(snippet);

                if (!occurences.Contains(Tuple.Create(foundSnippet.Id, firstTokenIndex)))
                {
                    log.Info($"Информация о сниппете #{foundSnippet.Id} в решении #{submission.Id} не найдена, добавляю");
                    try
                    {
                        await snippetsRepo.AddSnippetOccurenceAsync(submission, foundSnippet, firstTokenIndex, configuration.AntiPlagiarism.SubmissionInfluenceLimitInMonths);
                    }
                    catch (Exception e)
                    {
                        log.Error(e, $"Ошибка при добавлении сниппета #{foundSnippet.Id} в решении #{submission.Id}");
                    }
                }
            }
        }
Esempio n. 3
0
 public PlagiarismDetector(
     ISnippetsRepo snippetsRepo, ISubmissionsRepo submissionsRepo,
     CodeUnitsExtractor codeUnitsExtractor,
     ILogger logger,
     IOptions <AntiPlagiarismConfiguration> options)
 {
     this.snippetsRepo       = snippetsRepo;
     this.submissionsRepo    = submissionsRepo;
     this.codeUnitsExtractor = codeUnitsExtractor;
     this.logger             = logger;
     configuration           = options.Value;
 }
Esempio n. 4
0
 public PlagiarismDetector(
     ISnippetsRepo snippetsRepo, ISubmissionsRepo submissionsRepo,
     IMostSimilarSubmissionsRepo mostSimilarSubmissionsRepo,
     CodeUnitsExtractor codeUnitsExtractor,
     IOptions <AntiPlagiarismConfiguration> options)
 {
     this.snippetsRepo               = snippetsRepo;
     this.submissionsRepo            = submissionsRepo;
     this.mostSimilarSubmissionsRepo = mostSimilarSubmissionsRepo;
     this.codeUnitsExtractor         = codeUnitsExtractor;
     configuration = options.Value;
 }
Esempio n. 5
0
 public NewSubmissionHandler(
     ISubmissionsRepo submissionsRepo, ISnippetsRepo snippetsRepo, ITasksRepo tasksRepo, IWorkQueueRepo workQueueRepo,
     SubmissionSnippetsExtractor submissionSnippetsExtractor,
     IServiceScopeFactory serviceScopeFactory,
     IOptions <AntiPlagiarismConfiguration> configuration)
 {
     this.submissionsRepo             = submissionsRepo;
     this.snippetsRepo                = snippetsRepo;
     this.tasksRepo                   = tasksRepo;
     this.workQueueRepo               = workQueueRepo;
     this.submissionSnippetsExtractor = submissionSnippetsExtractor;
     this.serviceScopeFactory         = serviceScopeFactory;
     this.configuration               = configuration.Value;
 }
Esempio n. 6
0
 public ApiController(
     ISubmissionsRepo submissionsRepo, ISnippetsRepo snippetsRepo, ITasksRepo tasksRepo,
     StatisticsParametersFinder statisticsParametersFinder,
     PlagiarismDetector plagiarismDetector,
     CodeUnitsExtractor codeUnitsExtractor,
     ILogger logger,
     IOptions <AntiPlagiarismConfiguration> configuration)
     : base(logger)
 {
     this.submissionsRepo            = submissionsRepo;
     this.snippetsRepo               = snippetsRepo;
     this.tasksRepo                  = tasksRepo;
     this.statisticsParametersFinder = statisticsParametersFinder;
     this.plagiarismDetector         = plagiarismDetector;
     this.codeUnitsExtractor         = codeUnitsExtractor;
     this.configuration              = configuration.Value;
 }
Esempio n. 7
0
 public ApiController(
     AntiPlagiarismDb db,
     ISubmissionsRepo submissionsRepo, ISnippetsRepo snippetsRepo, ITasksRepo tasksRepo, IClientsRepo clientsRepo,
     StatisticsParametersFinder statisticsParametersFinder,
     PlagiarismDetector plagiarismDetector,
     CodeUnitsExtractor codeUnitsExtractor,
     SubmissionSnippetsExtractor submissionSnippetsExtractor,
     ILogger logger,
     IServiceScopeFactory serviceScopeFactory,
     IOptions <AntiPlagiarismConfiguration> configuration)
     : base(logger, clientsRepo, db)
 {
     this.submissionsRepo             = submissionsRepo;
     this.snippetsRepo                = snippetsRepo;
     this.tasksRepo                   = tasksRepo;
     this.statisticsParametersFinder  = statisticsParametersFinder;
     this.plagiarismDetector          = plagiarismDetector;
     this.codeUnitsExtractor          = codeUnitsExtractor;
     this.submissionSnippetsExtractor = submissionSnippetsExtractor;
     this.serviceScopeFactory         = serviceScopeFactory;
     this.configuration               = configuration.Value;
 }