using Microsoft.Extensions.Hosting; using Scalar.Aspire; var builder = DistributedApplication.CreateBuilder(args); #region MINIO var minio = builder.AddMinioContainer("minio"); #endregion #region REDIS var cache = builder.AddRedis("cache"); #endregion #region POSTGRESQL AND PGADMIN var postgres = builder.AddPostgres("postgres") .WithLifetime(ContainerLifetime.Persistent) .WithHostPort(5432) .WithPgAdmin(); var postgresdb = postgres.AddDatabase("postgresdb"); #endregion #region KEYCLOAK var keycloakDb = postgres.AddDatabase("authdb"); var keycloak = builder.AddKeycloak("keycloak", 8080) .WithEnvironment(async ctx => { var connString = await keycloakDb.Resource.ConnectionStringExpression.GetValueAsync(CancellationToken.None); var conn = new Npgsql.NpgsqlConnectionStringBuilder(connString); ctx.EnvironmentVariables["KC_DB"] = "postgres"; ctx.EnvironmentVariables["KC_DB_URL"] = $"jdbc:postgresql://postgres:5432/{keycloakDb.Resource.DatabaseName}"; ctx.EnvironmentVariables["KC_DB_USERNAME"] = conn.Username!; ctx.EnvironmentVariables["KC_DB_PASSWORD"] = conn.Password!; }) .WaitFor(keycloakDb) .WithRealmImport("KeycloakConfig/"); #endregion #region EFCORE MIGRATION WORKER var migrations = builder.AddProject("clarity-migrationservice") .WithReference(postgresdb) .WaitFor(postgresdb); #endregion #region REST API var server = builder.AddProject("server") .WaitFor(keycloak) .WithReference(cache) .WithReference(postgresdb) .WaitFor(cache) .WaitFor(postgresdb) .WithReference(migrations) .WithReference(minio) .WaitForCompletion(migrations) .WithHttpHealthCheck("/health") .WithHttpEndpoint(port: 5416, name: "clarity-http") .WithExternalHttpEndpoints(); #endregion #region REACT var webfrontend = builder.AddViteApp("webfrontend", "../frontend") .WaitFor(keycloak) .WithReference(server) .WaitFor(server) .WithEnvironment("VITE_KEYCLOAK_URL", keycloak.GetEndpoint("http")) .WithEnvironment("VITE_KEYCLOAK_REALM", "clarity") .WithEnvironment("VITE_KEYCLOAK_CLIENT_ID", "clarity-web-app"); server.PublishWithContainerFiles(webfrontend, "wwwroot"); #endregion #region SCALAR API DOCS var scalar = builder.AddScalarApiReference(); scalar .WithApiReference(server); // .WithApiReference(webfrontend); #endregion builder.Build().Run();