Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,21 @@ The documentation sources are located in the `docs` directory. See the [docs rea

## Development

This section describes how to set up the development environment. First, you need to install the following tools:
This section describes how to set up the development environment. First, you need to install the following tools installed on your machine:

- Docker
- .NET 10.0 SDK
- node.js v24.x and npm
- your favourite IDE
- Node.js v24.x and npm
- [JetBrains Rider](https://www.jetbrains.com/rider/) (free for non-commercial use) or [Visual Studio](https://visualstudio.microsoft.com/vs/)

To run the application from source, follow these steps:

1. Open the `src/Turnierplan.slnx` solution and navigate to the docker compose file located under `Solution Items`. Run the `turnierplan.database` docker compose service. This will start up the PostgreSQL database for local development.
2. Navigate to the `Turnierplan.App` project and run the `Turnierplan.App` launch configuration. This will start the backend using port `45000`.
3. Open a terminal and navigate to the `src/Turnierplan.App/Client` directory. Run `npm install` to install the node dependencies. Next, you can start the client application by typing `npm run start`.
4. Access the client application using [http://localhost:45001](http://localhost:45001) and log in using default credentials. The user name is `admin` and the password is `P@ssw0rd`.
1. Open the `src/Turnierplan.slnx` solution.
2. Run the `Turnierplan.AppHost` project. This will start the Aspire AppHost which will do the following steps:
- Download the postgres container imgage and run a local database
- Install npm dependencies and run the client app
- Run the backend `Turnierplan.App`
3. The Aspire dashboard will open up from which you can navigate to the client application ([http://localhost:45001](http://localhost:45001)).
4. Now you can log in using default credentials: The user name is `admin` and the password is `P@ssw0rd`.

When running locally, the API documentation can be viewed by opening [http://localhost:45000/scalar](http://localhost:45000/scalar).

> [!NOTE]
> The solution must be built first before the client application can be started. This is because the client application startup depends on OpenAPI files generated during the solution build.
23 changes: 23 additions & 0 deletions src/Turnierplan.AppHost/AppHost.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using Projects;

var builder = DistributedApplication.CreateBuilder(args);

var database = builder.AddPostgres("Turnierplan-Postgres")
.WithDataVolume()
.WithLifetime(ContainerLifetime.Persistent)
.AddDatabase("Turnierplan-Database");

builder.AddProject<Turnierplan_App>("Turnierplan-Backend")
.WaitFor(database)
.WithHttpHealthCheck("/health")
.WithEnvironment("Database__ConnectionString", database.Resource.ConnectionStringExpression);

builder.AddJavaScriptApp("Turnierplan-Client", "../Turnierplan.App/Client")
.WithRunScript("start")
.WithHttpEndpoint(45001, isProxied: false)
.WithHttpHealthCheck("/index.html")
.WithNpm(installCommand: "ci");

builder.Build().Run();

// TODO: Add OpenTelemetry collection
18 changes: 18 additions & 0 deletions src/Turnierplan.AppHost/Properties/launchSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"Turnierplan.AppHost": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:15285",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19065",
"ASPIRE_DASHBOARD_MCP_ENDPOINT_URL": "http://localhost:18247",
"ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20277"
}
}
}
}
20 changes: 20 additions & 0 deletions src/Turnierplan.AppHost/Turnierplan.AppHost.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<Project Sdk="Aspire.AppHost.Sdk/13.1.0">
<Import Project="../version.xml" />

<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<OutputType>Exe</OutputType>
<UserSecretsId>523f324d-1695-4d45-a000-a79765a1468a</UserSecretsId>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Turnierplan.App\Turnierplan.App.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Aspire.Hosting.JavaScript" Version="13.1.0" />
<PackageReference Include="Aspire.Hosting.PostgreSQL" Version="13.1.0" />
</ItemGroup>
</Project>
8 changes: 8 additions & 0 deletions src/Turnierplan.AppHost/appsettings.Development.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
9 changes: 9 additions & 0 deletions src/Turnierplan.AppHost/appsettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Aspire.Hosting.Dcp": "Warning"
}
}
}
15 changes: 0 additions & 15 deletions src/docker-compose.yml

This file was deleted.

2 changes: 1 addition & 1 deletion src/turnierplan.NET.slnx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
<Solution>
<Folder Name="/Solution Files/">
<File Path="docker-compose.yml" />
<File Path="version.xml" />
</Folder>
<Folder Name="/Test/">
Expand All @@ -15,6 +14,7 @@
</Folder>
<Project Path="Turnierplan.Adapter/Turnierplan.Adapter.csproj" />
<Project Path="Turnierplan.App/Turnierplan.App.csproj" />
<Project Path="Turnierplan.AppHost/Turnierplan.AppHost.csproj" />
<Project Path="Turnierplan.Core/Turnierplan.Core.csproj" />
<Project Path="Turnierplan.Dal/Turnierplan.Dal.csproj" />
<Project Path="Turnierplan.ImageStorage/Turnierplan.ImageStorage.csproj" />
Expand Down
Loading