/* Options:
Date: 2026-04-18 01:03:03
Version: 8.53
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://chinook.netcore.io

Package: myapp
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
//IncludeTypes: 
//ExcludeTypes: 
//InitializeCollections: False
//TreatTypesAsStrings: 
//DefaultImports: java.math.*,java.util.*,java.io.InputStream,net.servicestack.client.*,com.google.gson.annotations.*,com.google.gson.reflect.*
*/

package myapp

import java.math.*
import java.util.*
import java.io.InputStream
import net.servicestack.client.*
import com.google.gson.annotations.*
import com.google.gson.reflect.*


@Route(Path="/hello")
// @Route(Path="/hello/{Name}")
open class Hello : IReturn<HelloResponse>
{
    open var name:String? = null
    companion object { private val responseType = HelloResponse::class.java }
    override fun getResponseType(): Any? = Hello.responseType
}

@Route(Path="/albums", Verbs="GET")
// @Route(Path="/albums/{AlbumId}", Verbs="GET")
open class QueryAlbums : QueryDb<Albums>(), IReturn<QueryResponse<Albums>>, IGet
{
    open var albumId:Long? = null
    companion object { private val responseType = object : TypeToken<QueryResponse<Albums>>(){}.type }
    override fun getResponseType(): Any? = QueryAlbums.responseType
}

@Route(Path="/artists", Verbs="GET")
// @Route(Path="/artists/{ArtistId}", Verbs="GET")
open class QueryArtists : QueryDb<Artists>(), IReturn<QueryResponse<Artists>>, IGet
{
    open var artistId:Long? = null
    open var artistIdBetween:ArrayList<Long>? = null
    open var nameStartsWith:String? = null
    companion object { private val responseType = object : TypeToken<QueryResponse<Artists>>(){}.type }
    override fun getResponseType(): Any? = QueryArtists.responseType
}

@Route(Path="/genres", Verbs="GET")
// @Route(Path="/genres/{GenreId}", Verbs="GET")
open class QueryGenres : QueryDb<Genres>(), IReturn<QueryResponse<Genres>>, IGet
{
    open var genreId:Long? = null
    companion object { private val responseType = object : TypeToken<QueryResponse<Genres>>(){}.type }
    override fun getResponseType(): Any? = QueryGenres.responseType
}

@Route(Path="/mediatypes", Verbs="GET")
// @Route(Path="/mediatypes/{MediaTypeId}", Verbs="GET")
open class QueryMediaTypes : QueryDb<MediaTypes>(), IReturn<QueryResponse<MediaTypes>>, IGet
{
    open var mediaTypeId:Long? = null
    companion object { private val responseType = object : TypeToken<QueryResponse<MediaTypes>>(){}.type }
    override fun getResponseType(): Any? = QueryMediaTypes.responseType
}

@Route(Path="/playlists", Verbs="GET")
// @Route(Path="/playlists/{PlaylistId}", Verbs="GET")
open class QueryPlaylists : QueryDb<Playlists>(), IReturn<QueryResponse<Playlists>>, IGet
{
    open var playlistId:Long? = null
    companion object { private val responseType = object : TypeToken<QueryResponse<Playlists>>(){}.type }
    override fun getResponseType(): Any? = QueryPlaylists.responseType
}

@Route(Path="/tracks", Verbs="GET")
// @Route(Path="/tracks/{TrackId}", Verbs="GET")
open class QueryTracks : QueryDb<Tracks>(), IReturn<QueryResponse<Tracks>>, IGet
{
    open var trackId:Long? = null
    open var nameContains:String? = null
    companion object { private val responseType = object : TypeToken<QueryResponse<Tracks>>(){}.type }
    override fun getResponseType(): Any? = QueryTracks.responseType
}

@Route(Path="/customers", Verbs="GET")
// @Route(Path="/customers/{CustomerId}", Verbs="GET")
open class QueryCustomers : QueryDb<Customers>(), IReturn<QueryResponse<Customers>>, IGet
{
    open var customerId:Long? = null
    companion object { private val responseType = object : TypeToken<QueryResponse<Customers>>(){}.type }
    override fun getResponseType(): Any? = QueryCustomers.responseType
}

