import Foundation
import ServiceStack
// @ValidateRequest(Validator="IsAuthenticated")
public class CreateArtifactReport : ICreateDb<ArtifactReport>, Codable
{
// @Validate(Validator="GreaterThan(0)")
public var artifactId:Int
public var type:ReportType
public var Description:String
required public init(){}
}
public enum ReportType : String, Codable
{
case Nsfw
case Malformed
case Blurred
case LowQuality
case Other
}
public class ArtifactReport : Codable
{
public var id:Int
// @References(typeof(Artifact))
public var artifactId:Int
public var appUserId:Int
public var artifact:Artifact
public var type:ReportType
public var Description:String
public var createdDate:Date
public var notes:String
public var actionedDate:Date?
public var actionedBy:String
required public init(){}
}
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) }
}
}
Swift CreateArtifactReport DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /csv/reply/CreateArtifactReport HTTP/1.1
Host: blazordiffusion.com
Accept: text/csv
Content-Type: text/csv
Content-Length: length
{"artifactId":0,"type":"Nsfw","description":"String"}
HTTP/1.1 200 OK Content-Type: text/csv Content-Length: length {"id":0,"artifactId":0,"appUserId":0,"artifact":{"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"},"type":"Nsfw","description":"String","createdDate":"0001-01-01T00:00:00","notes":"String","actionedDate":"0001-01-01T00:00:00","actionedBy":"String"}