Skip to content

Commit 0ba71c8

Browse files
feat(#16): implement search indexes for mongo database collections
1 parent c51dd6f commit 0ba71c8

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

Applications/Backend/Source/HttpsRichardy.Federation.Infrastructure.IoC/Extensions/DataPersistenceExtension.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ public static void AddDataPersistence(this IServiceCollection services, ISetting
1010
var mongoClient = new MongoClient(settings.Database.ConnectionString);
1111
var database = mongoClient.GetDatabase(settings.Database.DatabaseName);
1212

13+
database.EnsureIndexes();
14+
1315
return database;
1416
});
1517

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
namespace HttpsRichardy.Federation.Infrastructure.IoC.Extensions;
2+
3+
[ExcludeFromCodeCoverage]
4+
public static class IndexesExtension
5+
{
6+
public static void EnsureIndexes(this IMongoDatabase database)
7+
{
8+
#pragma warning disable IDE0055
9+
10+
var userCollection = database.GetCollection<User>("federation.users");
11+
var permissionCollection = database.GetCollection<Permission>("federation.permissions");
12+
var groupCollection = database.GetCollection<Group>("federation.groups");
13+
14+
var tokenCollection = database.GetCollection<SecurityToken>("federation.tokens");
15+
var realmCollection = database.GetCollection<Realm>("federation.realms");
16+
17+
var userIndexes = new[]
18+
{
19+
new CreateIndexModel<User>(Builders<User>.IndexKeys.Ascending(user => user.Username)),
20+
new CreateIndexModel<User>(Builders<User>.IndexKeys.Ascending(user => user.IsDeleted)),
21+
new CreateIndexModel<User>(Builders<User>.IndexKeys
22+
.Ascending(user => user.Username)
23+
.Ascending(user => user.RealmId))
24+
};
25+
26+
var groupIndexes = new[]
27+
{
28+
new CreateIndexModel<Group>(Builders<Group>.IndexKeys.Ascending(group => group.Name)),
29+
new CreateIndexModel<Group>(Builders<Group>.IndexKeys.Ascending(group => group.RealmId)),
30+
new CreateIndexModel<Group>(Builders<Group>.IndexKeys
31+
.Ascending(group => group.RealmId)
32+
.Ascending(group => group.Name))
33+
};
34+
35+
var permissionIndexes = new[]
36+
{
37+
new CreateIndexModel<Permission>(Builders<Permission>.IndexKeys.Ascending(permission => permission.Name)),
38+
new CreateIndexModel<Permission>(Builders<Permission>.IndexKeys.Ascending(permission => permission.RealmId)),
39+
new CreateIndexModel<Permission>(Builders<Permission>.IndexKeys
40+
.Ascending(permission => permission.RealmId)
41+
.Ascending(permission => permission.Name))
42+
};
43+
44+
var tokenIndexes = new[]
45+
{
46+
new CreateIndexModel<SecurityToken>(Builders<SecurityToken>.IndexKeys.Ascending(token => token.UserId)),
47+
new CreateIndexModel<SecurityToken>(Builders<SecurityToken>.IndexKeys.Ascending(token => token.RealmId)),
48+
new CreateIndexModel<SecurityToken>(Builders<SecurityToken>.IndexKeys
49+
.Ascending(token => token.UserId)
50+
.Ascending(token => token.RealmId))
51+
};
52+
53+
var realmIndexes = new[]
54+
{
55+
new CreateIndexModel<Realm>(Builders<Realm>.IndexKeys.Ascending(realm => realm.Name)),
56+
new CreateIndexModel<Realm>(Builders<Realm>.IndexKeys.Ascending(realm => realm.ClientId))
57+
};
58+
59+
userCollection.Indexes.CreateMany(userIndexes);
60+
permissionCollection.Indexes.CreateMany(permissionIndexes);
61+
groupCollection.Indexes.CreateMany(groupIndexes);
62+
tokenCollection.Indexes.CreateMany(tokenIndexes);
63+
realmCollection.Indexes.CreateMany(realmIndexes);
64+
}
65+
}

0 commit comments

Comments
 (0)