Untitled

 avatar
unknown
plain_text
a month ago
1.6 kB
7
Indexable
import Foundation

// AnnotationType Enum
enum AnnotationType: String, Codable {
    case draw = "draw"
    case pin = "pin"
    case text = "text"
}

// Comment Model
struct Comment: Codable {
    var id: String?
    var chatType: Int
    var messageType: String
    var payload: String
    var mentionedUserIds: [String]?
    var annotation: Annotation?
    var parent: String?
    var document: String
    var caseId: String
    var user: String
    var replies: [Comment]?
    var createdAt: Date?
    var updatedAt: Date?

    // Nested Annotation Struct
    struct Annotation: Codable {
        var annotationType: AnnotationType?
        var parentId: String?
        var galleryId: String?
        var meta: Meta?
        
        // Nested Meta Struct
        struct Meta: Codable {
            var thumbId: String?
            var name: String?
            var pins: [Pin]?
            var shapes: [[[[String]]]]?
            
            // Nested Pin Struct
            struct Pin: Codable {
                var position: [Double]
            }
        }
    }
}

// Example JSON Encoding and Decoding
extension Comment {
    static func fromJSON(_ jsonData: Data) throws -> Comment {
        let decoder = JSONDecoder()
        decoder.dateDecodingStrategy = .iso8601
        return try decoder.decode(Comment.self, from: jsonData)
    }
    
    func toJSON() throws -> Data {
        let encoder = JSONEncoder()
        encoder.dateEncodingStrategy = .iso8601
        return try encoder.encode(self)
    }
}
Leave a Comment