V2 #36

Merged
danieljsummers merged 17 commits from v2-out-the-door into main 2023-02-26 18:01:21 +00:00
6 changed files with 33 additions and 33 deletions
Showing only changes of commit 46a7402c8e - Show all commits

View File

@ -88,14 +88,17 @@ type PostgresCategoryData (source : NpgsqlDataSource, log : ILogger) =
match! findById catId webLogId with match! findById catId webLogId with
| Some cat -> | Some cat ->
// Reassign any children to the category's parent category // Reassign any children to the category's parent category
let! children = Find.byContains Table.Category {| ParentId = CategoryId.toString catId |} let! children = Find.byContains<Category> Table.Category {| ParentId = CategoryId.toString catId |}
let hasChildren = not (List.isEmpty children) let hasChildren = not (List.isEmpty children)
if hasChildren then if hasChildren then
let! _ = let! _ =
Sql.fromDataSource source Sql.fromDataSource source
|> Sql.executeTransactionAsync [ |> Sql.executeTransactionAsync [
Query.update Table.Category, Query.Update.partialById Table.Category,
children |> List.map (fun child -> catParameters { child with ParentId = cat.ParentId }) children |> List.map (fun child -> [
"@id", Sql.string (CategoryId.toString child.Id)
"@data", Query.jsonbDocParam {| ParentId = cat.ParentId |}
])
] ]
() ()
// Delete the category off all posts where it is assigned // Delete the category off all posts where it is assigned
@ -108,13 +111,11 @@ type PostgresCategoryData (source : NpgsqlDataSource, log : ILogger) =
let! _ = let! _ =
Sql.fromDataSource source Sql.fromDataSource source
|> Sql.executeTransactionAsync [ |> Sql.executeTransactionAsync [
Query.update Table.Post, Query.Update.partialById Table.Post,
posts |> List.map (fun post -> [ posts |> List.map (fun post -> [
"@id", Sql.string (PostId.toString post.Id) "@id", Sql.string (PostId.toString post.Id)
"@data", Query.jsonbDocParam "@data", Query.jsonbDocParam
{ post with {| CategoryIds = post.CategoryIds |> List.filter (fun cat -> cat <> catId) |}
CategoryIds = post.CategoryIds |> List.filter (fun cat -> cat <> catId)
}
]) ])
] ]
() ()

View File

@ -161,11 +161,11 @@ type PostgresPageData (source : NpgsqlDataSource, log : ILogger) =
/// Update a page's prior permalinks /// Update a page's prior permalinks
let updatePriorPermalinks pageId webLogId permalinks = backgroundTask { let updatePriorPermalinks pageId webLogId permalinks = backgroundTask {
log.LogTrace "Page.updatePriorPermalinks" log.LogTrace "Page.updatePriorPermalinks"
match! findById pageId webLogId with match! pageExists pageId webLogId with
| Some page -> | true ->
do! update Table.Page (PageId.toString page.Id) { page with PriorPermalinks = permalinks } do! Update.partialById Table.Page (PageId.toString pageId) {| PriorPermalinks = permalinks |}
return true return true
| None -> return false | false -> return false
} }
interface IPageData with interface IPageData with

View File

@ -3,7 +3,6 @@ namespace MyWebLog.Data.Postgres
open Microsoft.Extensions.Logging open Microsoft.Extensions.Logging
open MyWebLog open MyWebLog
open MyWebLog.Data open MyWebLog.Data
open NodaTime
open NodaTime.Text open NodaTime.Text
open Npgsql open Npgsql
open Npgsql.FSharp open Npgsql.FSharp
@ -230,11 +229,11 @@ type PostgresPostData (source : NpgsqlDataSource, log : ILogger) =
/// Update prior permalinks for a post /// Update prior permalinks for a post
let updatePriorPermalinks postId webLogId permalinks = backgroundTask { let updatePriorPermalinks postId webLogId permalinks = backgroundTask {
log.LogTrace "Post.updatePriorPermalinks" log.LogTrace "Post.updatePriorPermalinks"
match! findById postId webLogId with match! postExists postId webLogId with
| Some post -> | true ->
do! update Table.Post (PostId.toString post.Id) { post with PriorPermalinks = permalinks } do! Update.partialById Table.Post (PostId.toString postId) {| PriorPermalinks = permalinks |}
return true return true
| None -> return false | false -> return false
} }
interface IPostData with interface IPostData with

View File

