BokaMera.API.Host

<back to all web services

UpdateCustomer

Requires Authentication
The following routes are available for this service:
PUT/customers/{Id}Update an existing customerUpdates an existing user if the current logged in user is allowed to update the specified customer. Users are only allowed to update their own info, administrators are allowed to update customer beloning to their company (if no account is created, email is added, if so the customer can only update it's own info).
import 'package:servicestack/servicestack.dart';

class CustomFieldValueResponse implements IConvertible
{
    String? Value;

    CustomFieldValueResponse({this.Value});
    CustomFieldValueResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Value': Value
    };

    getTypeName() => "CustomFieldValueResponse";
    TypeContext? context = _ctx;
}

class CustomFieldConfigData implements IConvertible
{
    /**
    * Custom field id
    */
    // @ApiMember(Description="Custom field id")
    int? Id;

    /**
    * Configuration name. Example: 'Number of persons'.
    */
    // @ApiMember(Description="Configuration name. Example: 'Number of persons'.")
    String? Name;

    /**
    * Custom field description. Example: 'For how many persons is this booking?'
    */
    // @ApiMember(Description="Custom field description. Example: 'For how many persons is this booking?'")
    String? Description;

    /**
    * Field width. Example: 20 for 20px
    */
    // @ApiMember(Description="Field width. Example: 20 for 20px")
    int? Width;

    /**
    * Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
    */
    // @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
    String? DataType;

    /**
    * Default value of the field. Example: '3'
    */
    // @ApiMember(Description="Default value of the field. Example: '3'")
    String? DefaultValue;

    /**
    * Determines if the field is required to have a value or not
    */
    // @ApiMember(Description="Determines if the field is required to have a value or not")
    bool? IsMandatory;

    /**
    * Error message shown to the user if the field data is required but not entered
    */
    // @ApiMember(Description="Error message shown to the user if the field data is required but not entered")
    String? MandatoryErrorMessage;

    /**
    * Max lenght of the field
    */
    // @ApiMember(Description="Max lenght of the field")
    int? MaxLength;

    /**
    * If the field should have multiple lines
    */
    // @ApiMember(Description="If the field should have multiple lines")
    bool? MultipleLineText;

    /**
    * Regular expression used for validation of the field
    */
    // @ApiMember(Description="Regular expression used for validation of the field")
    String? RegEx;

    /**
    * Error message shown if the regular expression validation failed
    */
    // @ApiMember(Description="Error message shown if the regular expression validation failed")
    String? RegExErrorMessage;

    /**
    * The values to select from if Datatype is DropDown for this custom field
    */
    // @ApiMember(Description="The values to select from if Datatype is DropDown for this custom field")
    List<CustomFieldValueResponse>? Values;

    CustomFieldConfigData({this.Id,this.Name,this.Description,this.Width,this.DataType,this.DefaultValue,this.IsMandatory,this.MandatoryErrorMessage,this.MaxLength,this.MultipleLineText,this.RegEx,this.RegExErrorMessage,this.Values});
    CustomFieldConfigData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        Description = json['Description'];
        Width = json['Width'];
        DataType = json['DataType'];
        DefaultValue = json['DefaultValue'];
        IsMandatory = json['IsMandatory'];
        MandatoryErrorMessage = json['MandatoryErrorMessage'];
        MaxLength = json['MaxLength'];
        MultipleLineText = json['MultipleLineText'];
        RegEx = json['RegEx'];
        RegExErrorMessage = json['RegExErrorMessage'];
        Values = JsonConverters.fromJson(json['Values'],'List<CustomFieldValueResponse>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Description': Description,
        'Width': Width,
        'DataType': DataType,
        'DefaultValue': DefaultValue,
        'IsMandatory': IsMandatory,
        'MandatoryErrorMessage': MandatoryErrorMessage,
        'MaxLength': MaxLength,
        'MultipleLineText': MultipleLineText,
        'RegEx': RegEx,
        'RegExErrorMessage': RegExErrorMessage,
        'Values': JsonConverters.toJson(Values,'List<CustomFieldValueResponse>',context!)
    };

