package Ġio . support gen ie . android library . model Ċ Ċ import Ġandroidx . room . Entity Ċ import Ġandroidx . room . ForeignKey Ċ import Ġandroidx . room . Index Ċ import Ġio . support gen ie . android library . data . network . dto .* Ċ import Ġio . support gen ie . android library . utils . get Db Date From Api Date Ċ import Ġcom . google . gson . Gson Ċ import Ġio . support gen ie . android library . data . network . pubsub . Pub Sub ChatMessage Dto Ċ Ċ // Ġrefer Ġto Ġhttps :// stackoverflow . com / questions / 7 3 6 3 1 1 2 / best - way - to - work - with - dates - in - android - sqlite Ċ // Ġfor Ġan Ġe planation Ġof Ġwhy Ġwe Ġuse Ġlong Ġto Ġstore Ġdate Ċ Ċ @ Entity ( tableName Ġ= Ġ" company ", Ġprimary Keys Ġ= Ġ[" company Id "]) Ċ data Ġclass ĠCompany ( val Ġcompany Id : ĠString , Ġval Ġname Ġ: ĠString , Ġval Ġphoto Url : ĠString , Ġval Ġwebsite : String , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠupdatedAt : ĠString , Ġval Ġlocal UpdatedAt : ĠLong ) Ġ{ ĊĠĠĠ Ġconstructor ( company Dto : ĠCompany Dto ) Ġ: Ġthis ( company Dto . company Id , Ġcompany Dto . name , Ġcompany Dto . photoUrl , ĊĠĠĠĠĠĠĠ Ġcompany Dto . website , Ġcompany Dto . updatedAt , ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( company Dto . updatedAt ) ĊĠĠĠ Ġ) Ċ } ĊĊ Ċ @ Entity ( tableName Ġ= Ġ" agent ", Ġprimary Keys Ġ= Ġ[" userId "], ĊĠĠĠ Ġindices Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠIndex ( value Ġ= Ġ[" company Id ", Ġ" userId "], Ġunique Ġ= Ġtrue ) ĊĠĠĠ Ġ), ĊĠĠĠ Ġforeign Keys Ġ= Ġ[ ĊĠĠĠĠĠĠĠ ĠForeign Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity Ġ= ĠCompany :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Columns Ġ= Ġ[" company Id "], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Columns Ġ= Ġ[" company Id "] ĊĠĠĠĠĠĠĠ Ġ) ] ĊĠĠĠ Ġ) Ċ data Ġclass ĠAgent ( val ĠuserId : ĠString , Ġval Ġcompany Id Ġ: ĠString , Ġval Ġname : ĠString , Ġval Ġemail : ĠString , Ġval Ġphone : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus : ĠString , Ġval Ġis Available : Boolean , Ġval Ġphoto Url : ĠString , Ġval ĠupdatedAt : ĠString , Ġval Ġlocal UpdatedAt : ĠLong ) Ġ{ ĊĠĠĠ Ġconstructor ( agent Dto : ĠAgent Dto ) Ġ: Ġthis ( agent Dto . userId , Ġagent Dto . company Id , Ġagent Dto . name , Ġagent Dto . email , ĊĠĠĠĠĠĠĠ Ġ"", Ġagent Dto . status , Ġfalse , Ġagent Dto . photoUrl , Ġagent Dto . updatedAt , ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( agent Dto . updatedAt ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Entity ( tableName Ġ= Ġ" user ", Ġprimary Keys Ġ= Ġ[" userId "], ĊĠĠĠ Ġindices Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠIndex ( value Ġ= Ġ[" company Id ", Ġ" userId "], Ġunique Ġ= Ġtrue ) ĊĠĠĠ Ġ), ĊĠĠĠ Ġforeign Keys Ġ= Ġ[ ĊĠĠĠĠĠĠĠ ĠForeign Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity Ġ= ĠCompany :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Columns Ġ= Ġ[" company Id "], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Columns Ġ= Ġ[" company Id "] ĊĠĠĠĠĠĠĠ Ġ) ] ĊĠĠĠ Ġ) Ċ data Ġclass ĠUser ( val ĠuserId : ĠString , Ġval Ġcompany Id Ġ: ĠString , Ġval ĠisActive : ĠBoolean , Ġval ĠupdatedAt : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal UpdatedAt : ĠLong ) Ġ{ ĊĠĠĠ Ġconstructor ( user Dto : ĠUser Dto ) Ġ: Ġthis ( user Dto . userId , Ġuser Dto . company Id , Ġuser Dto . isActive , Ġuser Dto . updatedAt , ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( user Dto . updatedAt ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Entity ( tableName Ġ= Ġ" session ", Ġprimary Keys Ġ= Ġ[" sessionId "], ĊĠĠĠ Ġindices Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠIndex ( value Ġ= Ġ[" userId "], Ġunique Ġ= Ġfalse ), ĊĠĠĠĠĠĠĠ ĠIndex ( value Ġ= Ġ[" company Id "], Ġunique Ġ= Ġfalse ) ĊĠĠĠ Ġ), ĊĠĠĠ Ġforeign Keys Ġ= Ġ[ ĊĠĠĠĠĠĠĠ ĠForeign Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity Ġ= ĠCompany :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Columns Ġ= Ġ[" company Id "], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Columns Ġ= Ġ[" company Id "], ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Ġ= ĠForeign Key . CASCADE ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠForeign Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity Ġ= ĠUser :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Columns Ġ= Ġ[" userId "], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Columns Ġ= Ġ[" userId "] ĊĠĠĠĠĠĠĠ Ġ) ] ĊĠĠĠ Ġ) Ċ data Ġclass ĠSession ( val ĠsessionId : ĠString , Ġval Ġcompany Id Ġ: ĠString , Ġval ĠuserId : ĠString , Ġval Ġtype : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus : ĠString , Ġval Ġlocal CreatedAt : ĠLong , Ġval ĠupdatedAt : ĠString , Ġval Ġlocal UpdatedAt : ĠLong ) Ġ{ ĊĠĠĠ Ġconstructor ( userId : String , Ġsession Dto : ĠSession Dto ) Ġ: Ġthis ( session Dto . sessionId , Ġsession Dto . company Id , ĠuserId , ĊĠĠĠĠĠĠĠ Ġsession Dto . type , Ġsession Dto . status , ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( session Dto . createdAt ), Ġsession Dto . updatedAt , ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( session Dto . updatedAt ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġconstructor ( userId : String , Ġsession Data Dto : ĠSession Data Dto ) Ġ: Ġthis ( session Data Dto . sessionId , Ġsession Data Dto . company Id , ĠuserId , ĊĠĠĠĠĠĠĠ Ġsession Data Dto . type , Ġsession Data Dto . status , ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( session Data Dto . createdAt ), Ġsession Data Dto . updatedAt , ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( session Data Dto . updatedAt ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Entity ( tableName Ġ= Ġ" session _ participant ", Ġprimary Keys Ġ= Ġ[" sessionId ", Ġ" participant "], ĊĠĠĠ Ġindices Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠIndex ( value Ġ= Ġ[" company Id "], unique Ġ= Ġfalse ) ĊĠĠĠ Ġ), ĊĠĠĠ Ġforeign Keys Ġ= Ġ[ ĊĠĠĠĠĠĠĠ ĠForeign Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity Ġ= ĠCompany :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Columns Ġ= Ġ[" company Id "], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Columns Ġ= Ġ[" company Id "] ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠForeign Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity Ġ= ĠSession :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Columns Ġ= Ġ[" sessionId "], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Columns Ġ= Ġ[" sessionId "] ĊĠĠĠĠĠĠĠ Ġ) ] ĊĠĠĠ Ġ) Ċ data Ġclass ĠSession Participant ( val ĠsessionId : ĠString , Ġval Ġcompany Id Ġ: ĠString , Ġval Ġparticipant : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparticipant Type : ĠString , Ġval Ġstatus : ĠString , Ġval Ġlocal CreatedAt : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠupdatedAt : ĠString , Ġval Ġlocal UpdatedAt : ĠLong ) Ġ{ ĊĠĠĠ Ġconstructor ( sessionId : String , Ġcompany Id : ĠString , Ġparticipant Dto : ĠPart icipant Dto ) Ġ: Ġthis ( sessionId , ĊĠĠĠĠĠĠĠ Ġcompany Id , Ġparticipant Dto . participant , Ġparticipant Dto . participant Type , Ġparticipant Dto . status , ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( participant Dto . createdAt ), Ġparticipant Dto . updatedAt , ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( participant Dto . updatedAt ) ĊĠĠĠ Ġ) Ċ } ĊĊ Ċ @ Entity ( tableName Ġ= Ġ" chat _ message ", Ġprimary Keys Ġ= Ġ[" message Id "], ĊĠĠĠ Ġindices Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠIndex ( value Ġ= Ġ[" sessionId "], Ġunique Ġ= Ġfalse ), ĊĠĠĠĠĠĠĠ ĠIndex ( value Ġ= Ġ[" company Id "], Ġunique Ġ= Ġfalse ) ĊĠĠĠ Ġ), ĊĠĠĠ Ġforeign Keys Ġ= Ġ[ ĊĠĠĠĠĠĠĠ ĠForeign Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity Ġ= ĠCompany :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Columns Ġ= Ġ[" company Id "], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Columns Ġ= Ġ[" company Id "] ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠForeign Key ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity Ġ= ĠSession :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Columns Ġ= Ġ[" sessionId "], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Columns Ġ= Ġ[" sessionId "] ĊĠĠĠĠĠĠĠ Ġ) ] ĊĠĠĠ Ġ) Ċ data Ġclass ĠChat Message ( val ĠmessageId : String , Ġval ĠsessionId : ĠString , Ġval Ġcompany Id Ġ: ĠString , Ġval Ġsender : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsender Type : ĠString , Ġval Ġmessage : String , Ġval ĠmimeType : String , Ġval Ġextra Message Data : String , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Message Time : ĠLong , Ġval Ġlocal CreatedAt : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠupdatedAt : ĠString , Ġval Ġlocal UpdatedAt : ĠLong , Ġval Ġretries : Int , Ġval Ġlocal File : String , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogress : Float , Ġval Ġdelivery Status : String ) Ġ{ ĊĠĠĠ Ġconstructor ( company Id : ĠString , Ġmessage Dto : ĠMessage Dto ) Ġ: Ġthis ( message Dto . message Id , Ġmessage Dto . sessionId , Ġcompany Id , ĊĠĠĠĠĠĠĠ Ġmessage Dto . sender , Ġmessage Dto . sender Type , Ġmessage Dto . message , Ġmessage Dto . mime Type , ĊĠĠĠĠĠĠĠ ĠGson (). toJson ( message Dto . extra Message Data ), ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( message Dto . message Time ), ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( message Dto . createdAt ), Ġmessage Dto . updatedAt , ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( message Dto . updatedAt ), ĊĠĠĠĠĠĠĠĠ 0 , Ġ"", Ġ 0 . 0 f , Ġ"") ĊĠĠĠ Ġconstructor ( pubsub ChatMessage : ĠPub Sub ChatMessage Dto ) Ġ: Ġthis ( pubsub ChatMessage . message Id , Ġpub sub ChatMessage . sessionId , ĊĠĠĠĠĠĠĠ Ġpub sub ChatMessage . company Id , Ġpub sub ChatMessage . sender , Ġpub sub ChatMessage . sender Type , ĊĠĠĠĠĠĠĠ Ġpub sub ChatMessage . message , Ġpub sub ChatMessage . mime Type , ĠGson (). toJson ( pubsub ChatMessage . extra Message Data ), ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( pubsub ChatMessage . message Time ), ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( pubsub ChatMessage . createdAt ), ĊĠĠĠĠĠĠĠ Ġpub sub ChatMessage . updatedAt , ĊĠĠĠĠĠĠĠ Ġget Db Date From Api Date ( pubsub ChatMessage . updatedAt ), ĊĠĠĠĠĠĠĠĠ 0 , Ġ"", Ġ 0 . 0 f , Ġ"") Ċ Ċ } ĊĊ