Assign IDs when promoting dynamic blueprints

This commit is contained in:
hz
2026-07-23 13:40:53 -05:00
parent 8390d795e5
commit 403944b249
@@ -1,4 +1,5 @@
using MongoDB.Driver; using MongoDB.Driver;
using MongoDB.Bson;
using QuestionsApi.Models; using QuestionsApi.Models;
namespace QuestionsApi.Services; namespace QuestionsApi.Services;
@@ -116,9 +117,15 @@ public sealed class DynamicQuestionStore
public async Task UpsertBlueprintsAsync(IEnumerable<DynamicQuestionBlueprint> blueprints) public async Task UpsertBlueprintsAsync(IEnumerable<DynamicQuestionBlueprint> blueprints)
{ {
foreach (var blueprint in blueprints) foreach (var blueprint in blueprints)
{
var existing = await _blueprints.Find(
value => value.ExternalId == blueprint.ExternalId && value.Version == blueprint.Version)
.FirstOrDefaultAsync();
blueprint.Id = existing is null ? ObjectId.GenerateNewId().ToString() : existing.Id;
await _blueprints.ReplaceOneAsync( await _blueprints.ReplaceOneAsync(
value => value.ExternalId == blueprint.ExternalId && value.Version == blueprint.Version, value => value.ExternalId == blueprint.ExternalId && value.Version == blueprint.Version,
blueprint, blueprint,
new ReplaceOptions { IsUpsert = true }); new ReplaceOptions { IsUpsert = true });
} }
}
} }