    getTypeName() => "CustomFieldConfigData";
    TypeContext? context = _ctx;
}

class CustomFieldDataResponse implements IConvertible
{
    int? Id;
    String? Column;
    String? Name;
    String? Description;
    String? Value;
    /**
    * Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
    */
    // @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
    String? DataType;

    CustomFieldDataResponse({this.Id,this.Column,this.Name,this.Description,this.Value,this.DataType});
    CustomFieldDataResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Column = json['Column'];
        Name = json['Name'];
        Description = json['Description'];
        Value = json['Value'];
        DataType = json['DataType'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Column': Column,
        'Name': Name,
        'Description': Description,
        'Value': Value,
        'DataType': DataType
    };

    getTypeName() => "CustomFieldDataResponse";
    TypeContext? context = _ctx;
}

class CustomerCommentsResponse implements IConvertible
{
    int? Id;
    String? CustomerId;
    String? Comments;
    DateTime? Updated;
    DateTime? Created;
    Uri? ImageUrl;

    CustomerCommentsResponse({this.Id,this.CustomerId,this.Comments,this.Updated,this.Created,this.ImageUrl});
    CustomerCommentsResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        CustomerId = json['CustomerId'];
        Comments = json['Comments'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'CustomerId': CustomerId,
        'Comments': Comments,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!)
    };

    getTypeName() => "CustomerCommentsResponse";
    TypeContext? context = _ctx;
}

class BaseModel implements IConvertible
{
    BaseModel();
    BaseModel.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "BaseModel";
    TypeContext? context = _ctx;
}

class UserAccessKeys extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    // @Required()
    int? AccessKeyTypeId;

    // @Required()
    String? Value;

    // @Required()
    String? CustomerId;

    String? Description;
    // @Required()
    String? Id;

    UserAccessKeys({this.CompanyId,this.AccessKeyTypeId,this.Value,this.CustomerId,this.Description,this.Id});
    UserAccessKeys.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        AccessKeyTypeId = json['AccessKeyTypeId'];
        Value = json['Value'];
        CustomerId = json['CustomerId'];
        Description = json['Description'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'AccessKeyTypeId': AccessKeyTypeId,
        'Value': Value,
        'CustomerId': CustomerId,
        'Description': Description,
        'Id': Id
    });

    getTypeName() => "UserAccessKeys";
    TypeContext? context = _ctx;
}

class InvoiceAddress implements IConvertible
{
    String? CorporateIdentityNumber;
    String? InvoiceAddress1;
    String? InvoiceAddress2;
    String? InvoiceCity;
    String? InvoicePostalCode;
    String? InvoiceCountryCode;

    InvoiceAddress({this.CorporateIdentityNumber,this.InvoiceAddress1,this.InvoiceAddress2,this.InvoiceCity,this.InvoicePostalCode,this.InvoiceCountryCode});
    InvoiceAddress.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CorporateIdentityNumber = json['CorporateIdentityNumber'];
        InvoiceAddress1 = json['InvoiceAddress1'];
        InvoiceAddress2 = json['InvoiceAddress2'];
        InvoiceCity = json['InvoiceCity'];
        InvoicePostalCode = json['InvoicePostalCode'];
        InvoiceCountryCode = json['InvoiceCountryCode'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CorporateIdentityNumber': CorporateIdentityNumber,
        'InvoiceAddress1': InvoiceAddress1,
        'InvoiceAddress2': InvoiceAddress2,
        'InvoiceCity': InvoiceCity,
        'InvoicePostalCode': InvoicePostalCode,
        'InvoiceCountryCode': InvoiceCountryCode
    };

    getTypeName() => "InvoiceAddress";
    TypeContext? context = _ctx;
}

