Update for v4-rc5 of doc library

This commit is contained in:
Daniel J. Summers 2024-09-18 19:54:45 -04:00
parent 0032d15c0a
commit 870f87cb17
11 changed files with 15 additions and 22 deletions

View File

@ -5,8 +5,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="BitBadger.Documents.Postgres" Version="4.0.0-rc4" /> <PackageReference Include="BitBadger.Documents.Postgres" Version="4.0.0-rc5" />
<PackageReference Include="BitBadger.Documents.Sqlite" Version="4.0.0-rc4" /> <PackageReference Include="BitBadger.Documents.Sqlite" Version="4.0.0-rc5" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.8" /> <PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.8" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />

View File

@ -43,7 +43,6 @@ type PostgresCategoryData(log: ILogger) =
|> Seq.filter (fun cat -> cat.ParentNames |> Array.contains it.Name) |> Seq.filter (fun cat -> cat.ParentNames |> Array.contains it.Name)
|> Seq.map _.Id |> Seq.map _.Id
|> Seq.append (Seq.singleton it.Id) |> Seq.append (Seq.singleton it.Id)
|> Seq.map box
|> Field.InArray (nameof Post.Empty.CategoryIds) Table.Post |> Field.InArray (nameof Post.Empty.CategoryIds) Table.Post
let query = let query =
(Query.statementWhere (Query.statementWhere

View File

@ -111,8 +111,7 @@ type PostgresPageData(log: ILogger) =
log.LogTrace "Page.findCurrentPermalink" log.LogTrace "Page.findCurrentPermalink"
if List.isEmpty permalinks then return None if List.isEmpty permalinks then return None
else else
let linkField = let linkField = Field.InArray (nameof Page.Empty.PriorPermalinks) Table.Page (List.map string permalinks)
Field.InArray (nameof Page.Empty.PriorPermalinks) Table.Page (List.map (string >> box) permalinks)
let query = let query =
(Query.statementWhere (Query.statementWhere
(Query.find Table.Page) (Query.find Table.Page)

View File

@ -97,8 +97,7 @@ type PostgresPostData(log: ILogger) =
log.LogTrace "Post.findCurrentPermalink" log.LogTrace "Post.findCurrentPermalink"
if List.isEmpty permalinks then return None if List.isEmpty permalinks then return None
else else
let linkField = let linkField = Field.InArray (nameof Post.Empty.PriorPermalinks) Table.Post (List.map string permalinks)
Field.InArray (nameof Post.Empty.PriorPermalinks) Table.Post (List.map (string >> box) permalinks)
let query = let query =
(Query.statementWhere (Query.statementWhere
(Query.find Table.Post) (Query.find Table.Post)
@ -121,7 +120,7 @@ type PostgresPostData(log: ILogger) =
/// Get a page of categorized posts for the given web log (excludes revisions) /// Get a page of categorized posts for the given web log (excludes revisions)
let findPageOfCategorizedPosts webLogId (categoryIds: CategoryId list) pageNbr postsPerPage = let findPageOfCategorizedPosts webLogId (categoryIds: CategoryId list) pageNbr postsPerPage =
log.LogTrace "Post.findPageOfCategorizedPosts" log.LogTrace "Post.findPageOfCategorizedPosts"
let catIdField = Field.InArray (nameof Post.Empty.CategoryIds) Table.Post (List.map (string >> box) categoryIds) let catIdField = Field.InArray (nameof Post.Empty.CategoryIds) Table.Post (List.map string categoryIds)
Custom.list Custom.list
$"""{selectWithCriteria Table.Post} $"""{selectWithCriteria Table.Post}
AND {Query.whereByFields All [ catIdField ]} AND {Query.whereByFields All [ catIdField ]}

View File

@ -6,7 +6,6 @@ open Microsoft.Extensions.Logging
open MyWebLog open MyWebLog
open MyWebLog.Data open MyWebLog.Data
open Npgsql.FSharp open Npgsql.FSharp
open Npgsql.Internal.Postgres
/// PostgreSQL myWebLog tag mapping data implementation /// PostgreSQL myWebLog tag mapping data implementation
type PostgresTagMapData(log: ILogger) = type PostgresTagMapData(log: ILogger) =
@ -39,7 +38,7 @@ type PostgresTagMapData(log: ILogger) =
/// Find any tag mappings in a list of tags for the given web log /// Find any tag mappings in a list of tags for the given web log
let findMappingForTags (tags: string list) webLogId = let findMappingForTags (tags: string list) webLogId =
log.LogTrace "TagMap.findMappingForTags" log.LogTrace "TagMap.findMappingForTags"
let tagField = Field.InArray (nameof TagMap.Empty.Tag) Table.TagMap (List.map box tags) let tagField = Field.InArray (nameof TagMap.Empty.Tag) Table.TagMap tags
Custom.list Custom.list
$"{selectWithCriteria Table.TagMap} AND {Query.whereByFields All [ tagField ]}" $"{selectWithCriteria Table.TagMap} AND {Query.whereByFields All [ tagField ]}"
(addFieldParams [ tagField ] [ webLogContains webLogId ]) (addFieldParams [ tagField ] [ webLogContains webLogId ])

View File

@ -55,7 +55,7 @@ type PostgresWebLogUserData(log: ILogger) =
/// Find the names of users by their IDs for the given web log /// Find the names of users by their IDs for the given web log
let findNames webLogId (userIds: WebLogUserId list) = backgroundTask { let findNames webLogId (userIds: WebLogUserId list) = backgroundTask {
log.LogTrace "WebLogUser.findNames" log.LogTrace "WebLogUser.findNames"
let idField = Field.In (nameof WebLogUser.Empty.Id) (List.map (string >> box) userIds) let idField = Field.In (nameof WebLogUser.Empty.Id) (List.map string userIds)
let! users = let! users =
Custom.list Custom.list
$"{selectWithCriteria Table.WebLogUser} AND {Query.whereByFields All [ idField ]}" $"{selectWithCriteria Table.WebLogUser} AND {Query.whereByFields All [ idField ]}"

View File

@ -43,16 +43,14 @@ type SQLiteCategoryData(conn: SqliteConnection, ser: JsonSerializer, log: ILogge
ordered ordered
|> Seq.map (fun it -> backgroundTask { |> Seq.map (fun it -> backgroundTask {
// Parent category post counts include posts in subcategories // Parent category post counts include posts in subcategories
let childCats = let childField =
ordered ordered
|> Seq.filter (fun cat -> cat.ParentNames |> Array.contains it.Name) |> Seq.filter (fun cat -> cat.ParentNames |> Array.contains it.Name)
|> Seq.map _.Id |> Seq.map _.Id
|> Seq.append (Seq.singleton it.Id) |> Seq.append (Seq.singleton it.Id)
|> Seq.map box |> Field.InArray (nameof Post.Empty.CategoryIds) Table.Post
let fields = let fields =
[ webLogField webLogId [ webLogField webLogId; Field.Equal (nameof Post.Empty.Status) (string Published); childField ]
Field.Equal (nameof Post.Empty.Status) (string Published)
Field.InArray (nameof Post.Empty.CategoryIds) Table.Post childCats ]
let query = let query =
(Query.statementWhere (Query.count Table.Post) (Query.whereByFields All fields)) (Query.statementWhere (Query.count Table.Post) (Query.whereByFields All fields))
.Replace("(*)", $"(DISTINCT data->>'{nameof Post.Empty.Id}')") .Replace("(*)", $"(DISTINCT data->>'{nameof Post.Empty.Id}')")

View File

@ -116,7 +116,7 @@ type SQLitePageData(conn: SqliteConnection, log: ILogger) =
log.LogTrace "Page.findCurrentPermalink" log.LogTrace "Page.findCurrentPermalink"
let fields = let fields =
[ webLogField webLogId [ webLogField webLogId
Field.InArray (nameof Page.Empty.PriorPermalinks) Table.Page (List.map (string >> box) permalinks) ] Field.InArray (nameof Page.Empty.PriorPermalinks) Table.Page (List.map string permalinks) ]
let query = let query =
(Query.statementWhere (Query.find Table.Page) (Query.whereByFields All fields)) (Query.statementWhere (Query.find Table.Page) (Query.whereByFields All fields))
.Replace("SELECT data", $"SELECT data->>'{linkName}' AS permalink") .Replace("SELECT data", $"SELECT data->>'{linkName}' AS permalink")

View File

@ -116,7 +116,7 @@ type SQLitePostData(conn: SqliteConnection, log: ILogger) =
log.LogTrace "Post.findCurrentPermalink" log.LogTrace "Post.findCurrentPermalink"
let fields = let fields =
[ webLogField webLogId [ webLogField webLogId
Field.InArray (nameof Post.Empty.PriorPermalinks) Table.Post (List.map (string >> box) permalinks) ] Field.InArray (nameof Post.Empty.PriorPermalinks) Table.Post (List.map string permalinks) ]
let query = let query =
(Query.statementWhere (Query.find Table.Post) (Query.whereByFields All fields)) (Query.statementWhere (Query.find Table.Post) (Query.whereByFields All fields))
.Replace("SELECT data", $"SELECT data->>'{linkName}' AS permalink") .Replace("SELECT data", $"SELECT data->>'{linkName}' AS permalink")
@ -133,7 +133,7 @@ type SQLitePostData(conn: SqliteConnection, log: ILogger) =
/// Get a page of categorized posts for the given web log (excludes revisions) /// Get a page of categorized posts for the given web log (excludes revisions)
let findPageOfCategorizedPosts webLogId (categoryIds: CategoryId list) pageNbr postsPerPage = let findPageOfCategorizedPosts webLogId (categoryIds: CategoryId list) pageNbr postsPerPage =
log.LogTrace "Post.findPageOfCategorizedPosts" log.LogTrace "Post.findPageOfCategorizedPosts"
let catIdField = Field.InArray (nameof Post.Empty.CategoryIds) Table.Post (List.map (string >> box) categoryIds) let catIdField = Field.InArray (nameof Post.Empty.CategoryIds) Table.Post (List.map string categoryIds)
conn.customList conn.customList
$"""{publishedPostByWebLog} AND {Query.whereByFields Any [ catIdField ]} $"""{publishedPostByWebLog} AND {Query.whereByFields Any [ catIdField ]}
{Query.orderBy [ Field.Named $"{publishName} DESC" ] SQLite} {Query.orderBy [ Field.Named $"{publishName} DESC" ] SQLite}

View File

@ -39,8 +39,7 @@ type SQLiteTagMapData(conn: SqliteConnection, log: ILogger) =
/// Find any tag mappings in a list of tags for the given web log /// Find any tag mappings in a list of tags for the given web log
let findMappingForTags (tags: string list) webLogId = let findMappingForTags (tags: string list) webLogId =
log.LogTrace "TagMap.findMappingForTags" log.LogTrace "TagMap.findMappingForTags"
conn.findByFields<TagMap> conn.findByFields<TagMap> Table.TagMap All [ webLogField webLogId; Field.In (nameof TagMap.Empty.Tag) tags ]
Table.TagMap All [ webLogField webLogId; Field.In (nameof TagMap.Empty.Tag) (List.map box tags) ]
/// Save a tag mapping /// Save a tag mapping
let save (tagMap: TagMap) = let save (tagMap: TagMap) =

View File

@ -52,7 +52,7 @@ type SQLiteWebLogUserData(conn: SqliteConnection, log: ILogger) =
/// Find the names of users by their IDs for the given web log /// Find the names of users by their IDs for the given web log
let findNames webLogId (userIds: WebLogUserId list) = let findNames webLogId (userIds: WebLogUserId list) =
log.LogTrace "WebLogUser.findNames" log.LogTrace "WebLogUser.findNames"
let fields = [ webLogField webLogId; Field.In (nameof WebLogUser.Empty.Id) (List.map (string >> box) userIds) ] let fields = [ webLogField webLogId; Field.In (nameof WebLogUser.Empty.Id) (List.map string userIds) ]
let query = Query.statementWhere (Query.find Table.WebLogUser) (Query.whereByFields All fields) let query = Query.statementWhere (Query.find Table.WebLogUser) (Query.whereByFields All fields)
conn.customList conn.customList
query query