@Route(Path="/employees", Verbs="GET")
// @Route(Path="/employees/{EmployeeId}", Verbs="GET")
open class QueryEmployees : QueryDb<Employees>(), IReturn<QueryResponse<Employees>>, IGet
{
    open var employeeId:Long? = null
    companion object { private val responseType = object : TypeToken<QueryResponse<Employees>>(){}.type }
    override fun getResponseType(): Any? = QueryEmployees.responseType
}

@Route(Path="/invoiceitems", Verbs="GET")
// @Route(Path="/invoiceitems/{InvoiceLineId}", Verbs="GET")
open class QueryInvoiceItems : QueryDb<InvoiceItems>(), IReturn<QueryResponse<InvoiceItems>>, IGet
{
    open var invoiceLineId:Long? = null
    companion object { private val responseType = object : TypeToken<QueryResponse<InvoiceItems>>(){}.type }
    override fun getResponseType(): Any? = QueryInvoiceItems.responseType
}

@Route(Path="/invoices", Verbs="GET")
// @Route(Path="/invoices/{InvoiceId}", Verbs="GET")
open class QueryInvoices : QueryDb<Invoices>(), IReturn<QueryResponse<Invoices>>, IGet
{
    open var invoiceId:Long? = null
    companion object { private val responseType = object : TypeToken<QueryResponse<Invoices>>(){}.type }
    override fun getResponseType(): Any? = QueryInvoices.responseType
}

@Route(Path="/albums", Verbs="POST")
open class CreateAlbums : IReturn<IdResponse>, IPost, ICreateDb<Albums>
{
    @Validate(Validator="NotEmpty")
    open var title:String? = null

    @Validate(Validator="GreaterThan(0)")
    open var artistId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = CreateAlbums.responseType
}

@Route(Path="/artists", Verbs="POST")
open class CreateArtists : IReturn<IdResponse>, IPost, ICreateDb<Artists>
{
    open var name:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = CreateArtists.responseType
}

@Route(Path="/genres", Verbs="POST")
open class CreateGenres : IReturn<IdResponse>, IPost, ICreateDb<Genres>
{
    open var name:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = CreateGenres.responseType
}

@Route(Path="/mediatypes", Verbs="POST")
open class CreateMediaTypes : IReturn<IdResponse>, IPost, ICreateDb<MediaTypes>
{
    open var name:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = CreateMediaTypes.responseType
}

@Route(Path="/playlists", Verbs="POST")
open class CreatePlaylists : IReturn<IdResponse>, IPost, ICreateDb<Playlists>
{
    open var name:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = CreatePlaylists.responseType
}

@Route(Path="/tracks", Verbs="POST")
open class CreateTracks : IReturn<IdResponse>, IPost, ICreateDb<Tracks>
{
    open var name:String? = null
    open var albumId:Long? = null
    open var mediaTypeId:Long? = null
    open var genreId:Long? = null
    open var composer:String? = null
    open var milliseconds:Long? = null
    open var bytes:Long? = null
    open var unitPrice:BigDecimal? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = CreateTracks.responseType
}

@Route(Path="/albums/{AlbumId}", Verbs="DELETE")
open class DeleteAlbums : IReturn<IdResponse>, IDelete, IDeleteDb<Albums>
{
    open var albumId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = DeleteAlbums.responseType
}

@Route(Path="/artists/{ArtistId}", Verbs="DELETE")
open class DeleteArtists : IReturn<IdResponse>, IDelete, IDeleteDb<Artists>
{
    open var artistId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = DeleteArtists.responseType
}

@Route(Path="/genres/{GenreId}", Verbs="DELETE")
open class DeleteGenres : IReturn<IdResponse>, IDelete, IDeleteDb<Genres>
{
    open var genreId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = DeleteGenres.responseType
}