class CustomerQueryResponse implements IConvertible
{
    String? Id;
    String? Firstname;
    String? Lastname;
    String? Email;
    String? Phone;
    String? ImageUrl;
    List<CustomFieldConfigData>? CustomFields;
    List<CustomFieldDataResponse>? CustomFieldValues;
    List<CustomerCommentsResponse>? Comments;
    List<UserAccessKeys>? AccessKeys;
    DateTime? Updated;
    DateTime? Created;
    dynamic? ResponseStatus;
    bool? SubscribedToNewsletter;
    InvoiceAddress? InvoiceAddress;

    CustomerQueryResponse({this.Id,this.Firstname,this.Lastname,this.Email,this.Phone,this.ImageUrl,this.CustomFields,this.CustomFieldValues,this.Comments,this.AccessKeys,this.Updated,this.Created,this.ResponseStatus,this.SubscribedToNewsletter,this.InvoiceAddress});
    CustomerQueryResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Firstname = json['Firstname'];
        Lastname = json['Lastname'];
        Email = json['Email'];
        Phone = json['Phone'];
        ImageUrl = json['ImageUrl'];
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<CustomFieldConfigData>',context!);
        CustomFieldValues = JsonConverters.fromJson(json['CustomFieldValues'],'List<CustomFieldDataResponse>',context!);
        Comments = JsonConverters.fromJson(json['Comments'],'List<CustomerCommentsResponse>',context!);
        AccessKeys = JsonConverters.fromJson(json['AccessKeys'],'List<UserAccessKeys>',context!);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'dynamic',context!);
        SubscribedToNewsletter = json['SubscribedToNewsletter'];
        InvoiceAddress = JsonConverters.fromJson(json['InvoiceAddress'],'InvoiceAddress',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Firstname': Firstname,
        'Lastname': Lastname,
        'Email': Email,
        'Phone': Phone,
        'ImageUrl': ImageUrl,
        'CustomFields': JsonConverters.toJson(CustomFields,'List<CustomFieldConfigData>',context!),
        'CustomFieldValues': JsonConverters.toJson(CustomFieldValues,'List<CustomFieldDataResponse>',context!),
        'Comments': JsonConverters.toJson(Comments,'List<CustomerCommentsResponse>',context!),
        'AccessKeys': JsonConverters.toJson(AccessKeys,'List<UserAccessKeys>',context!),
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'dynamic',context!),
        'SubscribedToNewsletter': SubscribedToNewsletter,
        'InvoiceAddress': JsonConverters.toJson(InvoiceAddress,'InvoiceAddress',context!)
    };

    getTypeName() => "CustomerQueryResponse";
    TypeContext? context = _ctx;
}

class AddCustomField implements IConvertible
{
    int? Id;
    String? Value;

    AddCustomField({this.Id,this.Value});
    AddCustomField.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Value': Value
    };

    getTypeName() => "AddCustomField";
    TypeContext? context = _ctx;
}

class AddUserAccessKey implements IConvertible
{
    String? Id;
    String? CompanyId;
    int? AccessKeyTypeId;
    String? Value;
    String? CustomerId;
    String? Description;

    AddUserAccessKey({this.Id,this.CompanyId,this.AccessKeyTypeId,this.Value,this.CustomerId,this.Description});
    AddUserAccessKey.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        CompanyId = json['CompanyId'];
        AccessKeyTypeId = json['AccessKeyTypeId'];
        Value = json['Value'];
        CustomerId = json['CustomerId'];
        Description = json['Description'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'CompanyId': CompanyId,
        'AccessKeyTypeId': AccessKeyTypeId,
        'Value': Value,
        'CustomerId': CustomerId,
        'Description': Description
    };

    getTypeName() => "AddUserAccessKey";
    TypeContext? context = _ctx;
}

class DeleteUserAccessKey implements IConvertible
{
    String? Id;

    DeleteUserAccessKey({this.Id});
    DeleteUserAccessKey.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id
    };

    getTypeName() => "DeleteUserAccessKey";
    TypeContext? context = _ctx;
}

