This issue tracks what needs to be done in VP 2.0.
(I been very bad and haven't included everything that has been done to VP 2.0 in this issue, since the scope has changed so much, and only now has been pretty much set.)
Currently, project filtering is case-sensitive. If a user visits https://projects.voltstro.dev/UnityWebBrowser all is good, the project page will load, but if a user visits https://projects.voltstro.dev/unitywebbrowser, VoltProjects will come back with a 404 error.
This is happening because the unique name column is what is used for getting what project a page belongs to. The name column is also currently used for display reasons.
Normally, to compare strings Case-Insensitive, you use .Equals(comparing, StringComparison.InvariantCultureIgnoreCase), but with EF, that does not work, as we need to use Collations.
Create new "display_name" column. UI will use this for displaying (as well as short_name on small screens).
Support for MkDocs should be added. Currently, Pootis-Bot V1 docs use MKDocs, and VP doesn't support it as a builder.
Issues
It appears MkDocs doesn't have any per page JSON "models" (like docfx), it does however output a site/search/search_index.json file, which contains each page and their content, per sub-heading. The output content is also sometimes not complete, like with Pootis-Bot's custom download page.
It would be handy if each page outputted a single json file, with it's details. MkDocs does support custom plugins, perhaps a custom one could be made?
The ability to search across doc pages. Currently you can only search across articles via the TOC's search, which searches across the current TOC page titles on the client side.
We want the ability to search docs, both via it's title and content. Postgres has good full text searching, which also handles our content field holding HTML content very well. It also means not running/using an external service for search.
Text-Search types in postgres need a regconfig value, containing a configuration for a language. While VP doesn't have proper support for multi-language, we still want to keep project_pages multi-lang, to not make future life harder. The index that is needed for good performance TS in postgres can pull it's config from a column. We can't use subqueries in indexes, so a column will need to be added to project_pages.
Tasks
Add language_config of type regconfig to project_pages. This value shall be provided by a new column in language called configuration.
Add new index to project_pages for search vector
CREATEINDEXix_project_page_search_vectorONpublic.project_page USING gin (to_tsvector(language_config, content));
Main critical packages that also need .NET 8 releases:
Microsoft.EntityFrameworkCore
Related buddies (Tools, etc)
Npgsql.EntityFrameworkCore.PostgreSQL (Release candidate for .NET 8 is out)
EFCore.NamingConventions (Release candidate for .NET 8 is out)
DistributedLock.Postgres
Notes
DistributedLock.Postgres does not work with .NET 8 version of Npgsql.EntityFrameworkCore.PostgreSQL due to breaking changes in Npgsql. Issue was fixed in DistributedLock.Postgres 1.0.5
Npgsql.EntityFrameworkCore.PostgreSQL needs EnableDynamicJson()to be called now, to allow JSON. To support this, AddNpgsqlDataSource was added. This for whatever reason broke dbContext.Database.GetConnectionString();, which now returns everything except the password key now. To fix this issue, dbContext.Database.GetDbConnection(); was used, and the connection was passed onto PostgresDistributedLock instead.