' Options:
'Date: 2025-04-07 00:46:49
'Version: 8.52
'Tip: To override a DTO option, remove "''" prefix before updating
'BaseUrl: https://taxfiling.pwc.de
'
'''GlobalNamespace: 
'''MakePartial: True
'''MakeVirtual: True
'''MakeDataContractsExtensible: False
'''AddReturnMarker: True
'''AddDescriptionAsComments: True
'''AddDataContractAttributes: False
'''AddIndexesToDataMembers: False
'''AddGeneratedCodeAttributes: False
'''AddResponseStatus: False
'''AddImplicitVersion: 
'''InitializeCollections: False
'''ExportValueTypes: False
'IncludeTypes: RetrieveAllProductsAsync.*
'''ExcludeTypes: 
'''AddNamespaces: 
'''AddDefaultXmlNamespace: http://schemas.servicestack.net/types

Imports System
Imports System.IO
Imports System.Collections
Imports System.Collections.Generic
Imports System.Runtime.Serialization
Imports ServiceStack
Imports ServiceStack.DataAnnotations
Imports System.Net
Imports PwC.Metering.Core.Services.Contracts.Helpers
Imports PwC.Metering.Core.Services.Contracts.Requests
Imports PwC.Metering.Core.Domain.Concretes.Models
Imports PwC.Metering.Core.Domain.Concretes.Interfaces
Imports PwC.Metering.Core.Services.Contracts.Responses

Namespace Global

    Namespace PwC.Metering.Core.Domain.Concretes.Interfaces

        '''<Summary>
        ''' Specifies that a data type should have a 'Name' property.
        '''</Summary>
        Public Interface IHasName
            '''<Summary>
            '''The 'Name' property.
            '''</Summary>
            Property Name As String
        End Interface
    End Namespace

    Namespace PwC.Metering.Core.Domain.Concretes.Models

        '''<Summary>
        '''Represents a product.
        '''</Summary>
        <Api(Description:="Represents a product.")>
        Public Partial Class Product
            Implements IHasName
            '''<Summary>
            '''The unique identifier of the product.
            '''</Summary>
            <ApiMember(Description:="The unique identifier of the product.", IsRequired:=true)>
            Public Overridable Property Id As Integer

            '''<Summary>
            '''The position of this instance in a collection of 'Product' instances
            '''</Summary>
            <ApiMember(Description:="The position of this instance in a collection of 'Product' instances", IsRequired:=true)>
            Public Overridable Property Index As Integer

            '''<Summary>
            '''The name of the product.
            '''</Summary>
            <ApiMember(Description:="The name of the product.", IsRequired:=true)>
            <Validate(Validator:="NotEmpty")>
            Public Overridable Property Name As String Implements IHasName.Name

            '''<Summary>
            '''The version of the product.
            '''</Summary>
            <ApiMember(Description:="The version of the product.", IsRequired:=true)>
            <Validate(Validator:="NotEmpty")>
            Public Overridable Property Version As String

            '''<Summary>
            '''The version of the product.
            '''</Summary>
            <ApiMember(Description:="The version of the product.")>
            Public Overridable Property Description As String

            '''<Summary>
            '''Tags associated with the product.
            '''</Summary>
            <ApiMember(Description:="Tags associated with the product.")>
            Public Overridable Property Tags As List(Of String) = New List(Of String)
        End Class
    End Namespace

    Namespace PwC.Metering.Core.Services.Contracts.Helpers

        Public Interface IPaginate
            Property Skip As Integer?
            Property Take As Integer?
        End Interface

        '''<Summary>
        '''The number of query results to skip.
        '''</Summary>
        <Api(Description:="The number of query results to skip.")>
        Public Partial Class PaginationBase
            Implements IPaginate
            '''<Summary>
            '''The number of query results to skip.
            '''</Summary>
            <ApiMember(Description:="The number of query results to skip.")>
            Public Overridable Property Skip As Integer? Implements IPaginate.Skip

            '''<Summary>
            '''The number of query results to include.
            '''</Summary>
            <ApiMember(Description:="The number of query results to include.")>
            Public Overridable Property Take As Integer? Implements IPaginate.Take
        End Class
    End Namespace

    Namespace PwC.Metering.Core.Services.Contracts.Requests

        '''<Summary>
        '''Represents a service request to retrieve all products in an asynchronous operation.
        '''</Summary>
        <Route("/async/products", "GET")>
        <Api(Description:="Represents a service request to retrieve all products in an asynchronous operation.")>
        Public Partial Class RetrieveAllProductsAsync
            Inherits RetrieveAllProductsBase
            Implements IReturn(Of ProductQueryResponse)
        End Class

        '''<Summary>
        '''Specifies a service to retrieve all products.
        '''</Summary>
        <Api(Description:="Specifies a service to retrieve all products.")>
        Public Partial Class RetrieveAllProductsBase
            Inherits PaginationBase
            Implements IGet
            '''<Summary>
            '''Should the related orders of the account be included in the retrieved products?
            '''</Summary>
            <ApiMember(Description:="Should the related orders of the account be included in the retrieved products?")>
            Public Overridable Property IncludeOrders As Boolean?

            '''<Summary>
            '''Specifies the number of orders to skip per product. Applicable only when 'IncludeOrders' is true. 
            '''</Summary>
            <ApiMember(Description:="Specifies the number of orders to skip per product. Applicable only when 'IncludeOrders' is true. ")>
            Public Overridable Property SkipOrders As Integer?

            '''<Summary>
            '''Specifies the number of orders to include per product. Applicable only when 'IncludeOrders' is true. 
            '''</Summary>
            <ApiMember(Description:="Specifies the number of orders to include per product. Applicable only when 'IncludeOrders' is true. ")>
            Public Overridable Property TakeOrders As Integer?
        End Class
    End Namespace

    Namespace PwC.Metering.Core.Services.Contracts.Responses

        '''<Summary>
        '''Represents a query response that contains a structured error information and encapsulates products.
        '''</Summary>
        <Api(Description:="Represents a query response that contains a structured error information and encapsulates products.")>
        Public Partial Class ProductQueryResponse
            Inherits QueryResponse(Of Product)
            '''<Summary>
            '''The dictionary of orders associated with each found product.
            '''</Summary>
            <ApiMember(Description:="The dictionary of orders associated with each found product.")>
            Public Overridable Property OrdersMap As Dictionary(Of Integer, List(Of Order)) = New Dictionary(Of Integer, List(Of Order))
        End Class
    End Namespace
End Namespace