{"swagger":"2.0","info":{"title":"reporting-api","description":"Reporting service which aggregates events from dedicated Kafka topics.","license":{"name":"MIT","url":"http://opensource.org/licenses/MIT"},"version":"0.0.1"},"consumes":["application/json"],"produces":["application/json"],"paths":{"/query":{"post":{"parameters":[{"name":"query_form","in":"body","schema":{"$ref":"#/definitions/query_form"}}],"responses":{"200":{"description":"200 response","schema":{"$ref":"#/definitions/query_response"}},"400":{"description":"400 response","schema":{"type":"array","items":{"$ref":"#/definitions/de.nccloud.common.v0.models.generic_error"}}}}}},"/topics":{"get":{"parameters":[{"name":"offset","in":"query","required":true,"default":"0","type":"integer","format":"int32"},{"name":"limit","in":"query","required":true,"default":"25","type":"integer","format":"int32"},{"name":"sort_by","in":"query","required":true,"default":"name","type":"string"},{"name":"direction","in":"query","required":true,"default":"asc"}],"responses":{"200":{"description":"200 response","schema":{"$ref":"#/definitions/topic_response"}}}}},"/topics/{guid}":{"get":{"parameters":[{"name":"guid","in":"path","required":true,"type":"string"}],"responses":{"200":{"description":"200 response","schema":{"$ref":"#/definitions/topic"}},"404":{"description":"404 response"}}}},"/views":{"get":{"parameters":[{"name":"offset","in":"query","required":true,"default":"0","type":"integer","format":"int32"},{"name":"limit","in":"query","required":true,"default":"25","type":"integer","format":"int32"},{"name":"sort_by","in":"query","required":true,"default":"name","type":"string"},{"name":"direction","in":"query","required":true,"default":"asc"}],"responses":{"200":{"description":"200 response","schema":{"$ref":"#/definitions/view_response"}}}},"post":{"parameters":[{"name":"view_form","in":"body","schema":{"$ref":"#/definitions/view_form"}}],"responses":{"201":{"description":"201 response","schema":{"$ref":"#/definitions/view"}},"400":{"description":"400 response","schema":{"type":"array","items":{"$ref":"#/definitions/de.nccloud.common.v0.models.generic_error"}}}}}},"/views/{guid}":{"get":{"parameters":[{"name":"guid","in":"path","required":true,"type":"string","format":"uuid"}],"responses":{"200":{"description":"200 response","schema":{"$ref":"#/definitions/view"}},"404":{"description":"404 response"}}},"put":{"parameters":[{"name":"guid","in":"path","required":true,"type":"string","format":"uuid"},{"name":"view_form","in":"body","schema":{"$ref":"#/definitions/view_form"}}],"responses":{"200":{"description":"200 response","schema":{"$ref":"#/definitions/view"}},"400":{"description":"400 response","schema":{"type":"array","items":{"$ref":"#/definitions/de.nccloud.common.v0.models.generic_error"}}},"404":{"description":"404 response"}}},"delete":{"parameters":[{"name":"guid","in":"path","required":true,"type":"string","format":"uuid"}],"responses":{"200":{"description":"200 response"},"404":{"description":"404 response"}}}}},"definitions":{"delete_event":{"type":"object","description":"Deletes a reporting entity defined by its `tracking_id`.","title":"delete_event","required":["tracking_id","audit"],"properties":{"tracking_id":{"description":"A unique id, which identifies the association of multiple events. This can i.e. be a user guid, for events related to a user. It is important, that this id is unique and immutable.","type":"string"},"audit":{"$ref":"#/definitions/de.nccloud.common.v0.models.audit"}}},"field":{"type":"object","description":"Single field of a topic schema. A field can be used for projecting, filtering and sorting in reports.","title":"field","required":["type","is_array"],"properties":{"type":{"type":"string","enum":["boolean","date-iso8601","date-time-iso8601","decimal","double","integer","long","string","uuid","object"]},"is_array":{"description":"Setting this to `true` means the field is an array of given type.","type":"boolean"},"fields":{"$ref":"#/definitions/map[field]"},"label":{"description":"A human-readable label for the field.","type":"string"},"description":{"description":"A human-readable description of the field.","type":"string"}}},"filter":{"type":"object","description":"Defines a condition for values.","title":"filter","properties":{"expression":{"description":"An SQL-like expression.","type":"string"},"variables":{"$ref":"#/definitions/map[json]"}}},"projection_field":{"type":"object","description":"A single field of a projection schema.","title":"projection_field","properties":{"label":{"description":"A human-readable label for the field.","type":"string"},"description":{"description":"A human-readable description for the field.","type":"string"},"source":{"$ref":"#/definitions/projection_field_source"},"fields":{"$ref":"#/definitions/map[projection_field]"}}},"projection_field_source":{"type":"object","description":"Represents the source for a single projection field from a topic's schema.","title":"projection_field_source","required":["topic","path","filter"],"properties":{"topic":{"description":"Name of the originating topic.","type":"string"},"path":{"description":"A slimmed down variant of [JSON Path](https://gregsdennis.github.io/Manatee.Json/usage/path.html) to point to a specific field in a topic's schema.","type":"string"},"filter":{"description":"A conditional filter expression. The expression can contain variables, which will be passed in when evaluating the projection.","type":"string"}}},"query_form":{"type":"object","description":"Form for querying and projecting data.","title":"query_form","required":["variables"],"properties":{"view":{"description":"The name of a defined `view` used for projecting. If the view defines variables, they must be provided as well. Either `view` or `projection` must be set.","type":"string"},"projection":{"$ref":"#/definitions/map[projection_field]"},"variables":{"$ref":"#/definitions/map[json]"},"sort":{"type":"array","items":{"$ref":"#/definitions/de.nccloud.common.v0.models.sort"}}}},"query_response":{"type":"object","description":"The result of a query, returning data in a projected form.","title":"query_response","required":["page","data"],"properties":{"page":{"$ref":"#/definitions/de.nccloud.common.v0.models.page_response"},"data":{"description":"The returned data in the projected form."}}},"topic":{"type":"object","description":"Represents a single topic, which will be consumed by the reporting service.","title":"topic","required":["name","service","schema"],"properties":{"name":{"type":"string"},"service":{"$ref":"#/definitions/de.nccloud.common.v0.models.service_info"},"schema":{"$ref":"#/definitions/map[field]"}}},"topic_response":{"type":"object","title":"topic_response","required":["page","data"],"properties":{"page":{"$ref":"#/definitions/de.nccloud.common.v0.models.page_response"},"data":{"type":"array","items":{"$ref":"#/definitions/topic"}}}},"update_event":{"type":"object","description":"Updates one or more data fields.","title":"update_event","required":["tracking_id","payload","audit"],"properties":{"tracking_id":{"description":"A unique id, which identifies the association of multiple events. This can i.e. be a user guid, for events related to a user. It is important, that this id is unique and immutable.","type":"string"},"payload":{"description":"One or more fields defined in the reporting schema, which will be updated."},"audit":{"$ref":"#/definitions/de.nccloud.common.v0.models.audit"}}},"view":{"type":"object","description":"A stored view containing data from one or more topics.","title":"view","required":["guid","name","projection","variables"],"properties":{"guid":{"description":"Globally unique identifier of the projection.","type":"string","format":"uuid"},"name":{"description":"Name of this projection used to reference it in a human-friendly way. The name must be unique.","type":"string"},"projection":{"$ref":"#/definitions/map[projection_field]"},"variables":{"$ref":"#/definitions/map[scalar_type]"}}},"view_form":{"type":"object","description":"Form for creating a new `view`.","title":"view_form","required":["name","projection","variables"],"properties":{"name":{"description":"Name of the view.","type":"string"},"projection":{"$ref":"#/definitions/map[projection_field]"},"variables":{"$ref":"#/definitions/map[scalar_type]"}}},"view_response":{"type":"object","title":"view_response","required":["page","data"],"properties":{"page":{"$ref":"#/definitions/de.nccloud.common.v0.models.page_response"},"data":{"type":"array","items":{"$ref":"#/definitions/view"}}}},"reporting_event":{"type":"object","title":"reporting_event","allOf":[{"$ref":"#/definitions/update_event"},{"$ref":"#/definitions/delete_event"}]}}}