Hello!
I tried to make some sort of Update method that I can use it in my multiple repositories/handlers to update a document.
For some reason, when I try to do the update, my user is not found, even though the id is present in the DB.
Here is my code:
public async Task<ErrorOr<long>> Handle(UpdateUserCommand request, CancellationToken cancellationToken)
{
var identity = _contextAccessor.HttpContext.User.Identity as ClaimsIdentity;
var id = identity!.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)!.Value;
if (id == null)
{
return User.Errors.UserNotFound;
}
var filter = Builders<BsonDocument>.Filter.Eq("_id", id);
var entity = await _userCollection.Find(filter).FirstOrDefaultAsync();
var result = await UpdateCommand(id, request);
return 0;
}
private async Task<UpdateResult> UpdateCommand<T>(string documentIdentifier, T command)
{
var filter = Builders<BsonDocument>.Filter.Eq("_id", documentIdentifier);
var updateDefinitionBuilder = Builders<BsonDocument>.Update;
var changesDocument = BsonDocument.Parse(JsonSerializer.Serialize(command));
var updateDefinitionList = new List<UpdateDefinition<BsonDocument>>();
foreach (var change in changesDocument)
{
var setDefinition = updateDefinitionBuilder.Set(change.Name, change.Value);
updateDefinitionList.Add(setDefinition);
}
var combinedUpdateDefinition = updateDefinitionBuilder.Combine(updateDefinitionList);
return await _userCollection.UpdateOneAsync(filter, combinedUpdateDefinition);
}
And here is how my document looks like:
{
"_id" : ObjectId("65b118b74c717d9c9919faf7"),
"CreatedDateTime" : ISODate("0001-01-01T00:00:00.000+0000"),
"UpdatedDateTime" : ISODate("0001-01-01T00:00:00.000+0000"),
"FirstName" : "andrei",
"LastName" : "costache",
"Email" : "costacheandrei43@gmail.com",
"Password" : "string",
"ProfileImage" : null,
"RefreshTokens" : [
{
"Token" : "xuGy+cn6AKOgeKAAnEopnfRsWj0ieiMlmiVgF76NKzJjAyRqYHFew3LWjBeSa9sw0uFBFlDDashS1rXGFNElPQ==1706120675",
"ExpiresOn" : ISODate("2024-01-31T18:24:35.145+0000"),
"IsActive" : true
},
{
"Token" : "0tSuCy//9+QYEpGKR+EchrDZKqC2T04en/hIXdI92jP9lRsAmFLY5qjyKXlJaU5ZmzZTkaZDD7h+Juul53nXkg==1706186538",
"ExpiresOn" : ISODate("2024-02-01T12:42:18.937+0000"),
"IsActive" : true
}
],
"UserType" : "Guest",
"UserRole" : "User"
}
Can someone help me.
Thank you very much.
PS: Just a beginner on MongoDb