POST | /techstacks |
---|
import Foundation
import ServiceStack
public class CreateTechnologyStack : IPost, Codable
{
public var name:String
public var slug:String
public var vendorName:String
public var appUrl:String
public var screenshotUrl:String
public var Description:String
public var details:String
public var isLocked:Bool
public var technologyIds:[Int] = []
required public init(){}
}
public class CreateTechnologyStackResponse : Codable
{
public var result:TechStackDetails
public var responseStatus:ResponseStatus
required public init(){}
}
public class TechStackDetails : TechnologyStackBase
{
public var technologyChoices:[TechnologyInStack] = []
public var id:Int
public var name:String
public var vendorName:String
public var Description:String
public var appUrl:String
public var screenshotUrl:String
public var created:Date
public var createdBy:String
public var lastModified:Date
public var lastModifiedBy:String
public var isLocked:Bool
public var ownerId:String
public var slug:String
// @StringLength(Int32.max)
public var details:String
// @StringLength(Int32.max)
public var detailsHtml:String
public var lastStatusUpdate:Date?
public var organizationId:Int?
public var commentsPostId:Int?
public var viewCount:Int
public var favCount:Int
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case technologyChoices
case id
case name
case vendorName
case Description
case appUrl
case screenshotUrl
case created
case createdBy
case lastModified
case lastModifiedBy
case isLocked
case ownerId
case slug
case details
case detailsHtml
case lastStatusUpdate
case organizationId
case commentsPostId
case viewCount
case favCount
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
technologyChoices = try container.decodeIfPresent([TechnologyInStack].self, forKey: .technologyChoices) ?? []
id = try container.decodeIfPresent(Int.self, forKey: .id)
name = try container.decodeIfPresent(String.self, forKey: .name)
vendorName = try container.decodeIfPresent(String.self, forKey: .vendorName)
Description = try container.decodeIfPresent(String.self, forKey: .Description)
appUrl = try container.decodeIfPresent(String.self, forKey: .appUrl)
screenshotUrl = try container.decodeIfPresent(String.self, forKey: .screenshotUrl)
created = try container.decodeIfPresent(Date.self, forKey: .created)
createdBy = try container.decodeIfPresent(String.self, forKey: .createdBy)
lastModified = try container.decodeIfPresent(Date.self, forKey: .lastModified)
lastModifiedBy = try container.decodeIfPresent(String.self, forKey: .lastModifiedBy)
isLocked = try container.decodeIfPresent(Bool.self, forKey: .isLocked)
ownerId = try container.decodeIfPresent(String.self, forKey: .ownerId)
slug = try container.decodeIfPresent(String.self, forKey: .slug)
details = try container.decodeIfPresent(String.self, forKey: .details)
detailsHtml = try container.decodeIfPresent(String.self, forKey: .detailsHtml)
lastStatusUpdate = try container.decodeIfPresent(Date.self, forKey: .lastStatusUpdate)
organizationId = try container.decodeIfPresent(Int.self, forKey: .organizationId)
commentsPostId = try container.decodeIfPresent(Int.self, forKey: .commentsPostId)
viewCount = try container.decodeIfPresent(Int.self, forKey: .viewCount)
favCount = try container.decodeIfPresent(Int.self, forKey: .favCount)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if technologyChoices.count > 0 { try container.encode(technologyChoices, forKey: .technologyChoices) }
if id != nil { try container.encode(id, forKey: .id) }
if name != nil { try container.encode(name, forKey: .name) }
if vendorName != nil { try container.encode(vendorName, forKey: .vendorName) }
if Description != nil { try container.encode(Description, forKey: .Description) }
if appUrl != nil { try container.encode(appUrl, forKey: .appUrl) }
if screenshotUrl != nil { try container.encode(screenshotUrl, forKey: .screenshotUrl) }
if created != nil { try container.encode(created, forKey: .created) }
if createdBy != nil { try container.encode(createdBy, forKey: .createdBy) }
if lastModified != nil { try container.encode(lastModified, forKey: .lastModified) }
if lastModifiedBy != nil { try container.encode(lastModifiedBy, forKey: .lastModifiedBy) }
if isLocked != nil { try container.encode(isLocked, forKey: .isLocked) }
if ownerId != nil { try container.encode(ownerId, forKey: .ownerId) }
if slug != nil { try container.encode(slug, forKey: .slug) }
if details != nil { try container.encode(details, forKey: .details) }
if detailsHtml != nil { try container.encode(detailsHtml, forKey: .detailsHtml) }
if lastStatusUpdate != nil { try container.encode(lastStatusUpdate, forKey: .lastStatusUpdate) }
if organizationId != nil { try container.encode(organizationId, forKey: .organizationId) }
if commentsPostId != nil { try container.encode(commentsPostId, forKey: .commentsPostId) }
if viewCount != nil { try container.encode(viewCount, forKey: .viewCount) }
if favCount != nil { try container.encode(favCount, forKey: .favCount) }
}
}
public class TechnologyStackBase : Codable
{
public var id:Int
public var name:String
public var vendorName:String
public var Description:String
public var appUrl:String
public var screenshotUrl:String
public var created:Date
public var createdBy:String
public var lastModified:Date
public var lastModifiedBy:String
public var isLocked:Bool
public var ownerId:String
public var slug:String
// @StringLength(Int32.max)
public var details:String
// @StringLength(Int32.max)
public var detailsHtml:String
public var lastStatusUpdate:Date?
public var organizationId:Int?
public var commentsPostId:Int?
public var viewCount:Int
public var favCount:Int
required public init(){}
}
public class TechnologyInStack : TechnologyBase
{
public var technologyId:Int
public var technologyStackId:Int
public var justification:String
public var id:Int
public var name:String
public var vendorName:String
public var vendorUrl:String
public var productUrl:String
public var logoUrl:String
public var Description:String
public var created:Date
public var createdBy:String
public var lastModified:Date
public var lastModifiedBy:String
public var ownerId:String
public var slug:String
public var logoApproved:Bool
public var isLocked:Bool
public var tier:TechnologyTier
public var lastStatusUpdate:Date?
public var organizationId:Int?
public var commentsPostId:Int?
public var viewCount:Int
public var favCount:Int
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case technologyId
case technologyStackId
case justification
case id
case name
case vendorName
case vendorUrl
case productUrl
case logoUrl
case Description
case created
case createdBy
case lastModified
case lastModifiedBy
case ownerId
case slug
case logoApproved
case isLocked
case tier
case lastStatusUpdate
case organizationId
case commentsPostId
case viewCount
case favCount
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
technologyId = try container.decodeIfPresent(Int.self, forKey: .technologyId)
technologyStackId = try container.decodeIfPresent(Int.self, forKey: .technologyStackId)
justification = try container.decodeIfPresent(String.self, forKey: .justification)
id = try container.decodeIfPresent(Int.self, forKey: .id)
name = try container.decodeIfPresent(String.self, forKey: .name)
vendorName = try container.decodeIfPresent(String.self, forKey: .vendorName)
vendorUrl = try container.decodeIfPresent(String.self, forKey: .vendorUrl)
productUrl = try container.decodeIfPresent(String.self, forKey: .productUrl)
logoUrl = try container.decodeIfPresent(String.self, forKey: .logoUrl)
Description = try container.decodeIfPresent(String.self, forKey: .Description)
created = try container.decodeIfPresent(Date.self, forKey: .created)
createdBy = try container.decodeIfPresent(String.self, forKey: .createdBy)
lastModified = try container.decodeIfPresent(Date.self, forKey: .lastModified)
lastModifiedBy = try container.decodeIfPresent(String.self, forKey: .lastModifiedBy)
ownerId = try container.decodeIfPresent(String.self, forKey: .ownerId)
slug = try container.decodeIfPresent(String.self, forKey: .slug)
logoApproved = try container.decodeIfPresent(Bool.self, forKey: .logoApproved)
isLocked = try container.decodeIfPresent(Bool.self, forKey: .isLocked)
tier = try container.decodeIfPresent(TechnologyTier.self, forKey: .tier)
lastStatusUpdate = try container.decodeIfPresent(Date.self, forKey: .lastStatusUpdate)
organizationId = try container.decodeIfPresent(Int.self, forKey: .organizationId)
commentsPostId = try container.decodeIfPresent(Int.self, forKey: .commentsPostId)
viewCount = try container.decodeIfPresent(Int.self, forKey: .viewCount)
favCount = try container.decodeIfPresent(Int.self, forKey: .favCount)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if technologyId != nil { try container.encode(technologyId, forKey: .technologyId) }
if technologyStackId != nil { try container.encode(technologyStackId, forKey: .technologyStackId) }
if justification != nil { try container.encode(justification, forKey: .justification) }
if id != nil { try container.encode(id, forKey: .id) }
if name != nil { try container.encode(name, forKey: .name) }
if vendorName != nil { try container.encode(vendorName, forKey: .vendorName) }
if vendorUrl != nil { try container.encode(vendorUrl, forKey: .vendorUrl) }
if productUrl != nil { try container.encode(productUrl, forKey: .productUrl) }
if logoUrl != nil { try container.encode(logoUrl, forKey: .logoUrl) }
if Description != nil { try container.encode(Description, forKey: .Description) }
if created != nil { try container.encode(created, forKey: .created) }
if createdBy != nil { try container.encode(createdBy, forKey: .createdBy) }
if lastModified != nil { try container.encode(lastModified, forKey: .lastModified) }
if lastModifiedBy != nil { try container.encode(lastModifiedBy, forKey: .lastModifiedBy) }
if ownerId != nil { try container.encode(ownerId, forKey: .ownerId) }
if slug != nil { try container.encode(slug, forKey: .slug) }
if logoApproved != nil { try container.encode(logoApproved, forKey: .logoApproved) }
if isLocked != nil { try container.encode(isLocked, forKey: .isLocked) }
if tier != nil { try container.encode(tier, forKey: .tier) }
if lastStatusUpdate != nil { try container.encode(lastStatusUpdate, forKey: .lastStatusUpdate) }
if organizationId != nil { try container.encode(organizationId, forKey: .organizationId) }
if commentsPostId != nil { try container.encode(commentsPostId, forKey: .commentsPostId) }
if viewCount != nil { try container.encode(viewCount, forKey: .viewCount) }
if favCount != nil { try container.encode(favCount, forKey: .favCount) }
}
}
public class TechnologyBase : Codable
{
public var id:Int
public var name:String
public var vendorName:String
public var vendorUrl:String
public var productUrl:String
public var logoUrl:String
public var Description:String
public var created:Date
public var createdBy:String
public var lastModified:Date
public var lastModifiedBy:String
public var ownerId:String
public var slug:String
public var logoApproved:Bool
public var isLocked:Bool
public var tier:TechnologyTier
public var lastStatusUpdate:Date?
public var organizationId:Int?
public var commentsPostId:Int?
public var viewCount:Int
public var favCount:Int
required public init(){}
}
public enum TechnologyTier : String, Codable
{
case ProgrammingLanguage
case Client
case Http
case Server
case Data
case SoftwareInfrastructure
case OperatingSystem
case HardwareInfrastructure
case ThirdPartyServices
}
Swift CreateTechnologyStack DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /techstacks HTTP/1.1
Host: techstacks.io
Accept: application/xml
Content-Type: application/xml
Content-Length: length
<CreateTechnologyStack xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel">
<AppUrl>String</AppUrl>
<Description>String</Description>
<Details>String</Details>
<IsLocked>false</IsLocked>
<Name>String</Name>
<ScreenshotUrl>String</ScreenshotUrl>
<Slug>String</Slug>
<TechnologyIds xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d2p1:long>0</d2p1:long>
</TechnologyIds>
<VendorName>String</VendorName>
</CreateTechnologyStack>
HTTP/1.1 200 OK Content-Type: application/xml Content-Length: length <CreateTechnologyStackResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel"> <ResponseStatus xmlns:d2p1="http://schemas.servicestack.net/types"> <d2p1:ErrorCode>String</d2p1:ErrorCode> <d2p1:Message>String</d2p1:Message> <d2p1:StackTrace>String</d2p1:StackTrace> <d2p1:Errors> <d2p1:ResponseError> <d2p1:ErrorCode>String</d2p1:ErrorCode> <d2p1:FieldName>String</d2p1:FieldName> <d2p1:Message>String</d2p1:Message> <d2p1:Meta xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <d5p1:KeyValueOfstringstring> <d5p1:Key>String</d5p1:Key> <d5p1:Value>String</d5p1:Value> </d5p1:KeyValueOfstringstring> </d2p1:Meta> </d2p1:ResponseError> </d2p1:Errors> <d2p1:Meta xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <d3p1:KeyValueOfstringstring> <d3p1:Key>String</d3p1:Key> <d3p1:Value>String</d3p1:Value> </d3p1:KeyValueOfstringstring> </d2p1:Meta> </ResponseStatus> <Result> <AppUrl xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</AppUrl> <CommentsPostId xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0</CommentsPostId> <Created xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0001-01-01T00:00:00</Created> <CreatedBy xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</CreatedBy> <Description xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</Description> <Details xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</Details> <DetailsHtml xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</DetailsHtml> <FavCount xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0</FavCount> <Id xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0</Id> <IsLocked xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">false</IsLocked> <LastModified xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0001-01-01T00:00:00</LastModified> <LastModifiedBy xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</LastModifiedBy> <LastStatusUpdate xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0001-01-01T00:00:00</LastStatusUpdate> <Name xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</Name> <OrganizationId xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0</OrganizationId> <OwnerId xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</OwnerId> <ScreenshotUrl xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</ScreenshotUrl> <Slug xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</Slug> <VendorName xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</VendorName> <ViewCount xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0</ViewCount> <TechnologyChoices> <TechnologyInStack> <CommentsPostId xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0</CommentsPostId> <Created xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0001-01-01T00:00:00</Created> <CreatedBy xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</CreatedBy> <Description xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</Description> <FavCount xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0</FavCount> <Id xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0</Id> <IsLocked xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">false</IsLocked> <LastModified xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0001-01-01T00:00:00</LastModified> <LastModifiedBy xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</LastModifiedBy> <LastStatusUpdate xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0001-01-01T00:00:00</LastStatusUpdate> <LogoApproved xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">false</LogoApproved> <LogoUrl xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</LogoUrl> <Name xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</Name> <OrganizationId xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0</OrganizationId> <OwnerId xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</OwnerId> <ProductUrl xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</ProductUrl> <Slug xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</Slug> <Tier xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">ProgrammingLanguage</Tier> <VendorName xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</VendorName> <VendorUrl xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">String</VendorUrl> <ViewCount xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel.Types">0</ViewCount> <Justification>String</Justification> <TechnologyId>0</TechnologyId> <TechnologyStackId>0</TechnologyStackId> </TechnologyInStack> </TechnologyChoices> </Result> </CreateTechnologyStackResponse>