Skip to content

Commit 73ed325

Browse files
Add Meilisearch integration (#66)
* Add Meilisearch hosting * Add public api files * Clean up csproj * remove configuration schema stuff * add tests * fix build * Fix test by addib Aspire.Hosting.AppHost to Testing proj * Add test for client package * fix test on windows * Add example * Address PR feedback * Add logging for tests * Add readme for packages * fix xml docs * rename file * Remove xunit test classes and use Microsoft.DotNet.XUnitExtensions instead * Remove polly and use WaitForText instead * Update codeowners * Matching the correct naming structure --------- Co-authored-by: Aaron Powell <me@aaron-powell.com>
1 parent 8dd8295 commit 73ed325

File tree

60 files changed

+2573
-452
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+2573
-452
lines changed

CODEOWNERS

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,12 @@
1313
/examples/golang/_ @tommasodotNET
1414
/src/CommunityToolkit.Aspire.Hosting.Golang/_ @tommasodotNET
1515
/tests/CommunityToolkit.Aspire.Hosting.Golang/_ @tommasodotNET
16+
17+
# CommunityToolkit.Aspire.Meilisearch
18+
# CommunityToolkit.Aspire.Hosting.Meilisearch
19+
20+
/examples/meilisearch/_ @alirexaa
21+
/src/CommunityToolkit.Aspire.Hosting.Meilisearch/_ @alirexaa
22+
/tests/CommunityToolkit.Aspire.Hosting.Meilisearch/_ @alirexaa
23+
/src/CommunityToolkit.Aspire.Meilisearch/_ @alirexaa
24+
/tests/CommunityToolkit.Aspire.Meilisearch/_ @alirexaa

CommunityToolkit.Aspire.sln

Lines changed: 71 additions & 19 deletions
Large diffs are not rendered by default.

Directory.Build.props

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
<AspireVersion>8.2.0</AspireVersion>
1414
<AspNetCoreVersion>8.0.7</AspNetCoreVersion>
1515
<OpenTelemetryVersion>1.9.0</OpenTelemetryVersion>
16-
16+
<TestContainersVersion>3.10.0</TestContainersVersion>
1717
<IsPackable>false</IsPackable>
1818
<UsePublicApiAnalyzers>true</UsePublicApiAnalyzers>
1919
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
20-
</PropertyGroup>
20+
21+
<RepoRoot>$(MSBuildThisFileDirectory)</RepoRoot>
22+
</PropertyGroup>
2123

2224
<PropertyGroup>
2325
<ContinuousIntegrationBuild>false</ContinuousIntegrationBuild>

Directory.Packages.props

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
<PackageVersion Include="JsonSchema.Net" Version="7.2.3" />
1111
<!-- AspNetCore packages -->
1212
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="$(AspNetCoreVersion)" />
13+
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.2" />
14+
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.1" />
1315
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.6.2" />
1416
<!-- .NET packages -->
1517
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="8.7.0" />
@@ -33,9 +35,13 @@
3335
<PackageVersion Include="xunit" Version="2.9.1" />
3436
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
3537
<PackageVersion Include="xunit.extensibility.execution" Version="2.9.1" />
38+
<PackageVersion Include="Microsoft.DotNet.XUnitExtensions" Version="8.0.0-beta.24516.1" />
3639
<!-- External packages -->
3740
<PackageVersion Include="OllamaSharp" Version="3.0.7" />
41+
<PackageVersion Include="MeiliSearch" Version="0.15.3" />
3842
<!-- Build dependencies -->
3943
<PackageVersion Include="Microsoft.CodeAnalysis.PublicApiAnalyzers" Version="3.3.4" />
44+
<!-- Testcontainers packages -->
45+
<PackageVersion Include="Testcontainers" Version="$(TestContainersVersion)" />
4046
</ItemGroup>
4147
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<Project Sdk="Microsoft.NET.Sdk.Web">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<ProjectReference Include="..\..\..\src\CommunityToolkit.Aspire.Meilisearch\CommunityToolkit.Aspire.Meilisearch.csproj" />
11+
<ProjectReference Include="..\CommunityToolkit.Aspire.Hosting.Meilisearch.ServiceDefaults\CommunityToolkit.Aspire.Hosting.Meilisearch.ServiceDefaults.csproj" />
12+
13+
</ItemGroup>
14+
15+
</Project>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace CommunityToolkit.Aspire.Hosting.Meilisearch.ApiService;
2+
public class Movie
3+
{
4+
public string? Id { get; set; }
5+
public string? Title { get; set; }
6+
public IEnumerable<string>? Genres { get; set; }
7+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using CommunityToolkit.Aspire.Hosting.Meilisearch.ApiService;
2+
using Meilisearch;
3+
4+
var builder = WebApplication.CreateBuilder(args);
5+
6+
builder.AddServiceDefaults();
7+
8+
builder.AddMeilisearchClient("meilisearch");
9+
10+
var app = builder.Build();
11+
12+
app.MapDefaultEndpoints();
13+
app.MapGet("/search", async (MeilisearchClient meilisearch) =>
14+
{
15+
var index = meilisearch.Index("movies");
16+
17+
var result = await index.SearchAsync<Movie>(
18+
"car",
19+
new SearchQuery
20+
{
21+
AttributesToHighlight = ["title"],
22+
});
23+
24+
return result;
25+
});
26+
27+
app.MapGet("/create", async (MeilisearchClient meilisearch) =>
28+
{
29+
// An index is where the documents are stored.
30+
var index = meilisearch.Index("movies");
31+
var documents = new Movie[] {
32+
new() { Id = "1", Title = "Carol", Genres = ["Romance", "Drama"] },
33+
new() { Id = "2", Title = "Wonder Woman", Genres = ["Action", "Adventure"] },
34+
new() { Id = "3", Title = "Life of Pi", Genres = ["Adventure", "Drama"] },
35+
new() { Id = "4", Title = "Mad Max: Fury Road", Genres = ["Adventure", "Science Fiction"] },
36+
new() { Id = "5", Title = "Moana", Genres = ["Fantasy", "Action"] },
37+
new() { Id = "6", Title = "Philadelphia", Genres = ["Drama"] }
38+
};
39+
40+
// If the index 'movies' does not exist, Meilisearch creates it when you first add the documents.
41+
var task = await index.AddDocumentsAsync<Movie>(documents);
42+
43+
// Wait for the task to ensure the document is added. this line is necessary for passing tests.
44+
var response = await index.WaitForTaskAsync(task.TaskUid);
45+
return task;
46+
});
47+
48+
app.MapGet("/get", async (MeilisearchClient meilisearch) =>
49+
{
50+
// An index is where the documents are stored.
51+
var index = await meilisearch.GetIndexAsync("movies");
52+
var data = await index.GetDocumentsAsync<Movie>();
53+
return data.Results;
54+
});
55+
56+
app.Run();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"$schema": "https://json.schemastore.org/launchsettings.json",
3+
"profiles": {
4+
"http": {
5+
"commandName": "Project",
6+
"dotnetRunMessages": true,
7+
"launchBrowser": true,
8+
"applicationUrl": "http://localhost:5232",
9+
"environmentVariables": {
10+
"ASPNETCORE_ENVIRONMENT": "Development"
11+
}
12+
},
13+
"https": {
14+
"commandName": "Project",
15+
"dotnetRunMessages": true,
16+
"launchBrowser": true,
17+
"applicationUrl": "https://localhost:7042;http://localhost:5232",
18+
"environmentVariables": {
19+
"ASPNETCORE_ENVIRONMENT": "Development"
20+
}
21+
}
22+
}
23+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"Logging": {
3+
"LogLevel": {
4+
"Default": "Information",
5+
"Microsoft.AspNetCore": "Warning"
6+
}
7+
},
8+
"AllowedHosts": "*"
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net8.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
<IsAspireHost>true</IsAspireHost>
9+
<UserSecretsId>6adfc361-47fd-4c05-88de-c95763714bb0</UserSecretsId>
10+
</PropertyGroup>
11+
12+
<ItemGroup>
13+
<PackageReference Include="Aspire.Hosting.AppHost" />
14+
</ItemGroup>
15+
16+
<ItemGroup>
17+
<ProjectReference Include="..\..\..\src\CommunityToolkit.Aspire.Hosting.Meilisearch\CommunityToolkit.Aspire.Hosting.Meilisearch.csproj" IsAspireProjectResource="false" />
18+
<ProjectReference Include="..\CommunityToolkit.Aspire.Hosting.Meilisearch.ApiService\CommunityToolkit.Aspire.Hosting.Meilisearch.ApiService.csproj" />
19+
</ItemGroup>
20+
21+
</Project>

0 commit comments

Comments
 (0)