@Route(Path="/mediatypes/{MediaTypeId}", Verbs="DELETE")
open class DeleteMediaTypes : IReturn<IdResponse>, IDelete, IDeleteDb<MediaTypes>
{
    open var mediaTypeId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = DeleteMediaTypes.responseType
}

@Route(Path="/playlists/{PlaylistId}", Verbs="DELETE")
open class DeletePlaylists : IReturn<IdResponse>, IDelete, IDeleteDb<Playlists>
{
    open var playlistId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = DeletePlaylists.responseType
}

@Route(Path="/tracks/{TrackId}", Verbs="DELETE")
open class DeleteTracks : IReturn<IdResponse>, IDelete, IDeleteDb<Tracks>
{
    open var trackId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = DeleteTracks.responseType
}

@Route(Path="/albums/{AlbumId}", Verbs="PATCH")
open class PatchAlbums : IReturn<IdResponse>, IPatch, IPatchDb<Albums>
{
    open var albumId:Long? = null
    open var title:String? = null
    open var artistId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = PatchAlbums.responseType
}

@Route(Path="/artists/{ArtistId}", Verbs="PATCH")
open class PatchArtists : IReturn<IdResponse>, IPatch, IPatchDb<Artists>
{
    open var artistId:Long? = null
    open var name:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = PatchArtists.responseType
}

@Route(Path="/genres/{GenreId}", Verbs="PATCH")
open class PatchGenres : IReturn<IdResponse>, IPatch, IPatchDb<Genres>
{
    open var genreId:Long? = null
    open var name:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = PatchGenres.responseType
}

@Route(Path="/mediatypes/{MediaTypeId}", Verbs="PATCH")
open class PatchMediaTypes : IReturn<IdResponse>, IPatch, IPatchDb<MediaTypes>
{
    open var mediaTypeId:Long? = null
    open var name:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = PatchMediaTypes.responseType
}

@Route(Path="/playlists/{PlaylistId}", Verbs="PATCH")
open class PatchPlaylists : IReturn<IdResponse>, IPatch, IPatchDb<Playlists>
{
    open var playlistId:Long? = null
    open var name:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = PatchPlaylists.responseType
}

@Route(Path="/tracks/{TrackId}", Verbs="PATCH")
open class PatchTracks : IReturn<IdResponse>, IPatch, IPatchDb<Tracks>
{
    open var trackId:Long? = null
    open var name:String? = null
    open var albumId:Long? = null
    open var mediaTypeId:Long? = null
    open var genreId:Long? = null
    open var composer:String? = null
    open var milliseconds:Long? = null
    open var bytes:Long? = null
    open var unitPrice:BigDecimal? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = PatchTracks.responseType
}

@Route(Path="/albums/{AlbumId}", Verbs="PUT")
open class UpdateAlbums : IReturn<IdResponse>, IPut, IUpdateDb<Albums>
{
    open var albumId:Long? = null
    open var title:String? = null
    open var artistId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = UpdateAlbums.responseType
}

@Route(Path="/artists/{ArtistId}", Verbs="PUT")
open class UpdateArtists : IReturn<IdResponse>, IPut, IUpdateDb<Artists>
{
    open var artistId:Long? = null
    open var name:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = UpdateArtists.responseType
}

@Route(Path="/genres/{GenreId}", Verbs="PUT")
open class UpdateGenres : IReturn<IdResponse>, IPut, IUpdateDb<Genres>
{
    open var genreId:Long? = null
    open var name:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = UpdateGenres.responseType
}

@Route(Path="/mediatypes/{MediaTypeId}", Verbs="PUT")
open class UpdateMediaTypes : IReturn<IdResponse>, IPut, IUpdateDb<MediaTypes>
{
    open var mediaTypeId:Long? = null
    open var name:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = UpdateMediaTypes.responseType
}

@Route(Path="/playlists/{PlaylistId}", Verbs="PUT")
open class UpdatePlaylists : IReturn<IdResponse>, IPut, IUpdateDb<Playlists>
{
    open var playlistId:Long? = null
    open var name:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = UpdatePlaylists.responseType
}

