public async Task<Unit> Handle(Query request, CancellationToken cancellationToken)
{
// Save current questions
var currentQuestions = (await mongoDatabaseInstance.FindAllAsync<Question>("questions", cancellationToken)).ToList();
var modified = false;
try
{
if (currentQuestions.Any())
{
// We create a filter to only delete questions that are going to be replaced, based on 'Practice'
// e.g. if we are uploading a spreadsheet that only contains a JAVA sheet, delete all questions where Practice is JAVA
Expression<Func<Question, bool>> filter = x => request.Questions.Select(x => x.Practice).Contains(x.Practice);
// Delete all questions and attempt to import new ones
await mongoDatabaseInstance.DeleteMany("questions", filter, cancellationToken);
}
modified = true;
await mongoDatabaseInstance.InsertMany("questions", request.Questions, cancellationToken);
return Unit.Value;
}
catch (Exception ex)
{
// Restore previous questions if there were any and new questions got rejected
if (currentQuestions.Any() && modified)
{
await mongoDatabaseInstance.InsertMany("questions", currentQuestions, cancellationToken);
}
throw new Exception($"Error trying to insert questions, file probably doesn't comply with the format.", ex);
}
}
public async Task<Unit> Handle(Query request, CancellationToken cancellationToken)
{
// Save current questions
var currentQuestions = (await mongoDatabaseInstance.FindAllAsync<Question>("questions", cancellationToken)).ToList();
var modified = false;
try
{
if (currentQuestions.Any())
{
// We create a filter to only delete questions that are going to be replaced, based on 'Practice'
// e.g. if we are uploading a spreadsheet that only contains a JAVA sheet, delete all questions where Practice is JAVA
Expression<Func<Question, bool>> filter = x => request.Questions.Select(x => x.Practice).Contains(x.Practice);
// Delete all questions and attempt to import new ones
await mongoDatabaseInstance.DeleteMany("questions", filter, cancellationToken);
}
modified = true;
await mongoDatabaseInstance.InsertMany("questions", request.Questions, cancellationToken);
return Unit.Value;
}
catch (Exception ex)
{
// Restore previous questions if there were any and new questions got rejected
if (currentQuestions.Any() && modified)
{
await mongoDatabaseInstance.InsertMany("questions", currentQuestions, cancellationToken);
}
throw new Exception($"Error trying to insert questions, file probably doesn't comply with the format.", ex);
}
}