@ -50,7 +50,7 @@ type PostgresUploadData (source : NpgsqlDataSource, log : ILogger) =
if Option.isSome path then if Option.isSome path then
let! _ = let! _ =
Sql.fromDataSource source Sql.fromDataSource source
|> Sql.query $"DELETE FROM {Table.Upload} WHERE id = @id" |> Sql.query (Documents.Query.Delete.byId Table.Upload)
|> Sql.parameters idParam |> Sql.parameters idParam
|> Sql.executeNonQueryAsync |> Sql.executeNonQueryAsync
return Ok path.Value return Ok path.Value

View File

@ -23,19 +23,19 @@ type PostgresWebLogData (source : NpgsqlDataSource, log : ILogger) =
/// Delete a web log by its ID /// Delete a web log by its ID
let delete webLogId = backgroundTask { let delete webLogId = backgroundTask {
log.LogTrace "WebLog.delete" log.LogTrace "WebLog.delete"
let criteria = Query.whereDataContains "@criteria"
let! _ = let! _ =
Sql.fromDataSource source Sql.fromDataSource source
|> Sql.query $" |> Sql.query $"""
DELETE FROM {Table.PostComment} DELETE FROM {Table.PostComment}
WHERE data->>'{nameof Comment.empty.PostId}' IN (SELECT id FROM {Table.Post} WHERE {criteria}); WHERE data ->> '{nameof Comment.empty.PostId}' IN
DELETE FROM {Table.Post} WHERE {criteria}; (SELECT id FROM {Table.Post} WHERE {Query.whereDataContains "@criteria"});
DELETE FROM {Table.Page} WHERE {criteria}; {Query.Delete.byContains Table.Post};
DELETE FROM {Table.Category} WHERE {criteria}; {Query.Delete.byContains Table.Page};
DELETE FROM {Table.TagMap} WHERE {criteria}; {Query.Delete.byContains Table.Category};
{Query.Delete.byContains Table.TagMap};
{Query.Delete.byContains Table.WebLogUser};
DELETE FROM {Table.Upload} WHERE web_log_id = @webLogId; DELETE FROM {Table.Upload} WHERE web_log_id = @webLogId;
DELETE FROM {Table.WebLogUser} WHERE {criteria}; DELETE FROM {Table.WebLog} WHERE id = @webLogId"""
DELETE FROM {Table.WebLog} WHERE id = @webLogId"
|> Sql.parameters [ webLogIdParam webLogId; webLogContains webLogId ] |> Sql.parameters [ webLogIdParam webLogId; webLogContains webLogId ]
|> Sql.executeNonQueryAsync |> Sql.executeNonQueryAsync
() ()
@ -58,13 +58,13 @@ type PostgresWebLogData (source : NpgsqlDataSource, log : ILogger) =
/// Update settings for a web log /// Update settings for a web log
let updateSettings (webLog : WebLog) = let updateSettings (webLog : WebLog) =
log.LogTrace "WebLog.updateSettings" log.LogTrace "WebLog.updateSettings"
update Table.WebLog (WebLogId.toString webLog.Id) webLog Update.full Table.WebLog (WebLogId.toString webLog.Id) webLog
/// Update RSS options for a web log /// Update RSS options for a web log
let updateRssOptions (webLog : WebLog) = backgroundTask { let updateRssOptions (webLog : WebLog) = backgroundTask {
log.LogTrace "WebLog.updateRssOptions" log.LogTrace "WebLog.updateRssOptions"
match! findById webLog.Id with match! findById webLog.Id with
| Some blog -> do! update Table.WebLog (WebLogId.toString webLog.Id) { blog with Rss = webLog.Rss } | Some _ -> do! Update.partialById Table.WebLog (WebLogId.toString webLog.Id) {| Rss = webLog.Rss |}
| None -> () | None -> ()
} }

View File

@ -86,10 +86,10 @@ type PostgresWebLogUserData (source : NpgsqlDataSource, log : ILogger) =
/// Set a user's last seen date/time to now /// Set a user's last seen date/time to now
let setLastSeen userId webLogId = backgroundTask { let setLastSeen userId webLogId = backgroundTask {
log.LogTrace "WebLogUser.setLastSeen" log.LogTrace "WebLogUser.setLastSeen"
match! findById userId webLogId with match! Document.existsByWebLog source Table.WebLogUser userId WebLogUserId.toString webLogId with
| Some user -> | true ->
do! update Table.WebLogUser (WebLogUserId.toString userId) { user with LastSeenOn = Some (Noda.now ()) } do! Update.partialById Table.WebLogUser (WebLogUserId.toString userId) {| LastSeenOn = Some (Noda.now ()) |}
| None -> () | false -> ()
} }
/// Save a user /// Save a user