/* Options: Date: 2026-06-12 23:08:35 Version: 10.05 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://api.bookmore.com //GlobalNamespace: //AddServiceStackTypes: True //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True IncludeTypes: RecordAiChatUsage.* //ExcludeTypes: //DefaultImports: package:servicestack/servicestack.dart */ import 'package:servicestack/servicestack.dart'; abstract class ICompany { String? CompanyId; } class AiChatUsageResponse implements IConvertible { /** * The company the usage applies to. */ // @ApiMember(Description="The company the usage applies to.") String CompanyId = ""; /** * Tokens consumed within the current rolling window. */ // @ApiMember(Description="Tokens consumed within the current rolling window.") int TokensUsed = 0; /** * The company's token limit for the window. */ // @ApiMember(Description="The company's token limit for the window.") int TokenLimit = 0; /** * Tokens remaining before the limit is reached (never negative). */ // @ApiMember(Description="Tokens remaining before the limit is reached (never negative).") int TokensRemaining = 0; /** * True while the company is still below its token limit. */ // @ApiMember(Description="True while the company is still below its token limit.") bool IsWithinBudget; /** * Length of the rolling usage window, in days. */ // @ApiMember(Description="Length of the rolling usage window, in days.") int WindowDays = 0; ResponseStatus ResponseStatus; AiChatUsageResponse({this.CompanyId,this.TokensUsed,this.TokenLimit,this.TokensRemaining,this.IsWithinBudget,this.WindowDays,this.ResponseStatus}); AiChatUsageResponse.fromJson(Map json) { fromMap(json); } fromMap(Map json) { CompanyId = json['CompanyId']; TokensUsed = json['TokensUsed']; TokenLimit = json['TokenLimit']; TokensRemaining = json['TokensRemaining']; IsWithinBudget = json['IsWithinBudget']; WindowDays = json['WindowDays']; ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!); return this; } Map toJson() => { 'CompanyId': CompanyId, 'TokensUsed': TokensUsed, 'TokenLimit': TokenLimit, 'TokensRemaining': TokensRemaining, 'IsWithinBudget': IsWithinBudget, 'WindowDays': WindowDays, 'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!) }; getTypeName() => "AiChatUsageResponse"; TypeContext? context = _ctx; } // @Route("/assistant/ai-chat/usage", "POST") // @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401) // @ValidateRequest(Validator="IsAuthenticated") class RecordAiChatUsage implements IReturn, ICompany, IConvertible, IPost { /** * The company id. Defaults to the logged-in user's company when omitted. */ // @ApiMember(DataType="string", Description="The company id. Defaults to the logged-in user's company when omitted.", ParameterType="query") String? CompanyId; /** * Number of tokens consumed by the chat turn (input + output). */ // @ApiMember(DataType="integer", Description="Number of tokens consumed by the chat turn (input + output).", IsRequired=true) int TokensUsed = 0; RecordAiChatUsage({this.CompanyId,this.TokensUsed}); RecordAiChatUsage.fromJson(Map json) { fromMap(json); } fromMap(Map json) { CompanyId = json['CompanyId']; TokensUsed = json['TokensUsed']; return this; } Map toJson() => { 'CompanyId': CompanyId, 'TokensUsed': TokensUsed }; createResponse() => AiChatUsageResponse(); getResponseTypeName() => "AiChatUsageResponse"; getTypeName() => "RecordAiChatUsage"; TypeContext? context = _ctx; } TypeContext _ctx = TypeContext(library: 'api.bookmore.com', types: { 'ICompany': TypeInfo(TypeOf.Interface), 'AiChatUsageResponse': TypeInfo(TypeOf.Class, create:() => AiChatUsageResponse()), 'RecordAiChatUsage': TypeInfo(TypeOf.Class, create:() => RecordAiChatUsage()), });