import Foundation
import ServiceStack
// @ValidateRequest(Validator="IsAuthenticated")
public class UpdateCreative : IPatchDb<Creative>, Codable
{
public var id:Int
public var primaryArtifactId:Int?
public var unpinPrimaryArtifact:Bool?
required public init(){}
}
public class Creative : AuditBase
{
public var id:Int
public var userPrompt:String
public var prompt:String
public var images:Int
public var width:Int
public var height:Int
public var steps:Int
public var curatedArtifactId:Int?
public var primaryArtifactId:Int?
public var artistNames:[String] = []
public var modifierNames:[String] = []
public var artists:[CreativeArtist] = []
public var modifiers:[CreativeModifier] = []
public var artifacts:[Artifact] = []
public var error:String
public var ownerId:Int?
public var ownerRef:String
public var key:String
public var curated:Bool
public var rating:Int?
public var `private`:Bool
public var score:Int
public var rank:Int
public var refId:String
public var requestId:String
public var engineId:String
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case id
case userPrompt
case prompt
case images
case width
case height
case steps
case curatedArtifactId
case primaryArtifactId
case artistNames
case modifierNames
case artists
case modifiers
case artifacts
case error
case ownerId
case ownerRef
case key
case curated
case rating
case `private`
case score
case rank
case refId
case requestId
case engineId
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decodeIfPresent(Int.self, forKey: .id)
userPrompt = try container.decodeIfPresent(String.self, forKey: .userPrompt)
prompt = try container.decodeIfPresent(String.self, forKey: .prompt)
images = try container.decodeIfPresent(Int.self, forKey: .images)
width = try container.decodeIfPresent(Int.self, forKey: .width)
height = try container.decodeIfPresent(Int.self, forKey: .height)
steps = try container.decodeIfPresent(Int.self, forKey: .steps)
curatedArtifactId = try container.decodeIfPresent(Int.self, forKey: .curatedArtifactId)
primaryArtifactId = try container.decodeIfPresent(Int.self, forKey: .primaryArtifactId)
artistNames = try container.decodeIfPresent([String].self, forKey: .artistNames) ?? []
modifierNames = try container.decodeIfPresent([String].self, forKey: .modifierNames) ?? []
artists = try container.decodeIfPresent([CreativeArtist].self, forKey: .artists) ?? []
modifiers = try container.decodeIfPresent([CreativeModifier].self, forKey: .modifiers) ?? []
artifacts = try container.decodeIfPresent([Artifact].self, forKey: .artifacts) ?? []
error = try container.decodeIfPresent(String.self, forKey: .error)
ownerId = try container.decodeIfPresent(Int.self, forKey: .ownerId)
ownerRef = try container.decodeIfPresent(String.self, forKey: .ownerRef)
key = try container.decodeIfPresent(String.self, forKey: .key)
curated = try container.decodeIfPresent(Bool.self, forKey: .curated)
rating = try container.decodeIfPresent(Int.self, forKey: .rating)
`private` = try container.decodeIfPresent(Bool.self, forKey: .`private`)
score = try container.decodeIfPresent(Int.self, forKey: .score)
rank = try container.decodeIfPresent(Int.self, forKey: .rank)
refId = try container.decodeIfPresent(String.self, forKey: .refId)
requestId = try container.decodeIfPresent(String.self, forKey: .requestId)
engineId = try container.decodeIfPresent(String.self, forKey: .engineId)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if id != nil { try container.encode(id, forKey: .id) }
if userPrompt != nil { try container.encode(userPrompt, forKey: .userPrompt) }
if prompt != nil { try container.encode(prompt, forKey: .prompt) }
if images != nil { try container.encode(images, forKey: .images) }
if width != nil { try container.encode(width, forKey: .width) }
if height != nil { try container.encode(height, forKey: .height) }
if steps != nil { try container.encode(steps, forKey: .steps) }
if curatedArtifactId != nil { try container.encode(curatedArtifactId, forKey: .curatedArtifactId) }
if primaryArtifactId != nil { try container.encode(primaryArtifactId, forKey: .primaryArtifactId) }
if artistNames.count > 0 { try container.encode(artistNames, forKey: .artistNames) }
if modifierNames.count > 0 { try container.encode(modifierNames, forKey: .modifierNames) }
if artists.count > 0 { try container.encode(artists, forKey: .artists) }
if modifiers.count > 0 { try container.encode(modifiers, forKey: .modifiers) }
if artifacts.count > 0 { try container.encode(artifacts, forKey: .artifacts) }
if error != nil { try container.encode(error, forKey: .error) }
if ownerId != nil { try container.encode(ownerId, forKey: .ownerId) }
if ownerRef != nil { try container.encode(ownerRef, forKey: .ownerRef) }
if key != nil { try container.encode(key, forKey: .key) }
if curated != nil { try container.encode(curated, forKey: .curated) }
if rating != nil { try container.encode(rating, forKey: .rating) }
if `private` != nil { try container.encode(`private`, forKey: .`private`) }
if score != nil { try container.encode(score, forKey: .score) }
if rank != nil { try container.encode(rank, forKey: .rank) }
if refId != nil { try container.encode(refId, forKey: .refId) }
if requestId != nil { try container.encode(requestId, forKey: .requestId) }
if engineId != nil { try container.encode(engineId, forKey: .engineId) }
}
}
// @ValidateRequest(Validator="HasRole(`Moderator`)")
public class CreativeArtist : Codable
{
public var id:Int
// @References(typeof(Creative))
public var creativeId:Int
// @References(typeof(Artist))
public var artistId:Int
public var artist:Artist
required public init(){}
}
public class Artist : AuditBase
{
public var id:Int
public var firstName:String
public var lastName:String
public var yearDied:Int?
public var type:[String]
public var score:Int
public var rank:Int
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case id
case firstName
case lastName
case yearDied
case type
case score
case rank
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decodeIfPresent(Int.self, forKey: .id)
firstName = try container.decodeIfPresent(String.self, forKey: .firstName)
lastName = try container.decodeIfPresent(String.self, forKey: .lastName)
yearDied = try container.decodeIfPresent(Int.self, forKey: .yearDied)
type = try container.decodeIfPresent([String].self, forKey: .type) ?? []
score = try container.decodeIfPresent(Int.self, forKey: .score)
rank = try container.decodeIfPresent(Int.self, forKey: .rank)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if id != nil { try container.encode(id, forKey: .id) }
if firstName != nil { try container.encode(firstName, forKey: .firstName) }
if lastName != nil { try container.encode(lastName, forKey: .lastName) }
if yearDied != nil { try container.encode(yearDied, forKey: .yearDied) }
if type != nil { try container.encode(type, forKey: .type) }
if score != nil { try container.encode(score, forKey: .score) }
if rank != nil { try container.encode(rank, forKey: .rank) }
}
}
public class CreativeModifier : Codable
{
public var id:Int
// @References(typeof(Creative))
public var creativeId:Int
// @References(typeof(Modifier))
public var modifierId:Int
public var modifier:Modifier
required public init(){}
}
public class Modifier : AuditBase
{
public var id:Int
public var name:String
public var category:String
public var Description:String
public var score:Int
public var rank:Int
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case id
case name
case category
case Description
case score
case rank
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decodeIfPresent(Int.self, forKey: .id)
name = try container.decodeIfPresent(String.self, forKey: .name)
category = try container.decodeIfPresent(String.self, forKey: .category)
Description = try container.decodeIfPresent(String.self, forKey: .Description)
score = try container.decodeIfPresent(Int.self, forKey: .score)
rank = try container.decodeIfPresent(Int.self, forKey: .rank)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if id != nil { try container.encode(id, forKey: .id) }
if name != nil { try container.encode(name, forKey: .name) }
if category != nil { try container.encode(category, forKey: .category) }
if Description != nil { try container.encode(Description, forKey: .Description) }
if score != nil { try container.encode(score, forKey: .score) }
if rank != nil { try container.encode(rank, forKey: .rank) }
}
}
public class Artifact : AuditBase
{
public var id:Int
// @References(typeof(Creative))
public var creativeId:Int
public var fileName:String
public var filePath:String
public var contentType:String
public var contentLength:Int
public var width:Int
public var height:Int
public var seed:UInt64
public var prompt:String
public var nsfw:Bool?
public var averageHash:Int?
public var perceptualHash:Int?
public var differenceHash:Int?
public var background:String
public var lqip:String
public var quality:Int
public var likesCount:Int
public var albumsCount:Int
public var downloadsCount:Int
public var searchCount:Int
public var temporalScore:Int
public var score:Int
public var rank:Int
public var refId:String
public var versions:[String:String] = [:]
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case id
case creativeId
case fileName
case filePath
case contentType
case contentLength
case width
case height
case seed
case prompt
case nsfw
case averageHash
case perceptualHash
case differenceHash
case background
case lqip
case quality
case likesCount
case albumsCount
case downloadsCount
case searchCount
case temporalScore
case score
case rank
case refId
case versions
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decodeIfPresent(Int.self, forKey: .id)
creativeId = try container.decodeIfPresent(Int.self, forKey: .creativeId)
fileName = try container.decodeIfPresent(String.self, forKey: .fileName)
filePath = try container.decodeIfPresent(String.self, forKey: .filePath)
contentType = try container.decodeIfPresent(String.self, forKey: .contentType)
contentLength = try container.decodeIfPresent(Int.self, forKey: .contentLength)
width = try container.decodeIfPresent(Int.self, forKey: .width)
height = try container.decodeIfPresent(Int.self, forKey: .height)
seed = try container.decodeIfPresent(UInt64.self, forKey: .seed)
prompt = try container.decodeIfPresent(String.self, forKey: .prompt)
nsfw = try container.decodeIfPresent(Bool.self, forKey: .nsfw)
averageHash = try container.decodeIfPresent(Int.self, forKey: .averageHash)
perceptualHash = try container.decodeIfPresent(Int.self, forKey: .perceptualHash)
differenceHash = try container.decodeIfPresent(Int.self, forKey: .differenceHash)
background = try container.decodeIfPresent(String.self, forKey: .background)
lqip = try container.decodeIfPresent(String.self, forKey: .lqip)
quality = try container.decodeIfPresent(Int.self, forKey: .quality)
likesCount = try container.decodeIfPresent(Int.self, forKey: .likesCount)
albumsCount = try container.decodeIfPresent(Int.self, forKey: .albumsCount)
downloadsCount = try container.decodeIfPresent(Int.self, forKey: .downloadsCount)
searchCount = try container.decodeIfPresent(Int.self, forKey: .searchCount)
temporalScore = try container.decodeIfPresent(Int.self, forKey: .temporalScore)
score = try container.decodeIfPresent(Int.self, forKey: .score)
rank = try container.decodeIfPresent(Int.self, forKey: .rank)
refId = try container.decodeIfPresent(String.self, forKey: .refId)
versions = try container.decodeIfPresent([String:String].self, forKey: .versions) ?? [:]
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if id != nil { try container.encode(id, forKey: .id) }
if creativeId != nil { try container.encode(creativeId, forKey: .creativeId) }
if fileName != nil { try container.encode(fileName, forKey: .fileName) }
if filePath != nil { try container.encode(filePath, forKey: .filePath) }
if contentType != nil { try container.encode(contentType, forKey: .contentType) }
if contentLength != nil { try container.encode(contentLength, forKey: .contentLength) }
if width != nil { try container.encode(width, forKey: .width) }
if height != nil { try container.encode(height, forKey: .height) }
if seed != nil { try container.encode(seed, forKey: .seed) }
if prompt != nil { try container.encode(prompt, forKey: .prompt) }
if nsfw != nil { try container.encode(nsfw, forKey: .nsfw) }
if averageHash != nil { try container.encode(averageHash, forKey: .averageHash) }
if perceptualHash != nil { try container.encode(perceptualHash, forKey: .perceptualHash) }
if differenceHash != nil { try container.encode(differenceHash, forKey: .differenceHash) }
if background != nil { try container.encode(background, forKey: .background) }
if lqip != nil { try container.encode(lqip, forKey: .lqip) }
if quality != nil { try container.encode(quality, forKey: .quality) }
if likesCount != nil { try container.encode(likesCount, forKey: .likesCount) }
if albumsCount != nil { try container.encode(albumsCount, forKey: .albumsCount) }
if downloadsCount != nil { try container.encode(downloadsCount, forKey: .downloadsCount) }
if searchCount != nil { try container.encode(searchCount, forKey: .searchCount) }
if temporalScore != nil { try container.encode(temporalScore, forKey: .temporalScore) }
if score != nil { try container.encode(score, forKey: .score) }
if rank != nil { try container.encode(rank, forKey: .rank) }
if refId != nil { try container.encode(refId, forKey: .refId) }
if versions.count > 0 { try container.encode(versions, forKey: .versions) }
}
}
To override the Content-type in your clients, use the HTTP Accept Header, append the .other suffix or ?format=other
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /jsonl/reply/UpdateCreative HTTP/1.1
Host: blazordiffusion.com
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length
{"id":0,"primaryArtifactId":0,"unpinPrimaryArtifact":false}
HTTP/1.1 200 OK Content-Type: text/jsonl Content-Length: length {"id":0,"userPrompt":"String","prompt":"String","images":0,"width":0,"height":0,"steps":0,"curatedArtifactId":0,"primaryArtifactId":0,"artistNames":["String"],"modifierNames":["String"],"artists":[{"id":0,"creativeId":0,"artistId":0,"artist":{"id":0,"firstName":"String","lastName":"String","yearDied":0,"type":["String"],"score":0,"rank":0,"createdDate":"0001-01-01T00:00:00","createdBy":"String","modifiedDate":"0001-01-01T00:00:00","modifiedBy":"String","deletedDate":"0001-01-01T00:00:00","deletedBy":"String"}}],"modifiers":[{"id":0,"creativeId":0,"modifierId":0,"modifier":{"id":0,"name":"String","category":"String","description":"String","score":0,"rank":0,"createdDate":"0001-01-01T00:00:00","createdBy":"String","modifiedDate":"0001-01-01T00:00:00","modifiedBy":"String","deletedDate":"0001-01-01T00:00:00","deletedBy":"String"}}],"artifacts":[{"id":0,"creativeId":0,"fileName":"String","filePath":"String","contentType":"String","contentLength":0,"width":0,"height":0,"seed":0,"prompt":"String","nsfw":false,"averageHash":0,"perceptualHash":0,"differenceHash":0,"background":"String","lqip":"String","quality":0,"likesCount":0,"albumsCount":0,"downloadsCount":0,"searchCount":0,"temporalScore":0,"score":0,"rank":0,"refId":"String","versions":{"String":"String"},"createdDate":"0001-01-01T00:00:00","createdBy":"String","modifiedDate":"0001-01-01T00:00:00","modifiedBy":"String","deletedDate":"0001-01-01T00:00:00","deletedBy":"String"}],"error":"String","ownerId":0,"ownerRef":"String","key":"String","curated":false,"rating":0,"private":false,"score":0,"rank":0,"refId":"String","requestId":"String","engineId":"String","createdDate":"0001-01-01T00:00:00","createdBy":"String","modifiedDate":"0001-01-01T00:00:00","modifiedBy":"String","deletedDate":"0001-01-01T00:00:00","deletedBy":"String"}