GET | /topics | Use to get Resource Library Topics |
---|
import Foundation
import ServiceStack
public class TopicsRequest : BasicResourceLibraryRequest
{
public var includeCompletionStatus:Bool?
public var isMobile:Bool?
public var includeSubtopicItems:Bool?
public var includeResourceItems:Bool?
/**
* Set it to true if the topics being requested belogs to digital fitness. Don't set it if unsure.
*/
// @ApiMember(Description="Set it to true if the topics being requested belogs to digital fitness. Don't set it if unsure.")
public var digitalFitness:Bool?
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case includeCompletionStatus
case isMobile
case includeSubtopicItems
case includeResourceItems
case digitalFitness
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
includeCompletionStatus = try container.decodeIfPresent(Bool.self, forKey: .includeCompletionStatus)
isMobile = try container.decodeIfPresent(Bool.self, forKey: .isMobile)
includeSubtopicItems = try container.decodeIfPresent(Bool.self, forKey: .includeSubtopicItems)
includeResourceItems = try container.decodeIfPresent(Bool.self, forKey: .includeResourceItems)
digitalFitness = try container.decodeIfPresent(Bool.self, forKey: .digitalFitness)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if includeCompletionStatus != nil { try container.encode(includeCompletionStatus, forKey: .includeCompletionStatus) }
if isMobile != nil { try container.encode(isMobile, forKey: .isMobile) }
if includeSubtopicItems != nil { try container.encode(includeSubtopicItems, forKey: .includeSubtopicItems) }
if includeResourceItems != nil { try container.encode(includeResourceItems, forKey: .includeResourceItems) }
if digitalFitness != nil { try container.encode(digitalFitness, forKey: .digitalFitness) }
}
}
public class BasicResourceLibraryRequest : Codable
{
public var resourceLibraryMemberId:Int?
required public init(){}
}
public class TopicsResponse : Codable
{
public var topics:[Topic] = []
required public init(){}
}
public class Topic : Codable
{
public var id:String?
public var subtopicItems:[SubTopic] = []
public var resourceItems:[ResourceItem] = []
public var title:String?
public var isVisible:String?
public var resourceCount:Int?
required public init(){}
}
public class SubTopic : Codable
{
public var id:String?
public var title:String?
public var resourceCount:Int?
public var resourceItems:[ResourceItem] = []
required public init(){}
}
public class ResourceItem : ResourceCard
{
public var content:String?
public var credit:String?
public var references:String?
public var disclaimer:String?
public var headerImage:String?
public var origin:String?
public var originId:String?
public var tags:[Tag] = []
public var categories:[Category] = []
public var index:Int?
public var activityLevel:String?
public var activityDetails:String?
public var transcript:String?
public var isArchived:Bool?
public var activities:[ActivityItem] = []
public var seriesItems:[SeriesItem] = []
public var videoId:String?
public var focus:String?
public var series:String?
public var seriesUrl:String?
public var category:String?
public var equipments:[String] = []
public var durationRange:String?
public var providerName:String?
public var uploadDate:String?
public var completionDate:Date?
public var level:String?
public var bodyFocus:String?
public var altMediaPaths:AltMediaPaths?
public var subtitles:String?
public var drmEncrypted:Bool?
public var screenshots:[ScreenshotItem] = []
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case content
case credit
case references
case disclaimer
case headerImage
case origin
case originId
case tags
case categories
case index
case activityLevel
case activityDetails
case transcript
case isArchived
case activities
case seriesItems
case videoId
case focus
case series
case seriesUrl
case category
case equipments
case durationRange
case providerName
case uploadDate
case completionDate
case level
case bodyFocus
case altMediaPaths
case subtitles
case drmEncrypted
case screenshots
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
content = try container.decodeIfPresent(String.self, forKey: .content)
credit = try container.decodeIfPresent(String.self, forKey: .credit)
references = try container.decodeIfPresent(String.self, forKey: .references)
disclaimer = try container.decodeIfPresent(String.self, forKey: .disclaimer)
headerImage = try container.decodeIfPresent(String.self, forKey: .headerImage)
origin = try container.decodeIfPresent(String.self, forKey: .origin)
originId = try container.decodeIfPresent(String.self, forKey: .originId)
tags = try container.decodeIfPresent([Tag].self, forKey: .tags) ?? []
categories = try container.decodeIfPresent([Category].self, forKey: .categories) ?? []
index = try container.decodeIfPresent(Int.self, forKey: .index)
activityLevel = try container.decodeIfPresent(String.self, forKey: .activityLevel)
activityDetails = try container.decodeIfPresent(String.self, forKey: .activityDetails)
transcript = try container.decodeIfPresent(String.self, forKey: .transcript)
isArchived = try container.decodeIfPresent(Bool.self, forKey: .isArchived)
activities = try container.decodeIfPresent([ActivityItem].self, forKey: .activities) ?? []
seriesItems = try container.decodeIfPresent([SeriesItem].self, forKey: .seriesItems) ?? []
videoId = try container.decodeIfPresent(String.self, forKey: .videoId)
focus = try container.decodeIfPresent(String.self, forKey: .focus)
series = try container.decodeIfPresent(String.self, forKey: .series)
seriesUrl = try container.decodeIfPresent(String.self, forKey: .seriesUrl)
category = try container.decodeIfPresent(String.self, forKey: .category)
equipments = try container.decodeIfPresent([String].self, forKey: .equipments) ?? []
durationRange = try container.decodeIfPresent(String.self, forKey: .durationRange)
providerName = try container.decodeIfPresent(String.self, forKey: .providerName)
uploadDate = try container.decodeIfPresent(String.self, forKey: .uploadDate)
completionDate = try container.decodeIfPresent(Date.self, forKey: .completionDate)
level = try container.decodeIfPresent(String.self, forKey: .level)
bodyFocus = try container.decodeIfPresent(String.self, forKey: .bodyFocus)
altMediaPaths = try container.decodeIfPresent(AltMediaPaths.self, forKey: .altMediaPaths)
subtitles = try container.decodeIfPresent(String.self, forKey: .subtitles)
drmEncrypted = try container.decodeIfPresent(Bool.self, forKey: .drmEncrypted)
screenshots = try container.decodeIfPresent([ScreenshotItem].self, forKey: .screenshots) ?? []
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if content != nil { try container.encode(content, forKey: .content) }
if credit != nil { try container.encode(credit, forKey: .credit) }
if references != nil { try container.encode(references, forKey: .references) }
if disclaimer != nil { try container.encode(disclaimer, forKey: .disclaimer) }
if headerImage != nil { try container.encode(headerImage, forKey: .headerImage) }
if origin != nil { try container.encode(origin, forKey: .origin) }
if originId != nil { try container.encode(originId, forKey: .originId) }
if tags.count > 0 { try container.encode(tags, forKey: .tags) }
if categories.count > 0 { try container.encode(categories, forKey: .categories) }
if index != nil { try container.encode(index, forKey: .index) }
if activityLevel != nil { try container.encode(activityLevel, forKey: .activityLevel) }
if activityDetails != nil { try container.encode(activityDetails, forKey: .activityDetails) }
if transcript != nil { try container.encode(transcript, forKey: .transcript) }
if isArchived != nil { try container.encode(isArchived, forKey: .isArchived) }
if activities.count > 0 { try container.encode(activities, forKey: .activities) }
if seriesItems.count > 0 { try container.encode(seriesItems, forKey: .seriesItems) }
if videoId != nil { try container.encode(videoId, forKey: .videoId) }
if focus != nil { try container.encode(focus, forKey: .focus) }
if series != nil { try container.encode(series, forKey: .series) }
if seriesUrl != nil { try container.encode(seriesUrl, forKey: .seriesUrl) }
if category != nil { try container.encode(category, forKey: .category) }
if equipments.count > 0 { try container.encode(equipments, forKey: .equipments) }
if durationRange != nil { try container.encode(durationRange, forKey: .durationRange) }
if providerName != nil { try container.encode(providerName, forKey: .providerName) }
if uploadDate != nil { try container.encode(uploadDate, forKey: .uploadDate) }
if completionDate != nil { try container.encode(completionDate, forKey: .completionDate) }
if level != nil { try container.encode(level, forKey: .level) }
if bodyFocus != nil { try container.encode(bodyFocus, forKey: .bodyFocus) }
if altMediaPaths != nil { try container.encode(altMediaPaths, forKey: .altMediaPaths) }
if subtitles != nil { try container.encode(subtitles, forKey: .subtitles) }
if drmEncrypted != nil { try container.encode(drmEncrypted, forKey: .drmEncrypted) }
if screenshots.count > 0 { try container.encode(screenshots, forKey: .screenshots) }
}
}
public class ResourceCard : Codable
{
public var id:String?
public var title:String?
public var Description:String?
public var descriptionSummary:String?
public var type:String?
public var content:String?
public var isComplete:Bool?
public var isFavorite:Bool?
public var isImplicitlyComplete:Bool?
public var mediaPath:String?
public var isConfirmable:Bool?
public var isWcagCompliant:Bool?
public var duration:String?
public var preview:String?
public var calories:Int?
public var instructor:String?
public var thumbnail:String?
public var difficulty:String?
public var tags:[Tag] = []
public var subtitles:String?
public var screenshots:[ScreenshotItem] = []
public var drmEncrypted:Bool?
required public init(){}
}
public class Tag : Codable
{
public var id:String?
public var title:String?
required public init(){}
}
public class ScreenshotItem : Codable
{
public var largeFilepathS3:String?
public var thumbFilepathS3:String?
public var order:Double?
public var Description:String?
required public init(){}
}
public class Category : Codable
{
public var id:String?
public var subtopicItems:[SubTopic] = []
public var resourceItems:[ResourceItem] = []
public var title:String?
public var isVisible:String?
public var resourceCount:Int?
required public init(){}
}
public class ActivityItem : Codable
{
public var name:String?
public var id:String?
required public init(){}
}
public class SeriesItem : Codable
{
public var id:String?
public var title:String?
required public init(){}
}
public class AltMediaPaths : Codable
{
public var webm:String?
public var ogv:String?
public var mp4Low:String?
public var mp4High:String?
required public init(){}
}
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.
GET /topics HTTP/1.1 Host: resourcelibrary.api.ashcompanies.com Accept: text/csv
HTTP/1.1 200 OK Content-Type: text/csv Content-Length: length {"topics":null}