@Route(Path="/tracks/{TrackId}", Verbs="PUT")
open class UpdateTracks : IReturn<IdResponse>, IPut, IUpdateDb<Tracks>
{
    open var trackId:Long? = null
    open var name:String? = null
    open var albumId:Long? = null
    open var mediaTypeId:Long? = null
    open var genreId:Long? = null
    open var composer:String? = null
    open var milliseconds:Long? = null
    open var bytes:Long? = null
    open var unitPrice:BigDecimal? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = UpdateTracks.responseType
}

@Route(Path="/customers", Verbs="POST")
open class CreateCustomers : IReturn<IdResponse>, IPost, ICreateDb<Customers>
{
    open var firstName:String? = null
    open var lastName:String? = null
    open var company:String? = null
    open var address:String? = null
    open var city:String? = null
    open var state:String? = null
    open var country:String? = null
    open var postalCode:String? = null
    open var phone:String? = null
    open var fax:String? = null
    open var email:String? = null
    open var supportRepId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = CreateCustomers.responseType
}

@Route(Path="/employees", Verbs="POST")
open class CreateEmployees : IReturn<IdResponse>, IPost, ICreateDb<Employees>
{
    open var lastName:String? = null
    open var firstName:String? = null
    open var title:String? = null
    open var reportsTo:Long? = null
    open var birthDate:Date? = null
    open var hireDate:Date? = null
    open var address:String? = null
    open var city:String? = null
    open var state:String? = null
    open var country:String? = null
    open var postalCode:String? = null
    open var phone:String? = null
    open var fax:String? = null
    open var email:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = CreateEmployees.responseType
}

@Route(Path="/invoiceitems", Verbs="POST")
open class CreateInvoiceItems : IReturn<IdResponse>, IPost, ICreateDb<InvoiceItems>
{
    open var invoiceId:Long? = null
    open var trackId:Long? = null
    open var unitPrice:BigDecimal? = null
    open var quantity:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = CreateInvoiceItems.responseType
}

@Route(Path="/invoices", Verbs="POST")
open class CreateInvoices : IReturn<IdResponse>, IPost, ICreateDb<Invoices>
{
    open var customerId:Long? = null
    open var invoiceDate:Date? = null
    open var billingAddress:String? = null
    open var billingCity:String? = null
    open var billingState:String? = null
    open var billingCountry:String? = null
    open var billingPostalCode:String? = null
    open var total:BigDecimal? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = CreateInvoices.responseType
}

@Route(Path="/customers/{CustomerId}", Verbs="DELETE")
open class DeleteCustomers : IReturn<IdResponse>, IDelete, IDeleteDb<Customers>
{
    open var customerId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = DeleteCustomers.responseType
}

@Route(Path="/employees/{EmployeeId}", Verbs="DELETE")
open class DeleteEmployees : IReturn<IdResponse>, IDelete, IDeleteDb<Employees>
{
    open var employeeId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = DeleteEmployees.responseType
}

@Route(Path="/invoiceitems/{InvoiceLineId}", Verbs="DELETE")
open class DeleteInvoiceItems : IReturn<IdResponse>, IDelete, IDeleteDb<InvoiceItems>
{
    open var invoiceLineId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = DeleteInvoiceItems.responseType
}

@Route(Path="/invoices/{InvoiceId}", Verbs="DELETE")
open class DeleteInvoices : IReturn<IdResponse>, IDelete, IDeleteDb<Invoices>
{
    open var invoiceId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = DeleteInvoices.responseType
}

@Route(Path="/customers/{CustomerId}", Verbs="PATCH")
open class PatchCustomers : IReturn<IdResponse>, IPatch, IPatchDb<Customers>
{
    open var customerId:Long? = null
    open var firstName:String? = null
    open var lastName:String? = null
    open var company:String? = null
    open var address:String? = null
    open var city:String? = null
    open var state:String? = null
    open var country:String? = null
    open var postalCode:String? = null
    open var phone:String? = null
    open var fax:String? = null
    open var email:String? = null
    open var supportRepId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = PatchCustomers.responseType
}

