TechStacks!

<back to all web services

GetUserFeed

User
Requires Authentication
The following routes are available for this service:
All Verbs/my-feed
import Foundation
import ServiceStack

// @ValidateRequest(Validator="IsAuthenticated")
public class GetUserFeed : IGet, Codable
{
    required public init(){}
}

public class GetUserFeedResponse : Codable
{
    public var results:[TechStackDetails] = []

    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 GetUserFeed DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml

HTTP + XML

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /my-feed HTTP/1.1 
Host: techstacks.io 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<GetUserFeed xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel" />
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<GetUserFeedResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/TechStacks.ServiceModel">
  <Results>
    <TechStackDetails>
      <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>
    </TechStackDetails>
  </Results>
</GetUserFeedResponse>