Manos Chorianopoulos

update ProfileModel

......@@ -39,6 +39,23 @@ public class ProfileModel: NSObject {
private var uuid: String?
private var verified: Bool?
// NEW: Missing API Response Fields
private var user_segments: [String]?
private var eligibility_type: String?
private var favorite_couponsets: [String]?
private var user_id: String?
private var is_eligible: Bool?
private var questionnaire: [String: Any]?
private var user_answers: [QuestionnaireAnswerModel]?
private var questionnaire_answers: [QuestionnaireAnswerModel]?
// Enhanced profile_metadata fields
private var username: String?
private var contract_accounts: [String]?
private var master_id: String?
private var questionnaire_v2: [String: Any]?
private var answered_count: Int?
// optin
private var optin_newsletter: Bool?
private var optin_sms: Bool?
......@@ -83,6 +100,23 @@ public class ProfileModel: NSObject {
self.uuid = ""
self.verified = false
// NEW: Missing API Response Fields
self.user_segments = []
self.eligibility_type = ""
self.favorite_couponsets = []
self.user_id = ""
self.is_eligible = false
self.questionnaire = [String: Any]()
self.user_answers = []
self.questionnaire_answers = []
// Enhanced profile_metadata fields
self.username = ""
self.contract_accounts = []
self.master_id = ""
self.questionnaire_v2 = [String: Any]()
self.answered_count = 0
// optin
self.optin_newsletter = false
self.optin_sms = false
......@@ -126,6 +160,28 @@ public class ProfileModel: NSObject {
self.uuid = dictionary["uuid"] as? String? ?? ""
self.verified = dictionary["verified"] as? Bool? ?? false
// NEW: Missing API Response Fields
self.user_segments = dictionary["user_segments"] as? [String] ?? []
self.eligibility_type = dictionary["eligibility_type"] as? String ?? ""
self.favorite_couponsets = dictionary["favorite_couponsets"] as? [String] ?? []
self.user_id = dictionary["user_id"] as? String ?? ""
self.is_eligible = dictionary["is_eligible"] as? Bool ?? false
self.questionnaire = dictionary["questionnaire"] as? [String: Any] ?? [String: Any]()
// Parse user_answers array
if let userAnswersArray = dictionary["user_answers"] as? [[String: Any]] {
self.user_answers = userAnswersArray.map { QuestionnaireAnswerModel(dictionary: $0) }
} else {
self.user_answers = []
}
// Parse questionnaire_answers array
if let questionnaireAnswersArray = dictionary["questionnaire_answers"] as? [[String: Any]] {
self.questionnaire_answers = questionnaireAnswersArray.map { QuestionnaireAnswerModel(dictionary: $0) }
} else {
self.questionnaire_answers = []
}
// optin
let optin = dictionary["optin"] as? [String: Any]? ?? ["":""]
self.optin_newsletter = optin?["newsletter"] as? Bool? ?? false
......@@ -149,12 +205,26 @@ public class ProfileModel: NSObject {
self.msisdnList = (tempMsisdnList ?? []).filter { $0 != "" }
self.answered = profile_metadata_parsed["answered"] as? Bool? ?? false
self.nonTelco = profile_metadata_parsed["nonTelco"] as? Bool? ?? false
// Enhanced profile_metadata fields
self.username = profile_metadata_parsed["username"] as? String? ?? ""
self.contract_accounts = profile_metadata_parsed["contract_accounts"] as? [String] ?? []
self.master_id = profile_metadata_parsed["master_id"] as? String? ?? ""
self.questionnaire_v2 = profile_metadata_parsed["questionnaire_v2"] as? [String: Any] ?? [String: Any]()
self.answered_count = profile_metadata_parsed["answered_count"] as? Int? ?? 0
} else {
self.profile_metadata = [String: Any]()
self.badge = ""
self.msisdnList = []
self.answered = false
self.nonTelco = false
// Enhanced profile_metadata fields defaults
self.username = ""
self.contract_accounts = []
self.master_id = ""
self.questionnaire_v2 = [String: Any]()
self.answered_count = 0
print("bad json")
}
} catch let error as NSError {
......@@ -163,6 +233,13 @@ public class ProfileModel: NSObject {
self.msisdnList = []
self.answered = false
self.nonTelco = false
// Enhanced profile_metadata fields defaults
self.username = ""
self.contract_accounts = []
self.master_id = ""
self.questionnaire_v2 = [String: Any]()
self.answered_count = 0
print(error)
}
......@@ -172,6 +249,13 @@ public class ProfileModel: NSObject {
self.msisdnList = []
self.answered = false
self.nonTelco = false
// Enhanced profile_metadata fields defaults
self.username = ""
self.contract_accounts = []
self.master_id = ""
self.questionnaire_v2 = [String: Any]()
self.answered_count = 0
}
} else {
......@@ -180,6 +264,13 @@ public class ProfileModel: NSObject {
self.msisdnList = []
self.answered = false
self.nonTelco = false
// Enhanced profile_metadata fields defaults
self.username = ""
self.contract_accounts = []
self.master_id = ""
self.questionnaire_v2 = [String: Any]()
self.answered_count = 0
}
}
......@@ -364,6 +455,73 @@ public class ProfileModel: NSObject {
set(newValue) { self.nonTelco = newValue }
}
// MARK: - NEW Public Accessors for Missing API Response Fields
public var _user_segments: [String] {
get { return self.user_segments ?? [] }
set(newValue) { self.user_segments = newValue }
}
public var _eligibility_type: String {
get { return self.eligibility_type ?? "" }
set(newValue) { self.eligibility_type = newValue }
}
public var _favorite_couponsets: [String] {
get { return self.favorite_couponsets ?? [] }
set(newValue) { self.favorite_couponsets = newValue }
}
public var _user_id: String {
get { return self.user_id ?? "" }
set(newValue) { self.user_id = newValue }
}
public var _is_eligible: Bool {
get { return self.is_eligible ?? false }
set(newValue) { self.is_eligible = newValue }
}
public var _questionnaire: [String: Any] {
get { return self.questionnaire ?? [String: Any]() }
set(newValue) { self.questionnaire = newValue }
}
public var _user_answers: [QuestionnaireAnswerModel] {
get { return self.user_answers ?? [] }
set(newValue) { self.user_answers = newValue }
}
public var _questionnaire_answers: [QuestionnaireAnswerModel] {
get { return self.questionnaire_answers ?? [] }
set(newValue) { self.questionnaire_answers = newValue }
}
// MARK: - Enhanced profile_metadata Public Accessors
public var _username: String {
get { return self.username ?? "" }
set(newValue) { self.username = newValue }
}
public var _contract_accounts: [String] {
get { return self.contract_accounts ?? [] }
set(newValue) { self.contract_accounts = newValue }
}
public var _master_id: String {
get { return self.master_id ?? "" }
set(newValue) { self.master_id = newValue }
}
public var _questionnaire_v2: [String: Any] {
get { return self.questionnaire_v2 ?? [String: Any]() }
set(newValue) { self.questionnaire_v2 = newValue }
}
public var _answered_count: Int {
get { return self.answered_count ?? 0 }
set(newValue) { self.answered_count = newValue }
}
// MARK: - Computed Properties
public var fullName: String {
let first = firstname ?? ""
......
//
// QuestionnaireAnswerModel.swift
// SwiftWarplyFramework
//
// Created by Warply on 04/09/2025.
//
import Foundation
@objc public class QuestionnaireAnswerModel: NSObject {
// MARK: - Private Properties
private var _question_id: String?
private var _question_text: String?
private var _answer: Any? // Can be String or [String]
private var _answer_id: String?
private var _answer_text: String?
// MARK: - Public Accessors
@objc public var question_id: String {
get { return _question_id ?? "" }
set { _question_id = newValue }
}
@objc public var question_text: String {
get { return _question_text ?? "" }
set { _question_text = newValue }
}
@objc public var answer_id: String {
get { return _answer_id ?? "" }
set { _answer_id = newValue }
}
@objc public var answer_text: String {
get { return _answer_text ?? "" }
set { _answer_text = newValue }
}
// MARK: - Answer Handling (Mixed Types)
@objc public var answerAsString: String {
if let stringAnswer = _answer as? String {
return stringAnswer
} else if let arrayAnswer = _answer as? [String] {
return arrayAnswer.joined(separator: ", ")
}
return ""
}
@objc public var answerAsArray: [String] {
if let arrayAnswer = _answer as? [String] {
return arrayAnswer
} else if let stringAnswer = _answer as? String {
return [stringAnswer]
}
return []
}
@objc public var rawAnswer: Any? {
return _answer
}
// MARK: - Initializers
@objc public override init() {
super.init()
}
@objc public init(dictionary: [String: Any]) {
super.init()
if let questionId = dictionary["question_id"] as? String {
self._question_id = questionId
}
if let questionText = dictionary["question_text"] as? String {
self._question_text = questionText
}
if let answerId = dictionary["answer_id"] as? String {
self._answer_id = answerId
}
if let answerText = dictionary["answer_text"] as? String {
self._answer_text = answerText
}
// Handle mixed answer types (String or [String])
if let answer = dictionary["answer"] {
self._answer = answer
}
}
// MARK: - Utility Methods
@objc public func toDictionary() -> [String: Any] {
var dict: [String: Any] = [:]
if let questionId = _question_id {
dict["question_id"] = questionId
}
if let questionText = _question_text {
dict["question_text"] = questionText
}
if let answerId = _answer_id {
dict["answer_id"] = answerId
}
if let answerText = _answer_text {
dict["answer_text"] = answerText
}
if let answer = _answer {
dict["answer"] = answer
}
return dict
}
@objc public var description: String {
return "QuestionnaireAnswerModel(question_id: \(question_id), question_text: \(question_text), answer: \(answerAsString), answer_id: \(answer_id), answer_text: \(answer_text))"
}
}