/* Options: Date: 2024-04-28 22:14:57 SwiftVersion: 5.0 Version: 8.13 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://techstacks.io //BaseClass: //AddModelExtensions: True //AddServiceStackTypes: True IncludeTypes: SessionInfo.* //ExcludeTypes: //ExcludeGenericBaseTypes: False //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: Foundation,ServiceStack */ import Foundation import ServiceStack // @Route("/my-session") // @ValidateRequest(Validator="IsAuthenticated") public class SessionInfo : IReturn, IGet, Codable { public typealias Return = SessionInfoResponse required public init(){} } public class SessionInfoResponse : Codable { public var created:Date public var id:String public var referrerUrl:String public var userAuthId:String public var userAuthName:String public var userName:String public var displayName:String public var firstName:String public var lastName:String public var email:String public var createdAt:Date public var lastModified:Date public var roles:[String] = [] public var permissions:[String] = [] public var isAuthenticated:Bool public var authProvider:String public var profileUrl:String public var githubProfileUrl:String public var twitterProfileUrl:String public var accessToken:String public var avatarUrl:String public var techStacks:[TechnologyStack] = [] public var favoriteTechStacks:[TechnologyStack] = [] public var favoriteTechnologies:[Technology] = [] public var userActivity:UserActivity public var members:[OrganizationMember] = [] public var memberInvites:[OrganizationMemberInvite] = [] public var subscriptions:[OrganizationSubscription] = [] public var responseStatus:ResponseStatus required public init(){} } public class Technology : TechnologyBase { 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 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) 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 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 enum TechnologyTier : String, Codable { case ProgrammingLanguage case Client case Http case Server case Data case SoftwareInfrastructure case OperatingSystem case HardwareInfrastructure case ThirdPartyServices } public class TechnologyStack : TechnologyStackBase { 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 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) 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 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 OrganizationMember : Codable { public var id:Int public var organizationId:Int public var userId:Int public var userName:String public var isOwner:Bool public var isModerator:Bool public var denyAll:Bool public var denyPosts:Bool public var denyComments:Bool public var notes:String required public init(){} } public class OrganizationMemberInvite : Codable { public var id:Int public var organizationId:Int public var userId:Int public var userName:String public var dismissed:Date? required public init(){} } public class OrganizationSubscription : Codable { public var id:Int public var organizationId:Int public var userId:Int public var userName:String public var postTypes:[String] = [] public var frequencyDays:Int? public var lastSyncedId:Int? public var lastSynced:Date? public var created:Date required public init(){} } public class UserActivity : Codable { public var id:Int public var userName:String public var karma:Int public var technologyCount:Int public var techStacksCount:Int public var postsCount:Int public var postUpVotes:Int public var postDownVotes:Int public var commentUpVotes:Int public var commentDownVotes:Int public var postCommentsCount:Int public var pinnedCommentCount:Int public var postReportCount:Int public var postCommentReportCount:Int public var created:Date public var modified:Date required public init(){} } 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 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(){} }