Booklinker.API

<back to all web services

GetLinkReportRequest

Requires Authentication
The following routes are available for this service:
GET/v1/links/report
import 'package:servicestack/servicestack.dart';

// @DataContract
class Item implements IConvertible
{
    // @DataMember(Name="id")
    String? id;

    // @DataMember(Name="displayName")
    String? displayName;

    Item({this.id,this.displayName});
    Item.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

// @DataContract
class ReportData implements IConvertible
{
    // @DataMember(Name="id")
    String? id;

    // @DataMember(Name="item")
    Item? item;

    // @DataMember(Name="totalClicks")
    int? totalClicks;

    // @DataMember(Name="clicks")
    int? clicks;

    // @DataMember(Name="junkClicks")
    int? junkClicks;

    // @DataMember(Name="spiderClicks")
    int? spiderClicks;

    // @DataMember(Name="dateUtc")
    DateTime? dateUtc;

    ReportData({this.id,this.item,this.totalClicks,this.clicks,this.junkClicks,this.spiderClicks,this.dateUtc});
    ReportData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        id = json['id'];
        item = JsonConverters.fromJson(json['item'],'Item',context!);
        totalClicks = json['totalClicks'];
        clicks = json['actualClicks'];
        junkClicks = json['junkClicks'];
        spiderClicks = json['spiderClicks'];
        dateUtc = JsonConverters.fromJson(json['dateUtc'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'id': id,
        'item': JsonConverters.toJson(item,'Item',context!),
        'totalClicks': totalClicks,
        'clicks': clicks,
        'junkClicks': junkClicks,
        'spiderClicks': spiderClicks,
        'dateUtc': JsonConverters.toJson(dateUtc,'DateTime',context!)
    };

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

// @DataContract
class Error implements IConvertible
{
    // @DataMember(Name="code")
    String? code;

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

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

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

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

enum GroupBy
{
    Default,
    Retailer,
    Date,
}

enum ReportType
{
    ShortUrl,
    Group,
    User,
}

// @DataContract
class ReportRequest implements IConvertible
{
    // @DataMember(Name="items")
    List<String>? items;

    // @DataMember(Name="groupBy")
    List<GroupBy>? groupBy;

    // @DataMember(Name="attribute")
    String? attribute;

    // @DataMember(Name="type")
    ReportType? type;

    // @DataMember(Name="fromStartUtcInclusive")
    DateTime? fromStartUtcInclusive;

    // @DataMember(Name="fromEndUtcInclusive")
    DateTime? fromEndUtcInclusive;

    // @DataMember(Name="retailers")
    List<String>? retailers;

    ReportRequest({this.items,this.groupBy,this.attribute,this.type,this.fromStartUtcInclusive,this.fromEndUtcInclusive,this.retailers});
    ReportRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        items = JsonConverters.fromJson(json['items'],'List<String>',context!);
        groupBy = JsonConverters.fromJson(json['groupBy'],'List<GroupBy>',context!);
        attribute = json['attribute'];
        type = JsonConverters.fromJson(json['type'],'ReportType',context!);
        fromStartUtcInclusive = JsonConverters.fromJson(json['fromStartUtcInclusive'],'DateTime',context!);
        fromEndUtcInclusive = JsonConverters.fromJson(json['fromEndUtcInclusive'],'DateTime',context!);
        retailers = JsonConverters.fromJson(json['retailers'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'items': JsonConverters.toJson(items,'List<String>',context!),
        'groupBy': JsonConverters.toJson(groupBy,'List<GroupBy>',context!),
        'attribute': attribute,
        'type': JsonConverters.toJson(type,'ReportType',context!),
        'fromStartUtcInclusive': JsonConverters.toJson(fromStartUtcInclusive,'DateTime',context!),
        'fromEndUtcInclusive': JsonConverters.toJson(fromEndUtcInclusive,'DateTime',context!),
        'retailers': JsonConverters.toJson(retailers,'List<String>',context!)
    };

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

// @DataContract
class Report extends Report implements IConvertible
{
    Report();
    Report.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "Report";
    TypeContext? context = _ctx;
}

// @DataContract
class ClickReport implements IConvertible
{
    // @DataMember(Name="code")
    String? code;

    // @DataMember(Name="reports")
    Map<String,Report?>? reports;

    // @DataMember(Name="totalClicks")
    int? totalClicks;

    ClickReport({this.code,this.reports,this.totalClicks});
    ClickReport.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        code = json['code'];
        reports = JsonConverters.fromJson(json['reports'],'Map<String,Report?>',context!);
        totalClicks = json['totalClicks'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'code': code,
        'reports': JsonConverters.toJson(reports,'Map<String,Report?>',context!),
        'totalClicks': totalClicks
    };

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

// @DataContract
class GetLinkReportResponse implements IConvertible
{
    // @DataMember(Name="reports")
    ClickReport? reports;

    // @DataMember(Name="responseStatus")
    ResponseStatus? responseStatus;

    GetLinkReportResponse({this.reports,this.responseStatus});
    GetLinkReportResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        reports = JsonConverters.fromJson(json['report'],'ClickReport',context!);
        responseStatus = JsonConverters.fromJson(json['responseStatus'],'ResponseStatus',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'reports': JsonConverters.toJson(reports,'ClickReport',context!),
        'responseStatus': JsonConverters.toJson(responseStatus,'ResponseStatus',context!)
    };

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

// @DataContract
class GetLinkReportRequest implements IConvertible
{
    // @DataMember(Name="baseCode")
    String? baseCode;

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

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

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

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

// @DataContract
class Report implements IConvertible
{
    // @DataMember(Name="data")
    List<ReportData>? data;

    // @DataMember(Name="executionTimeMs")
    int? executionTimeMs;

    // @DataMember(Name="totalItems")
    int? totalItems;

    // @DataMember(Name="errors")
    List<Error>? errors;

    // @DataMember(Name="request")
    ReportRequest? request;

    // @DataMember(Name="totalClicks")
    int? totalClicks;

    Report({this.data,this.executionTimeMs,this.totalItems,this.errors,this.request,this.totalClicks});
    Report.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        data = JsonConverters.fromJson(json['data'],'List<ReportData>',context!);
        executionTimeMs = json['executionTimeMs'];
        totalItems = json['totalItems'];
        errors = JsonConverters.fromJson(json['errors'],'List<Error>',context!);
        request = JsonConverters.fromJson(json['request'],'ReportRequest',context!);
        totalClicks = json['totalClicks'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'data': JsonConverters.toJson(data,'List<ReportData>',context!),
        'executionTimeMs': executionTimeMs,
        'totalItems': totalItems,
        'errors': JsonConverters.toJson(errors,'List<Error>',context!),
        'request': JsonConverters.toJson(request,'ReportRequest',context!),
        'totalClicks': totalClicks
    };

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

TypeContext _ctx = TypeContext(library: 'api.booklinker.com', types: <String, TypeInfo> {
    'Item': TypeInfo(TypeOf.Class, create:() => Item()),
    'ReportData': TypeInfo(TypeOf.Class, create:() => ReportData()),
    'Error': TypeInfo(TypeOf.Class, create:() => Error()),
    'GroupBy': TypeInfo(TypeOf.Enum, enumValues:GroupBy.values),
    'ReportType': TypeInfo(TypeOf.Enum, enumValues:ReportType.values),
    'ReportRequest': TypeInfo(TypeOf.Class, create:() => ReportRequest()),
    'List<GroupBy>': TypeInfo(TypeOf.Class, create:() => <GroupBy>[]),
    'Report': TypeInfo(TypeOf.Class, create:() => Report()),
    'ClickReport': TypeInfo(TypeOf.Class, create:() => ClickReport()),
    'Map<String,Report?>': TypeInfo(TypeOf.Class, create:() => Map<String,Report?>()),
    'GetLinkReportResponse': TypeInfo(TypeOf.Class, create:() => GetLinkReportResponse()),
    'GetLinkReportRequest': TypeInfo(TypeOf.Class, create:() => GetLinkReportRequest()),
    'List<ReportData>': TypeInfo(TypeOf.Class, create:() => <ReportData>[]),
    'List<Error>': TypeInfo(TypeOf.Class, create:() => <Error>[]),
});

Dart GetLinkReportRequest DTOs

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

HTTP + CSV

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

GET /v1/links/report HTTP/1.1 
Host: api.booklinker.com 
Accept: text/csv
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{"reports":{"code":"String","reports":{"String":{"data":[{"id":"String","item":{"id":"String","displayName":"String"},"totalClicks":0,"clicks":0,"junkClicks":0,"spiderClicks":0,"dateUtc":"0001-01-01T00:00:00.0000000"}],"executionTimeMs":0,"totalItems":1,"errors":[{}],"request":{"attribute":"String","type":"ShortUrl","fromStartUtcInclusive":"0001-01-01T00:00:00.0000000","fromEndUtcInclusive":"0001-01-01T00:00:00.0000000"},"totalClicks":0}},"totalClicks":0},"responseStatus":{"errorCode":"String","message":"String","stackTrace":"String","errors":[{"errorCode":"String","fieldName":"String","message":"String","meta":{"String":"String"}}],"meta":{"String":"String"}}}