Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
291 lines (242 sloc) 6.79 KB
enum Role {
ADMIN
USER
}
directive @hasRole(role: Role!) on FIELD_DEFINITION
schema {
query: RootQuery
mutation: RootMutation
}
type RootMutation {
createTag(key: String!, color: String!): TagDefinition @hasRole(role: USER)
updateTag(key: String!, newKey: String, color: String!): TagDefinition @hasRole(role: USER)
removeTag(key: String!): TagDefinition @hasRole(role: USER)
createUser(name: String!, pass: String!, admin: Boolean!): User @hasRole(role: ADMIN)
removeUser(id: Int!): User @hasRole(role: ADMIN)
updateUser(id: Int!, name: String!, pass: String, admin: Boolean!): User @hasRole(role: ADMIN)
login(username: String!, pass: String!, deviceName: String!, type: DeviceType!, cookie: Boolean!): Login
createDevice(name: String!, type: DeviceType!): Login @hasRole(role: USER)
updateDevice(id: Int!, name: String!, type: DeviceType!): Device
removeDevice(id: Int!): Device @hasRole(role: USER)
removeCurrentDevice: Device! @hasRole(role: USER)
createTimeSpan(start: Time!, end: Time, tags: [InputTimeSpanTag!]): TimeSpan @hasRole(role: USER)
updateTimeSpan(id: Int!, start: Time!, end: Time, tags: [InputTimeSpanTag!], oldStart: Time): TimeSpan @hasRole(role: USER)
removeTimeSpan(id: Int!): TimeSpan @hasRole(role: USER)
replaceTimeSpanTags(from: InputTimeSpanTag!, to: InputTimeSpanTag!, opt: InputReplaceOptions!): Boolean @hasRole(role: USER)
copyTimeSpan(id: Int!, start: Time!, end: Time): TimeSpan @hasRole(role: USER)
stopTimeSpan(id: Int!, end: Time!): TimeSpan @hasRole(role: USER)
createDashboard(name: String!): Dashboard! @hasRole(role: USER)
updateDashboard(id: Int!, name: String!): Dashboard! @hasRole(role: USER)
removeDashboard(id: Int!): Dashboard! @hasRole(role: USER)
addDashboardRange(dashboardId: Int!, range: InputNamedDateRange!): NamedDateRange
updateDashboardRange(rangeId: Int!, range: InputNamedDateRange!): NamedDateRange
removeDashboardRange(rangeId: Int!): NamedDateRange
addDashboardEntry(dashboardId: Int!, entryType: EntryType!, title: String!, stats: InputStatsSelection!, pos: InputResponsiveDashboardEntryPos): DashboardEntry @hasRole(role: USER)
updateDashboardEntry(entryId: Int!, entryType: EntryType, title: String, stats: InputStatsSelection, pos: InputResponsiveDashboardEntryPos): DashboardEntry @hasRole(role: USER)
removeDashboardEntry(id: Int!): DashboardEntry! @hasRole(role: USER)
setUserSettings(settings: InputUserSettings!): UserSettings! @hasRole(role: USER)
}
type RootQuery {
suggestTag(query: String!): [TagDefinition!] @hasRole(role: USER)
suggestTagValue(key: String!, query: String!): [String!] @hasRole(role: USER)
tags: [TagDefinition!] @hasRole(role: USER)
users: [User!] @hasRole(role: ADMIN)
currentUser: User
currentDevice: Device
devices: [Device!] @hasRole(role: USER)
timeSpans(fromInclusive: Time, toInclusive: Time, cursor: InputCursor): PagedTimeSpans! @hasRole(role: USER)
timers: [TimeSpan!] @hasRole(role: USER)
stats(ranges: [Range!], tags: [String!], excludeTags: [InputTimeSpanTag!], requireTags: [InputTimeSpanTag!]): [RangedStatisticsEntries!] @hasRole(role: USER)
stats2(now: Time!, stats: InputStatsSelection!): [RangedStatisticsEntries!] @hasRole(role: USER)
version: Version!
dashboards: [Dashboard!] @hasRole(role: USER)
userSettings: UserSettings!
}
input InputUserSettings {
theme: Theme!
dateLocale: DateLocale!
firstDayOfTheWeek: WeekDay!
}
type UserSettings {
theme: Theme!
dateLocale: DateLocale!
firstDayOfTheWeek: WeekDay!
}
enum WeekDay {
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
enum Theme {
GruvboxDark, GruvboxLight, MaterialDark, MaterialLight
}
enum DateLocale {
English, German
}
input InputReplaceOptions {
override: OverrideMode!
}
enum OverrideMode {
Override, Discard
}
input InputCursor {
offset: Int
startId: Int
pageSize: Int
}
type Cursor {
hasMore: Boolean!
offset: Int!
startId: Int!
pageSize: Int!
}
type Version {
name: String!
commit: String!
buildDate: String!
}
type Login {
token: String!
user: User!
device: Device!
}
type Device {
id: Int!
name: String!
type: DeviceType!
createdAt: Time!
activeAt: Time!
}
enum DeviceType {
LongExpiry, ShortExpiry, NoExpiry
}
scalar Time
type TagDefinition {
color: String!
key: String!
user: User!
usages: Int!
}
type User {
admin: Boolean!
id: Int!
name: String!
}
type TimeSpan {
id: Int!
start: Time!
end: Time
oldStart: Time
tags: [TimeSpanTag!]
# TODO not nullable ^
}
type PagedTimeSpans {
timeSpans: [TimeSpan!]!
cursor: Cursor!
}
type TimeSpanTag {
key: String!
value: String!
}
input InputTimeSpanTag {
key: String!
value: String!
}
input StatInput {
key: String!
mustHave: [InputTimeSpanTag!]
mustNotHave: [InputTimeSpanTag!]
}
input Range {
start: Time!
end: Time!
}
type StatisticsEntry {
key: String!
value: String!
timeSpendInSeconds: Float!
}
type RangedStatisticsEntries {
start: Time!
end: Time!
entries: [StatisticsEntry!]
}
type Dashboard {
id: Int!
name: String!,
items: [DashboardEntry!]!
ranges: [NamedDateRange!]!
}
type NamedDateRange {
id: Int!
name: String!
editable: Boolean!
range: RelativeOrStaticRange!
}
input InputNamedDateRange {
name: String!
editable: Boolean!
range: InputRelativeOrStaticRange!
}
type StatsSelection {
interval: StatsInterval!
tags: [String!]
excludeTags: [TimeSpanTag!]
includeTags: [TimeSpanTag!]
rangeId: Int
range: RelativeOrStaticRange
}
input InputStatsSelection {
interval: StatsInterval!
tags: [String!]
excludeTags: [InputTimeSpanTag!]
includeTags: [InputTimeSpanTag!]
rangeId: Int
range: InputRelativeOrStaticRange
}
enum StatsInterval {
Hourly, Daily, Weekly, Monthly, Yearly, Single
}
type RelativeOrStaticRange {
from: String!
to: String!
}
input InputRelativeOrStaticRange {
from: String!
to: String!
}
type DashboardEntry {
id: Int!
title: String!
statsSelection: StatsSelection!
pos: ResponsiveDashboardEntryPos!
entryType: EntryType!
}
type ResponsiveDashboardEntryPos {
desktop: DashboardEntryPos!
mobile: DashboardEntryPos!
}
input InputResponsiveDashboardEntryPos {
desktop: InputDashboardEntryPos
mobile: InputDashboardEntryPos
}
input InputDashboardEntryPos {
w: Int!
h: Int!
x: Int!
y: Int!
}
type DashboardEntryPos {
w: Int!
h: Int!
x: Int!
y: Int!
minW: Int!
minH: Int!
}
enum DashboardSize {
Large,
Medium,
Small
}
enum EntryType {
PieChart, BarChart, StackedBarChart, LineChart, VerticalTable, HorizontalTable
}
You can’t perform that action at this time.