WIP on person table, podcast/ep assignment (#17)
This commit is contained in:
@@ -23,6 +23,9 @@ module private RethinkHelpers =
|
||||
/// The page table
|
||||
let Page = "Page"
|
||||
|
||||
/// The person table
|
||||
let Person = "Person"
|
||||
|
||||
/// The post table
|
||||
let Post = "Post"
|
||||
|
||||
@@ -45,7 +48,8 @@ module private RethinkHelpers =
|
||||
let WebLogUser = "WebLogUser"
|
||||
|
||||
/// A list of all tables
|
||||
let all = [ Category; Comment; DbVersion; Page; Post; TagMap; Theme; ThemeAsset; Upload; WebLog; WebLogUser ]
|
||||
let all =
|
||||
[ Category; Comment; DbVersion; Page; Person; Post; TagMap; Theme; ThemeAsset; Upload; WebLog; WebLogUser ]
|
||||
|
||||
|
||||
/// Index names for indexes not on a data item's name
|
||||
@@ -615,6 +619,72 @@ type RethinkDbData(conn: Net.IConnection, config: DataConfig, log: ILogger<Rethi
|
||||
| None -> return false
|
||||
}
|
||||
}
|
||||
|
||||
member _.Person = {
|
||||
new IPersonData with
|
||||
|
||||
member _.Add person = rethink {
|
||||
withTable Table.Person
|
||||
insert person
|
||||
write; withRetryDefault; ignoreResult conn
|
||||
}
|
||||
|
||||
member _.Delete personId webLogId = backgroundTask {
|
||||
// TODO: also remove this person from assignments in episodes and podcasts
|
||||
let! result = rethink<Model.Result> {
|
||||
withTable Table.Person
|
||||
getAll [ personId ]
|
||||
filter (fun row -> row[nameof Person.Empty.WebLogId].Eq webLogId :> obj)
|
||||
delete
|
||||
write; withRetryDefault conn
|
||||
}
|
||||
return result.Deleted > 0UL
|
||||
}
|
||||
|
||||
member _.FindByAssignment assignments = rethink {
|
||||
withTable Table.Person
|
||||
getAll (assignments |> List.map _.PersonId)
|
||||
orderBy (nameof Person.Empty.Name)
|
||||
result; withRetryDefault conn
|
||||
}
|
||||
|
||||
member _.FindById personId webLogId =
|
||||
rethink<Person list> {
|
||||
withTable Table.Person
|
||||
getAll [ personId ]
|
||||
filter (nameof Person.Empty.WebLogId) webLogId
|
||||
result; withRetryDefault
|
||||
}
|
||||
|> tryFirst <| conn
|
||||
|
||||
member _.FindByWebLog webLogId = rethink<Person list> {
|
||||
withTable Table.Person
|
||||
getAll [ webLogId ] (nameof Person.Empty.WebLogId)
|
||||
orderBy (nameof Person.Empty.Name)
|
||||
result; withRetryDefault conn
|
||||
}
|
||||
|
||||
member _.Restore persons = backgroundTask {
|
||||
for batch in persons |> List.chunkBySize restoreBatchSize do
|
||||
do! rethink {
|
||||
withTable Table.Person
|
||||
insert batch
|
||||
write; withRetryOnce; ignoreResult conn
|
||||
}
|
||||
}
|
||||
|
||||
member this.Update person = backgroundTask {
|
||||
match! this.FindById person.Id person.WebLogId with
|
||||
| Some _ ->
|
||||
do! rethink {
|
||||
withTable Table.Person
|
||||
get person.Id
|
||||
replace person
|
||||
write; withRetryDefault; ignoreResult conn
|
||||
}
|
||||
| None -> ()
|
||||
}
|
||||
}
|
||||
|
||||
member _.Post = {
|
||||
new IPostData with
|
||||
@@ -1281,6 +1351,7 @@ type RethinkDbData(conn: Net.IConnection, config: DataConfig, log: ILogger<Rethi
|
||||
do! ensureIndexes Table.Category [ nameof Category.Empty.WebLogId ]
|
||||
do! ensureIndexes Table.Comment [ nameof Comment.Empty.PostId ]
|
||||
do! ensureIndexes Table.Page [ nameof Page.Empty.WebLogId; nameof Page.Empty.AuthorId ]
|
||||
do! ensureIndexes Table.Person [ nameof Person.Empty.WebLogId ]
|
||||
do! ensureIndexes Table.Post [ nameof Post.Empty.WebLogId; nameof Post.Empty.AuthorId ]
|
||||
do! ensureIndexes Table.TagMap []
|
||||
do! ensureIndexes Table.Upload []
|
||||
|
||||
Reference in New Issue
Block a user