@Route(Path="/employees/{EmployeeId}", Verbs="PATCH")
open class PatchEmployees : IReturn<IdResponse>, IPatch, IPatchDb<Employees>
{
    open var employeeId:Long? = null
    open var lastName:String? = null
    open var firstName:String? = null
    open var title:String? = null
    open var reportsTo:Long? = null
    open var birthDate:Date? = null
    open var hireDate:Date? = null
    open var address:String? = null
    open var city:String? = null
    open var state:String? = null
    open var country:String? = null
    open var postalCode:String? = null
    open var phone:String? = null
    open var fax:String? = null
    open var email:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = PatchEmployees.responseType
}

@Route(Path="/invoiceitems/{InvoiceLineId}", Verbs="PATCH")
open class PatchInvoiceItems : IReturn<IdResponse>, IPatch, IPatchDb<InvoiceItems>
{
    open var invoiceLineId:Long? = null
    open var invoiceId:Long? = null
    open var trackId:Long? = null
    open var unitPrice:BigDecimal? = null
    open var quantity:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = PatchInvoiceItems.responseType
}

@Route(Path="/invoices/{InvoiceId}", Verbs="PATCH")
open class PatchInvoices : IReturn<IdResponse>, IPatch, IPatchDb<Invoices>
{
    open var invoiceId:Long? = null
    open var customerId:Long? = null
    open var invoiceDate:Date? = null
    open var billingAddress:String? = null
    open var billingCity:String? = null
    open var billingState:String? = null
    open var billingCountry:String? = null
    open var billingPostalCode:String? = null
    open var total:BigDecimal? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = PatchInvoices.responseType
}

@Route(Path="/customers/{CustomerId}", Verbs="PUT")
open class UpdateCustomers : IReturn<IdResponse>, IPut, IUpdateDb<Customers>
{
    open var customerId:Long? = null
    open var firstName:String? = null
    open var lastName:String? = null
    open var company:String? = null
    open var address:String? = null
    open var city:String? = null
    open var state:String? = null
    open var country:String? = null
    open var postalCode:String? = null
    open var phone:String? = null
    open var fax:String? = null
    open var email:String? = null
    open var supportRepId:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = UpdateCustomers.responseType
}

@Route(Path="/employees/{EmployeeId}", Verbs="PUT")
open class UpdateEmployees : IReturn<IdResponse>, IPut, IUpdateDb<Employees>
{
    open var employeeId:Long? = null
    open var lastName:String? = null
    open var firstName:String? = null
    open var title:String? = null
    open var reportsTo:Long? = null
    open var birthDate:Date? = null
    open var hireDate:Date? = null
    open var address:String? = null
    open var city:String? = null
    open var state:String? = null
    open var country:String? = null
    open var postalCode:String? = null
    open var phone:String? = null
    open var fax:String? = null
    open var email:String? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = UpdateEmployees.responseType
}

@Route(Path="/invoiceitems/{InvoiceLineId}", Verbs="PUT")
open class UpdateInvoiceItems : IReturn<IdResponse>, IPut, IUpdateDb<InvoiceItems>
{
    open var invoiceLineId:Long? = null
    open var invoiceId:Long? = null
    open var trackId:Long? = null
    open var unitPrice:BigDecimal? = null
    open var quantity:Long? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = UpdateInvoiceItems.responseType
}

@Route(Path="/invoices/{InvoiceId}", Verbs="PUT")
open class UpdateInvoices : IReturn<IdResponse>, IPut, IUpdateDb<Invoices>
{
    open var invoiceId:Long? = null
    open var customerId:Long? = null
    open var invoiceDate:Date? = null
    open var billingAddress:String? = null
    open var billingCity:String? = null
    open var billingState:String? = null
    open var billingCountry:String? = null
    open var billingPostalCode:String? = null
    open var total:BigDecimal? = null
    companion object { private val responseType = IdResponse::class.java }
    override fun getResponseType(): Any? = UpdateInvoices.responseType
}

