chore: update coding standards to include service method argument and result wrapping, and add Tailwind CSS script to App.razor
Some checks failed
Caddy Manager CI build / docker (push) Failing after 48s

This commit is contained in:
2025-07-26 21:21:30 +07:00
parent 0beb3800b5
commit ad18782149
3 changed files with 41 additions and 34 deletions

View File

@@ -27,6 +27,10 @@ alwaysApply: true
- Use Swagger/OpenAPI for API documentation for your backend API services
- Ensure XML documentation for models and API methods for enhancing Swagger documentation
# Services implementation
- Arguments of the service methods, when exceeding 2, must be wrapped in a dedicated request record. The request record is created as a model.
- Result of the service methods must be wrapped in a dedicated result record. The result record is created as a model.
## Utils
- For JSON processing and utils, we are using Newtonsoft exclusively

View File

@@ -9,6 +9,7 @@
<link rel="stylesheet" href="@Assets["CaddyManager.styles.css"]"/>
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" rel="stylesheet" />
<link href="_content/MudBlazor/MudBlazor.min.css" rel="stylesheet" />
<script src=@("https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4")></script>
<ImportMap/>
<link rel="icon" type="image/png" href="favicon.png"/>
<HeadOutlet @rendermode="InteractiveServer"/>

View File

@@ -4,39 +4,41 @@
<PageTitle>Reverse proxy configurations</PageTitle>
<MudStack Row Class="px-20 mud-background-body pt-8">
<MudButton Variant="Variant.Filled" Color="Color.Primary" StartIcon="@Icons.Material.Filled.Add"
OnClick="NewReverseProxy">New...
</MudButton>
<MudButton Variant="Variant.Filled" Color="Color.Error" StartIcon="@Icons.Material.Filled.Delete"
Disabled="@(_selectedCaddyConfigurations.Count <= 0)"
OnClick="Delete">Delete
</MudButton>
<MudButton Variant="Variant.Filled" Color="Color.Default" StartIcon="@Icons.Material.Filled.Refresh"
OnClick="RestartCaddy">Restart Caddy
</MudButton>
@if (_isProcessing)
{
<MudProgressCircular Color="Color.Primary" Indeterminate="true" Size="Size.Small"/>
}
<MudSpacer />
<MudTextField T="string" Placeholder="Search..." Adornment="Adornment.End" DebounceInterval="500"
OnDebounceIntervalElapsed="HandleIntervalElapsed" @bind-Value="_debouncedText"
AdornmentIcon="@(string.IsNullOrWhiteSpace(_debouncedText) ? Icons.Material.Filled.Search : Icons.Material.Filled.Close)"
OnAdornmentClick="HandleSearchBarAdornmentClick" />
</MudStack>
<MudContainer Class="mt-8 overflow-y-auto" Style="height: calc(100vh - 3 * var(--mud-appbar-height) + 3 * var(--mud-appbar-height)/4 - 8px);">
<MudList T="CaddyConfigurationInfo" Class="py-4" SelectionMode="SelectionMode.MultiSelection"
@bind-SelectedValues="_selectedCaddyConfigurations">
@foreach (var (index, caddyConfig) in _availableCaddyConfigurations.Index())
{
<CaddyReverseProxyItem ConfigurationInfo="@caddyConfig" OnCaddyRestartRequired="@RestartCaddy"
OnCaddyfileDuplicateRequested="@HandleDuplicateRequest"/>
@if (index < _availableCaddyConfigurations.Count - 1)
<MudStack Row AlignItems="AlignItems.Center" Justify="Justify.Center">
<MudStack Row Class="px-20 mud-background-body pt-8 w-340" AlignItems="AlignItems.Center" Justify="Justify.Center">
<MudButton Variant="Variant.Filled" Color="Color.Primary" StartIcon="@Icons.Material.Filled.Add"
OnClick="NewReverseProxy">New...
</MudButton>
<MudButton Variant="Variant.Filled" Color="Color.Error" StartIcon="@Icons.Material.Filled.Delete"
Disabled="@(_selectedCaddyConfigurations.Count <= 0)" OnClick="Delete">Delete
</MudButton>
<MudButton Variant="Variant.Filled" Color="Color.Default" StartIcon="@Icons.Material.Filled.Refresh"
OnClick="RestartCaddy">Restart Caddy
</MudButton>
@if (_isProcessing)
{
<MudDivider/>
<MudProgressCircular Color="Color.Primary" Indeterminate="true" Size="Size.Small" />
}
}
</MudList>
<MudSpacer />
<MudTextField T="string" Placeholder="Search..." Adornment="Adornment.End" DebounceInterval="500"
OnDebounceIntervalElapsed="HandleIntervalElapsed" @bind-Value="_debouncedText"
AdornmentIcon="@(string.IsNullOrWhiteSpace(_debouncedText) ? Icons.Material.Filled.Search : Icons.Material.Filled.Close)"
OnAdornmentClick="HandleSearchBarAdornmentClick" />
</MudStack>
</MudStack>
<MudContainer Class="mt-8 overflow-y-auto"
Style="height: calc(100vh - 3 * var(--mud-appbar-height) + 3 * var(--mud-appbar-height)/4 - 8px);">
<MudList T="CaddyConfigurationInfo" Class="py-4" SelectionMode="SelectionMode.MultiSelection"
@bind-SelectedValues="_selectedCaddyConfigurations">
@foreach (var (index, caddyConfig) in _availableCaddyConfigurations.Index())
{
<CaddyReverseProxyItem ConfigurationInfo="@caddyConfig" OnCaddyRestartRequired="@RestartCaddy"
OnCaddyfileDuplicateRequested="@HandleDuplicateRequest" />
@if (index < _availableCaddyConfigurations.Count - 1)
{
<MudDivider />
}
}
</MudList>
</MudContainer>