/* Options:
Date: 2025-04-04 15:06:23
Version: 8.53
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://northwind.netcore.io

//GlobalNamespace: 
//MakePropertiesOptional: False
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
IncludeTypes: GetCustomerDetails.*
//ExcludeTypes: 
//DefaultImports: 
*/


export interface IReturn<T>
{
    createResponse(): T;
}

export interface IGet
{
}

// @DataContract
export class Customer
{
    // @DataMember
    public id: string;

    // @DataMember
    public companyName: string;

    // @DataMember
    public contactName: string;

    // @DataMember
    public contactTitle: string;

    // @DataMember
    public address: string;

    // @DataMember
    public city: string;

    // @DataMember
    public region: string;

    // @DataMember
    public postalCode: string;

    // @DataMember
    public country: string;

    // @DataMember
    public phone: string;

    // @DataMember
    public fax: string;

    public constructor(init?: Partial<Customer>) { (Object as any).assign(this, init); }
}

// @DataContract
export class Order
{
    // @DataMember
    public id: number;

    // @DataMember
    public customerId: string;

    // @DataMember
    public employeeId: number;

    // @DataMember
    public orderDate?: string;

    // @DataMember
    public requiredDate?: string;

    // @DataMember
    public shippedDate?: string;

    // @DataMember
    public shipVia?: number;

    // @DataMember
    public freight: number;

    // @DataMember
    public shipName: string;

    // @DataMember
    public shipAddress: string;

    // @DataMember
    public shipCity: string;

    // @DataMember
    public shipRegion: string;

    // @DataMember
    public shipPostalCode: string;

    // @DataMember
    public shipCountry: string;

    public constructor(init?: Partial<Order>) { (Object as any).assign(this, init); }
}

// @DataContract
export class ResponseError
{
    // @DataMember(Order=1)
    public errorCode: string;

    // @DataMember(Order=2)
    public fieldName: string;

    // @DataMember(Order=3)
    public message: string;

    // @DataMember(Order=4)
    public meta: { [index:string]: string; };

    public constructor(init?: Partial<ResponseError>) { (Object as any).assign(this, init); }
}

// @DataContract
export class ResponseStatus
{
    // @DataMember(Order=1)
    public errorCode: string;

    // @DataMember(Order=2)
    public message: string;

    // @DataMember(Order=3)
    public stackTrace: string;

    // @DataMember(Order=4)
    public errors: ResponseError[];

    // @DataMember(Order=5)
    public meta: { [index:string]: string; };

    public constructor(init?: Partial<ResponseStatus>) { (Object as any).assign(this, init); }
}

// @DataContract
export class OrderDetail
{
    // @DataMember
    public orderId: number;

    // @DataMember
    public productId: number;

    // @DataMember
    public unitPrice: number;

    // @DataMember
    public quantity: number;

    // @DataMember
    public discount: number;

    public constructor(init?: Partial<OrderDetail>) { (Object as any).assign(this, init); }
}

// @DataContract
export class CustomerOrder
{
    // @DataMember
    public order: Order;

    // @DataMember
    public orderDetails: OrderDetail[] = [];

    public constructor(init?: Partial<CustomerOrder>) { (Object as any).assign(this, init); }
}

// @DataContract
export class CustomerDetailsResponse
{
    // @DataMember
    public customer: Customer;

    // @DataMember
    public orders: CustomerOrder[] = [];

    // @DataMember
    public responseStatus: ResponseStatus;

    public constructor(init?: Partial<CustomerDetailsResponse>) { (Object as any).assign(this, init); }
}

// @Route("/customers/{Id}")
export class GetCustomerDetails implements IReturn<CustomerDetailsResponse>, IGet
{
    public id: string;

    public constructor(init?: Partial<GetCustomerDetails>) { (Object as any).assign(this, init); }
    public getTypeName() { return 'GetCustomerDetails'; }
    public getMethod() { return 'GET'; }
    public createResponse() { return new CustomerDetailsResponse(); }
}