Fix build and code structure improvements. New but essential UI functionality. CI improvements. Documentation improvements. AI module improvements.

This commit is contained in:
StellaOps Bot
2025-12-26 21:54:17 +02:00
parent 335ff7da16
commit c2b9cd8d1f
3717 changed files with 264714 additions and 48202 deletions

View File

@@ -1,99 +1,213 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.PacksRegistry", "StellaOps.PacksRegistry", "{5E837028-56B3-94B8-18C9-620EA4BA051A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Core", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Core\StellaOps.PacksRegistry.Core.csproj", "{5827B712-158F-4C99-859A-308A612F9482}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Infrastructure", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Infrastructure\StellaOps.PacksRegistry.Infrastructure.csproj", "{1870FA80-A39D-4115-90AC-CB13E5640372}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Tests", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Tests\StellaOps.PacksRegistry.Tests.csproj", "{9594F2C3-D509-419E-81CC-615798845A53}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.WebService", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.WebService\StellaOps.PacksRegistry.WebService.csproj", "{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Worker", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Worker\StellaOps.PacksRegistry.Worker.csproj", "{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5827B712-158F-4C99-859A-308A612F9482}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Debug|x64.ActiveCfg = Debug|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Debug|x64.Build.0 = Debug|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Debug|x86.ActiveCfg = Debug|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Debug|x86.Build.0 = Debug|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Release|Any CPU.Build.0 = Release|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Release|x64.ActiveCfg = Release|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Release|x64.Build.0 = Release|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Release|x86.ActiveCfg = Release|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Release|x86.Build.0 = Release|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Debug|x64.ActiveCfg = Debug|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Debug|x64.Build.0 = Debug|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Debug|x86.ActiveCfg = Debug|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Debug|x86.Build.0 = Debug|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Release|Any CPU.Build.0 = Release|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Release|x64.ActiveCfg = Release|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Release|x64.Build.0 = Release|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Release|x86.ActiveCfg = Release|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Release|x86.Build.0 = Release|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Debug|x64.ActiveCfg = Debug|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Debug|x64.Build.0 = Debug|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Debug|x86.ActiveCfg = Debug|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Debug|x86.Build.0 = Debug|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Release|Any CPU.Build.0 = Release|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Release|x64.ActiveCfg = Release|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Release|x64.Build.0 = Release|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Release|x86.ActiveCfg = Release|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Release|x86.Build.0 = Release|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Debug|Any CPU.Build.0 = Debug|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Debug|x64.ActiveCfg = Debug|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Debug|x64.Build.0 = Debug|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Debug|x86.ActiveCfg = Debug|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Debug|x86.Build.0 = Debug|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Release|Any CPU.ActiveCfg = Release|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Release|Any CPU.Build.0 = Release|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Release|x64.ActiveCfg = Release|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Release|x64.Build.0 = Release|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Release|x86.ActiveCfg = Release|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Release|x86.Build.0 = Release|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Debug|x64.ActiveCfg = Debug|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Debug|x64.Build.0 = Debug|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Debug|x86.ActiveCfg = Debug|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Debug|x86.Build.0 = Debug|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Release|Any CPU.Build.0 = Release|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Release|x64.ActiveCfg = Release|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Release|x64.Build.0 = Release|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Release|x86.ActiveCfg = Release|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{5827B712-158F-4C99-859A-308A612F9482} = {5E837028-56B3-94B8-18C9-620EA4BA051A}
{1870FA80-A39D-4115-90AC-CB13E5640372} = {5E837028-56B3-94B8-18C9-620EA4BA051A}
{9594F2C3-D509-419E-81CC-615798845A53} = {5E837028-56B3-94B8-18C9-620EA4BA051A}
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60} = {5E837028-56B3-94B8-18C9-620EA4BA051A}
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5} = {5E837028-56B3-94B8-18C9-620EA4BA051A}
EndGlobalSection
EndGlobal
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.PacksRegistry", "StellaOps.PacksRegistry", "{DE3369BE-D2F2-5B6A-3A5F-F5219F32F0C3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.PacksRegistry.Core", "StellaOps.PacksRegistry.Core", "{4F6EA3CA-E66B-2E5E-9CD8-1B8B5D601E98}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.PacksRegistry.Infrastructure", "StellaOps.PacksRegistry.Infrastructure", "{14A8F08D-AC73-3BA4-CBE9-724FE690B440}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.PacksRegistry.Persistence.EfCore", "StellaOps.PacksRegistry.Persistence.EfCore", "{DCF084DA-74C3-8862-8A0D-B4FE63C103BC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.PacksRegistry.Tests", "StellaOps.PacksRegistry.Tests", "{95A03E04-9D20-80E0-59E0-5B259E25AFCD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.PacksRegistry.WebService", "StellaOps.PacksRegistry.WebService", "{F1FCF442-EA6B-5B8B-1797-60A6B90C1746}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.PacksRegistry.Worker", "StellaOps.PacksRegistry.Worker", "{062685FA-857A-0A9E-4D1A-B7EF80EA4925}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__External", "__External", "{5B52EF8A-3661-DCFF-797D-BC4D6AC60BDA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Router", "Router", "{FC018E5B-1E2F-DE19-1E97-0C845058C469}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Libraries", "__Libraries", "{1BE5B76C-B486-560B-6CB2-44C6537249AA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Microservice", "StellaOps.Microservice", "{3DE1DCDC-C845-4AC7-7B66-34B0A9E8626B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Microservice.AspNetCore", "StellaOps.Microservice.AspNetCore", "{6FA01E92-606B-0CB8-8583-6F693A903CFC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Router.AspNet", "StellaOps.Router.AspNet", "{A5994E92-7E0E-89FE-5628-DE1A0176B8BA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Router.Common", "StellaOps.Router.Common", "{54C11B29-4C54-7255-AB44-BEB63AF9BD1F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Libraries", "__Libraries", "{1345DD29-BB3A-FB5F-4B3D-E29F6045A27A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Canonical.Json", "StellaOps.Canonical.Json", "{79E122F4-2325-3E92-438E-5825A307B594}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Infrastructure.EfCore", "StellaOps.Infrastructure.EfCore", "{FCD529E0-DD17-6587-B29C-12D425C0AD0C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Infrastructure.Postgres", "StellaOps.Infrastructure.Postgres", "{61B23570-4F2D-B060-BE1F-37995682E494}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.TestKit", "StellaOps.TestKit", "{8380A20C-A5B8-EE91-1A58-270323688CB9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Tests", "__Tests", "{90659617-4DF7-809A-4E5B-29BB5A98E8E1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Libraries", "__Libraries", "{AB8B269C-5A2A-A4B8-0488-B5F81E55B4D9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.Infrastructure.Postgres.Testing", "StellaOps.Infrastructure.Postgres.Testing", "{CEDC2447-F717-3C95-7E08-F214D575A7B7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Libraries", "__Libraries", "{A5C98087-E847-D2C4-2143-20869479839D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.PacksRegistry.Persistence", "StellaOps.PacksRegistry.Persistence", "{DC96B4FC-3125-A60B-3CDB-B93F7E8D06A0}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__Tests", "__Tests", "{BB76B5A5-14BA-E317-828D-110B711D71F5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.PacksRegistry.Persistence.Tests", "StellaOps.PacksRegistry.Persistence.Tests", "{F89AEA95-57D2-0DB0-488D-CDB0B205DD20}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Canonical.Json", "E:\dev\git.stella-ops.org\src\__Libraries\StellaOps.Canonical.Json\StellaOps.Canonical.Json.csproj", "{AF9E7F02-25AD-3540-18D7-F6A4F8BA5A60}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Infrastructure.EfCore", "E:\dev\git.stella-ops.org\src\__Libraries\StellaOps.Infrastructure.EfCore\StellaOps.Infrastructure.EfCore.csproj", "{A63897D9-9531-989B-7309-E384BCFC2BB9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Infrastructure.Postgres", "E:\dev\git.stella-ops.org\src\__Libraries\StellaOps.Infrastructure.Postgres\StellaOps.Infrastructure.Postgres.csproj", "{8C594D82-3463-3367-4F06-900AC707753D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Infrastructure.Postgres.Testing", "E:\dev\git.stella-ops.org\src\__Tests\__Libraries\StellaOps.Infrastructure.Postgres.Testing\StellaOps.Infrastructure.Postgres.Testing.csproj", "{52F400CD-D473-7A1F-7986-89011CD2A887}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Microservice", "E:\dev\git.stella-ops.org\src\Router\__Libraries\StellaOps.Microservice\StellaOps.Microservice.csproj", "{BAD08D96-A80A-D27F-5D9C-656AEEB3D568}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Microservice.AspNetCore", "E:\dev\git.stella-ops.org\src\Router\__Libraries\StellaOps.Microservice.AspNetCore\StellaOps.Microservice.AspNetCore.csproj", "{F63694F1-B56D-6E72-3F5D-5D38B1541F0F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Core", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Core\StellaOps.PacksRegistry.Core.csproj", "{FF5A858C-05FE-3F54-8E56-1856A74B1039}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Infrastructure", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Infrastructure\StellaOps.PacksRegistry.Infrastructure.csproj", "{8DE1D4EF-9A0F-A127-FDE1-6F142A0E9FC5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Persistence", "__Libraries\StellaOps.PacksRegistry.Persistence\StellaOps.PacksRegistry.Persistence.csproj", "{D031A665-BE3E-F22E-2287-7FA6041D7ED4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Persistence.EfCore", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Persistence.EfCore\StellaOps.PacksRegistry.Persistence.EfCore.csproj", "{E0EA70B6-30DC-D75B-C4C4-4BD8054BE45E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Persistence.Tests", "__Tests\StellaOps.PacksRegistry.Persistence.Tests\StellaOps.PacksRegistry.Persistence.Tests.csproj", "{4E5AA5C3-AAA2-58DF-B1C1-6552645D720E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Tests", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Tests\StellaOps.PacksRegistry.Tests.csproj", "{7F9B6915-A2F6-F33B-F671-143ABE82BB86}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.WebService", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.WebService\StellaOps.PacksRegistry.WebService.csproj", "{02C902FA-8BC3-1E0D-0668-2CDB0C984AAA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Worker", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Worker\StellaOps.PacksRegistry.Worker.csproj", "{8341E3B6-B0D3-21AE-076F-E52323C8E57D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Router.AspNet", "E:\dev\git.stella-ops.org\src\Router\__Libraries\StellaOps.Router.AspNet\StellaOps.Router.AspNet.csproj", "{79104479-B087-E5D0-5523-F1803282A246}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.Router.Common", "E:\dev\git.stella-ops.org\src\Router\__Libraries\StellaOps.Router.Common\StellaOps.Router.Common.csproj", "{F17A6F0B-3120-2BA9-84D8-5F8BA0B9705D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.TestKit", "E:\dev\git.stella-ops.org\src\__Libraries\StellaOps.TestKit\StellaOps.TestKit.csproj", "{AF043113-CCE3-59C1-DF71-9804155F26A8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{AF9E7F02-25AD-3540-18D7-F6A4F8BA5A60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AF9E7F02-25AD-3540-18D7-F6A4F8BA5A60}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AF9E7F02-25AD-3540-18D7-F6A4F8BA5A60}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AF9E7F02-25AD-3540-18D7-F6A4F8BA5A60}.Release|Any CPU.Build.0 = Release|Any CPU
{A63897D9-9531-989B-7309-E384BCFC2BB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A63897D9-9531-989B-7309-E384BCFC2BB9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A63897D9-9531-989B-7309-E384BCFC2BB9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A63897D9-9531-989B-7309-E384BCFC2BB9}.Release|Any CPU.Build.0 = Release|Any CPU
{8C594D82-3463-3367-4F06-900AC707753D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8C594D82-3463-3367-4F06-900AC707753D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8C594D82-3463-3367-4F06-900AC707753D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8C594D82-3463-3367-4F06-900AC707753D}.Release|Any CPU.Build.0 = Release|Any CPU

View File

@@ -0,0 +1,99 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "StellaOps.PacksRegistry", "StellaOps.PacksRegistry", "{5E837028-56B3-94B8-18C9-620EA4BA051A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Core", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Core\StellaOps.PacksRegistry.Core.csproj", "{5827B712-158F-4C99-859A-308A612F9482}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Infrastructure", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Infrastructure\StellaOps.PacksRegistry.Infrastructure.csproj", "{1870FA80-A39D-4115-90AC-CB13E5640372}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Tests", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Tests\StellaOps.PacksRegistry.Tests.csproj", "{9594F2C3-D509-419E-81CC-615798845A53}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.WebService", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.WebService\StellaOps.PacksRegistry.WebService.csproj", "{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Worker", "StellaOps.PacksRegistry\StellaOps.PacksRegistry.Worker\StellaOps.PacksRegistry.Worker.csproj", "{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5827B712-158F-4C99-859A-308A612F9482}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Debug|x64.ActiveCfg = Debug|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Debug|x64.Build.0 = Debug|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Debug|x86.ActiveCfg = Debug|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Debug|x86.Build.0 = Debug|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Release|Any CPU.Build.0 = Release|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Release|x64.ActiveCfg = Release|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Release|x64.Build.0 = Release|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Release|x86.ActiveCfg = Release|Any CPU
{5827B712-158F-4C99-859A-308A612F9482}.Release|x86.Build.0 = Release|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Debug|x64.ActiveCfg = Debug|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Debug|x64.Build.0 = Debug|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Debug|x86.ActiveCfg = Debug|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Debug|x86.Build.0 = Debug|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Release|Any CPU.Build.0 = Release|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Release|x64.ActiveCfg = Release|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Release|x64.Build.0 = Release|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Release|x86.ActiveCfg = Release|Any CPU
{1870FA80-A39D-4115-90AC-CB13E5640372}.Release|x86.Build.0 = Release|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Debug|x64.ActiveCfg = Debug|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Debug|x64.Build.0 = Debug|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Debug|x86.ActiveCfg = Debug|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Debug|x86.Build.0 = Debug|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Release|Any CPU.Build.0 = Release|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Release|x64.ActiveCfg = Release|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Release|x64.Build.0 = Release|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Release|x86.ActiveCfg = Release|Any CPU
{9594F2C3-D509-419E-81CC-615798845A53}.Release|x86.Build.0 = Release|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Debug|Any CPU.Build.0 = Debug|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Debug|x64.ActiveCfg = Debug|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Debug|x64.Build.0 = Debug|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Debug|x86.ActiveCfg = Debug|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Debug|x86.Build.0 = Debug|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Release|Any CPU.ActiveCfg = Release|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Release|Any CPU.Build.0 = Release|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Release|x64.ActiveCfg = Release|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Release|x64.Build.0 = Release|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Release|x86.ActiveCfg = Release|Any CPU
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60}.Release|x86.Build.0 = Release|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Debug|x64.ActiveCfg = Debug|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Debug|x64.Build.0 = Debug|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Debug|x86.ActiveCfg = Debug|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Debug|x86.Build.0 = Debug|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Release|Any CPU.Build.0 = Release|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Release|x64.ActiveCfg = Release|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Release|x64.Build.0 = Release|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Release|x86.ActiveCfg = Release|Any CPU
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{5827B712-158F-4C99-859A-308A612F9482} = {5E837028-56B3-94B8-18C9-620EA4BA051A}
{1870FA80-A39D-4115-90AC-CB13E5640372} = {5E837028-56B3-94B8-18C9-620EA4BA051A}
{9594F2C3-D509-419E-81CC-615798845A53} = {5E837028-56B3-94B8-18C9-620EA4BA051A}
{316EBEF5-5749-486A-B9E8-A3DDE0AEAE60} = {5E837028-56B3-94B8-18C9-620EA4BA051A}
{E6F019B3-D1BA-4E2D-808C-9A0A215096C5} = {5E837028-56B3-94B8-18C9-620EA4BA051A}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,52 @@
<Solution>
<Folder Name="/StellaOps.PacksRegistry/">
<Project Path="StellaOps.PacksRegistry/StellaOps.PacksRegistry.Core/StellaOps.PacksRegistry.Core.csproj" />
<Project Path="StellaOps.PacksRegistry/StellaOps.PacksRegistry.Infrastructure/StellaOps.PacksRegistry.Infrastructure.csproj" />
<Project Path="StellaOps.PacksRegistry/StellaOps.PacksRegistry.Persistence.EfCore/StellaOps.PacksRegistry.Persistence.EfCore.csproj" />
<Project Path="StellaOps.PacksRegistry/StellaOps.PacksRegistry.WebService/StellaOps.PacksRegistry.WebService.csproj" />
<Project Path="StellaOps.PacksRegistry/StellaOps.PacksRegistry.Worker/StellaOps.PacksRegistry.Worker.csproj" />
</Folder>
<Folder Name="/__Libraries/">
<Project Path="../__Libraries/StellaOps.Infrastructure.Postgres/StellaOps.Infrastructure.Postgres.csproj" />
<Project Path="__Libraries/StellaOps.PacksRegistry.Persistence/StellaOps.PacksRegistry.Persistence.csproj" />
</Folder>
<Folder Name="/__Tests/">
<Project Path="../Aoc/__Libraries/StellaOps.Aoc/StellaOps.Aoc.csproj" />
<Project Path="../Attestor/StellaOps.Attestor.Envelope/StellaOps.Attestor.Envelope.csproj" />
<Project Path="../Attestor/__Libraries/StellaOps.Attestor.ProofChain/StellaOps.Attestor.ProofChain.csproj" />
<Project Path="../Concelier/__Libraries/StellaOps.Concelier.Cache.Valkey/StellaOps.Concelier.Cache.Valkey.csproj" />
<Project Path="../Concelier/__Libraries/StellaOps.Concelier.Connector.Common/StellaOps.Concelier.Connector.Common.csproj" />
<Project Path="../Concelier/__Libraries/StellaOps.Concelier.Core/StellaOps.Concelier.Core.csproj" />
<Project Path="../Concelier/__Libraries/StellaOps.Concelier.Interest/StellaOps.Concelier.Interest.csproj" />
<Project Path="../Concelier/__Libraries/StellaOps.Concelier.Merge/StellaOps.Concelier.Merge.csproj" />
<Project Path="../Concelier/__Libraries/StellaOps.Concelier.Models/StellaOps.Concelier.Models.csproj" />
<Project Path="../Concelier/__Libraries/StellaOps.Concelier.Normalization/StellaOps.Concelier.Normalization.csproj" />
<Project Path="../Concelier/__Libraries/StellaOps.Concelier.Persistence/StellaOps.Concelier.Persistence.csproj" />
<Project Path="../Concelier/__Libraries/StellaOps.Concelier.ProofService/StellaOps.Concelier.ProofService.csproj" />
<Project Path="../Concelier/__Libraries/StellaOps.Concelier.RawModels/StellaOps.Concelier.RawModels.csproj" />
<Project Path="../Concelier/__Libraries/StellaOps.Concelier.SbomIntegration/StellaOps.Concelier.SbomIntegration.csproj" />
<Project Path="../Concelier/__Libraries/StellaOps.Concelier.SourceIntel/StellaOps.Concelier.SourceIntel.csproj" />
<Project Path="../Feedser/StellaOps.Feedser.BinaryAnalysis/StellaOps.Feedser.BinaryAnalysis.csproj" />
<Project Path="../Feedser/StellaOps.Feedser.Core/StellaOps.Feedser.Core.csproj" />
<Project Path="../Provenance/StellaOps.Provenance.Attestation/StellaOps.Provenance.Attestation.csproj" />
<Project Path="../__Libraries/StellaOps.Canonical.Json/StellaOps.Canonical.Json.csproj" />
<Project Path="../__Libraries/StellaOps.Cryptography/StellaOps.Cryptography.csproj" />
<Project Path="../__Libraries/StellaOps.DependencyInjection/StellaOps.DependencyInjection.csproj" />
<Project Path="../__Libraries/StellaOps.Ingestion.Telemetry/StellaOps.Ingestion.Telemetry.csproj" />
<Project Path="../__Libraries/StellaOps.Messaging/StellaOps.Messaging.csproj" />
<Project Path="../__Libraries/StellaOps.Plugin/StellaOps.Plugin.csproj" />
<Project Path="../__Libraries/StellaOps.Provcache/StellaOps.Provcache.csproj" />
<Project Path="../__Libraries/StellaOps.Provenance/StellaOps.Provenance.csproj" />
<Project Path="../__Libraries/StellaOps.TestKit/StellaOps.TestKit.csproj" />
<Project Path="../__Libraries/StellaOps.VersionComparison/StellaOps.VersionComparison.csproj" />
<Project Path="../__Tests/__Libraries/StellaOps.Concelier.Testing/StellaOps.Concelier.Testing.csproj" />
<Project Path="../__Tests/__Libraries/StellaOps.Infrastructure.Postgres.Testing/StellaOps.Infrastructure.Postgres.Testing.csproj" />
<Project Path="StellaOps.PacksRegistry/StellaOps.PacksRegistry.Tests/StellaOps.PacksRegistry.Tests.csproj" />
<Project Path="__Tests/StellaOps.PacksRegistry.Persistence.Tests/StellaOps.PacksRegistry.Persistence.Tests.csproj" />
</Folder>
<Project Path="../__Libraries/StellaOps.Infrastructure.EfCore/StellaOps.Infrastructure.EfCore.csproj" />
<Project Path="../__Libraries/StellaOps.Microservice.AspNetCore/StellaOps.Microservice.AspNetCore.csproj" />
<Project Path="../__Libraries/StellaOps.Microservice/StellaOps.Microservice.csproj" />
<Project Path="../__Libraries/StellaOps.Router.AspNet/StellaOps.Router.AspNet.csproj" />
<Project Path="../__Libraries/StellaOps.Router.Common/StellaOps.Router.Common.csproj" />
</Solution>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" ?>
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
@@ -6,16 +6,16 @@
<ItemGroup>
<ProjectReference Include="..\StellaOps.PacksRegistry.Core\StellaOps.PacksRegistry.Core.csproj"/>
<ProjectReference Include="..\StellaOps.PacksRegistry.Core\StellaOps.PacksRegistry.Core.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
<PackageReference Include="Microsoft.Extensions.Options" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" />
</ItemGroup>

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\StellaOps.PacksRegistry.Core\StellaOps.PacksRegistry.Core.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.0" />
</ItemGroup>
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,42 @@
using Microsoft.EntityFrameworkCore;
using StellaOps.Infrastructure.EfCore.Context;
namespace StellaOps.PacksRegistry.Persistence.EfCore.Context;
/// <summary>
/// EF Core DbContext for the PacksRegistry module.
/// </summary>
/// <remarks>
/// This is a placeholder. Run the scaffolding script to generate the full context:
/// <code>
/// .\devops\scripts\efcore\Scaffold-Module.ps1 -Module PacksRegistry -Schema packs
/// </code>
/// </remarks>
public class PacksRegistryDbContext : StellaOpsDbContextBase
{
/// <inheritdoc />
protected override string SchemaName => "packs";
/// <summary>
/// Creates a new PacksRegistryDbContext.
/// </summary>
public PacksRegistryDbContext(DbContextOptions<PacksRegistryDbContext> options) : base(options)
{
}
// DbSet properties will be generated by scaffolding:
// public virtual DbSet<Pack> Packs { get; set; } = null!;
// public virtual DbSet<Attestation> Attestations { get; set; } = null!;
// public virtual DbSet<Audit> Audits { get; set; } = null!;
// public virtual DbSet<Lifecycle> Lifecycles { get; set; } = null!;
// public virtual DbSet<Mirror> Mirrors { get; set; } = null!;
// public virtual DbSet<Parity> Parities { get; set; } = null!;
/// <inheritdoc />
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Entity configurations will be generated by scaffolding
}
}

View File

@@ -0,0 +1,51 @@
using Microsoft.Extensions.DependencyInjection;
using StellaOps.Infrastructure.EfCore.Extensions;
using StellaOps.Infrastructure.EfCore.Tenancy;
using StellaOps.PacksRegistry.Persistence.EfCore.Context;
namespace StellaOps.PacksRegistry.Persistence.EfCore.Extensions;
/// <summary>
/// Extension methods for registering PacksRegistry EF Core persistence.
/// </summary>
public static class PacksRegistryPersistenceExtensions
{
private const string SchemaName = "packs";
/// <summary>
/// Registers EF Core persistence for the PacksRegistry module.
/// </summary>
/// <param name="services">Service collection.</param>
/// <param name="connectionString">PostgreSQL connection string.</param>
/// <returns>Service collection for chaining.</returns>
public static IServiceCollection AddPacksRegistryEfCorePersistence(
this IServiceCollection services,
string connectionString)
{
// Register DbContext with tenant isolation
services.AddStellaOpsDbContext<PacksRegistryDbContext>(
connectionString,
SchemaName);
// Register repository implementations
// Uncomment after scaffolding and implementing repositories:
// services.AddScoped<IPackRepository, PackEfRepository>();
// services.AddScoped<IAttestationRepository, AttestationEfRepository>();
// services.AddScoped<IAuditRepository, AuditEfRepository>();
// services.AddScoped<ILifecycleRepository, LifecycleEfRepository>();
// services.AddScoped<IMirrorRepository, MirrorEfRepository>();
// services.AddScoped<IParityRepository, ParityEfRepository>();
return services;
}
/// <summary>
/// Registers a fallback tenant context accessor that always uses "_system".
/// Use for worker services or migrations.
/// </summary>
public static IServiceCollection AddPacksRegistrySystemTenantContext(this IServiceCollection services)
{
services.AddSingleton<ITenantContextAccessor>(SystemTenantContextAccessor.Instance);
return services;
}
}

View File

@@ -0,0 +1,55 @@
# StellaOps.PacksRegistry.Persistence.EfCore
EF Core persistence layer for the PacksRegistry module using database-first scaffolding.
## Directory Structure
```
├── Context/
│ └── PacksRegistryDbContext.cs # Scaffolded from database
├── Entities/
│ └── *.cs # Scaffolded from database
├── CompiledModels/
│ └── *.cs # Generated for performance
├── Repositories/
│ └── PackEfRepository.cs # Repository implementation
└── Extensions/
└── PacksRegistryPersistenceExtensions.cs # DI registration
```
## Prerequisites
1. Create SQL migrations in `StellaOps.PacksRegistry.Storage.Postgres/Migrations/`
2. PostgreSQL running with `packs` schema initialized:
```bash
docker compose -f devops/compose/docker-compose.dev.yaml up -d postgres
```
3. Migrations applied
## Scaffolding
To scaffold/regenerate from the database:
```powershell
# From repository root
.\devops\scripts\efcore\Scaffold-Module.ps1 -Module PacksRegistry -Schema packs
```
Or on Linux/macOS:
```bash
./devops/scripts/efcore/scaffold-module.sh PacksRegistry packs
```
**Note:** The scaffolding script expects the project at `src/PacksRegistry/__Libraries/StellaOps.PacksRegistry.Persistence.EfCore`.
Since PacksRegistry uses a different directory structure, update the script or use the `-ProjectPath` parameter.
## Usage
Register in `Program.cs`:
```csharp
builder.Services.AddPacksRegistryEfCorePersistence(
connectionString: configuration.GetConnectionString("PacksRegistry")!);
```

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" ?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<RootNamespace>StellaOps.PacksRegistry.Persistence.EfCore</RootNamespace>
<AssemblyName>StellaOps.PacksRegistry.Persistence.EfCore</AssemblyName>
<Description>EF Core persistence layer for StellaOps PacksRegistry module with database-first scaffolding</Description>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" PrivateAssets="all" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\__Libraries\StellaOps.Infrastructure.EfCore\StellaOps.Infrastructure.EfCore.csproj" />
<ProjectReference Include="..\StellaOps.PacksRegistry.Core\StellaOps.PacksRegistry.Core.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,35 +0,0 @@
<?xml version="1.0" ?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.12.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="10.0.0" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\StellaOps.PacksRegistry.Storage.Postgres\StellaOps.PacksRegistry.Storage.Postgres.csproj" />
<ProjectReference Include="..\..\..\__Tests\__Libraries\StellaOps.Infrastructure.Postgres.Testing\StellaOps.Infrastructure.Postgres.Testing.csproj" />
<ProjectReference Include="../../../__Libraries/StellaOps.TestKit/StellaOps.TestKit.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,13 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>preview</LangVersion>
<RootNamespace>StellaOps.PacksRegistry.Storage.Postgres</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="../StellaOps.PacksRegistry.Core/StellaOps.PacksRegistry.Core.csproj" />
<ProjectReference Include="../../../__Libraries/StellaOps.Infrastructure.Postgres/StellaOps.Infrastructure.Postgres.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,4 +1,4 @@
using System.IO.Compression;
using System.IO.Compression;
using StellaOps.PacksRegistry.Core.Services;
using StellaOps.PacksRegistry.Infrastructure.InMemory;
using StellaOps.PacksRegistry.Infrastructure.Verification;
@@ -13,7 +13,7 @@ public sealed class ExportServiceTests
[Fact]
public async Task Offline_seed_includes_metadata_and_content_when_requested()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var packRepo = new InMemoryPackRepository();
var parityRepo = new InMemoryParityRepository();
var lifecycleRepo = new InMemoryLifecycleRepository();
@@ -34,7 +34,6 @@ public sealed class ExportServiceTests
var archiveStream = await exportService.ExportOfflineSeedAsync(record.TenantId, includeContent: true, includeProvenance: true, cancellationToken: ct);
using var archive = new ZipArchive(archiveStream, ZipArchiveMode.Read);
using StellaOps.TestKit;
Assert.NotNull(archive.GetEntry("packs.ndjson"));
Assert.NotNull(archive.GetEntry("parity.ndjson"));
Assert.NotNull(archive.GetEntry("lifecycle.ndjson"));

View File

@@ -14,7 +14,7 @@ public sealed class FilePackRepositoryTests
Directory.CreateDirectory(tempPath);
try
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var repo = new FilePackRepository(tempPath);
var record = new PackRecord(

View File

@@ -13,7 +13,7 @@ public sealed class PackServiceTests
[Fact]
public async Task Upload_persists_pack_with_digest()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var repo = new InMemoryPackRepository();
var verifier = new SimpleSignatureVerifier();
var service = new PackService(repo, verifier, new InMemoryAuditRepository(), null, TimeProvider.System);
@@ -41,7 +41,7 @@ public sealed class PackServiceTests
[Fact]
public async Task Upload_rejects_when_digest_mismatch()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var repo = new InMemoryPackRepository();
var verifier = new AlwaysFailSignatureVerifier();
var service = new PackService(repo, verifier, new InMemoryAuditRepository(), null, TimeProvider.System);
@@ -63,7 +63,7 @@ public sealed class PackServiceTests
[Fact]
public async Task Rotate_signature_updates_record_and_audits()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var repo = new InMemoryPackRepository();
var audit = new InMemoryAuditRepository();
var verifier = new SimpleSignatureVerifier();

View File

@@ -1,4 +1,4 @@
using System.Net;
using System.Net;
using System.Net.Http.Json;
using System.IO.Compression;
using Microsoft.AspNetCore.Mvc.Testing;
@@ -48,7 +48,7 @@ public sealed class PacksApiTests : IClassFixture<WebApplicationFactory<Program>
[Fact]
public async Task Upload_and_download_round_trip()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
var client = _factory.CreateClient();
client.DefaultRequestHeaders.Add("X-StellaOps-Tenant", "t1");
@@ -124,7 +124,6 @@ public sealed class PacksApiTests : IClassFixture<WebApplicationFactory<Program>
Assert.Equal(HttpStatusCode.OK, offlineSeed.StatusCode);
var bytesZip = await offlineSeed.Content.ReadAsByteArrayAsync(ct);
using var archive = new ZipArchive(new MemoryStream(bytesZip));
using StellaOps.TestKit;
Assert.NotNull(archive.GetEntry("packs.ndjson"));
Assert.NotNull(archive.GetEntry($"content/{created.PackId}.bin"));
}

View File

@@ -1,4 +1,4 @@
using System.Security.Cryptography;
using System.Security.Cryptography;
using System.Text;
using StellaOps.PacksRegistry.Infrastructure.Verification;
@@ -12,7 +12,7 @@ public sealed class RsaSignatureVerifierTests
[Fact]
public async Task Verify_succeeds_when_signature_matches_digest()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
using var rsa = RSA.Create(2048);
var publicPem = ExportPublicPem(rsa);
@@ -29,9 +29,8 @@ public sealed class RsaSignatureVerifierTests
[Fact]
public async Task Verify_fails_on_invalid_signature()
{
var ct = TestContext.Current.CancellationToken;
var ct = CancellationToken.None;
using var rsa = RSA.Create(2048);
using StellaOps.TestKit;
var publicPem = ExportPublicPem(rsa);
const string digest = "sha256:deadbeef";
var sig = Convert.ToBase64String(Encoding.UTF8.GetBytes("bogus"));

View File

@@ -1,10 +1,10 @@
<?xml version="1.0"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<UseXunitV3>true</UseXunitV3>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UseConcelierTestInfra>false</UseConcelierTestInfra>
<LangVersion>preview</LangVersion>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<IsPackable>false</IsPackable>
@@ -12,11 +12,8 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.0" />
<PackageReference Include="xunit.v3" Version="3.0.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.3" />
</ItemGroup>
<PackageReference Include="xunit.v3" />
</ItemGroup>
<ItemGroup>
<Content Include="xunit.runner.json" CopyToOutputDirectory="PreserveNewest" />
@@ -32,4 +29,4 @@
<ProjectReference Include="..\StellaOps.PacksRegistry.WebService\StellaOps.PacksRegistry.WebService.csproj" />
<ProjectReference Include="../../../__Libraries/StellaOps.TestKit/StellaOps.TestKit.csproj" />
</ItemGroup>
</Project>
</Project>

View File

@@ -757,4 +757,5 @@ static bool IsTenantAllowed(string tenant, AuthOptions auth, out IResult? result
return true;
}
// Expose Program class for WebApplicationFactory in tests
public partial class Program;

View File

@@ -0,0 +1,12 @@
{
"profiles": {
"StellaOps.PacksRegistry.WebService": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:62525;http://localhost:62526"
}
}
}

View File

@@ -4,21 +4,25 @@
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<InternalsVisibleTo Include="StellaOps.PacksRegistry.Tests" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.0"/>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" />
</ItemGroup>
@@ -32,7 +36,7 @@
<ProjectReference Include="..\StellaOps.PacksRegistry.Infrastructure\StellaOps.PacksRegistry.Infrastructure.csproj"/>
<ProjectReference Include="..\..\..\__Libraries\StellaOps.Router.AspNet\StellaOps.Router.AspNet.csproj"/>
<ProjectReference Include="..\..\..\Router/__Libraries/StellaOps.Router.AspNet\StellaOps.Router.AspNet.csproj"/>
</ItemGroup>

View File

@@ -21,7 +21,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.0"/>
<PackageReference Include="Microsoft.Extensions.Hosting" />
</ItemGroup>

View File

@@ -1,90 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Core", "StellaOps.PacksRegistry.Core\StellaOps.PacksRegistry.Core.csproj", "{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Infrastructure", "StellaOps.PacksRegistry.Infrastructure\StellaOps.PacksRegistry.Infrastructure.csproj", "{C5FDDBA3-5D96-4158-810D-6597A96DA574}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.WebService", "StellaOps.PacksRegistry.WebService\StellaOps.PacksRegistry.WebService.csproj", "{4CE7EBE6-67A6-4947-8702-D123343FC297}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Worker", "StellaOps.PacksRegistry.Worker\StellaOps.PacksRegistry.Worker.csproj", "{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StellaOps.PacksRegistry.Tests", "StellaOps.PacksRegistry.Tests\StellaOps.PacksRegistry.Tests.csproj", "{1FA70E02-C65A-484C-87E7-0A33EEB69573}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}.Debug|x64.ActiveCfg = Debug|Any CPU
{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}.Debug|x64.Build.0 = Debug|Any CPU
{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}.Debug|x86.ActiveCfg = Debug|Any CPU
{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}.Debug|x86.Build.0 = Debug|Any CPU
{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}.Release|Any CPU.Build.0 = Release|Any CPU
{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}.Release|x64.ActiveCfg = Release|Any CPU
{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}.Release|x64.Build.0 = Release|Any CPU
{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}.Release|x86.ActiveCfg = Release|Any CPU
{98FB93E5-21F8-4D24-AD54-1DF52070CAB8}.Release|x86.Build.0 = Release|Any CPU
{C5FDDBA3-5D96-4158-810D-6597A96DA574}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C5FDDBA3-5D96-4158-810D-6597A96DA574}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C5FDDBA3-5D96-4158-810D-6597A96DA574}.Debug|x64.ActiveCfg = Debug|Any CPU
{C5FDDBA3-5D96-4158-810D-6597A96DA574}.Debug|x64.Build.0 = Debug|Any CPU
{C5FDDBA3-5D96-4158-810D-6597A96DA574}.Debug|x86.ActiveCfg = Debug|Any CPU
{C5FDDBA3-5D96-4158-810D-6597A96DA574}.Debug|x86.Build.0 = Debug|Any CPU
{C5FDDBA3-5D96-4158-810D-6597A96DA574}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C5FDDBA3-5D96-4158-810D-6597A96DA574}.Release|Any CPU.Build.0 = Release|Any CPU
{C5FDDBA3-5D96-4158-810D-6597A96DA574}.Release|x64.ActiveCfg = Release|Any CPU
{C5FDDBA3-5D96-4158-810D-6597A96DA574}.Release|x64.Build.0 = Release|Any CPU
{C5FDDBA3-5D96-4158-810D-6597A96DA574}.Release|x86.ActiveCfg = Release|Any CPU
{C5FDDBA3-5D96-4158-810D-6597A96DA574}.Release|x86.Build.0 = Release|Any CPU
{4CE7EBE6-67A6-4947-8702-D123343FC297}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4CE7EBE6-67A6-4947-8702-D123343FC297}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4CE7EBE6-67A6-4947-8702-D123343FC297}.Debug|x64.ActiveCfg = Debug|Any CPU
{4CE7EBE6-67A6-4947-8702-D123343FC297}.Debug|x64.Build.0 = Debug|Any CPU
{4CE7EBE6-67A6-4947-8702-D123343FC297}.Debug|x86.ActiveCfg = Debug|Any CPU
{4CE7EBE6-67A6-4947-8702-D123343FC297}.Debug|x86.Build.0 = Debug|Any CPU
{4CE7EBE6-67A6-4947-8702-D123343FC297}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4CE7EBE6-67A6-4947-8702-D123343FC297}.Release|Any CPU.Build.0 = Release|Any CPU
{4CE7EBE6-67A6-4947-8702-D123343FC297}.Release|x64.ActiveCfg = Release|Any CPU
{4CE7EBE6-67A6-4947-8702-D123343FC297}.Release|x64.Build.0 = Release|Any CPU
{4CE7EBE6-67A6-4947-8702-D123343FC297}.Release|x86.ActiveCfg = Release|Any CPU
{4CE7EBE6-67A6-4947-8702-D123343FC297}.Release|x86.Build.0 = Release|Any CPU
{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}.Debug|x64.ActiveCfg = Debug|Any CPU
{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}.Debug|x64.Build.0 = Debug|Any CPU
{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}.Debug|x86.ActiveCfg = Debug|Any CPU
{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}.Debug|x86.Build.0 = Debug|Any CPU
{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}.Release|Any CPU.Build.0 = Release|Any CPU
{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}.Release|x64.ActiveCfg = Release|Any CPU
{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}.Release|x64.Build.0 = Release|Any CPU
{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}.Release|x86.ActiveCfg = Release|Any CPU
{7DE3DD7E-E1F9-4443-81E4-C7E4E80F5703}.Release|x86.Build.0 = Release|Any CPU
{1FA70E02-C65A-484C-87E7-0A33EEB69573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1FA70E02-C65A-484C-87E7-0A33EEB69573}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1FA70E02-C65A-484C-87E7-0A33EEB69573}.Debug|x64.ActiveCfg = Debug|Any CPU
{1FA70E02-C65A-484C-87E7-0A33EEB69573}.Debug|x64.Build.0 = Debug|Any CPU
{1FA70E02-C65A-484C-87E7-0A33EEB69573}.Debug|x86.ActiveCfg = Debug|Any CPU
{1FA70E02-C65A-484C-87E7-0A33EEB69573}.Debug|x86.Build.0 = Debug|Any CPU
{1FA70E02-C65A-484C-87E7-0A33EEB69573}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1FA70E02-C65A-484C-87E7-0A33EEB69573}.Release|Any CPU.Build.0 = Release|Any CPU
{1FA70E02-C65A-484C-87E7-0A33EEB69573}.Release|x64.ActiveCfg = Release|Any CPU
{1FA70E02-C65A-484C-87E7-0A33EEB69573}.Release|x64.Build.0 = Release|Any CPU
{1FA70E02-C65A-484C-87E7-0A33EEB69573}.Release|x86.ActiveCfg = Release|Any CPU
{1FA70E02-C65A-484C-87E7-0A33EEB69573}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,21 @@
using Microsoft.EntityFrameworkCore;
namespace StellaOps.PacksRegistry.Persistence.EfCore.Context;
/// <summary>
/// EF Core DbContext for PacksRegistry module.
/// This is a stub that will be scaffolded from the PostgreSQL database.
/// </summary>
public class PacksRegistryDbContext : DbContext
{
public PacksRegistryDbContext(DbContextOptions<PacksRegistryDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("packs");
base.OnModelCreating(modelBuilder);
}
}

View File

@@ -2,23 +2,20 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using StellaOps.Infrastructure.Postgres.Options;
using StellaOps.PacksRegistry.Core.Contracts;
using StellaOps.PacksRegistry.Storage.Postgres.Repositories;
using StellaOps.PacksRegistry.Persistence.Postgres;
using StellaOps.PacksRegistry.Persistence.Postgres.Repositories;
namespace StellaOps.PacksRegistry.Storage.Postgres;
namespace StellaOps.PacksRegistry.Persistence.Extensions;
/// <summary>
/// Extension methods for configuring PacksRegistry PostgreSQL storage services.
/// Extension methods for configuring PacksRegistry persistence services.
/// </summary>
public static class ServiceCollectionExtensions
public static class PacksRegistryPersistenceExtensions
{
/// <summary>
/// Adds PacksRegistry PostgreSQL storage services.
/// Adds PacksRegistry PostgreSQL persistence services.
/// </summary>
/// <param name="services">Service collection.</param>
/// <param name="configuration">Configuration root.</param>
/// <param name="sectionName">Configuration section name for PostgreSQL options.</param>
/// <returns>Service collection for chaining.</returns>
public static IServiceCollection AddPacksRegistryPostgresStorage(
public static IServiceCollection AddPacksRegistryPersistence(
this IServiceCollection services,
IConfiguration configuration,
string sectionName = "Postgres:PacksRegistry")
@@ -38,12 +35,9 @@ public static class ServiceCollectionExtensions
}
/// <summary>
/// Adds PacksRegistry PostgreSQL storage services with explicit options.
/// Adds PacksRegistry PostgreSQL persistence services with explicit options.
/// </summary>
/// <param name="services">Service collection.</param>
/// <param name="configureOptions">Options configuration action.</param>
/// <returns>Service collection for chaining.</returns>
public static IServiceCollection AddPacksRegistryPostgresStorage(
public static IServiceCollection AddPacksRegistryPersistence(
this IServiceCollection services,
Action<PostgresOptions> configureOptions)
{

View File

@@ -4,7 +4,7 @@ using Npgsql;
using StellaOps.Infrastructure.Postgres.Connections;
using StellaOps.Infrastructure.Postgres.Options;
namespace StellaOps.PacksRegistry.Storage.Postgres;
namespace StellaOps.PacksRegistry.Persistence.Postgres;
/// <summary>
/// PostgreSQL data source for PacksRegistry module.

View File

@@ -4,7 +4,7 @@ using StellaOps.Infrastructure.Postgres.Repositories;
using StellaOps.PacksRegistry.Core.Contracts;
using StellaOps.PacksRegistry.Core.Models;
namespace StellaOps.PacksRegistry.Storage.Postgres.Repositories;
namespace StellaOps.PacksRegistry.Persistence.Postgres.Repositories;
/// <summary>
/// PostgreSQL implementation of <see cref="IAttestationRepository"/>.

View File

@@ -4,7 +4,7 @@ using StellaOps.Infrastructure.Postgres.Repositories;
using StellaOps.PacksRegistry.Core.Contracts;
using StellaOps.PacksRegistry.Core.Models;
namespace StellaOps.PacksRegistry.Storage.Postgres.Repositories;
namespace StellaOps.PacksRegistry.Persistence.Postgres.Repositories;
/// <summary>
/// PostgreSQL implementation of <see cref="IAuditRepository"/>.

View File

@@ -4,7 +4,7 @@ using StellaOps.Infrastructure.Postgres.Repositories;
using StellaOps.PacksRegistry.Core.Contracts;
using StellaOps.PacksRegistry.Core.Models;
namespace StellaOps.PacksRegistry.Storage.Postgres.Repositories;
namespace StellaOps.PacksRegistry.Persistence.Postgres.Repositories;
/// <summary>
/// PostgreSQL implementation of <see cref="ILifecycleRepository"/>.

View File

@@ -4,7 +4,7 @@ using StellaOps.Infrastructure.Postgres.Repositories;
using StellaOps.PacksRegistry.Core.Contracts;
using StellaOps.PacksRegistry.Core.Models;
namespace StellaOps.PacksRegistry.Storage.Postgres.Repositories;
namespace StellaOps.PacksRegistry.Persistence.Postgres.Repositories;
/// <summary>
/// PostgreSQL implementation of <see cref="IMirrorRepository"/>.

View File

@@ -5,7 +5,7 @@ using StellaOps.Infrastructure.Postgres.Repositories;
using StellaOps.PacksRegistry.Core.Contracts;
using StellaOps.PacksRegistry.Core.Models;
namespace StellaOps.PacksRegistry.Storage.Postgres.Repositories;
namespace StellaOps.PacksRegistry.Persistence.Postgres.Repositories;
/// <summary>
/// PostgreSQL implementation of <see cref="IPackRepository"/>.

View File

@@ -4,7 +4,7 @@ using StellaOps.Infrastructure.Postgres.Repositories;
using StellaOps.PacksRegistry.Core.Contracts;
using StellaOps.PacksRegistry.Core.Models;
namespace StellaOps.PacksRegistry.Storage.Postgres.Repositories;
namespace StellaOps.PacksRegistry.Persistence.Postgres.Repositories;
/// <summary>
/// PostgreSQL implementation of <see cref="IParityRepository"/>.

View File

@@ -0,0 +1,26 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>preview</LangVersion>
<RootNamespace>StellaOps.PacksRegistry.Persistence</RootNamespace>
<AssemblyName>StellaOps.PacksRegistry.Persistence</AssemblyName>
<Description>Consolidated persistence layer for StellaOps PacksRegistry module</Description>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" PrivateAssets="all" />
<PackageReference Include="Npgsql" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\StellaOps.PacksRegistry\StellaOps.PacksRegistry.Core\StellaOps.PacksRegistry.Core.csproj" />
<ProjectReference Include="..\..\..\__Libraries\StellaOps.Infrastructure.Postgres\StellaOps.Infrastructure.Postgres.csproj" />
<ProjectReference Include="..\..\..\__Libraries\StellaOps.Infrastructure.EfCore\StellaOps.Infrastructure.EfCore.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,8 +1,9 @@
using System.Reflection;
using StellaOps.Infrastructure.Postgres.Testing;
using StellaOps.PacksRegistry.Persistence.Postgres;
using Xunit;
namespace StellaOps.PacksRegistry.Storage.Postgres.Tests;
namespace StellaOps.PacksRegistry.Persistence.Tests;
/// <summary>
/// PostgreSQL integration test fixture for the PacksRegistry module.

View File

@@ -3,11 +3,12 @@ using FluentAssertions;
using Microsoft.Extensions.Logging.Abstractions;
using MicrosoftOptions = Microsoft.Extensions.Options;
using StellaOps.PacksRegistry.Core.Models;
using StellaOps.PacksRegistry.Storage.Postgres.Repositories;
using StellaOps.PacksRegistry.Persistence.Postgres;
using StellaOps.PacksRegistry.Persistence.Postgres.Repositories;
using Xunit;
using StellaOps.TestKit;
namespace StellaOps.PacksRegistry.Storage.Postgres.Tests;
namespace StellaOps.PacksRegistry.Persistence.Tests;
[Collection(PacksRegistryPostgresCollection.Name)]
public sealed class PostgresPackRepositoryTests : IAsyncLifetime

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>preview</LangVersion>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
<RootNamespace>StellaOps.PacksRegistry.Persistence.Tests</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
<PackageReference Include="Microsoft.Extensions.Options" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\__Libraries\StellaOps.PacksRegistry.Persistence\StellaOps.PacksRegistry.Persistence.csproj" />
<ProjectReference Include="..\..\..\__Tests\__Libraries\StellaOps.Infrastructure.Postgres.Testing\StellaOps.Infrastructure.Postgres.Testing.csproj" />
<ProjectReference Include="..\..\..\__Libraries\StellaOps.TestKit\StellaOps.TestKit.csproj" />
</ItemGroup>
</Project>