Skip to content

Commit 02c7951

Browse files
author
Bart Koelman
committed
Rename MongoIdentifiable to HexStringMongoIdentifiable, extract interface IMongoIdentifiable
1 parent 674889e commit 02c7951

File tree

32 files changed

+54
-40
lines changed

32 files changed

+54
-40
lines changed

src/Examples/GettingStarted/Models/Book.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace GettingStarted.Models;
66

77
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
88
[Resource]
9-
public sealed class Book : MongoIdentifiable
9+
public sealed class Book : HexStringMongoIdentifiable
1010
{
1111
[Attr]
1212
public string Title { get; set; } = null!;

src/Examples/JsonApiDotNetCoreMongoDbExample/Models/TodoItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbExample.Models;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource]
10-
public sealed class TodoItem : MongoIdentifiable
10+
public sealed class TodoItem : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string Description { get; set; } = null!;

src/JsonApiDotNetCore.MongoDb/Queries/Internal/HideRelationshipsSparseFieldSetCache.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections.Immutable;
22
using JsonApiDotNetCore.Configuration;
3+
using JsonApiDotNetCore.MongoDb.Resources;
34
using JsonApiDotNetCore.Queries;
45
using JsonApiDotNetCore.Queries.Internal;
56
using JsonApiDotNetCore.Resources;
@@ -38,6 +39,11 @@ public IImmutableSet<ResourceFieldAttribute> GetSparseFieldSetForSerializer(Reso
3839
{
3940
IImmutableSet<ResourceFieldAttribute> fieldSet = _innerCache.GetSparseFieldSetForSerializer(resourceType);
4041

42+
return resourceType.ClrType.IsAssignableTo(typeof(IMongoIdentifiable)) ? RemoveRelationships(fieldSet) : fieldSet;
43+
}
44+
45+
private static IImmutableSet<ResourceFieldAttribute> RemoveRelationships(IImmutableSet<ResourceFieldAttribute> fieldSet)
46+
{
4147
ResourceFieldAttribute[] relationships = fieldSet.Where(field => field is RelationshipAttribute).ToArray();
4248
return fieldSet.Except(relationships);
4349
}

src/JsonApiDotNetCore.MongoDb/Repositories/MongoRepository.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using JsonApiDotNetCore.Middleware;
66
using JsonApiDotNetCore.MongoDb.Errors;
77
using JsonApiDotNetCore.MongoDb.Queries.Internal.QueryableBuilding;
8+
using JsonApiDotNetCore.MongoDb.Resources;
89
using JsonApiDotNetCore.Queries;
910
using JsonApiDotNetCore.Queries.Expressions;
1011
using JsonApiDotNetCore.Queries.Internal.QueryableBuilding;
@@ -52,9 +53,9 @@ public MongoRepository(IMongoDataAccess mongoDataAccess, ITargetedFields targete
5253
_constraintProviders = constraintProviders;
5354
_resourceDefinitionAccessor = resourceDefinitionAccessor;
5455

55-
if (typeof(TId) != typeof(string))
56+
if (!typeof(TResource).IsAssignableTo(typeof(IMongoIdentifiable)))
5657
{
57-
throw new InvalidConfigurationException("MongoDB can only be used for resources with an 'Id' property of type 'string'.");
58+
throw new InvalidConfigurationException("MongoDB can only be used with resources that implement 'IMongoIdentifiable'.");
5859
}
5960
}
6061

src/JsonApiDotNetCore.MongoDb/Resources/MongoIdentifiable.cs renamed to src/JsonApiDotNetCore.MongoDb/Resources/HexStringMongoIdentifiable.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
using JsonApiDotNetCore.Resources;
21
using MongoDB.Bson;
32
using MongoDB.Bson.Serialization.Attributes;
43

54
namespace JsonApiDotNetCore.MongoDb.Resources;
65

76
/// <summary>
8-
/// A convenient basic implementation of <see cref="IIdentifiable" /> for use with MongoDB models.
7+
/// Basic implementation of a JSON:API resource whose Id is stored as a 12-byte hexadecimal ObjectId in MongoDB.
98
/// </summary>
10-
public abstract class MongoIdentifiable : IIdentifiable<string?>
9+
public abstract class HexStringMongoIdentifiable : IMongoIdentifiable
1110
{
1211
/// <inheritdoc />
1312
[BsonId]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using JsonApiDotNetCore.Resources;
2+
3+
namespace JsonApiDotNetCore.MongoDb.Resources;
4+
5+
/// <summary>
6+
/// Marker interface to indicate a resource that is stored in MongoDB.
7+
/// </summary>
8+
public interface IMongoIdentifiable : IIdentifiable<string?>
9+
{
10+
}

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/AtomicOperations/Lyric.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.AtomicOperations;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.AtomicOperations")]
10-
public sealed class Lyric : MongoIdentifiable
10+
public sealed class Lyric : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string? Format { get; set; }

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/AtomicOperations/MusicTrack.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.AtomicOperations;
88

99
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
1010
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.AtomicOperations")]
11-
public sealed class MusicTrack : MongoIdentifiable
11+
public sealed class MusicTrack : HexStringMongoIdentifiable
1212
{
1313
[RegularExpression(@"^[a-fA-F\d]{24}$")]
1414
public override string? Id { get; set; }

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/AtomicOperations/Performer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.AtomicOperations;
66

77
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
88
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.AtomicOperations")]
9-
public sealed class Performer : MongoIdentifiable
9+
public sealed class Performer : HexStringMongoIdentifiable
1010
{
1111
[Attr]
1212
public string? ArtistName { get; set; }

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/AtomicOperations/Playlist.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.AtomicOperations;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.AtomicOperations")]
10-
public sealed class Playlist : MongoIdentifiable
10+
public sealed class Playlist : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string Name { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/AtomicOperations/RecordCompany.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.AtomicOperations;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.AtomicOperations")]
10-
public sealed class RecordCompany : MongoIdentifiable
10+
public sealed class RecordCompany : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string Name { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/AtomicOperations/TextLanguage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.AtomicOperations;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.AtomicOperations")]
10-
public sealed class TextLanguage : MongoIdentifiable
10+
public sealed class TextLanguage : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string? IsoCode { get; set; }

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/Meta/SupportTicket.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.Meta;
66

77
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
88
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.Meta")]
9-
public sealed class SupportTicket : MongoIdentifiable
9+
public sealed class SupportTicket : HexStringMongoIdentifiable
1010
{
1111
[Attr]
1212
public string Description { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/QueryStrings/AccountPreferences.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings;
66

77
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
8-
public sealed class AccountPreferences : MongoIdentifiable
8+
public sealed class AccountPreferences : HexStringMongoIdentifiable
99
{
1010
[Attr]
1111
public bool UseDarkTheme { get; set; }

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/QueryStrings/Blog.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings")]
10-
public sealed class Blog : MongoIdentifiable
10+
public sealed class Blog : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string Title { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/QueryStrings/BlogPost.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings")]
10-
public sealed class BlogPost : MongoIdentifiable
10+
public sealed class BlogPost : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string Caption { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/QueryStrings/Comment.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings")]
10-
public sealed class Comment : MongoIdentifiable
10+
public sealed class Comment : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string Text { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/QueryStrings/Filtering/FilterableResource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings.Filtering;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings.Filtering")]
10-
public sealed class FilterableResource : MongoIdentifiable
10+
public sealed class FilterableResource : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string SomeString { get; set; } = string.Empty;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/QueryStrings/Label.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
9-
public sealed class Label : MongoIdentifiable
9+
public sealed class Label : HexStringMongoIdentifiable
1010
{
1111
[Attr]
1212
public string Name { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/QueryStrings/LoginAttempt.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings;
66

77
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
8-
public sealed class LoginAttempt : MongoIdentifiable
8+
public sealed class LoginAttempt : HexStringMongoIdentifiable
99
{
1010
[Attr]
1111
public DateTimeOffset TriedAt { get; set; }

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/QueryStrings/WebAccount.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.QueryStrings")]
10-
public sealed class WebAccount : MongoIdentifiable
10+
public sealed class WebAccount : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string UserName { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/ReadWrite/Creating/CreateResourceTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public async Task Cannot_create_resource_with_int_ID()
9898
ErrorObject error = responseDocument.Errors[0];
9999
error.StatusCode.Should().Be(HttpStatusCode.InternalServerError);
100100
error.Title.Should().Be("An unhandled error occurred while processing this request.");
101-
error.Detail.Should().Be("MongoDB can only be used for resources with an 'Id' property of type 'string'.");
101+
error.Detail.Should().Be("MongoDB can only be used with resources that implement 'IMongoIdentifiable'.");
102102
}
103103

104104
[Fact]

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/ReadWrite/RgbColor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.ReadWrite;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.ReadWrite")]
10-
public sealed class RgbColor : MongoIdentifiable
10+
public sealed class RgbColor : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string DisplayName { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/ReadWrite/UserAccount.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.ReadWrite;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.ReadWrite")]
10-
public sealed class UserAccount : MongoIdentifiable
10+
public sealed class UserAccount : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string FirstName { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/ReadWrite/WorkItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.ReadWrite;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.ReadWrite")]
10-
public sealed class WorkItem : MongoIdentifiable
10+
public sealed class WorkItem : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string? Description { get; set; }

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/ReadWrite/WorkItemGroup.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.ReadWrite;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.ReadWrite")]
10-
public sealed class WorkItemGroup : MongoIdentifiable
10+
public sealed class WorkItemGroup : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string Name { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/ReadWrite/WorkTag.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.ReadWrite;
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
9-
public sealed class WorkTag : MongoIdentifiable
9+
public sealed class WorkTag : HexStringMongoIdentifiable
1010
{
1111
[Attr]
1212
public string Text { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/ResourceDefinitions/Reading/Moon.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.ResourceDefinitions.Rea
66

77
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
88
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.ResourceDefinitions.Reading")]
9-
public sealed class Moon : MongoIdentifiable
9+
public sealed class Moon : HexStringMongoIdentifiable
1010
{
1111
[Attr]
1212
public string Name { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/ResourceDefinitions/Reading/Planet.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.ResourceDefinitions.Rea
77

88
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
99
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.ResourceDefinitions.Reading")]
10-
public sealed class Planet : MongoIdentifiable
10+
public sealed class Planet : HexStringMongoIdentifiable
1111
{
1212
[Attr]
1313
public string PublicName { get; set; } = null!;

test/JsonApiDotNetCoreMongoDbTests/IntegrationTests/ResourceDefinitions/Reading/Star.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace JsonApiDotNetCoreMongoDbTests.IntegrationTests.ResourceDefinitions.Rea
66

77
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
88
[Resource(ControllerNamespace = "JsonApiDotNetCoreMongoDbTests.IntegrationTests.ResourceDefinitions.Reading")]
9-
public sealed class Star : MongoIdentifiable
9+
public sealed class Star : HexStringMongoIdentifiable
1010
{
1111
[Attr]
1212
public string Name { get; set; } = null!;

test/TestBuildingBlocks/MongoDbContextShim.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ protected MongoDbContextShim(IMongoDatabase database)
1818
}
1919

2020
protected MongoDbSetShim<TEntity> Set<TEntity>()
21-
where TEntity : MongoIdentifiable
21+
where TEntity : IMongoIdentifiable
2222
{
2323
IMongoCollection<TEntity> collection = _database.GetCollection<TEntity>(typeof(TEntity).Name);
2424
var dbSetShim = new MongoDbSetShim<TEntity>(collection);
@@ -28,7 +28,7 @@ protected MongoDbSetShim<TEntity> Set<TEntity>()
2828
}
2929

3030
public async Task ClearTableAsync<TEntity>()
31-
where TEntity : MongoIdentifiable
31+
where TEntity : IMongoIdentifiable
3232
{
3333
await _database.DropCollectionAsync(typeof(TEntity).Name);
3434
}

test/TestBuildingBlocks/MongoDbSetShim.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public abstract class MongoDbSetShim
1515
/// repository.
1616
/// </summary>
1717
public sealed class MongoDbSetShim<TEntity> : MongoDbSetShim
18-
where TEntity : MongoIdentifiable
18+
where TEntity : IMongoIdentifiable
1919
{
2020
private readonly IMongoCollection<TEntity> _collection;
2121
private readonly List<TEntity> _entitiesToInsert = new();
@@ -64,21 +64,19 @@ public async Task ExecuteAsync(Func<IMongoCollection<TEntity>, Task> action)
6464

6565
public async Task<TEntity> FirstWithIdAsync(string? id, CancellationToken cancellationToken = default)
6666
{
67-
MongoIdentifiable? firstOrDefault = await _collection.AsQueryable().FirstOrDefaultAsync(document => Equals(document.Id, id), cancellationToken);
67+
TEntity entity = await _collection.AsQueryable().FirstOrDefaultAsync(document => Equals(document.Id, id), cancellationToken);
6868

69-
if (Equals(firstOrDefault, default(MongoIdentifiable)))
69+
if (entity is null)
7070
{
7171
throw new InvalidOperationException($"Resource with ID '{id}' was not found.");
7272
}
7373

74-
return (TEntity)firstOrDefault;
74+
return entity;
7575
}
7676

7777
public async Task<TEntity?> FirstWithIdOrDefaultAsync(string? id, CancellationToken cancellationToken = default)
7878
{
79-
MongoIdentifiable? entity = await _collection.AsQueryable().FirstOrDefaultAsync(document => Equals(document.Id, id), cancellationToken);
80-
81-
return (TEntity?)entity;
79+
return await _collection.AsQueryable().FirstOrDefaultAsync(document => Equals(document.Id, id), cancellationToken);
8280
}
8381

8482
public async Task<List<TEntity>> ToListAsync(CancellationToken cancellationToken = default)

0 commit comments

Comments
 (0)