Merge branch 'cswimr/add-src' into CornHusker/add-db

This commit is contained in:
cswimr 2025-01-01 09:36:28 -05:00
commit db7ff97a20
Signed by: cswimr
GPG key ID: 0EC431A8DA8F8087
4 changed files with 201 additions and 43 deletions

View file

@ -1,11 +1,12 @@
using Microsoft.EntityFrameworkCore;
using System.Reflection;
using Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.OpenApi.Models;
using ZenithInfo.Components;
using ZenithInfo.Models;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter;
using ZenithInfo.Data;
using ZenithInfo.Models;
using ZenithInfo.Util.SwaggerTheme;
var builder = WebApplication.CreateBuilder(args);
@ -23,7 +24,8 @@ if (config?.GlobalToken == "CHANGE-ME")
// Initialize Database
builder.Services.AddQuickGridEntityFrameworkAdapter();
builder.Services.AddDbContextFactory<ZenithInfoContext>(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("ZenithInfoContext")));
options.UseNpgsql(builder.Configuration.GetConnectionString("ZenithInfoContext"))
);
// Sentry
if (config?.UseSentry == true)
@ -37,7 +39,15 @@ builder.Services.AddHttpLogging(o => { });
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(opts =>
{
opts.SwaggerDoc("v1", new OpenApiInfo { Title = "Zenith Info API", Version = "v1" });
opts.SwaggerDoc(
"v1",
new OpenApiInfo
{
Title = "Zenith Info API",
Version = "v1",
Description = "Zenith's official information provider!",
}
);
opts.AddSecurityDefinition(
"Bearer",
new OpenApiSecurityScheme
@ -75,10 +85,16 @@ builder.Services.AddSwaggerGen(opts =>
var app = builder.Build();
var assembly = Assembly.GetExecutingAssembly();
foreach (var resource in assembly.GetManifestResourceNames())
{
app.Logger.LogDebug("Resource: {Resource}", resource);
}
if (config?.UseSwagger == true)
{
app.UseSwagger();
app.UseSwaggerUI();
app.UseSwaggerUI(CustomStyle.CustomModern);
}
if (config?.LogRequests == true)
@ -108,4 +124,12 @@ if (config?.DatabaseType == DatabaseTypes.Memory)
);
}
// if (app.Environment.IsDevelopment())
// {
// app.Logger.LogInformation(
// "Development mode detected, printing configuration: {Configuration}",
// config?.ToJson()
// );
// }
app.Run();

View file

@ -0,0 +1,12 @@
using System;
using AspNetCore.Swagger.Themes;
namespace ZenithInfo.Util.SwaggerTheme;
public class CustomStyle : ModernStyle
{
protected CustomStyle(string fileName)
: base(fileName) { }
public static CustomStyle CustomModern => new("modern.custom.css");
}

View file

@ -0,0 +1,117 @@
:root {
/* Light mode (Catppuccin Latte) */
--catppuccin-pink: #ea76cb;
--catppuccin-mauve: #8839ef;
--catppuccin-red: #d20f39;
--catppuccin-maroon: #e64553;
--catppuccin-peach: #fe640b;
--catppuccin-yellow: #df8e1d;
--catppuccin-green: #40a02b;
--catppuccin-teal: #179299;
--catppuccin-sky: #04a5e5;
--catppuccin-sapphire: #209fb5;
--catppuccin-blue: #1e66f5;
--catppuccin-lavender: #7287fd;
--catppuccin-text: #4c4f69;
--catppuccin-subtext1: #5c5f77;
--catppuccin-subtext0: #6c6f85;
--catppuccin-overlay2: #7c7f93;
--catppuccin-overlay1: #8c8fa1;
--catppuccin-overlay0: #9ca0b0;
--catppuccin-surface2: #acb0be;
--catppuccin-surface1: #bcc0cc;
--catppuccin-surface0: #ccd0da;
--catppuccin-base: #eff1f5;
--catppuccin-mantle: #e6e9ef;
--catppuccin-crust: #dce0e8;
--link: var(--catppuccin-blue);
--link-hover: var(--catppuccin-sapphire);
--accent: var(--catppuccin-green);
--error: var(--catppuccin-red);
/* Body */
--body-background-color: var(--catppuccin-base);
--swagger-main-color: var(--catppuccin-text);
--scrollbar-thumb-color: var(--catppuccin-surface1);
--scrollbar-thumb-hover-color: var(--catppuccin-surface0);
/* Loading */
--loading-container-border-color: var(--accent);
/* Errors Container */
--errors-wrapper-background-color: var(--catppuccin-surface0);
--errors-wrapper-border-color: var(--error);
--errors-wrapper-errors-color: var(--error);
/* Topbar */
--topbar-background-color: var(--catppuccin-surface0);
--topbar-pinned-background-color: var(--catppuccin-surface0);
--topbar-border-color: var(--accent);
--topbar-select-label-color: var(--catppuccin-text);
--topbar-select-border-color: var(--accent);
/* Infobox */
--swagger-info-link: var(--link);
--swagger-info-link-hover: var(--link-hover);
--api-version-background-color: var(--catppuccin-surface2);
--api-version-stamp-background-color: var(--accent);
--api-version-color: var(--catppuccin-base);
/* Authorization */
--btn-authorize-background-color: var(--catppuccin-surface0);
--btn-authorize-border-color: var(--catppuccin-green);
--btn-authorize-font-color: var(--catppuccin-green);
--btn-authorize-svg-fill-color: var(--catppuccin-green);
--auth-container-background-color: var(--catppuccin-surface0);
--auth-container-errors-color: var(--catppuccin-red);
--auth-wrapper-background-color: var(--catppuccin-mantle);
--auth-wrapper-border-color: var(--accent);
/* Form Elements */
--select-border-color: var(--accent);
--input-background-color: var(--catppuccin-surface0);
--input-border-color: var(--accent);
--input-invalid-border-color: var(--error);
--input-disabled-background-color: var(--catppuccin-crust);
--input-disabled-border-color: var(--catppuccin-surface1);
/* Dialog */
--dialog-background-color: var(--catppuccin-mantle);
--dialog-border-color: var(--accent);
}
.swagger-ui .topbar .download-url-wrapper input[type="text"], .swagger-ui .topbar .download-url-wrapper .select-label select {
background-color: var(--catppuccin-surface0);
color: var(--catppuccin-text);
}
@media (prefers-color-scheme: dark) {
:root {
/* Dark mode (Catppuccin Mocha) */
--catppuccin-pink: #f5c2e7;
--catppuccin-mauve: #cba6f7;
--catppuccin-red: #f38ba8;
--catppuccin-maroon: #eba0ac;
--catppuccin-peach: #fab387;
--catppuccin-yellow: #f9e2af;
--catppuccin-green: #a6e3a1;
--catppuccin-teal: #94e2d5;
--catppuccin-sky: #89dceb;
--catppuccin-sapphire: #74c7ec;
--catppuccin-blue: #89b4fa;
--catppuccin-lavender: #b4befe;
--catppuccin-text: #cdd6f4;
--catppuccin-subtext1: #bac2de;
--catppuccin-subtext0: #a6adc8;
--catppuccin-overlay2: #9399b2;
--catppuccin-overlay1: #7f849c;
--catppuccin-overlay0: #6c7086;
--catppuccin-surface2: #585b70;
--catppuccin-surface1: #45475a;
--catppuccin-surface0: #313244;
--catppuccin-base: #1e1e2e;
--catppuccin-mantle: #181825;
--catppuccin-crust: #11111b;
}
}

View file

@ -1,36 +1,41 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Sentry.AspNetCore" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="7.2.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="9.0.0" />
<PackageReference Include="Npgsql" Version="9.0.2" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.2" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="1.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter" Version="8.0.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="Data\" />
<Folder Include="Migrations\" />
</ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AspNetCore.SwaggerUI.Themes" Version="2.0.0" />
<PackageReference Include="Sentry.AspNetCore" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="7.2.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="9.0.0" />
<PackageReference Include="Npgsql" Version="9.0.2" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.2" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="1.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter" Version="8.0.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="Data\" />
<Folder Include="Migrations\" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Util\SwaggerTheme\modern.custom.css" />
</ItemGroup>
</Project>