// @ApiResponse(Description="Returned if there is a validation error on the input parameters", StatusCode=400)
// @ApiResponse(Description="Returned if the current user is not allowed to perform the action", StatusCode=401)
// @ValidateRequest(Validator="IsAuthenticated")
class UpdateCustomer implements IConvertible
{
    /**
    * Enter the company and id for the customer, if blank company id and you are an admin, your company id will be used.
    */
    // @ApiMember(Description="Enter the company and id for the customer, if blank company id and you are an admin, your company id will be used.", ParameterType="query")
    String? CompanyId;

    /**
    * customer id
    */
    // @ApiMember(Description="customer id", IsRequired=true, ParameterType="path")
    String? Id;

    String? Firstname;
    String? Lastname;
    String? Phone;
    String? Email;
    /**
    * If Custom Fields are added to the customer, here you will send the id and the value for each custom field to be updated
    */
    // @ApiMember(Description="If Custom Fields are added to the customer, here you will send the id and the value for each custom field to be updated")
    List<AddCustomField>? CustomFields;

    /**
    * List of Access Keys
    */
    // @ApiMember(Description="List of Access Keys")
    List<AddUserAccessKey>? AccessKeys;

    List<DeleteUserAccessKey>? AccessKeysToDelete;
    bool? SubscribedToNewsletter;
    InvoiceAddress? InvoiceAddress;

    UpdateCustomer({this.CompanyId,this.Id,this.Firstname,this.Lastname,this.Phone,this.Email,this.CustomFields,this.AccessKeys,this.AccessKeysToDelete,this.SubscribedToNewsletter,this.InvoiceAddress});
    UpdateCustomer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Firstname = json['Firstname'];
        Lastname = json['Lastname'];
        Phone = json['Phone'];
        Email = json['Email'];
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<AddCustomField>',context!);
        AccessKeys = JsonConverters.fromJson(json['AccessKeys'],'List<AddUserAccessKey>',context!);
        AccessKeysToDelete = JsonConverters.fromJson(json['AccessKeysToDelete'],'List<DeleteUserAccessKey>',context!);
        SubscribedToNewsletter = json['SubscribedToNewsletter'];
        InvoiceAddress = JsonConverters.fromJson(json['InvoiceAddress'],'InvoiceAddress',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CompanyId': CompanyId,
        'Id': Id,
        'Firstname': Firstname,
        'Lastname': Lastname,
        'Phone': Phone,
        'Email': Email,
        'CustomFields': JsonConverters.toJson(CustomFields,'List<AddCustomField>',context!),
        'AccessKeys': JsonConverters.toJson(AccessKeys,'List<AddUserAccessKey>',context!),
        'AccessKeysToDelete': JsonConverters.toJson(AccessKeysToDelete,'List<DeleteUserAccessKey>',context!),
        'SubscribedToNewsletter': SubscribedToNewsletter,
        'InvoiceAddress': JsonConverters.toJson(InvoiceAddress,'InvoiceAddress',context!)
    };

