/* Options:
Date: 2025-11-04 15:43:55
Version: 8.52
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://taxfiling.staging.pwc.de
//GlobalNamespace: 
//MakePartial: True
//MakeVirtual: True
//MakeInternal: False
//MakeDataContractsExtensible: False
//AddNullableAnnotations: 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
*/
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using ServiceStack;
using ServiceStack.DataAnnotations;
using System.Net;
using PwC.Metering.Core.Services.Contracts.Helpers;
using PwC.Metering.Core.Services.Contracts.Requests;
using PwC.Metering.Core.Domain.Concretes.Models;
using PwC.Metering.Core.Domain.Concretes.Interfaces;
using PwC.Metering.Core.Services.Contracts.Responses;
namespace PwC.Metering.Core.Domain.Concretes.Interfaces
{
    ///
    /// Specifies that a data type should have a 'Name' property.
    ///
    public partial interface IHasName
    {
        ///
        ///The 'Name' property.
        ///
        string Name { get; set; }
    }
}
namespace PwC.Metering.Core.Domain.Concretes.Models
{
    ///
    ///Represents a product.
    ///
    [Api(Description="Represents a product.")]
    public partial class Product
        : IHasName
    {
        ///
        ///The unique identifier of the product.
        ///
        [ApiMember(Description="The unique identifier of the product.", IsRequired=true)]
        public virtual int Id { get; set; }
        ///
        ///The position of this instance in a collection of 'Product' instances
        ///
        [ApiMember(Description="The position of this instance in a collection of 'Product' instances", IsRequired=true)]
        public virtual int Index { get; set; }
        ///
        ///The name of the product.
        ///
        [ApiMember(Description="The name of the product.", IsRequired=true)]
        [Validate("NotEmpty")]
        public virtual string Name { get; set; }
        ///
        ///The version of the product.
        ///
        [ApiMember(Description="The version of the product.", IsRequired=true)]
        [Validate("NotEmpty")]
        public virtual string Version { get; set; }
        ///
        ///The version of the product.
        ///
        [ApiMember(Description="The version of the product.")]
        public virtual string Description { get; set; }
        ///
        ///Tags associated with the product.
        ///
        [ApiMember(Description="Tags associated with the product.")]
        public virtual List Tags { get; set; } = [];
    }
}
namespace PwC.Metering.Core.Services.Contracts.Helpers
{
    public partial interface IPaginate
    {
        int? Skip { get; set; }
        int? Take { get; set; }
    }
    ///
    ///The number of query results to skip.
    ///
    [Api(Description="The number of query results to skip.")]
    public partial class PaginationBase
        : IPaginate
    {
        ///
        ///The number of query results to skip.
        ///
        [ApiMember(Description="The number of query results to skip.")]
        public virtual int? Skip { get; set; }
        ///
        ///The number of query results to include.
        ///
        [ApiMember(Description="The number of query results to include.")]
        public virtual int? Take { get; set; }
    }
}
namespace PwC.Metering.Core.Services.Contracts.Requests
{
    ///
    ///Represents a service request to retrieve all products in an asynchronous operation.
    ///
    [Route("/async/products", "GET")]
    [Api(Description="Represents a service request to retrieve all products in an asynchronous operation.")]
    public partial class RetrieveAllProductsAsync
        : RetrieveAllProductsBase, IReturn
    {
    }
    ///
    ///Specifies a service to retrieve all products.
    ///
    [Api(Description="Specifies a service to retrieve all products.")]
    public partial class RetrieveAllProductsBase
        : PaginationBase, IGet
    {
        ///
        ///Should the related orders of the account be included in the retrieved products?
        ///
        [ApiMember(Description="Should the related orders of the account be included in the retrieved products?")]
        public virtual bool? IncludeOrders { get; set; }
        ///
        ///Specifies the number of orders to skip per product. Applicable only when 'IncludeOrders' is true. 
        ///
        [ApiMember(Description="Specifies the number of orders to skip per product. Applicable only when 'IncludeOrders' is true. ")]
        public virtual int? SkipOrders { get; set; }
        ///
        ///Specifies the number of orders to include per product. Applicable only when 'IncludeOrders' is true. 
        ///
        [ApiMember(Description="Specifies the number of orders to include per product. Applicable only when 'IncludeOrders' is true. ")]
        public virtual int? TakeOrders { get; set; }
    }
}
namespace PwC.Metering.Core.Services.Contracts.Responses
{
    ///
    ///Represents a query response that contains a structured error information and encapsulates products.
    ///
    [Api(Description="Represents a query response that contains a structured error information and encapsulates products.")]
    public partial class ProductQueryResponse
        : QueryResponse
    {
        ///
        ///The dictionary of orders associated with each found product.
        ///
        [ApiMember(Description="The dictionary of orders associated with each found product.")]
        public virtual Dictionary> OrdersMap { get; set; } = new();
    }
}