Files
Woka_Native_iOS/WOKA/WebSeries/Model/WebSeriesShowListDM.swift
BilalKhanWDI 1d6add0322 - Added DropDown
- Added api for show listing , made data model, updated the dropdown
- Added api for category, made data model
- Made the dynamic height tableview to show all the shows
- On fav add remove , will refresh the mylist screen
- Added default load on hindi
- On category selection change, updating the show list data
- Handled the fav category id as int, string , string seeprated with “,”
- Modifying my list with bookmark id with above
2024-06-19 20:07:47 +05:30

193 lines
5.9 KiB
Swift

//
// WebSeriesShowListDM.swift
// WOKA
//
// Created by MacBook Pro on 19/06/24.
//
import Foundation
// MARK: - WebSeriesShowListDM
struct WebSeriesShowListDM: Codable {
let showData: [ShowDatum]?
let totalRecords: Int?
enum CodingKeys: String, CodingKey {
case showData = "show_data"
case totalRecords = "total_records"
}
// MARK: - ShowDatum
struct ShowDatum: Codable {
let id: Int?
let title, description: String?
let thumbnailPath: String?
let showType: String?
let totalSeasons, totalEpisodes: Int?
let categoryMasterID: String?
let ageRangeMasterID, genderMasterID: String?
let contentMoreDetails: [MoreDetail]?
let seasonData: [SeasonDatum]?
let categoryData: [CategoryDatum]?
let ageRangeData: [AgeRangeDatum]?
let genderData: [GenderDatum]?
var markAsFavourite, isLiked: Bool?
let likedCategoryIDS: LikedCategoryIDS?
var favouriteCategoryIDS: ValueWrapper?
var likesCount : Int?
let viewsCount, bookmarkCount: Int?
enum CodingKeys: String, CodingKey {
case id, title, description
case thumbnailPath = "thumbnail_path"
case showType = "show_type"
case totalSeasons = "total_seasons"
case totalEpisodes = "total_episodes"
case categoryMasterID = "category_master_id"
case ageRangeMasterID = "age_range_master_id"
case genderMasterID = "gender_master_id"
case contentMoreDetails = "content_more_details"
case seasonData = "season_data"
case categoryData = "category_data"
case ageRangeData = "age_range_data"
case genderData = "gender_data"
case markAsFavourite = "mark_as_favourite"
case isLiked = "is_liked"
case likedCategoryIDS = "liked_category_ids"
case favouriteCategoryIDS = "favourite_category_ids"
case viewsCount = "views_count"
case likesCount = "likes_count"
case bookmarkCount = "bookmark_count"
}
}
// MARK: - AgeRangeDatum
struct AgeRangeDatum: Codable {
let id: Int?
let ageRange: String?
enum CodingKeys: String, CodingKey {
case id
case ageRange = "age_range"
}
}
// MARK: - CategoryDatum
struct CategoryDatum: Codable {
let id: Int?
let categoryName: CategoryName?
enum CodingKeys: String, CodingKey {
case id
case categoryName = "category_name"
}
}
enum CategoryName: String, Codable {
case english = "English"
case hindi = "Hindi"
}
// enum CategoryMasterID: String, Codable {
// case the118 = "1,18"
// }
// MARK: - MoreDetail
struct MoreDetail: Codable {
let id, contentID, postType, languageMasterID: Int?
let title, description, tagsKeywords: String?
let trailerHDURL, trailerSDURL: String?
enum CodingKeys: String, CodingKey {
case id
case contentID = "content_id"
case postType = "post_type"
case languageMasterID = "language_master_id"
case title, description
case tagsKeywords = "tags_keywords"
case trailerHDURL = "trailer_hd_url"
case trailerSDURL = "trailer_sd_url"
}
}
// MARK: - GenderDatum
struct GenderDatum: Codable {
let id: Int?
let genderName: String?
enum CodingKeys: String, CodingKey {
case id
case genderName = "gender_name"
}
}
enum LikedCategoryIDS: Codable {
case integer(Int)
case string(String)
case null
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
if let x = try? container.decode(Int.self) {
self = .integer(x)
return
}
if let x = try? container.decode(String.self) {
self = .string(x)
return
}
if container.decodeNil() {
self = .null
return
}
throw DecodingError.typeMismatch(LikedCategoryIDS.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Wrong type for LikedCategoryIDS"))
}
func encode(to encoder: Encoder) throws {
var container = encoder.singleValueContainer()
switch self {
case .integer(let x):
try container.encode(x)
case .string(let x):
try container.encode(x)
case .null:
try container.encodeNil()
}
}
}
// MARK: - SeasonDatum
struct SeasonDatum: Codable {
let id, watchShowsMasterID: Int?
let seasonNumber: String?
let noOfEpisodes: Int?
let seasonDescription: String?
let releaseYear: Int?
let seasonTitle: String?
let trailerURL: String?
let thumbnailPath: String?
let thumbnailImgURL: String?
let tagsKeyword, releaseDate: String?
let seasonMoreDetails: [MoreDetail]?
enum CodingKeys: String, CodingKey {
case id
case watchShowsMasterID = "watch_shows_master_id"
case seasonNumber = "season_number"
case noOfEpisodes = "no_of_episodes"
case seasonDescription = "season_description"
case releaseYear = "release_year"
case seasonTitle = "season_title"
case trailerURL = "trailer_url"
case thumbnailPath = "thumbnail_path"
case thumbnailImgURL = "thumbnail_img_url"
case tagsKeyword = "tags_keyword"
case releaseDate = "release_date"
case seasonMoreDetails = "season_more_details"
}
}
}