    getTypeName() => "UpdateCustomer";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'testapi.bokamera.se', types: <String, TypeInfo> {
    'CustomFieldValueResponse': TypeInfo(TypeOf.Class, create:() => CustomFieldValueResponse()),
    'CustomFieldConfigData': TypeInfo(TypeOf.Class, create:() => CustomFieldConfigData()),
    'List<CustomFieldValueResponse>': TypeInfo(TypeOf.Class, create:() => <CustomFieldValueResponse>[]),
    'CustomFieldDataResponse': TypeInfo(TypeOf.Class, create:() => CustomFieldDataResponse()),
    'CustomerCommentsResponse': TypeInfo(TypeOf.Class, create:() => CustomerCommentsResponse()),
    'Uri': TypeInfo(TypeOf.Class, create:() => Uri()),
    'BaseModel': TypeInfo(TypeOf.Class, create:() => BaseModel()),
    'UserAccessKeys': TypeInfo(TypeOf.Class, create:() => UserAccessKeys()),
    'InvoiceAddress': TypeInfo(TypeOf.Class, create:() => InvoiceAddress()),
    'CustomerQueryResponse': TypeInfo(TypeOf.Class, create:() => CustomerQueryResponse()),
    'List<CustomFieldConfigData>': TypeInfo(TypeOf.Class, create:() => <CustomFieldConfigData>[]),
    'List<CustomFieldDataResponse>': TypeInfo(TypeOf.Class, create:() => <CustomFieldDataResponse>[]),
    'List<CustomerCommentsResponse>': TypeInfo(TypeOf.Class, create:() => <CustomerCommentsResponse>[]),
    'List<UserAccessKeys>': TypeInfo(TypeOf.Class, create:() => <UserAccessKeys>[]),
    'AddCustomField': TypeInfo(TypeOf.Class, create:() => AddCustomField()),
    'AddUserAccessKey': TypeInfo(TypeOf.Class, create:() => AddUserAccessKey()),
    'DeleteUserAccessKey': TypeInfo(TypeOf.Class, create:() => DeleteUserAccessKey()),
    'UpdateCustomer': TypeInfo(TypeOf.Class, create:() => UpdateCustomer()),
    'List<AddCustomField>': TypeInfo(TypeOf.Class, create:() => <AddCustomField>[]),
    'List<AddUserAccessKey>': TypeInfo(TypeOf.Class, create:() => <AddUserAccessKey>[]),
    'List<DeleteUserAccessKey>': TypeInfo(TypeOf.Class, create:() => <DeleteUserAccessKey>[]),
});

Dart UpdateCustomer DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

PUT /customers/{Id} HTTP/1.1 
Host: testapi.bokamera.se 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	CompanyId: 00000000-0000-0000-0000-000000000000,
	Firstname: String,
	Lastname: String,
	Phone: String,
	Email: String,
	CustomFields: 
	[
		{
			Id: 0,
			Value: String
		}
	],
	AccessKeys: 
	[
		{
			Id: 00000000-0000-0000-0000-000000000000,
			CompanyId: 00000000-0000-0000-0000-000000000000,
			AccessKeyTypeId: 0,
			Value: String,
			CustomerId: 00000000-0000-0000-0000-000000000000,
			Description: String
		}
	],
	AccessKeysToDelete: 
	[
		{
			
		}
	],
	SubscribedToNewsletter: False,
	InvoiceAddress: 
	{
		CorporateIdentityNumber: String,
		InvoiceAddress1: String,
		InvoiceAddress2: String,
		InvoiceCity: String,
		InvoicePostalCode: String,
		InvoiceCountryCode: String
	}
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	Firstname: String,
	Lastname: String,
	Email: String,
	Phone: String,
	ImageUrl: String,
	CustomFields: 
	[
		{
			"Id": 0,
			"Name": "String",
			"Description": "String",
			"Width": 0,
			"DataType": "String",
			"DefaultValue": "String",
			"IsMandatory": false,
			"MandatoryErrorMessage": "String",
			"MaxLength": 0,
			"MultipleLineText": false,
			"RegEx": "String",
			"RegExErrorMessage": "String",
			"Values": 
			[
				{
					"Value": "String"
				}
			]
		}
	],
	CustomFieldValues: 
	[
		{
			Id: 0,
			Column: String,
			Name: String,
			Description: String,
			Value: String,
			DataType: String
		}
	],
	Comments: 
	[
		{
			Id: 0,
			Comments: String
		}
	],
	AccessKeys: 
	[
		{
			AccessKeyTypeId: 0,
			Value: String,
			Description: String
		}
	],
	ResponseStatus: {},
	SubscribedToNewsletter: False,
	InvoiceAddress: 
	{
		CorporateIdentityNumber: String,
		InvoiceAddress1: String,
		InvoiceAddress2: String,
		InvoiceCity: String,
		InvoicePostalCode: String,
		InvoiceCountryCode: String
	}
}