WIP on uploads (#2)
- Add data types and fields - Implement in both RethinkDB and SQLite - Add uploads to backup/restore - Add empty upload folder to project - Add indexes to SQLite tables (#15)
This commit is contained in:
@@ -295,6 +295,37 @@ type ThemeAsset =
|
||||
}
|
||||
|
||||
|
||||
/// An uploaded file
|
||||
type Upload =
|
||||
{ /// The ID of the upload
|
||||
id : UploadId
|
||||
|
||||
/// The ID of the web log to which this upload belongs
|
||||
webLogId : WebLogId
|
||||
|
||||
/// The link at which this upload is served
|
||||
path : Permalink
|
||||
|
||||
/// The updated date/time for this upload
|
||||
updatedOn : DateTime
|
||||
|
||||
/// The data for the upload
|
||||
data : byte[]
|
||||
}
|
||||
|
||||
/// Functions to support uploaded files
|
||||
module Upload =
|
||||
|
||||
/// An empty upload
|
||||
let empty = {
|
||||
id = UploadId.empty
|
||||
webLogId = WebLogId.empty
|
||||
path = Permalink.empty
|
||||
updatedOn = DateTime.MinValue
|
||||
data = [||]
|
||||
}
|
||||
|
||||
|
||||
/// A web log
|
||||
[<CLIMutable; NoComparison; NoEquality>]
|
||||
type WebLog =
|
||||
@@ -304,6 +335,9 @@ type WebLog =
|
||||
/// The name of the web log
|
||||
name : string
|
||||
|
||||
/// The slug of the web log
|
||||
slug : string
|
||||
|
||||
/// A subtitle for the web log
|
||||
subtitle : string option
|
||||
|
||||
@@ -327,6 +361,9 @@ type WebLog =
|
||||
|
||||
/// Whether to automatically load htmx
|
||||
autoHtmx : bool
|
||||
|
||||
/// Where uploads are placed
|
||||
uploads : UploadDestination
|
||||
}
|
||||
|
||||
/// Functions to support web logs
|
||||
@@ -336,6 +373,7 @@ module WebLog =
|
||||
let empty =
|
||||
{ id = WebLogId.empty
|
||||
name = ""
|
||||
slug = ""
|
||||
subtitle = None
|
||||
defaultPage = ""
|
||||
postsPerPage = 10
|
||||
@@ -344,6 +382,7 @@ module WebLog =
|
||||
timeZone = ""
|
||||
rss = RssOptions.empty
|
||||
autoHtmx = false
|
||||
uploads = Database
|
||||
}
|
||||
|
||||
/// Get the host (including scheme) and extra path from the URL base
|
||||
|
||||
@@ -556,6 +556,41 @@ type ThemeTemplate =
|
||||
}
|
||||
|
||||
|
||||
/// Where uploads should be placed
|
||||
type UploadDestination =
|
||||
| Database
|
||||
| Disk
|
||||
|
||||
/// Functions to support upload destinations
|
||||
module UploadDestination =
|
||||
|
||||
/// Convert an upload destination to its string representation
|
||||
let toString = function Database -> "database" | Disk -> "disk"
|
||||
|
||||
/// Parse an upload destination from its string representation
|
||||
let parse value =
|
||||
match value with
|
||||
| "database" -> Database
|
||||
| "disk" -> Disk
|
||||
| it -> invalidOp $"{it} is not a valid upload destination"
|
||||
|
||||
|
||||
/// An identifier for an upload
|
||||
type UploadId = UploadId of string
|
||||
|
||||
/// Functions to support upload IDs
|
||||
module UploadId =
|
||||
|
||||
/// An empty upload ID
|
||||
let empty = UploadId ""
|
||||
|
||||
/// Convert an upload ID to a string
|
||||
let toString = function UploadId ui -> ui
|
||||
|
||||
/// Create a new upload ID
|
||||
let create () = UploadId (newId ())
|
||||
|
||||
|
||||
/// An identifier for a web log
|
||||
type WebLogId = WebLogId of string
|
||||
|
||||
|
||||
Reference in New Issue
Block a user