/* Options: Date: 2026-02-04 10:26:27 Version: 6.110 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://etc-api.vsmlab.vn //Package: //AddServiceStackTypes: True //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True IncludeTypes: LoginHistoryRequest.* //ExcludeTypes: //InitializeCollections: True //TreatTypesAsStrings: //DefaultImports: java.math.*,java.util.*,net.servicestack.client.*,com.google.gson.annotations.*,com.google.gson.reflect.* */ import java.math.* import java.util.* import net.servicestack.client.* import com.google.gson.annotations.* import com.google.gson.reflect.* /** * Lấy lịch sử đăng nhập */ @Route(Path="/login-history", Verbs="Get") open class LoginHistoryRequest : IReturn { var userId:Int? = null var userName:String? = null var startDate:Date? = null var endDate:Date? = null var page:Int? = null var limit:Int? = null companion object { private val responseType = LoginHistoryRespnse::class.java } override fun getResponseType(): Any? = LoginHistoryRequest.responseType } open class LoginHistoryRespnse : IResponseRequest { @SerializedName("data") var Data:ArrayList = ArrayList() var totalRecords:Int? = null var code:Int? = null var message:String? = null } open interface IResponseRequest { var code:Int? var message:String? } open class UserLoginHistoryDto : UserLoginHistory() { var failedLoginCount:Int? = null } open class UserLoginHistory { var id:Int? = null var userId:Int? = null @StringLength(150) var userName:String? = null @StringLength(45) var ipAddress:String? = null @StringLength(500) var deviceInfo:String? = null @StringLength(50) var loginStatus:String? = null @StringLength(500) var failReason:String? = null @Required() var createdAt:Date? = null var provider:String? = null }