open class HelloResponse
{
    open var result:String? = null
}

@DataContract
open class QueryResponse<T>
{
    @DataMember(Order=1)
    open var offset:Int? = null

    @DataMember(Order=2)
    open var total:Int? = null

    @DataMember(Order=3)
    open var results:ArrayList<Albums>? = null

    @DataMember(Order=4)
    open var meta:HashMap<String,String>? = null

    @DataMember(Order=5)
    open var responseStatus:ResponseStatus? = null
}

@DataContract
open class IdResponse
{
    @DataMember(Order=1)
    open var id:String? = null

    @DataMember(Order=2)
    open var responseStatus:ResponseStatus? = null
}

open class QueryDb<T> : QueryBase()
{
}

open class Albums
{
    open var albumId:Long? = null
    @Required()
    open var title:String? = null

    open var artistId:Long? = null
}

open class Artists
{
    open var artistId:Long? = null
    open var name:String? = null
}

open class Genres
{
    open var genreId:Long? = null
    open var name:String? = null
}

open class MediaTypes
{
    open var mediaTypeId:Long? = null
    open var name:String? = null
}

open class Playlists
{
    open var playlistId:Long? = null
    open var name:String? = null
}

open class Tracks
{
    open var trackId:Long? = null
    @Required()
    open var name:String? = null

    @References(Type=Albums::class)
    open var albumId:Long? = null

    @References(Type=MediaTypes::class)
    open var mediaTypeId:Long? = null

    @References(Type=Genres::class)
    open var genreId:Long? = null

    open var composer:String? = null
    open var milliseconds:Long? = null
    open var bytes:Long? = null
    open var unitPrice:BigDecimal? = null
    open var album:Albums? = null
    open var mediaType:MediaTypes? = null
    open var genre:Genres? = null
}

open class Customers
{
    open var customerId:Long? = null
    @Computed()
    open var displayName:String? = null

    @Required()
    open var firstName:String? = null

    @Required()
    open var lastName:String? = null

    open var supportRepId:Long? = null
    open var company:String? = null
    open var address:String? = null
    open var city:String? = null
    open var state:String? = null
    open var country:String? = null
    open var postalCode:String? = null
    open var phone:String? = null
    open var fax:String? = null
    @Required()
    open var email:String? = null
}

open class Employees
{
    open var employeeId:Long? = null
    @Required()
    open var lastName:String? = null

    @Required()
    open var firstName:String? = null

    open var title:String? = null
    open var reportsTo:Long? = null
    open var birthDate:Date? = null
    open var hireDate:Date? = null
    open var address:String? = null
    open var city:String? = null
    open var state:String? = null
    open var country:String? = null
    open var postalCode:String? = null
    open var phone:String? = null
    open var fax:String? = null
    open var email:String? = null
}

open class InvoiceItems
{
    open var invoiceLineId:Long? = null
    open var invoiceId:Long? = null
    open var trackId:Long? = null
    open var unitPrice:BigDecimal? = null
    open var quantity:Long? = null
}

open class Invoices
{
    open var invoiceId:Long? = null
    open var customerId:Long? = null
    open var invoiceDate:Date? = null
    open var total:BigDecimal? = null
    open var billingAddress:String? = null
    open var billingCity:String? = null
    open var billingState:String? = null
    open var billingCountry:String? = null
    open var billingPostalCode:String? = null
}

@DataContract
open class QueryBase
{
    @DataMember(Order=1)
    open var skip:Int? = null

    @DataMember(Order=2)
    open var take:Int? = null

    @DataMember(Order=3)
    open var orderBy:String? = null

    @DataMember(Order=4)
    open var orderByDesc:String? = null

    @DataMember(Order=5)
    open var include:String? = null

    @DataMember(Order=6)
    open var fields:String? = null

    @DataMember(Order=7)
    open var meta:HashMap<String,String>? = null
}
