diff --git a/dist/core/OpenAPI.js b/dist/core/OpenAPI.js index f06ec3a..6c45493 100644 --- a/dist/core/OpenAPI.js +++ b/dist/core/OpenAPI.js @@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenAPI = void 0; exports.OpenAPI = { BASE: '', - VERSION: '0.2.0', + VERSION: '0.2.1', WITH_CREDENTIALS: false, TOKEN: undefined, USERNAME: undefined, diff --git a/dist/index.d.ts b/dist/index.d.ts index c728a5f..44f6478 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -78,6 +78,8 @@ export type { ResponseRunnerOrganisation } from './models/ResponseRunnerOrganisa export type { ResponseRunnerTeam } from './models/ResponseRunnerTeam'; export type { ResponseScan } from './models/ResponseScan'; export type { ResponseScanStation } from './models/ResponseScanStation'; +export type { ResponseSelfServiceDonation } from './models/ResponseSelfServiceDonation'; +export type { ResponseSelfServiceRunner } from './models/ResponseSelfServiceRunner'; export type { ResponseStats } from './models/ResponseStats'; export type { ResponseStatsClient } from './models/ResponseStatsClient'; export type { ResponseStatsOrgnisation } from './models/ResponseStatsOrgnisation'; @@ -166,6 +168,7 @@ export { MeService } from './services/MeService'; export { PermissionService } from './services/PermissionService'; export { RunnerCardService } from './services/RunnerCardService'; export { RunnerOrganisationService } from './services/RunnerOrganisationService'; +export { RunnerSelfService } from './services/RunnerSelfService'; export { RunnerService } from './services/RunnerService'; export { RunnerTeamService } from './services/RunnerTeamService'; export { ScanService } from './services/ScanService'; diff --git a/dist/index.js b/dist/index.js index 4ba5611..6f3a674 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserService = exports.UserGroupService = exports.TrackService = exports.StatusService = exports.StatsService = exports.StatsClientService = exports.ScanStationService = exports.ScanService = exports.RunnerTeamService = exports.RunnerService = exports.RunnerOrganisationService = exports.RunnerCardService = exports.PermissionService = exports.MeService = exports.ImportService = exports.GroupContactService = exports.DonorService = exports.DonationService = exports.AuthService = exports.UserAction = exports.ResponsePermission = exports.Permission = exports.CreatePermission = exports.OpenAPI = exports.ApiError = void 0; +exports.UserService = exports.UserGroupService = exports.TrackService = exports.StatusService = exports.StatsService = exports.StatsClientService = exports.ScanStationService = exports.ScanService = exports.RunnerTeamService = exports.RunnerService = exports.RunnerSelfService = exports.RunnerOrganisationService = exports.RunnerCardService = exports.PermissionService = exports.MeService = exports.ImportService = exports.GroupContactService = exports.DonorService = exports.DonationService = exports.AuthService = exports.UserAction = exports.ResponsePermission = exports.Permission = exports.CreatePermission = exports.OpenAPI = exports.ApiError = void 0; /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -34,6 +34,8 @@ var RunnerCardService_1 = require("./services/RunnerCardService"); Object.defineProperty(exports, "RunnerCardService", { enumerable: true, get: function () { return RunnerCardService_1.RunnerCardService; } }); var RunnerOrganisationService_1 = require("./services/RunnerOrganisationService"); Object.defineProperty(exports, "RunnerOrganisationService", { enumerable: true, get: function () { return RunnerOrganisationService_1.RunnerOrganisationService; } }); +var RunnerSelfService_1 = require("./services/RunnerSelfService"); +Object.defineProperty(exports, "RunnerSelfService", { enumerable: true, get: function () { return RunnerSelfService_1.RunnerSelfService; } }); var RunnerService_1 = require("./services/RunnerService"); Object.defineProperty(exports, "RunnerService", { enumerable: true, get: function () { return RunnerService_1.RunnerService; } }); var RunnerTeamService_1 = require("./services/RunnerTeamService"); diff --git a/dist/models/ResponseSelfServiceDonation.d.ts b/dist/models/ResponseSelfServiceDonation.d.ts new file mode 100644 index 0000000..e794c9e --- /dev/null +++ b/dist/models/ResponseSelfServiceDonation.d.ts @@ -0,0 +1,5 @@ +export declare type ResponseSelfServiceDonation = { + donor: string; + amount: number; + amountPerDistance: number; +}; diff --git a/dist/models/ResponseSelfServiceDonation.js b/dist/models/ResponseSelfServiceDonation.js new file mode 100644 index 0000000..1e550d8 --- /dev/null +++ b/dist/models/ResponseSelfServiceDonation.js @@ -0,0 +1,5 @@ +"use strict"; +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/models/ResponseSelfServiceRunner.d.ts b/dist/models/ResponseSelfServiceRunner.d.ts new file mode 100644 index 0000000..9a1a2b8 --- /dev/null +++ b/dist/models/ResponseSelfServiceRunner.d.ts @@ -0,0 +1,13 @@ +export declare type ResponseSelfServiceRunner = { + distance: number; + donationAmount: number; + group: string; + donations: string; + id: number; + firstname: string; + middlename: string; + lastname: string; + phone: string; + email: string; + address?: any; +}; diff --git a/dist/models/ResponseSelfServiceRunner.js b/dist/models/ResponseSelfServiceRunner.js new file mode 100644 index 0000000..1e550d8 --- /dev/null +++ b/dist/models/ResponseSelfServiceRunner.js @@ -0,0 +1,5 @@ +"use strict"; +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/dist/services/RunnerSelfService.d.ts b/dist/services/RunnerSelfService.d.ts new file mode 100644 index 0000000..0eb87b4 --- /dev/null +++ b/dist/services/RunnerSelfService.d.ts @@ -0,0 +1,11 @@ +import type { ResponseSelfServiceRunner } from '../models/ResponseSelfServiceRunner'; +export declare class RunnerSelfService { + /** + * Get + * Lists all information about yourself.
Please provide your runner jwt(that code we gave you during registration) for auth.
If you lost your jwt/personalized link please contact support. + * @param jwt + * @returns ResponseSelfServiceRunner + * @throws ApiError + */ + static runnerSelfServiceControllerGet(jwt: string): Promise; +} diff --git a/dist/services/RunnerSelfService.js b/dist/services/RunnerSelfService.js new file mode 100644 index 0000000..dd10373 --- /dev/null +++ b/dist/services/RunnerSelfService.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RunnerSelfService = void 0; +const request_1 = require("../core/request"); +class RunnerSelfService { + /** + * Get + * Lists all information about yourself.
Please provide your runner jwt(that code we gave you during registration) for auth.
If you lost your jwt/personalized link please contact support. + * @param jwt + * @returns ResponseSelfServiceRunner + * @throws ApiError + */ + static async runnerSelfServiceControllerGet(jwt) { + const result = await request_1.request({ + method: 'GET', + path: `/api/runners/me/${jwt}`, + }); + return result.body; + } +} +exports.RunnerSelfService = RunnerSelfService; diff --git a/dist/services/RunnerService.d.ts b/dist/services/RunnerService.d.ts index f88fc02..48684e6 100644 --- a/dist/services/RunnerService.d.ts +++ b/dist/services/RunnerService.d.ts @@ -1,6 +1,8 @@ import type { CreateRunner } from '../models/CreateRunner'; import type { ResponseEmpty } from '../models/ResponseEmpty'; import type { ResponseRunner } from '../models/ResponseRunner'; +import type { ResponseScan } from '../models/ResponseScan'; +import type { ResponseTrackScan } from '../models/ResponseTrackScan'; import type { RunnerGroupNeededError } from '../models/RunnerGroupNeededError'; import type { RunnerGroupNotFoundError } from '../models/RunnerGroupNotFoundError'; import type { UpdateRunner } from '../models/UpdateRunner'; @@ -47,4 +49,12 @@ export declare class RunnerService { * @throws ApiError */ static runnerControllerRemove(id: number, force?: boolean): Promise; + /** + * Get scans + * Lists all scans of the runner whose id got provided.
If you only want the valid scans just add the ?onlyValid=true query param. + * @param id + * @returns any + * @throws ApiError + */ + static runnerControllerGetScans(id: number): Promise<(Array | Array)>; } diff --git a/dist/services/RunnerService.js b/dist/services/RunnerService.js index bb44487..1a3f5c4 100644 --- a/dist/services/RunnerService.js +++ b/dist/services/RunnerService.js @@ -80,5 +80,19 @@ class RunnerService { }); return result.body; } + /** + * Get scans + * Lists all scans of the runner whose id got provided.
If you only want the valid scans just add the ?onlyValid=true query param. + * @param id + * @returns any + * @throws ApiError + */ + static async runnerControllerGetScans(id) { + const result = await request_1.request({ + method: 'GET', + path: `/api/runners/${id}/scans`, + }); + return result.body; + } } exports.RunnerService = RunnerService; diff --git a/openapi.json b/openapi.json index 5d098a8..da0edaa 100644 --- a/openapi.json +++ b/openapi.json @@ -1 +1 @@ -{"components":{"schemas":{"IllegalJWTError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserNonexistantOrRefreshtokenInvalidError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"InvalidCredentialsError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"NoPermissionError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UsernameOrEmailNeededError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"PasswordNeededError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"JwtNotProvidedError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserNotFoundOrRefreshTokenCountInvalidError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RefreshTokenCountInvalidError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ResetAlreadyRequestedError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserDisabledError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"JwtUser":{"properties":{"id":{"type":"integer"},"uuid":{"format":"uuid","type":"string"},"email":{"format":"email","type":"string"},"username":{"type":"string"},"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"enabled":{"type":"boolean"},"refreshTokenCount":{"minLength":1,"type":"integer"},"profilePic":{"type":"string"}},"type":"object","required":["id","uuid","firstname","lastname","enabled","refreshTokenCount"]},"ResponsePrincipal":{"properties":{"id":{"type":"integer"}},"type":"object","required":["id"]},"ResponseUser":{"properties":{"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"username":{"type":"string"},"enabled":{"type":"boolean"},"profilePic":{"type":"string"},"groups":{"items":{},"type":"array"},"permissions":{"items":{},"type":"array"},"id":{"type":"integer"}},"type":"object","required":["firstname","middlename","lastname","phone","email","username","enabled","profilePic","id"]},"ResponsePermission":{"properties":{"id":{"type":"integer"},"principal":{"minLength":1,"type":"object"},"target":{"enum":["RUNNER","ORGANISATION","TEAM","TRACK","USER","USERGROUP","PERMISSION","STATSCLIENT","DONOR","SCAN","STATION","CARD","DONATION","CONTACT"],"type":"string","minLength":1},"action":{"enum":["GET","CREATE","UPDATE","DELETE","IMPORT"],"type":"string","minLength":1}},"type":"object","required":["id","principal","target","action"]},"Permission":{"properties":{"id":{"type":"integer"},"target":{"enum":["RUNNER","ORGANISATION","TEAM","TRACK","USER","USERGROUP","PERMISSION","STATSCLIENT","DONOR","SCAN","STATION","CARD","DONATION","CONTACT"],"type":"string","minLength":1},"action":{"enum":["GET","CREATE","UPDATE","DELETE","IMPORT"],"type":"string"}},"type":"object","required":["id","target","action"]},"Principal":{"properties":{"id":{"type":"integer"}},"type":"object","required":["id"]},"UserAction":{"properties":{"id":{"type":"integer"},"target":{"type":"string","minLength":1},"action":{"enum":["GET","CREATE","UPDATE","DELETE","IMPORT"],"type":"string"},"changed":{"type":"string"}},"type":"object","required":["id","target","action"]},"ResponseUserGroup":{"properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"permissions":{"items":{},"type":"array"},"id":{"type":"integer"}},"type":"object","required":["name","id"]},"UserGroup":{"properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"id":{"type":"integer"}},"type":"object","required":["name","id"]},"User":{"properties":{"uuid":{"format":"uuid","type":"string"},"email":{"minLength":1,"type":"string","format":"email"},"phone":{"type":"string"},"username":{"type":"string"},"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"password":{"minLength":1,"type":"string"},"groups":{},"enabled":{"type":"boolean"},"refreshTokenCount":{"type":"integer"},"profilePic":{"format":"url","type":"string"},"resetRequestedTimestamp":{"type":"string"},"actions":{},"id":{"type":"integer"}},"type":"object","required":["uuid","email","username","firstname","lastname","password","enabled","refreshTokenCount","profilePic","id"]},"UsernameContainsIllegalCharacterError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserEmailNeededError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserDeletionNotConfirmedError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ResponseAuth":{"properties":{"access_token":{"type":"string"},"refresh_token":{"type":"string"},"access_token_expires_at":{"type":"integer"},"refresh_token_expires_at":{"type":"integer"}},"type":"object","required":["access_token","refresh_token","access_token_expires_at","refresh_token_expires_at"]},"CreateAuth":{"properties":{"username":{"type":"string"},"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":1}},"type":"object","required":["password"]},"CreateResetToken":{"properties":{"username":{"type":"string"},"email":{"type":"string","format":"email"}},"type":"object"},"Logout":{"properties":{"timestamp":{"type":"string"}},"type":"object","required":["timestamp"]},"HandleLogout":{"properties":{"token":{"type":"string"}},"type":"object"},"RefreshAuth":{"properties":{"token":{"type":"string"}},"type":"object"},"ResetPassword":{"properties":{"resetToken":{"type":"string"},"password":{"type":"string","minLength":1}},"type":"object","required":["password"]},"DonationNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"DonationIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"DonorNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"DonorIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"DonorReceiptAddressNeededError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"DonorHasDonationsError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerGroupNeededError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerHasDistanceDonationsError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"AddressPostalCodeInvalidError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"AddressFirstLineEmptyError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"AddressPostalCodeEmptyError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"AddressCityEmptyError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"AddressCountryEmptyError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"Address":{"properties":{"address1":{"type":"string"},"address2":{"type":"string"},"postalcode":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"}},"type":"object","required":["address1","address2","postalcode","city","country"]},"ResponseParticipant":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"address":{"type":"object"}},"type":"object","required":["id","firstname","middlename","lastname","phone","email"]},"ResponseDonor":{"properties":{"receiptNeeded":{"type":"boolean"},"donationAmount":{"type":"integer"},"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"address":{"type":"object"}},"type":"object","required":["receiptNeeded","donationAmount","id","firstname","middlename","lastname","phone","email"]},"ResponseDonation":{"properties":{"id":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"donor":{"minLength":1,"type":"string"},"amount":{"type":"integer"}},"type":"object","required":["id","donor","amount"]},"ResponseGroupContact":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"groups":{"type":"object"},"address":{"type":"object"}},"type":"object","required":["id","firstname","middlename","lastname","phone","email","groups","address"]},"GroupContact":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string","minLength":1},"middlename":{"type":"string"},"lastname":{"type":"string","minLength":1},"phone":{"type":"string"},"email":{"format":"email","type":"string"}},"type":"object","required":["id","firstname","lastname"]},"Participant":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string","minLength":1},"middlename":{"type":"string"},"lastname":{"type":"string","minLength":1},"phone":{"type":"string"},"email":{"format":"email","type":"string"}},"type":"object","required":["id","firstname","lastname"]},"RunnerCardNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerCardIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerCardHasScansError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerCardIdOutOfRangeError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ResponseRunnerCard":{"properties":{"id":{"type":"integer"},"runner":{"type":"object"},"code":{"minLength":1,"type":"string"},"enabled":{"type":"boolean"}},"type":"object","required":["id","runner","code","enabled"]},"ResponseScan":{"properties":{"id":{"type":"integer"},"runner":{"minLength":1,"type":"string"},"valid":{"type":"boolean"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["id","runner","valid","distance"]},"TrackNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"TrackIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"TrackLapTimeCantBeNegativeError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"TrackHasScanStationsError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ResponseTrack":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"distance":{"type":"integer"},"minimumLapTime":{"type":"integer"}},"type":"object","required":["id","name","distance"]},"ResponseScanStation":{"properties":{"id":{"type":"integer"},"description":{"type":"string"},"key":{"type":"string"},"prefix":{"minLength":1,"type":"string"},"track":{"minLength":1,"type":"object"},"enabled":{"type":"boolean"}},"type":"object","required":["id","prefix","track","enabled"]},"ResponseTrackScan":{"properties":{"track":{"minLength":1,"type":"string"},"card":{"minLength":1,"type":"string"},"station":{"minLength":1,"type":"string"},"timestamp":{"minLength":1,"type":"string","pattern":"d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d.d+Z?"},"id":{"type":"integer"},"runner":{"minLength":1,"type":"string"},"valid":{"type":"boolean"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["track","card","station","timestamp","id","runner","valid","distance"]},"Scan":{"properties":{"id":{"type":"integer"},"runner":{"minLength":1,"type":"string"},"valid":{"type":"boolean"},"_distance":{"type":"integer"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["id","runner","valid","_distance","distance"]},"Track":{"properties":{"id":{"type":"integer"},"name":{"minLength":1,"type":"string"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"minimumLapTime":{"type":"integer"}},"type":"object","required":["id","name","distance"]},"ScanStation":{"properties":{"id":{"type":"integer"},"description":{"type":"string"},"track":{"minLength":1,"type":"string"},"prefix":{"type":"string"},"key":{"type":"string","minLength":1},"cleartextkey":{"type":"string"},"enabled":{"type":"boolean"}},"type":"object","required":["id","track","prefix","key","enabled"]},"TrackScan":{"properties":{"track":{"minLength":1,"type":"string"},"card":{"minLength":1,"type":"string"},"station":{"minLength":1,"type":"string"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"timestamp":{"type":"integer"},"id":{"type":"integer"},"runner":{"minLength":1,"type":"string"},"valid":{"type":"boolean"},"_distance":{"type":"integer"}},"type":"object","required":["track","card","station","distance","timestamp","id","runner","valid","_distance"]},"RunnerCard":{"properties":{"id":{"type":"integer"},"runner":{},"enabled":{"type":"boolean"}},"type":"object","required":["id","enabled"]},"Runner":{"properties":{"group":{"minLength":1,"type":"string"},"distance":{"type":"integer"},"distanceDonationAmount":{"type":"integer"},"id":{"type":"integer"},"firstname":{"type":"string","minLength":1},"middlename":{"type":"string"},"lastname":{"type":"string","minLength":1},"phone":{"type":"string"},"email":{"format":"email","type":"string"}},"type":"object","required":["group","distance","distanceDonationAmount","id","firstname","lastname"]},"RunnerGroup":{"properties":{"id":{"type":"integer"},"name":{"type":"string","minLength":1},"contact":{},"distance":{"type":"integer"},"distanceDonationAmount":{"type":"integer"}},"type":"object","required":["id","name","distance","distanceDonationAmount"]},"ResponseRunner":{"properties":{"distance":{"type":"integer"},"group":{"type":"object"},"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"address":{"type":"object"}},"type":"object","required":["distance","group","id","firstname","middlename","lastname","phone","email"]},"ResponseDistanceDonation":{"properties":{"runner":{"type":"object"},"amountPerDistance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"id":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"donor":{"minLength":1,"type":"string"},"amount":{"type":"integer"}},"type":"object","required":["runner","amountPerDistance","id","donor","amount"]},"Donor":{"properties":{"receiptNeeded":{"type":"boolean"},"donationAmount":{"type":"integer"},"id":{"type":"integer"},"firstname":{"type":"string","minLength":1},"middlename":{"type":"string"},"lastname":{"type":"string","minLength":1},"phone":{"type":"string"},"email":{"format":"email","type":"string"}},"type":"object","required":["receiptNeeded","donationAmount","id","firstname","lastname"]},"Donation":{"properties":{"id":{"type":"integer"},"donor":{"minLength":1,"type":"string"}},"type":"object","required":["id","donor"]},"DistanceDonation":{"properties":{"runner":{"minLength":1,"type":"string"},"amountPerDistance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"id":{"type":"integer"},"donor":{"minLength":1,"type":"string"}},"type":"object","required":["runner","amountPerDistance","id","donor"]},"CreateDonation":{"properties":{"donor":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["donor"]},"CreateDistanceDonation":{"properties":{"runner":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"amountPerDistance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"donor":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["runner","amountPerDistance","donor"]},"FixedDonation":{"properties":{"_amount":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"amount":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"id":{"type":"integer"},"donor":{"minLength":1,"type":"string"}},"type":"object","required":["_amount","amount","id","donor"]},"CreateFixedDonation":{"properties":{"amount":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"donor":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["amount","donor"]},"UpdateDonation":{"properties":{"id":{"type":"integer"},"donor":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["id","donor"]},"UpdateDistanceDonation":{"properties":{"runner":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"amountPerDistance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"id":{"type":"integer"},"donor":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["runner","amountPerDistance","id","donor"]},"UpdateFixedDonation":{"properties":{"amount":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"id":{"type":"integer"},"donor":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["amount","id","donor"]},"ResponseEmpty":{"properties":{"response":{"type":"string"}},"type":"object","required":["response"]},"CreateParticipant":{"properties":{"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"address":{"type":"object"}},"type":"object","required":["firstname","lastname"]},"CreateDonor":{"properties":{"receiptNeeded":{"type":"boolean"},"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"address":{"type":"object"}},"type":"object","required":["firstname","lastname"]},"UpdateDonor":{"properties":{"id":{"type":"integer"},"receiptNeeded":{"type":"boolean"},"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"address":{"type":"object"}},"type":"object","required":["id","firstname","lastname"]},"GroupContactNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"GroupContactIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerGroupNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"CreateGroupContact":{"properties":{"firstname":{"type":"string","minLength":1},"middlename":{"type":"string"},"lastname":{"type":"string","minLength":1},"address":{"type":"object"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"groups":{}},"type":"object","required":["firstname","lastname"]},"UpdateGroupContact":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string","minLength":1},"middlename":{"type":"string"},"lastname":{"type":"string","minLength":1},"address":{"type":"object"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"groups":{}},"type":"object","required":["id","firstname","lastname"]},"RunnerOrganisationNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerOrganisationIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerOrganisationHasRunnersError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerOrganisationHasTeamsError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerOrganisationWrongTypeError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ResponseRunnerGroup":{"properties":{"id":{"minLength":1,"type":"integer"},"name":{"minLength":1,"type":"string"},"contact":{"type":"object"}},"type":"object","required":["id","name"]},"ResponseRunnerOrganisation":{"properties":{"address":{"type":"object"},"teams":{"items":{},"type":"array"},"id":{"minLength":1,"type":"integer"},"name":{"minLength":1,"type":"string"},"contact":{"type":"object"}},"type":"object","required":["teams","id","name"]},"ResponseRunnerTeam":{"properties":{"parentGroup":{"minLength":1,"type":"object"},"id":{"minLength":1,"type":"integer"},"name":{"minLength":1,"type":"string"},"contact":{"type":"object"}},"type":"object","required":["parentGroup","id","name"]},"RunnerTeam":{"properties":{"parentGroup":{"minLength":1,"type":"string"},"id":{"type":"integer"},"name":{"type":"string","minLength":1},"contact":{},"distance":{"type":"integer"},"distanceDonationAmount":{"type":"integer"}},"type":"object","required":["parentGroup","id","name","distance","distanceDonationAmount"]},"RunnerOrganisation":{"properties":{"address":{},"distance":{"type":"integer"},"distanceDonationAmount":{"type":"integer"},"id":{"type":"integer"},"name":{"type":"string","minLength":1},"contact":{}},"type":"object","required":["distance","distanceDonationAmount","id","name"]},"RunnerTeamNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerTeamIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerTeamHasRunnersError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerTeamNeedsParentError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"CreateRunner":{"properties":{"group":{"type":"integer"},"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"address":{"type":"object"}},"type":"object","required":["group","firstname","lastname"]},"ImportRunner":{"properties":{"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"team":{"type":"string"},"class":{"type":"string"}},"type":"object","required":["firstname","lastname"]},"UpdateRunner":{"properties":{"id":{"type":"integer"},"group":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"address":{"type":"object"}},"type":"object","required":["id","group","firstname","lastname"]},"CreateRunnerCard":{"properties":{"runner":{"type":"integer"},"enabled":{"type":"boolean"}},"type":"object","required":["enabled"]},"UpdateRunnerCard":{"properties":{"id":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"runner":{"type":"integer"},"enabled":{"type":"boolean"}},"type":"object","required":["id","enabled"]},"ScanNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ScanIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ScanStationNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ScanStationIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ScanStationHasScansError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"CreateScan":{"properties":{"runner":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"valid":{"type":"boolean"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["runner","distance"]},"CreateTrackScan":{"properties":{"card":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"station":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["card","station"]},"UpdateScan":{"properties":{"id":{"type":"integer"},"runner":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"valid":{"type":"boolean"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["id","runner","distance"]},"UpdateTrackScan":{"properties":{"id":{"type":"integer"},"runner":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"valid":{"type":"boolean"},"station":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["id","runner","station"]},"GroupNameNeededError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserGroupNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserGroupIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UpdateUser":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"username":{"type":"string"},"email":{"minLength":1,"type":"string","format":"email"},"phone":{"type":"string"},"password":{"type":"string"},"enabled":{"type":"boolean"},"groups":{},"profilePic":{"format":"url","type":"string"}},"type":"object","required":["id","firstname","lastname","email"]},"ResponseUserPermissions":{"properties":{"directlyGranted":{"items":{},"type":"array"},"inherited":{"items":{},"type":"array"}},"type":"object"},"PermissionNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"PermissionIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"PermissionNeedsPrincipalError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"PrincipalNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"PrincipalWrongTypeError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"CreatePermission":{"properties":{"principal":{"minLength":1,"type":"integer"},"target":{"enum":["RUNNER","ORGANISATION","TEAM","TRACK","USER","USERGROUP","PERMISSION","STATSCLIENT","DONOR","SCAN","STATION","CARD","DONATION","CONTACT"],"type":"string","minLength":1},"action":{"enum":["GET","CREATE","UPDATE","DELETE","IMPORT"],"type":"string","minLength":1}},"type":"object","required":["principal","target","action"]},"UpdatePermission":{"properties":{"id":{"type":"integer"},"principal":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"target":{"minLength":1,"type":"string"},"action":{"minLength":1,"type":"string"}},"type":"object","required":["id","principal","target","action"]},"CreateRunnerGroup":{"properties":{"name":{"type":"string","minLength":1},"contact":{"type":"integer"}},"type":"object","required":["name"]},"CreateRunnerOrganisation":{"properties":{"address":{"type":"object"},"name":{"type":"string","minLength":1},"contact":{"type":"integer"}},"type":"object","required":["name"]},"UpdateRunnerOrganisation":{"properties":{"id":{"type":"integer"},"address":{"type":"object"},"name":{"type":"string","minLength":1},"contact":{"type":"integer"}},"type":"object","required":["id","name"]},"CreateRunnerTeam":{"properties":{"parentGroup":{"minLength":1,"type":"integer"},"name":{"type":"string","minLength":1},"contact":{"type":"integer"}},"type":"object","required":["parentGroup","name"]},"UpdateRunnerTeam":{"properties":{"id":{"type":"integer"},"parentGroup":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"name":{"type":"string","minLength":1},"contact":{"type":"integer"}},"type":"object","required":["id","parentGroup","name"]},"CreateScanStation":{"properties":{"description":{"type":"string"},"track":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"enabled":{"type":"boolean"}},"type":"object","required":["track"]},"UpdateScanStation":{"properties":{"id":{"type":"integer"},"description":{"type":"string"},"enabled":{"type":"boolean"}},"type":"object","required":["id"]},"StatsClientNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"StatsClientIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ResponseStatsClient":{"properties":{"id":{"type":"integer"},"description":{"type":"string"},"key":{"type":"string"},"prefix":{"minLength":1,"type":"string"}},"type":"object","required":["id","prefix"]},"StatsClient":{"properties":{"id":{"type":"integer"},"description":{"type":"string"},"prefix":{"type":"string"},"key":{"type":"string"},"cleartextkey":{"type":"string"}},"type":"object","required":["id","prefix","key"]},"CreateStatsClient":{"properties":{"description":{"type":"string"}},"type":"object"},"ResponseStats":{"properties":{"total_runners":{"type":"integer"},"total_teams":{"type":"integer"},"total_orgs":{"type":"integer"},"total_users":{"type":"integer"},"total_scans":{"type":"integer"},"total_distance":{"type":"integer"},"total_donation":{"type":"integer"},"average_distance":{"type":"integer"}},"type":"object","required":["total_runners","total_teams","total_orgs","total_users","total_scans","total_distance","total_donation","average_distance"]},"ResponseStatsOrgnisation":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"distance":{"type":"integer"},"donationAmount":{"type":"integer"}},"type":"object","required":["id","name","distance","donationAmount"]},"ResponseStatsRunner":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"distance":{"type":"integer"},"donationAmount":{"type":"integer"},"group":{"type":"object"}},"type":"object","required":["id","firstname","middlename","lastname","distance","donationAmount","group"]},"ResponseStatsTeam":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"distance":{"type":"integer"},"donationAmount":{"type":"integer"},"parent":{"type":"object"}},"type":"object","required":["id","name","distance","donationAmount","parent"]},"CreateTrack":{"properties":{"name":{"minLength":1,"type":"string"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"minimumLapTime":{"type":"integer"}},"type":"object","required":["name","distance"]},"UpdateTrack":{"properties":{"id":{"type":"integer"},"name":{"minLength":1,"type":"string"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"minimumLapTime":{"type":"integer"}},"type":"object","required":["id","name","distance"]},"CreateUser":{"properties":{"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"username":{"type":"string"},"email":{"minLength":1,"type":"string","format":"email"},"phone":{"type":"string"},"password":{"type":"string"},"enabled":{"type":"boolean"},"groups":{},"profilePic":{"format":"url","type":"string"}},"type":"object","required":["firstname","lastname","email","password"]},"CreateUserGroup":{"properties":{"name":{"type":"string"},"description":{"type":"string"}},"type":"object","required":["name"]},"UpdateUserGroup":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"description":{"type":"string"}},"type":"object","required":["id","name"]}},"securitySchemes":{"AuthToken":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"A JWT based access token. Use /api/auth/login or /api/auth/refresh to get one."},"RefreshTokenCookie":{"type":"apiKey","in":"cookie","name":"lfk_backend__refresh_token","description":"A cookie containing a JWT based refreh token. Attention: Doesn't work in swagger-ui. Use /api/auth/login or /api/auth/refresh to get one."},"StatsApiToken":{"type":"http","scheme":"bearer","description":"Api token that can be obtained by creating a new stats client (post to /api/statsclients). Only valid for obtaining stats."},"StationApiToken":{"type":"http","scheme":"bearer","description":"Api token that can be obtained by creating a new scan station (post to /api/stations). Only valid for creating scans."}}},"info":{"title":"LfK! Backend API","version":"0.2.0","description":"The the backend API for the LfK! runner system."},"openapi":"3.0.0","paths":{"/api/auth/login":{"post":{"operationId":"AuthController.login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAuth"}}},"description":"CreateAuth","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseAuth"},{"$ref":"#/components/schemas/InvalidCredentialsError"},{"$ref":"#/components/schemas/UserNotFoundError"},{"$ref":"#/components/schemas/UsernameOrEmailNeededError"},{"$ref":"#/components/schemas/PasswordNeededError"},{"$ref":"#/components/schemas/InvalidCredentialsError"}]}}},"description":""}},"summary":"Login","tags":["Auth"],"description":"Login with your username/email and password.
You will receive: \n * access token (use it as a bearer token) \n * refresh token (will also be sent as a cookie)"}},"/api/auth/logout":{"post":{"operationId":"AuthController.logout","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HandleLogout"}}},"description":"HandleLogout","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Logout"},{"$ref":"#/components/schemas/InvalidCredentialsError"},{"$ref":"#/components/schemas/UserNotFoundError"},{"$ref":"#/components/schemas/UsernameOrEmailNeededError"},{"$ref":"#/components/schemas/PasswordNeededError"},{"$ref":"#/components/schemas/InvalidCredentialsError"}]}}},"description":""}},"summary":"Logout","tags":["Auth"],"description":"Logout using your refresh token.
This instantly invalidates all your access and refresh tokens.","security":[{"RefreshTokenCookie":[]}]}},"/api/auth/refresh":{"post":{"operationId":"AuthController.refresh","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshAuth"}}},"description":"RefreshAuth","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseAuth"},{"$ref":"#/components/schemas/JwtNotProvidedError"},{"$ref":"#/components/schemas/IllegalJWTError"},{"$ref":"#/components/schemas/UserNotFoundError"},{"$ref":"#/components/schemas/RefreshTokenCountInvalidError"}]}}},"description":""}},"summary":"Refresh","tags":["Auth"],"description":"Refresh your access and refresh tokens using a valid refresh token.
You will receive: \n * access token (use it as a bearer token) \n * refresh token (will also be sent as a cookie)","security":[{"RefreshTokenCookie":[]}]}},"/api/auth/reset":{"post":{"operationId":"AuthController.getResetToken","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateResetToken"}}},"description":"CreateResetToken","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseAuth"},{"$ref":"#/components/schemas/UserNotFoundError"},{"$ref":"#/components/schemas/UsernameOrEmailNeededError"}]}}},"description":""}},"summary":"Get reset token","tags":["Auth"],"description":"Request a password reset token.
This will provide you with a reset token that you can use by posting to /api/auth/reset/{token}."}},"/api/auth/reset/{token}":{"post":{"operationId":"AuthController.resetPassword","parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPassword"}}},"description":"ResetPassword","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseAuth"},{"$ref":"#/components/schemas/UserNotFoundError"},{"$ref":"#/components/schemas/UsernameOrEmailNeededError"}]}}},"description":""}},"summary":"Reset password","tags":["Auth"],"description":"Reset a user's utilising a valid password reset token.
This will set the user's password to the one you provided in the body.
To get a reset token post to /api/auth/reset with your username."}},"/api/donations":{"get":{"operationId":"DonationController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"items":{"$ref":"#/components/schemas/ResponseDonation"},"type":"array"},{"items":{"$ref":"#/components/schemas/ResponseDistanceDonation"},"type":"array"}]}}},"description":""}},"summary":"Get all","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all donations (fixed or distance based) from all donors.
This includes the donations's runner's distance ran(if distance donation)."}},"/api/donations/{id}":{"get":{"operationId":"DonationController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseDonation"},{"$ref":"#/components/schemas/ResponseDistanceDonation"}]}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonationNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the donation whose id got provided. This includes the donation's runner's distance ran (if distance donation)."},"delete":{"operationId":"DonationController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseDonation"},{"$ref":"#/components/schemas/ResponseDistanceDonation"}]}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the donation whose id you provided.
If no donation with this id exists it will just return 204(no content)."}},"/api/donations/fixed":{"post":{"operationId":"DonationController.postFixed","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFixedDonation"}}},"description":"CreateFixedDonation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonorNotFoundError"}}},"description":""}},"summary":"Post fixed","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a fixed donation (not distance donation - use /donations/distance instead).
Please rmemember to provide the donation's donors's id and amount."}},"/api/donations/distance":{"post":{"operationId":"DonationController.postDistance","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDistanceDonation"}}},"description":"CreateDistanceDonation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDistanceDonation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/DonorNotFoundError"},{"$ref":"#/components/schemas/RunnerNotFoundError"}]}}},"description":""}},"summary":"Post distance","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a distance donation (not fixed donation - use /donations/fixed instead).
Please rmemember to provide the donation's donors's and runners ids and amount per distance (kilometer)."}},"/api/donations/fixed/{id}":{"put":{"operationId":"DonationController.putFixed","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFixedDonation"}}},"description":"UpdateFixedDonation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/DonationNotFoundError"},{"$ref":"#/components/schemas/DonorNotFoundError"},{"$ref":"#/components/schemas/RunnerNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonationIdsNotMatchingError"}}},"description":""}},"summary":"Put fixed","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the fixed donation (not distance donation - use /donations/distance instead) whose id you provided.
Please remember that ids can't be changed and amounts must be positive."}},"/api/donations/distance/{id}":{"put":{"operationId":"DonationController.putDistance","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDistanceDonation"}}},"description":"UpdateDistanceDonation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/DonationNotFoundError"},{"$ref":"#/components/schemas/DonorNotFoundError"},{"$ref":"#/components/schemas/RunnerNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonationIdsNotMatchingError"}}},"description":""}},"summary":"Put distance","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the distance donation (not fixed donation - use /donations/fixed instead) whose id you provided.
Please remember that ids can't be changed and amountPerDistance must be positive."}},"/api/donors":{"get":{"operationId":"DonorController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseDonor"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Donor"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all donor.
This includes the donor's current donation amount."},"post":{"operationId":"DonorController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDonor"}}},"description":"CreateDonor","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonor"}}},"description":""}},"summary":"Post","tags":["Donor"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new donor."}},"/api/donors/{id}":{"get":{"operationId":"DonorController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonor"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonorNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Donor"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the donor whose id got provided.
This includes the donor's current donation amount."},"put":{"operationId":"DonorController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDonor"}}},"description":"UpdateDonor","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonor"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonorNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonorIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Donor"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the donor whose id you provided.
Please remember that ids can't be changed."},"delete":{"operationId":"DonorController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonor"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Donor"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the donor whose id you provided.
If no donor with this id exists it will just return 204(no content).
If the donor still has donations associated this will fail, please provide the query param ?force=true to delete the donor with all associated donations."}},"/api/contacts":{"get":{"operationId":"GroupContactController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseGroupContact"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Group Contact"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all contacts.
This includes the contact's associated groups."},"post":{"operationId":"GroupContactController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGroupContact"}}},"description":"CreateGroupContact","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGroupContact"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""}},"summary":"Post","tags":["Group Contact"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new contact."}},"/api/contacts/{id}":{"get":{"operationId":"GroupContactController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGroupContact"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupContactNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Group Contact"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the contact whose id got provided.
This includes the contact's associated groups."},"put":{"operationId":"GroupContactController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGroupContact"}}},"description":"UpdateGroupContact","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGroupContact"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/GroupContactNotFoundError"},{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupContactIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Group Contact"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the contact whose id you provided.
Please remember that ids can't be changed."},"delete":{"operationId":"GroupContactController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGroupContact"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Group Contact"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the contact whose id you provided.
If no contact with this id exists it will just return 204(no content).
This won't delete any groups associated with the contact."}},"/api/scans":{"get":{"operationId":"ScanController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"items":{"$ref":"#/components/schemas/ResponseScan"},"type":"array"},{"items":{"$ref":"#/components/schemas/ResponseTrackScan"},"type":"array"}]}}},"description":""}},"summary":"Get all","tags":["Scan"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all scans (normal or track) from all runners.
This includes the scan's runner's distance ran."},"post":{"operationId":"ScanController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateScan"}}},"description":"CreateScan","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScan"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerNotFoundError"}}},"description":""}},"summary":"Post","tags":["Scan"],"security":[{"AuthToken":[],"ScanApiToken":[]},{"RefreshTokenCookie":[],"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new scan (not track scan - use /scans/trackscans instead).
Please rmemember to provide the scan's runner's id and distance."}},"/api/scans/{id}":{"get":{"operationId":"ScanController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseScan"},{"$ref":"#/components/schemas/ResponseTrackScan"}]}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Scan"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the scan whose id got provided. This includes the scan's runner's distance ran."},"put":{"operationId":"ScanController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateScan"}}},"description":"UpdateScan","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScan"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ScanNotFoundError"},{"$ref":"#/components/schemas/RunnerNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Scan"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the scan (not track scan use /scans/trackscans/:id instead) whose id you provided.
Please remember that ids can't be changed and distances must be positive."},"delete":{"operationId":"ScanController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScan"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Scan"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the scan whose id you provided.
If no scan with this id exists it will just return 204(no content)."}},"/api/scans/trackscans":{"post":{"operationId":"ScanController.postTrackScans","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTrackScan"}}},"description":"CreateTrackScan","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTrackScan"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerNotFoundError"}}},"description":""}},"summary":"Post track scans","tags":["Scan"],"security":[{"AuthToken":[],"ScanApiToken":[]},{"RefreshTokenCookie":[],"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new track scan (for \"normal\" scans use /scans instead).
Please remember that to provide the scan's card's station's id."}},"/api/scans/trackscans/{id}":{"put":{"operationId":"ScanController.putTrackScan","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTrackScan"}}},"description":"UpdateTrackScan","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTrackScan"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ScanNotFoundError"},{"$ref":"#/components/schemas/RunnerNotFoundError"},{"$ref":"#/components/schemas/ScanStationNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanIdsNotMatchingError"}}},"description":""}},"summary":"Put track scan","tags":["Scan"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the track scan (not \"normal\" scan use /scans/trackscans/:id instead) whose id you provided.
Please remember that only the validity, runner and track can be changed."}},"/api/cards":{"get":{"operationId":"RunnerCardController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunnerCard"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Runner Card"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all card."},"post":{"operationId":"RunnerCardController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRunnerCard"}}},"description":"CreateRunnerCard","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerCard"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerNotFoundError"}}},"description":""}},"summary":"Post","tags":["Runner Card"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new card.
You can provide a associated runner by id but you don't have to."}},"/api/cards/{id}":{"get":{"operationId":"RunnerCardController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerCard"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerCardNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Runner Card"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the card whose id got provided."},"put":{"operationId":"RunnerCardController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRunnerCard"}}},"description":"UpdateRunnerCard","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerCard"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/RunnerCardNotFoundError"},{"$ref":"#/components/schemas/RunnerNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerCardIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Runner Card"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the card whose id you provided.
Scans created via this card will still be associated with the old runner.
Please remember that ids can't be changed."},"delete":{"operationId":"RunnerCardController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerCard"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerCardHasScansError"}}},"description":""}},"summary":"Remove","tags":["Runner Card"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the card whose id you provided.
If no card with this id exists it will just return 204(no content).
If the card still has scans associated you have to provide the force=true query param (warning: this deletes all scans associated with by this card - please disable it instead or just remove the runner association)."}},"/api/runners":{"get":{"operationId":"RunnerController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Runner"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all runners from all teams/orgs.
This includes the runner's group and distance ran."},"post":{"operationId":"RunnerController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRunner"}}},"description":"CreateRunner","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseRunner"},{"$ref":"#/components/schemas/RunnerGroupNeededError"},{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}]}}},"description":""}},"summary":"Post","tags":["Runner"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new runner.
Please remeber to provide the runner's group's id."}},"/api/runners/{id}":{"get":{"operationId":"RunnerController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunner"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Runner"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the runner whose id got provided."},"put":{"operationId":"RunnerController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRunner"}}},"description":"UpdateRunner","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunner"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Runner"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the runner whose id you provided.
Please remember that ids can't be changed."},"delete":{"operationId":"RunnerController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunner"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerHasDistanceDonationsError"}}},"description":""}},"summary":"Remove","tags":["Runner"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the runner whose id you provided.
This will also delete all scans and cards associated with the runner.
If no runner with this id exists it will just return 204(no content)."}},"/api/runners/import":{"post":{"operationId":"ImportController.postJSON","parameters":[{"in":"query","name":"group","required":false,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ImportRunner"},"type":"array"}}},"description":"ImportRunner","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNeededError"}}},"description":""}},"summary":"Post json","tags":["Import"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create new runners from json and insert them into the provided group.
If teams/classes are provided alongside the runner's name they'll automaticly be created under the provided org and the runners will be inserted into the teams instead."}},"/api/organisations/{id}/import":{"post":{"operationId":"ImportController.postOrgsJSON","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ImportRunner"},"type":"array"}}},"description":"ImportRunner","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNeededError"}}},"description":""}},"summary":"Post orgs json","tags":["Import"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create new runners from json and insert them into the provided org.
If teams/classes are provided alongside the runner's name they'll automaticly be created under the provided org and the runners will be inserted into the teams instead."}},"/api/teams/{id}/import":{"post":{"operationId":"ImportController.postTeamsJSON","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ImportRunner"},"type":"array"}}},"description":"ImportRunner","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNeededError"}}},"description":""}},"summary":"Post teams json","tags":["Import"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create new runners from json and insert them into the provided team"}},"/api/runners/import/csv":{"post":{"operationId":"ImportController.postCSV","parameters":[{"in":"query","name":"group","required":false,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNeededError"}}},"description":""}},"summary":"Post csv","tags":["Import"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create new runners from csv and insert them into the provided group.
If teams/classes are provided alongside the runner's name they'll automaticly be created under the provided org and the runners will be inserted into the teams instead."}},"/api/organisations/{id}/import/csv":{"post":{"operationId":"ImportController.postOrgsCSV","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNeededError"}}},"description":""}},"summary":"Post orgs csv","tags":["Import"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create new runners from csv and insert them into the provided org.
If teams/classes are provided alongside the runner's name they'll automaticly be created under the provided org and the runners will be inserted into the teams instead."}},"/api/teams/{id}/import/csv":{"post":{"operationId":"ImportController.postTeamsCSV","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNeededError"}}},"description":""}},"summary":"Post teams csv","tags":["Import"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create new runners from csv and insert them into the provided team"}},"/api/permissions":{"get":{"operationId":"PermissionController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponsePermission"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Permission"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all permissions for all users and groups."},"post":{"operationId":"PermissionController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePermission"}}},"description":"CreatePermission","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponsePermission"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrincipalNotFoundError"}}},"description":""}},"summary":"Post","tags":["Permission"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new permission for a existing principal(user/group).
If a permission with this target, action and prinicpal already exists that permission will be returned instead of creating a new one."}},"/api/permissions/{id}":{"get":{"operationId":"PermissionController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponsePermission"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Permission"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the permission whose id got provided."},"put":{"operationId":"PermissionController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePermission"}}},"description":"UpdatePermission","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponsePrincipal"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PermissionNotFoundError"},{"$ref":"#/components/schemas/PrincipalNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PermissionIdsNotMatchingError"},{"$ref":"#/components/schemas/PermissionNeedsPrincipalError"}]}}},"description":""}},"summary":"Put","tags":["Permission"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update a permission object.
If updateing the permission object would result in duplicate permission (same target, action and principal) this permission will get deleted and the existing permission will be returned.
Please remember that ids can't be changed."},"delete":{"operationId":"PermissionController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponsePermission"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Permission"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Deletes the permission whose id you provide.
If no permission with this id exists it will just return 204(no content)."}},"/api/users/me/":{"get":{"operationId":"MeController.getPermissions","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserPermissions"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFoundError"}}},"description":""}},"summary":"Get permissions","tags":["Me"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all permissions granted to the you sorted into directly granted and inherited as permission response objects."},"put":{"operationId":"MeController.put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUser"}}},"description":"UpdateUser","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/UserIdsNotMatchingError"},{"$ref":"#/components/schemas/UsernameContainsIllegalCharacterError"}]}}},"description":""}},"summary":"Put","tags":["Me"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the yourself.
You can't edit your own permissions or group memberships here - Please use the /api/users/:id enpoint instead.
Please remember that ids can't be changed."},"delete":{"operationId":"MeController.remove","parameters":[{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDeletionNotConfirmedError"}}},"description":""}},"summary":"Remove","tags":["Me"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete yourself.
You have to confirm your decision by providing the ?force=true query param.
If there are any permissions directly granted to you they will get deleted as well."}},"/api/teams":{"get":{"operationId":"RunnerTeamController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunnerTeam"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Runner Team"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all teams.
This includes their parent organisation and contact (if existing/associated)."},"post":{"operationId":"RunnerTeamController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRunnerTeam"}}},"description":"CreateRunnerTeam","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerTeam"}}},"description":""}},"summary":"Post","tags":["Runner Team"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new organsisation.
Please remember to provide it's parent group's id."}},"/api/teams/{id}":{"get":{"operationId":"RunnerTeamController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerTeam"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerTeamNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Runner Team"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the team whose id got provided."},"put":{"operationId":"RunnerTeamController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRunnerTeam"}}},"description":"UpdateRunnerTeam","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerTeam"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerTeamNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerTeamIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Runner Team"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the team whose id you provided.
Please remember that ids can't be changed."},"delete":{"operationId":"RunnerTeamController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerTeam"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerTeamHasRunnersError"}}},"description":""}},"summary":"Remove","tags":["Runner Team"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the team whose id you provided.
If the team still has runners associated this will fail.
To delete the team with all associated runners set the force QueryParam to true (cascading deletion might take a while).
This won't delete the associated contact.
If no team with this id exists it will just return 204(no content)."}},"/api/organisations":{"get":{"operationId":"RunnerOrganisationController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunnerOrganisation"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Runner Organisation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all organisations.
This includes their address, contact and teams (if existing/associated)."},"post":{"operationId":"RunnerOrganisationController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRunnerOrganisation"}}},"description":"CreateRunnerOrganisation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerOrganisation"}}},"description":""}},"summary":"Post","tags":["Runner Organisation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new organsisation."}},"/api/organisations/{id}":{"get":{"operationId":"RunnerOrganisationController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerOrganisation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerOrganisationNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Runner Organisation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the organisation whose id got provided."},"put":{"operationId":"RunnerOrganisationController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRunnerOrganisation"}}},"description":"UpdateRunnerOrganisation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerOrganisation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerOrganisationNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerOrganisationIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Runner Organisation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the organisation whose id you provided.
Please remember that ids can't be changed."},"delete":{"operationId":"RunnerOrganisationController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerOrganisation"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""},"406":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/RunnerOrganisationHasTeamsError"},{"$ref":"#/components/schemas/RunnerOrganisationHasRunnersError"}]}}},"description":""}},"summary":"Remove","tags":["Runner Organisation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the organsisation whose id you provided.
If the organisation still has runners and/or teams associated this will fail.
To delete the organisation with all associated runners and teams set the force QueryParam to true (cascading deletion might take a while).
This won't delete the associated contact.
If no organisation with this id exists it will just return 204(no content)."}},"/api/stations":{"get":{"operationId":"ScanStationController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseScanStation"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Scan Station"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all stations.
This includes their associated tracks."},"post":{"operationId":"ScanStationController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateScanStation"}}},"description":"CreateScanStation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScanStation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackNotFoundError"}}},"description":""}},"summary":"Post","tags":["Scan Station"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new station.
Please remeber to provide the station's track's id.
Please also remember that the station key is only visibe on creation."}},"/api/stations/{id}":{"get":{"operationId":"ScanStationController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScanStation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStationNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Scan Station"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the station whose id got provided.
This includes it's associated track."},"put":{"operationId":"ScanStationController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateScanStation"}}},"description":"UpdateScanStation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScanStation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStationNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStationIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Scan Station"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the station whose id you provided.
Please remember that only the description and enabled state can be changed."},"delete":{"operationId":"ScanStationController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScanStation"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStationHasScansError"}}},"description":""}},"summary":"Remove","tags":["Scan Station"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the station whose id you provided.
If no station with this id exists it will just return 204(no content).
If the station still has scans associated you have to provide the force=true query param (warning: this deletes all scans associated with/created by this station - please disable it instead)."}},"/api/statsclients":{"get":{"operationId":"StatsClientController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsClient"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Stats Client"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all stats clients. Please remember that the key can only be viewed on creation."},"post":{"operationId":"StatsClientController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStatsClient"}}},"description":"CreateStatsClient","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseStatsClient"}}},"description":""}},"summary":"Post","tags":["Stats Client"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new stats client.
Please remember that the client's key will be generated automaticly and that it can only be viewed on creation."}},"/api/statsclients/{id}":{"get":{"operationId":"StatsClientController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseStatsClient"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsClientNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Stats Client"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the stats client whose id got provided. Please remember that the key can only be viewed on creation."},"delete":{"operationId":"StatsClientController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseStatsClient"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Stats Client"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the stats client whose id you provided.
If no client with this id exists it will just return 204(no content)."}},"/api/stats":{"get":{"operationId":"StatsController.get","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseStats"}}},"description":""}},"summary":"Get","tags":["Stats"],"description":"A very basic stats endpoint providing basic counters for a dashboard or simmilar"}},"/api/stats/runners/distance":{"get":{"operationId":"StatsController.getTopRunnersByDistance","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsRunner"},"type":"array"}}},"description":""}},"summary":"Get top runners by distance","tags":["Stats"],"description":"Returns the top ten runners by distance.","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/stats/runners/donations":{"get":{"operationId":"StatsController.getTopRunnersByDonations","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsRunner"},"type":"array"}}},"description":""}},"summary":"Get top runners by donations","tags":["Stats"],"description":"Returns the top ten runners by donations.","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/stats/scans":{"get":{"operationId":"StatsController.getTopRunnersByTrackTime","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsRunner"},"type":"array"}}},"description":""}},"summary":"Get top runners by track time","tags":["Stats"],"description":"Returns the top ten fastest track times (with their runner and the runner's group).","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/stats/teams/distance":{"get":{"operationId":"StatsController.getTopTeamsByDistance","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsTeam"},"type":"array"}}},"description":""}},"summary":"Get top teams by distance","tags":["Stats"],"description":"Returns the top ten teams by distance.","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/stats/teams/donations":{"get":{"operationId":"StatsController.getTopTeamsByDonations","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsTeam"},"type":"array"}}},"description":""}},"summary":"Get top teams by donations","tags":["Stats"],"description":"Returns the top ten teams by donations.","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/stats/organisations/distance":{"get":{"operationId":"StatsController.getTopOrgsByDistance","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsOrgnisation"},"type":"array"}}},"description":""}},"summary":"Get top orgs by distance","tags":["Stats"],"description":"Returns the top ten organisations by distance.","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/stats/organisations/donations":{"get":{"operationId":"StatsController.getTopOrgsByDonations","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsOrgnisation"},"type":"array"}}},"description":""}},"summary":"Get top orgs by donations","tags":["Stats"],"description":"Returns the top ten organisations by donations.","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/status":{"get":{"operationId":"StatusController.get","responses":{"200":{"content":{"application/json":{}},"description":"Successful response"}},"summary":"Get","tags":["Status"],"description":"A very basic status/health endpoint that just checks if the database connection is available.
The available information depth will be expanded later."}},"/api/version":{"get":{"operationId":"StatusController.getVersion","responses":{"200":{"content":{"application/json":{}},"description":"Successful response"}},"summary":"Get version","tags":["Status"],"description":"A very basic endpoint that just returns the curent package version."}},"/api/tracks":{"get":{"operationId":"TrackController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseTrack"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Track"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all tracks."},"post":{"operationId":"TrackController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTrack"}}},"description":"CreateTrack","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTrack"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackLapTimeCantBeNegativeError"}}},"description":""}},"summary":"Post","tags":["Track"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new track.
Please remember that the track's distance must be greater than 0."}},"/api/tracks/{id}":{"get":{"operationId":"TrackController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTrack"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Track"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the track whose id got provided."},"put":{"operationId":"TrackController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTrack"}}},"description":"UpdateTrack","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTrack"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/TrackIdsNotMatchingError"},{"$ref":"#/components/schemas/TrackLapTimeCantBeNegativeError"}]}}},"description":""}},"summary":"Put","tags":["Track"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the track whose id you provided.
Please remember that ids can't be changed."},"delete":{"operationId":"TrackController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTrack"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Track"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the track whose id you provided.
If no track with this id exists it will just return 204(no content)."}},"/api/users":{"get":{"operationId":"UserController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseUser"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["User"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all users.
This includes their groups and permissions granted to them."},"post":{"operationId":"UserController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUser"}}},"description":"CreateUser","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsernameContainsIllegalCharacterError"}}},"description":""}},"summary":"Post","tags":["User"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new user.
If you want to grant permissions to the user you have to create them seperately by posting to /api/permissions after creating the user."}},"/api/users/{id}":{"get":{"operationId":"UserController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFoundError"}}},"description":""}},"summary":"Get one","tags":["User"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the user whose id got provided.
Please remember that all permissions granted to the user will show up here."},"put":{"operationId":"UserController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUser"}}},"description":"UpdateUser","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/UserIdsNotMatchingError"},{"$ref":"#/components/schemas/UsernameContainsIllegalCharacterError"}]}}},"description":""}},"summary":"Put","tags":["User"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the user whose id you provided.
To change the permissions directly granted to the user please use /api/permissions instead.
Please remember that ids can't be changed."},"delete":{"operationId":"UserController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDeletionNotConfirmedError"}}},"description":""}},"summary":"Remove","tags":["User"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the user whose id you provided.
You have to confirm your decision by providing the ?force=true query param.
If there are any permissions directly granted to the user they will get deleted as well.
If no user with this id exists it will just return 204(no content)."}},"/api/users/{id}/permissions":{"get":{"operationId":"UserController.getPermissions","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFoundError"}}},"description":""}},"summary":"Get permissions","tags":["User"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all permissions granted to the user sorted into directly granted and inherited as permission response objects."}},"/api/usergroups":{"get":{"operationId":"UserGroupController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserGroup"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["User Group"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all groups.
The information provided might change while the project continues to evolve."},"post":{"operationId":"UserGroupController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserGroup"}}},"description":"CreateUserGroup","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/UserGroup"},{"$ref":"#/components/schemas/UserGroupNotFoundError"}]}}},"description":""}},"summary":"Post","tags":["User Group"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new group.
If you want to grant permissions to the group you have to create them seperately by posting to /api/permissions after creating the group."}},"/api/usergroups/{id}":{"get":{"operationId":"UserGroupController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroup"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroupNotFoundError"}}},"description":""}},"summary":"Get one","tags":["User Group"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the group whose id got provided.
The information provided might change while the project continues to evolve."},"put":{"operationId":"UserGroupController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserGroup"}}},"description":"UpdateUserGroup","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroup"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroupIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["User Group"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the group whose id you provided.
To change the permissions granted to the group please use /api/permissions instead.
Please remember that ids can't be changed."},"delete":{"operationId":"UserGroupController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserGroup"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["User Group"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the group whose id you provided.
If there are any permissions directly granted to the group they will get deleted as well.
Users associated with this group won't get deleted - just deassociated.
If no group with this id exists it will just return 204(no content)."}}}} \ No newline at end of file +{"components":{"schemas":{"IllegalJWTError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserNonexistantOrRefreshtokenInvalidError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"InvalidCredentialsError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"NoPermissionError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UsernameOrEmailNeededError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"PasswordNeededError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"JwtNotProvidedError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserNotFoundOrRefreshTokenCountInvalidError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RefreshTokenCountInvalidError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ResetAlreadyRequestedError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserDisabledError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"JwtUser":{"properties":{"id":{"type":"integer"},"uuid":{"format":"uuid","type":"string"},"email":{"format":"email","type":"string"},"username":{"type":"string"},"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"enabled":{"type":"boolean"},"refreshTokenCount":{"minLength":1,"type":"integer"},"profilePic":{"type":"string"}},"type":"object","required":["id","uuid","firstname","lastname","enabled","refreshTokenCount"]},"ResponsePrincipal":{"properties":{"id":{"type":"integer"}},"type":"object","required":["id"]},"ResponseUser":{"properties":{"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"username":{"type":"string"},"enabled":{"type":"boolean"},"profilePic":{"type":"string"},"groups":{"items":{},"type":"array"},"permissions":{"items":{},"type":"array"},"id":{"type":"integer"}},"type":"object","required":["firstname","middlename","lastname","phone","email","username","enabled","profilePic","id"]},"ResponsePermission":{"properties":{"id":{"type":"integer"},"principal":{"minLength":1,"type":"object"},"target":{"enum":["RUNNER","ORGANISATION","TEAM","TRACK","USER","USERGROUP","PERMISSION","STATSCLIENT","DONOR","SCAN","STATION","CARD","DONATION","CONTACT"],"type":"string","minLength":1},"action":{"enum":["GET","CREATE","UPDATE","DELETE","IMPORT"],"type":"string","minLength":1}},"type":"object","required":["id","principal","target","action"]},"Permission":{"properties":{"id":{"type":"integer"},"target":{"enum":["RUNNER","ORGANISATION","TEAM","TRACK","USER","USERGROUP","PERMISSION","STATSCLIENT","DONOR","SCAN","STATION","CARD","DONATION","CONTACT"],"type":"string","minLength":1},"action":{"enum":["GET","CREATE","UPDATE","DELETE","IMPORT"],"type":"string"}},"type":"object","required":["id","target","action"]},"Principal":{"properties":{"id":{"type":"integer"}},"type":"object","required":["id"]},"UserAction":{"properties":{"id":{"type":"integer"},"target":{"type":"string","minLength":1},"action":{"enum":["GET","CREATE","UPDATE","DELETE","IMPORT"],"type":"string"},"changed":{"type":"string"}},"type":"object","required":["id","target","action"]},"ResponseUserGroup":{"properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"permissions":{"items":{},"type":"array"},"id":{"type":"integer"}},"type":"object","required":["name","id"]},"UserGroup":{"properties":{"name":{"type":"string","minLength":1},"description":{"type":"string"},"id":{"type":"integer"}},"type":"object","required":["name","id"]},"User":{"properties":{"uuid":{"format":"uuid","type":"string"},"email":{"minLength":1,"type":"string","format":"email"},"phone":{"type":"string"},"username":{"type":"string"},"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"password":{"minLength":1,"type":"string"},"groups":{},"enabled":{"type":"boolean"},"refreshTokenCount":{"type":"integer"},"profilePic":{"format":"url","type":"string"},"resetRequestedTimestamp":{"type":"string"},"actions":{},"id":{"type":"integer"}},"type":"object","required":["uuid","email","username","firstname","lastname","password","enabled","refreshTokenCount","profilePic","id"]},"UsernameContainsIllegalCharacterError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserEmailNeededError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserDeletionNotConfirmedError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ResponseAuth":{"properties":{"access_token":{"type":"string"},"refresh_token":{"type":"string"},"access_token_expires_at":{"type":"integer"},"refresh_token_expires_at":{"type":"integer"}},"type":"object","required":["access_token","refresh_token","access_token_expires_at","refresh_token_expires_at"]},"CreateAuth":{"properties":{"username":{"type":"string"},"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":1}},"type":"object","required":["password"]},"CreateResetToken":{"properties":{"username":{"type":"string"},"email":{"type":"string","format":"email"}},"type":"object"},"Logout":{"properties":{"timestamp":{"type":"string"}},"type":"object","required":["timestamp"]},"HandleLogout":{"properties":{"token":{"type":"string"}},"type":"object"},"RefreshAuth":{"properties":{"token":{"type":"string"}},"type":"object"},"ResetPassword":{"properties":{"resetToken":{"type":"string"},"password":{"type":"string","minLength":1}},"type":"object","required":["password"]},"DonationNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"DonationIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"DonorNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"DonorIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"DonorReceiptAddressNeededError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"DonorHasDonationsError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerGroupNeededError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerHasDistanceDonationsError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"AddressPostalCodeInvalidError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"AddressFirstLineEmptyError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"AddressPostalCodeEmptyError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"AddressCityEmptyError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"AddressCountryEmptyError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"Address":{"properties":{"address1":{"type":"string"},"address2":{"type":"string"},"postalcode":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"}},"type":"object","required":["address1","address2","postalcode","city","country"]},"ResponseParticipant":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"address":{"type":"object"}},"type":"object","required":["id","firstname","middlename","lastname","phone","email"]},"ResponseDonor":{"properties":{"receiptNeeded":{"type":"boolean"},"donationAmount":{"type":"integer"},"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"address":{"type":"object"}},"type":"object","required":["receiptNeeded","donationAmount","id","firstname","middlename","lastname","phone","email"]},"ResponseDonation":{"properties":{"id":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"donor":{"minLength":1,"type":"string"},"amount":{"type":"integer"}},"type":"object","required":["id","donor","amount"]},"ResponseGroupContact":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"groups":{"type":"object"},"address":{"type":"object"}},"type":"object","required":["id","firstname","middlename","lastname","phone","email","groups","address"]},"GroupContact":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string","minLength":1},"middlename":{"type":"string"},"lastname":{"type":"string","minLength":1},"phone":{"type":"string"},"email":{"format":"email","type":"string"}},"type":"object","required":["id","firstname","lastname"]},"Participant":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string","minLength":1},"middlename":{"type":"string"},"lastname":{"type":"string","minLength":1},"phone":{"type":"string"},"email":{"format":"email","type":"string"}},"type":"object","required":["id","firstname","lastname"]},"RunnerCardNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerCardIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerCardHasScansError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerCardIdOutOfRangeError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ResponseRunnerCard":{"properties":{"id":{"type":"integer"},"runner":{"type":"object"},"code":{"minLength":1,"type":"string"},"enabled":{"type":"boolean"}},"type":"object","required":["id","runner","code","enabled"]},"ResponseScan":{"properties":{"id":{"type":"integer"},"runner":{"minLength":1,"type":"string"},"valid":{"type":"boolean"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["id","runner","valid","distance"]},"TrackNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"TrackIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"TrackLapTimeCantBeNegativeError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"TrackHasScanStationsError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ResponseTrack":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"distance":{"type":"integer"},"minimumLapTime":{"type":"integer"}},"type":"object","required":["id","name","distance"]},"ResponseScanStation":{"properties":{"id":{"type":"integer"},"description":{"type":"string"},"key":{"type":"string"},"prefix":{"minLength":1,"type":"string"},"track":{"minLength":1,"type":"object"},"enabled":{"type":"boolean"}},"type":"object","required":["id","prefix","track","enabled"]},"ResponseTrackScan":{"properties":{"track":{"minLength":1,"type":"string"},"card":{"minLength":1,"type":"string"},"station":{"minLength":1,"type":"string"},"timestamp":{"minLength":1,"type":"string","pattern":"d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d.d+Z?"},"id":{"type":"integer"},"runner":{"minLength":1,"type":"string"},"valid":{"type":"boolean"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["track","card","station","timestamp","id","runner","valid","distance"]},"Scan":{"properties":{"id":{"type":"integer"},"runner":{"minLength":1,"type":"string"},"valid":{"type":"boolean"},"_distance":{"type":"integer"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["id","runner","valid","_distance","distance"]},"Track":{"properties":{"id":{"type":"integer"},"name":{"minLength":1,"type":"string"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"minimumLapTime":{"type":"integer"}},"type":"object","required":["id","name","distance"]},"ScanStation":{"properties":{"id":{"type":"integer"},"description":{"type":"string"},"track":{"minLength":1,"type":"string"},"prefix":{"type":"string"},"key":{"type":"string","minLength":1},"cleartextkey":{"type":"string"},"enabled":{"type":"boolean"}},"type":"object","required":["id","track","prefix","key","enabled"]},"TrackScan":{"properties":{"track":{"minLength":1,"type":"string"},"card":{"minLength":1,"type":"string"},"station":{"minLength":1,"type":"string"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"timestamp":{"type":"integer"},"id":{"type":"integer"},"runner":{"minLength":1,"type":"string"},"valid":{"type":"boolean"},"_distance":{"type":"integer"}},"type":"object","required":["track","card","station","distance","timestamp","id","runner","valid","_distance"]},"RunnerCard":{"properties":{"id":{"type":"integer"},"runner":{},"enabled":{"type":"boolean"}},"type":"object","required":["id","enabled"]},"Runner":{"properties":{"group":{"minLength":1,"type":"string"},"distance":{"type":"integer"},"distanceDonationAmount":{"type":"integer"},"id":{"type":"integer"},"firstname":{"type":"string","minLength":1},"middlename":{"type":"string"},"lastname":{"type":"string","minLength":1},"phone":{"type":"string"},"email":{"format":"email","type":"string"}},"type":"object","required":["group","distance","distanceDonationAmount","id","firstname","lastname"]},"RunnerGroup":{"properties":{"id":{"type":"integer"},"name":{"type":"string","minLength":1},"contact":{},"distance":{"type":"integer"},"distanceDonationAmount":{"type":"integer"}},"type":"object","required":["id","name","distance","distanceDonationAmount"]},"ResponseRunner":{"properties":{"distance":{"type":"integer"},"group":{"type":"object"},"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"address":{"type":"object"}},"type":"object","required":["distance","group","id","firstname","middlename","lastname","phone","email"]},"ResponseDistanceDonation":{"properties":{"runner":{"type":"object"},"amountPerDistance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"id":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"donor":{"minLength":1,"type":"string"},"amount":{"type":"integer"}},"type":"object","required":["runner","amountPerDistance","id","donor","amount"]},"Donor":{"properties":{"receiptNeeded":{"type":"boolean"},"donationAmount":{"type":"integer"},"id":{"type":"integer"},"firstname":{"type":"string","minLength":1},"middlename":{"type":"string"},"lastname":{"type":"string","minLength":1},"phone":{"type":"string"},"email":{"format":"email","type":"string"}},"type":"object","required":["receiptNeeded","donationAmount","id","firstname","lastname"]},"Donation":{"properties":{"id":{"type":"integer"},"donor":{"minLength":1,"type":"string"}},"type":"object","required":["id","donor"]},"DistanceDonation":{"properties":{"runner":{"minLength":1,"type":"string"},"amountPerDistance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"id":{"type":"integer"},"donor":{"minLength":1,"type":"string"}},"type":"object","required":["runner","amountPerDistance","id","donor"]},"CreateDonation":{"properties":{"donor":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["donor"]},"CreateDistanceDonation":{"properties":{"runner":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"amountPerDistance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"donor":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["runner","amountPerDistance","donor"]},"FixedDonation":{"properties":{"_amount":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"amount":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"id":{"type":"integer"},"donor":{"minLength":1,"type":"string"}},"type":"object","required":["_amount","amount","id","donor"]},"CreateFixedDonation":{"properties":{"amount":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"donor":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["amount","donor"]},"UpdateDonation":{"properties":{"id":{"type":"integer"},"donor":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["id","donor"]},"UpdateDistanceDonation":{"properties":{"runner":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"amountPerDistance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"id":{"type":"integer"},"donor":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["runner","amountPerDistance","id","donor"]},"UpdateFixedDonation":{"properties":{"amount":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"id":{"type":"integer"},"donor":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["amount","id","donor"]},"ResponseEmpty":{"properties":{"response":{"type":"string"}},"type":"object","required":["response"]},"CreateParticipant":{"properties":{"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"address":{"type":"object"}},"type":"object","required":["firstname","lastname"]},"CreateDonor":{"properties":{"receiptNeeded":{"type":"boolean"},"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"address":{"type":"object"}},"type":"object","required":["firstname","lastname"]},"UpdateDonor":{"properties":{"id":{"type":"integer"},"receiptNeeded":{"type":"boolean"},"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"address":{"type":"object"}},"type":"object","required":["id","firstname","lastname"]},"GroupContactNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"GroupContactIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerGroupNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"CreateGroupContact":{"properties":{"firstname":{"type":"string","minLength":1},"middlename":{"type":"string"},"lastname":{"type":"string","minLength":1},"address":{"type":"object"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"groups":{}},"type":"object","required":["firstname","lastname"]},"UpdateGroupContact":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string","minLength":1},"middlename":{"type":"string"},"lastname":{"type":"string","minLength":1},"address":{"type":"object"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"groups":{}},"type":"object","required":["id","firstname","lastname"]},"RunnerOrganisationNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerOrganisationIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerOrganisationHasRunnersError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerOrganisationHasTeamsError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerOrganisationWrongTypeError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ResponseRunnerGroup":{"properties":{"id":{"minLength":1,"type":"integer"},"name":{"minLength":1,"type":"string"},"contact":{"type":"object"}},"type":"object","required":["id","name"]},"ResponseRunnerOrganisation":{"properties":{"address":{"type":"object"},"teams":{"items":{},"type":"array"},"id":{"minLength":1,"type":"integer"},"name":{"minLength":1,"type":"string"},"contact":{"type":"object"}},"type":"object","required":["teams","id","name"]},"ResponseRunnerTeam":{"properties":{"parentGroup":{"minLength":1,"type":"object"},"id":{"minLength":1,"type":"integer"},"name":{"minLength":1,"type":"string"},"contact":{"type":"object"}},"type":"object","required":["parentGroup","id","name"]},"RunnerTeam":{"properties":{"parentGroup":{"minLength":1,"type":"string"},"id":{"type":"integer"},"name":{"type":"string","minLength":1},"contact":{},"distance":{"type":"integer"},"distanceDonationAmount":{"type":"integer"}},"type":"object","required":["parentGroup","id","name","distance","distanceDonationAmount"]},"RunnerOrganisation":{"properties":{"address":{},"distance":{"type":"integer"},"distanceDonationAmount":{"type":"integer"},"id":{"type":"integer"},"name":{"type":"string","minLength":1},"contact":{}},"type":"object","required":["distance","distanceDonationAmount","id","name"]},"RunnerTeamNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerTeamIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerTeamHasRunnersError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"RunnerTeamNeedsParentError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"CreateRunner":{"properties":{"group":{"type":"integer"},"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"address":{"type":"object"}},"type":"object","required":["group","firstname","lastname"]},"ImportRunner":{"properties":{"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"team":{"type":"string"},"class":{"type":"string"}},"type":"object","required":["firstname","lastname"]},"UpdateRunner":{"properties":{"id":{"type":"integer"},"group":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"firstname":{"minLength":1,"type":"string"},"middlename":{"type":"string"},"lastname":{"minLength":1,"type":"string"},"phone":{"type":"string"},"email":{"format":"email","type":"string"},"address":{"type":"object"}},"type":"object","required":["id","group","firstname","lastname"]},"CreateRunnerCard":{"properties":{"runner":{"type":"integer"},"enabled":{"type":"boolean"}},"type":"object","required":["enabled"]},"UpdateRunnerCard":{"properties":{"id":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"runner":{"type":"integer"},"enabled":{"type":"boolean"}},"type":"object","required":["id","enabled"]},"ScanNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ScanIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ScanStationNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ScanStationIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ScanStationHasScansError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"CreateScan":{"properties":{"runner":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"valid":{"type":"boolean"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["runner","distance"]},"CreateTrackScan":{"properties":{"card":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"station":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["card","station"]},"UpdateScan":{"properties":{"id":{"type":"integer"},"runner":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"valid":{"type":"boolean"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["id","runner","distance"]},"UpdateTrackScan":{"properties":{"id":{"type":"integer"},"runner":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"valid":{"type":"boolean"},"station":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["id","runner","station"]},"GroupNameNeededError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserGroupNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UserGroupIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"UpdateUser":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"username":{"type":"string"},"email":{"minLength":1,"type":"string","format":"email"},"phone":{"type":"string"},"password":{"type":"string"},"enabled":{"type":"boolean"},"groups":{},"profilePic":{"format":"url","type":"string"}},"type":"object","required":["id","firstname","lastname","email"]},"ResponseUserPermissions":{"properties":{"directlyGranted":{"items":{},"type":"array"},"inherited":{"items":{},"type":"array"}},"type":"object"},"PermissionNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"PermissionIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"PermissionNeedsPrincipalError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"PrincipalNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"PrincipalWrongTypeError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"CreatePermission":{"properties":{"principal":{"minLength":1,"type":"integer"},"target":{"enum":["RUNNER","ORGANISATION","TEAM","TRACK","USER","USERGROUP","PERMISSION","STATSCLIENT","DONOR","SCAN","STATION","CARD","DONATION","CONTACT"],"type":"string","minLength":1},"action":{"enum":["GET","CREATE","UPDATE","DELETE","IMPORT"],"type":"string","minLength":1}},"type":"object","required":["principal","target","action"]},"UpdatePermission":{"properties":{"id":{"type":"integer"},"principal":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"target":{"minLength":1,"type":"string"},"action":{"minLength":1,"type":"string"}},"type":"object","required":["id","principal","target","action"]},"CreateRunnerGroup":{"properties":{"name":{"type":"string","minLength":1},"contact":{"type":"integer"}},"type":"object","required":["name"]},"CreateRunnerOrganisation":{"properties":{"address":{"type":"object"},"name":{"type":"string","minLength":1},"contact":{"type":"integer"}},"type":"object","required":["name"]},"UpdateRunnerOrganisation":{"properties":{"id":{"type":"integer"},"address":{"type":"object"},"name":{"type":"string","minLength":1},"contact":{"type":"integer"}},"type":"object","required":["id","name"]},"CreateRunnerTeam":{"properties":{"parentGroup":{"minLength":1,"type":"integer"},"name":{"type":"string","minLength":1},"contact":{"type":"integer"}},"type":"object","required":["parentGroup","name"]},"UpdateRunnerTeam":{"properties":{"id":{"type":"integer"},"parentGroup":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"name":{"type":"string","minLength":1},"contact":{"type":"integer"}},"type":"object","required":["id","parentGroup","name"]},"ResponseSelfServiceDonation":{"properties":{"donor":{"minLength":1,"type":"string"},"amount":{"type":"integer"},"amountPerDistance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"}},"type":"object","required":["donor","amount","amountPerDistance"]},"ResponseSelfServiceRunner":{"properties":{"distance":{"type":"integer"},"donationAmount":{"type":"integer"},"group":{"type":"string"},"donations":{"type":"string"},"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"address":{"type":"object"}},"type":"object","required":["distance","donationAmount","group","donations","id","firstname","middlename","lastname","phone","email"]},"CreateScanStation":{"properties":{"description":{"type":"string"},"track":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"enabled":{"type":"boolean"}},"type":"object","required":["track"]},"UpdateScanStation":{"properties":{"id":{"type":"integer"},"description":{"type":"string"},"enabled":{"type":"boolean"}},"type":"object","required":["id"]},"StatsClientNotFoundError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"StatsClientIdsNotMatchingError":{"properties":{"name":{"type":"string"},"message":{"type":"string"}},"type":"object","required":["name","message"]},"ResponseStatsClient":{"properties":{"id":{"type":"integer"},"description":{"type":"string"},"key":{"type":"string"},"prefix":{"minLength":1,"type":"string"}},"type":"object","required":["id","prefix"]},"StatsClient":{"properties":{"id":{"type":"integer"},"description":{"type":"string"},"prefix":{"type":"string"},"key":{"type":"string"},"cleartextkey":{"type":"string"}},"type":"object","required":["id","prefix","key"]},"CreateStatsClient":{"properties":{"description":{"type":"string"}},"type":"object"},"ResponseStats":{"properties":{"total_runners":{"type":"integer"},"total_teams":{"type":"integer"},"total_orgs":{"type":"integer"},"total_users":{"type":"integer"},"total_scans":{"type":"integer"},"total_distance":{"type":"integer"},"total_donation":{"type":"integer"},"average_distance":{"type":"integer"}},"type":"object","required":["total_runners","total_teams","total_orgs","total_users","total_scans","total_distance","total_donation","average_distance"]},"ResponseStatsOrgnisation":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"distance":{"type":"integer"},"donationAmount":{"type":"integer"}},"type":"object","required":["id","name","distance","donationAmount"]},"ResponseStatsRunner":{"properties":{"id":{"type":"integer"},"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"distance":{"type":"integer"},"donationAmount":{"type":"integer"},"group":{"type":"object"}},"type":"object","required":["id","firstname","middlename","lastname","distance","donationAmount","group"]},"ResponseStatsTeam":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"distance":{"type":"integer"},"donationAmount":{"type":"integer"},"parent":{"type":"object"}},"type":"object","required":["id","name","distance","donationAmount","parent"]},"CreateTrack":{"properties":{"name":{"minLength":1,"type":"string"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"minimumLapTime":{"type":"integer"}},"type":"object","required":["name","distance"]},"UpdateTrack":{"properties":{"id":{"type":"integer"},"name":{"minLength":1,"type":"string"},"distance":{"exclusiveMinimum":true,"minimum":0,"type":"integer"},"minimumLapTime":{"type":"integer"}},"type":"object","required":["id","name","distance"]},"CreateUser":{"properties":{"firstname":{"type":"string"},"middlename":{"type":"string"},"lastname":{"type":"string"},"username":{"type":"string"},"email":{"minLength":1,"type":"string","format":"email"},"phone":{"type":"string"},"password":{"type":"string"},"enabled":{"type":"boolean"},"groups":{},"profilePic":{"format":"url","type":"string"}},"type":"object","required":["firstname","lastname","email","password"]},"CreateUserGroup":{"properties":{"name":{"type":"string"},"description":{"type":"string"}},"type":"object","required":["name"]},"UpdateUserGroup":{"properties":{"id":{"type":"integer"},"name":{"type":"string"},"description":{"type":"string"}},"type":"object","required":["id","name"]}},"securitySchemes":{"AuthToken":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"A JWT based access token. Use /api/auth/login or /api/auth/refresh to get one."},"RefreshTokenCookie":{"type":"apiKey","in":"cookie","name":"lfk_backend__refresh_token","description":"A cookie containing a JWT based refreh token. Attention: Doesn't work in swagger-ui. Use /api/auth/login or /api/auth/refresh to get one."},"StatsApiToken":{"type":"http","scheme":"bearer","description":"Api token that can be obtained by creating a new stats client (post to /api/statsclients). Only valid for obtaining stats."},"StationApiToken":{"type":"http","scheme":"bearer","description":"Api token that can be obtained by creating a new scan station (post to /api/stations). Only valid for creating scans."}}},"info":{"title":"LfK! Backend API","version":"0.2.1","description":"The the backend API for the LfK! runner system."},"openapi":"3.0.0","paths":{"/api/auth/login":{"post":{"operationId":"AuthController.login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAuth"}}},"description":"CreateAuth","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseAuth"},{"$ref":"#/components/schemas/InvalidCredentialsError"},{"$ref":"#/components/schemas/UserNotFoundError"},{"$ref":"#/components/schemas/UsernameOrEmailNeededError"},{"$ref":"#/components/schemas/PasswordNeededError"},{"$ref":"#/components/schemas/InvalidCredentialsError"}]}}},"description":""}},"summary":"Login","tags":["Auth"],"description":"Login with your username/email and password.
You will receive: \n * access token (use it as a bearer token) \n * refresh token (will also be sent as a cookie)"}},"/api/auth/logout":{"post":{"operationId":"AuthController.logout","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HandleLogout"}}},"description":"HandleLogout","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Logout"},{"$ref":"#/components/schemas/InvalidCredentialsError"},{"$ref":"#/components/schemas/UserNotFoundError"},{"$ref":"#/components/schemas/UsernameOrEmailNeededError"},{"$ref":"#/components/schemas/PasswordNeededError"},{"$ref":"#/components/schemas/InvalidCredentialsError"}]}}},"description":""}},"summary":"Logout","tags":["Auth"],"description":"Logout using your refresh token.
This instantly invalidates all your access and refresh tokens.","security":[{"RefreshTokenCookie":[]}]}},"/api/auth/refresh":{"post":{"operationId":"AuthController.refresh","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshAuth"}}},"description":"RefreshAuth","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseAuth"},{"$ref":"#/components/schemas/JwtNotProvidedError"},{"$ref":"#/components/schemas/IllegalJWTError"},{"$ref":"#/components/schemas/UserNotFoundError"},{"$ref":"#/components/schemas/RefreshTokenCountInvalidError"}]}}},"description":""}},"summary":"Refresh","tags":["Auth"],"description":"Refresh your access and refresh tokens using a valid refresh token.
You will receive: \n * access token (use it as a bearer token) \n * refresh token (will also be sent as a cookie)","security":[{"RefreshTokenCookie":[]}]}},"/api/auth/reset":{"post":{"operationId":"AuthController.getResetToken","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateResetToken"}}},"description":"CreateResetToken","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseAuth"},{"$ref":"#/components/schemas/UserNotFoundError"},{"$ref":"#/components/schemas/UsernameOrEmailNeededError"}]}}},"description":""}},"summary":"Get reset token","tags":["Auth"],"description":"Request a password reset token.
This will provide you with a reset token that you can use by posting to /api/auth/reset/{token}."}},"/api/auth/reset/{token}":{"post":{"operationId":"AuthController.resetPassword","parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPassword"}}},"description":"ResetPassword","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseAuth"},{"$ref":"#/components/schemas/UserNotFoundError"},{"$ref":"#/components/schemas/UsernameOrEmailNeededError"}]}}},"description":""}},"summary":"Reset password","tags":["Auth"],"description":"Reset a user's utilising a valid password reset token.
This will set the user's password to the one you provided in the body.
To get a reset token post to /api/auth/reset with your username."}},"/api/donations":{"get":{"operationId":"DonationController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"items":{"$ref":"#/components/schemas/ResponseDonation"},"type":"array"},{"items":{"$ref":"#/components/schemas/ResponseDistanceDonation"},"type":"array"}]}}},"description":""}},"summary":"Get all","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all donations (fixed or distance based) from all donors.
This includes the donations's runner's distance ran(if distance donation)."}},"/api/donations/{id}":{"get":{"operationId":"DonationController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseDonation"},{"$ref":"#/components/schemas/ResponseDistanceDonation"}]}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonationNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the donation whose id got provided. This includes the donation's runner's distance ran (if distance donation)."},"delete":{"operationId":"DonationController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseDonation"},{"$ref":"#/components/schemas/ResponseDistanceDonation"}]}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the donation whose id you provided.
If no donation with this id exists it will just return 204(no content)."}},"/api/donations/fixed":{"post":{"operationId":"DonationController.postFixed","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFixedDonation"}}},"description":"CreateFixedDonation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonorNotFoundError"}}},"description":""}},"summary":"Post fixed","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a fixed donation (not distance donation - use /donations/distance instead).
Please rmemember to provide the donation's donors's id and amount."}},"/api/donations/distance":{"post":{"operationId":"DonationController.postDistance","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDistanceDonation"}}},"description":"CreateDistanceDonation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDistanceDonation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/DonorNotFoundError"},{"$ref":"#/components/schemas/RunnerNotFoundError"}]}}},"description":""}},"summary":"Post distance","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a distance donation (not fixed donation - use /donations/fixed instead).
Please rmemember to provide the donation's donors's and runners ids and amount per distance (kilometer)."}},"/api/donations/fixed/{id}":{"put":{"operationId":"DonationController.putFixed","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFixedDonation"}}},"description":"UpdateFixedDonation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/DonationNotFoundError"},{"$ref":"#/components/schemas/DonorNotFoundError"},{"$ref":"#/components/schemas/RunnerNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonationIdsNotMatchingError"}}},"description":""}},"summary":"Put fixed","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the fixed donation (not distance donation - use /donations/distance instead) whose id you provided.
Please remember that ids can't be changed and amounts must be positive."}},"/api/donations/distance/{id}":{"put":{"operationId":"DonationController.putDistance","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDistanceDonation"}}},"description":"UpdateDistanceDonation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/DonationNotFoundError"},{"$ref":"#/components/schemas/DonorNotFoundError"},{"$ref":"#/components/schemas/RunnerNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonationIdsNotMatchingError"}}},"description":""}},"summary":"Put distance","tags":["Donation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the distance donation (not fixed donation - use /donations/fixed instead) whose id you provided.
Please remember that ids can't be changed and amountPerDistance must be positive."}},"/api/donors":{"get":{"operationId":"DonorController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseDonor"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Donor"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all donor.
This includes the donor's current donation amount."},"post":{"operationId":"DonorController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDonor"}}},"description":"CreateDonor","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonor"}}},"description":""}},"summary":"Post","tags":["Donor"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new donor."}},"/api/donors/{id}":{"get":{"operationId":"DonorController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonor"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonorNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Donor"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the donor whose id got provided.
This includes the donor's current donation amount."},"put":{"operationId":"DonorController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDonor"}}},"description":"UpdateDonor","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonor"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonorNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DonorIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Donor"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the donor whose id you provided.
Please remember that ids can't be changed."},"delete":{"operationId":"DonorController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseDonor"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Donor"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the donor whose id you provided.
If no donor with this id exists it will just return 204(no content).
If the donor still has donations associated this will fail, please provide the query param ?force=true to delete the donor with all associated donations."}},"/api/contacts":{"get":{"operationId":"GroupContactController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseGroupContact"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Group Contact"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all contacts.
This includes the contact's associated groups."},"post":{"operationId":"GroupContactController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGroupContact"}}},"description":"CreateGroupContact","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGroupContact"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""}},"summary":"Post","tags":["Group Contact"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new contact."}},"/api/contacts/{id}":{"get":{"operationId":"GroupContactController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGroupContact"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupContactNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Group Contact"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the contact whose id got provided.
This includes the contact's associated groups."},"put":{"operationId":"GroupContactController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGroupContact"}}},"description":"UpdateGroupContact","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGroupContact"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/GroupContactNotFoundError"},{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupContactIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Group Contact"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the contact whose id you provided.
Please remember that ids can't be changed."},"delete":{"operationId":"GroupContactController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseGroupContact"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Group Contact"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the contact whose id you provided.
If no contact with this id exists it will just return 204(no content).
This won't delete any groups associated with the contact."}},"/api/scans":{"get":{"operationId":"ScanController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"items":{"$ref":"#/components/schemas/ResponseScan"},"type":"array"},{"items":{"$ref":"#/components/schemas/ResponseTrackScan"},"type":"array"}]}}},"description":""}},"summary":"Get all","tags":["Scan"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all scans (normal or track) from all runners.
This includes the scan's runner's distance ran."},"post":{"operationId":"ScanController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateScan"}}},"description":"CreateScan","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScan"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerNotFoundError"}}},"description":""}},"summary":"Post","tags":["Scan"],"security":[{"AuthToken":[],"ScanApiToken":[]},{"RefreshTokenCookie":[],"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new scan (not track scan - use /scans/trackscans instead).
Please rmemember to provide the scan's runner's id and distance."}},"/api/scans/{id}":{"get":{"operationId":"ScanController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseScan"},{"$ref":"#/components/schemas/ResponseTrackScan"}]}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Scan"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the scan whose id got provided. This includes the scan's runner's distance ran."},"put":{"operationId":"ScanController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateScan"}}},"description":"UpdateScan","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScan"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ScanNotFoundError"},{"$ref":"#/components/schemas/RunnerNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Scan"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the scan (not track scan use /scans/trackscans/:id instead) whose id you provided.
Please remember that ids can't be changed and distances must be positive."},"delete":{"operationId":"ScanController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScan"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Scan"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the scan whose id you provided.
If no scan with this id exists it will just return 204(no content)."}},"/api/scans/trackscans":{"post":{"operationId":"ScanController.postTrackScans","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTrackScan"}}},"description":"CreateTrackScan","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTrackScan"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerNotFoundError"}}},"description":""}},"summary":"Post track scans","tags":["Scan"],"security":[{"AuthToken":[],"ScanApiToken":[]},{"RefreshTokenCookie":[],"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new track scan (for \"normal\" scans use /scans instead).
Please remember that to provide the scan's card's station's id."}},"/api/scans/trackscans/{id}":{"put":{"operationId":"ScanController.putTrackScan","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTrackScan"}}},"description":"UpdateTrackScan","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTrackScan"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ScanNotFoundError"},{"$ref":"#/components/schemas/RunnerNotFoundError"},{"$ref":"#/components/schemas/ScanStationNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanIdsNotMatchingError"}}},"description":""}},"summary":"Put track scan","tags":["Scan"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the track scan (not \"normal\" scan use /scans/trackscans/:id instead) whose id you provided.
Please remember that only the validity, runner and track can be changed."}},"/api/cards":{"get":{"operationId":"RunnerCardController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunnerCard"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Runner Card"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all card."},"post":{"operationId":"RunnerCardController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRunnerCard"}}},"description":"CreateRunnerCard","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerCard"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerNotFoundError"}}},"description":""}},"summary":"Post","tags":["Runner Card"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new card.
You can provide a associated runner by id but you don't have to."}},"/api/cards/{id}":{"get":{"operationId":"RunnerCardController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerCard"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerCardNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Runner Card"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the card whose id got provided."},"put":{"operationId":"RunnerCardController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRunnerCard"}}},"description":"UpdateRunnerCard","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerCard"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/RunnerCardNotFoundError"},{"$ref":"#/components/schemas/RunnerNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerCardIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Runner Card"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the card whose id you provided.
Scans created via this card will still be associated with the old runner.
Please remember that ids can't be changed."},"delete":{"operationId":"RunnerCardController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerCard"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerCardHasScansError"}}},"description":""}},"summary":"Remove","tags":["Runner Card"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the card whose id you provided.
If no card with this id exists it will just return 204(no content).
If the card still has scans associated you have to provide the force=true query param (warning: this deletes all scans associated with by this card - please disable it instead or just remove the runner association)."}},"/api/runners":{"get":{"operationId":"RunnerController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Runner"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all runners from all teams/orgs.
This includes the runner's group and distance ran."},"post":{"operationId":"RunnerController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRunner"}}},"description":"CreateRunner","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ResponseRunner"},{"$ref":"#/components/schemas/RunnerGroupNeededError"},{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}]}}},"description":""}},"summary":"Post","tags":["Runner"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new runner.
Please remeber to provide the runner's group's id."}},"/api/runners/{id}":{"get":{"operationId":"RunnerController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunner"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Runner"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the runner whose id got provided."},"put":{"operationId":"RunnerController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRunner"}}},"description":"UpdateRunner","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunner"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Runner"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the runner whose id you provided.
Please remember that ids can't be changed."},"delete":{"operationId":"RunnerController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunner"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerHasDistanceDonationsError"}}},"description":""}},"summary":"Remove","tags":["Runner"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the runner whose id you provided.
This will also delete all scans and cards associated with the runner.
If no runner with this id exists it will just return 204(no content)."}},"/api/runners/{id}/scans":{"get":{"operationId":"RunnerController.getScans","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"items":{"$ref":"#/components/schemas/ResponseScan"},"type":"array"},{"items":{"$ref":"#/components/schemas/ResponseTrackScan"},"type":"array"}]}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerNotFoundError"}}},"description":""}},"summary":"Get scans","tags":["Runner"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all scans of the runner whose id got provided.
If you only want the valid scans just add the ?onlyValid=true query param."}},"/api/runners/import":{"post":{"operationId":"ImportController.postJSON","parameters":[{"in":"query","name":"group","required":false,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ImportRunner"},"type":"array"}}},"description":"ImportRunner","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNeededError"}}},"description":""}},"summary":"Post json","tags":["Import"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create new runners from json and insert them into the provided group.
If teams/classes are provided alongside the runner's name they'll automaticly be created under the provided org and the runners will be inserted into the teams instead."}},"/api/organisations/{id}/import":{"post":{"operationId":"ImportController.postOrgsJSON","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ImportRunner"},"type":"array"}}},"description":"ImportRunner","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNeededError"}}},"description":""}},"summary":"Post orgs json","tags":["Import"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create new runners from json and insert them into the provided org.
If teams/classes are provided alongside the runner's name they'll automaticly be created under the provided org and the runners will be inserted into the teams instead."}},"/api/teams/{id}/import":{"post":{"operationId":"ImportController.postTeamsJSON","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ImportRunner"},"type":"array"}}},"description":"ImportRunner","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNeededError"}}},"description":""}},"summary":"Post teams json","tags":["Import"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create new runners from json and insert them into the provided team"}},"/api/runners/import/csv":{"post":{"operationId":"ImportController.postCSV","parameters":[{"in":"query","name":"group","required":false,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNeededError"}}},"description":""}},"summary":"Post csv","tags":["Import"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create new runners from csv and insert them into the provided group.
If teams/classes are provided alongside the runner's name they'll automaticly be created under the provided org and the runners will be inserted into the teams instead."}},"/api/organisations/{id}/import/csv":{"post":{"operationId":"ImportController.postOrgsCSV","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNeededError"}}},"description":""}},"summary":"Post orgs csv","tags":["Import"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create new runners from csv and insert them into the provided org.
If teams/classes are provided alongside the runner's name they'll automaticly be created under the provided org and the runners will be inserted into the teams instead."}},"/api/teams/{id}/import/csv":{"post":{"operationId":"ImportController.postTeamsCSV","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunner"},"type":"array"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerGroupNeededError"}}},"description":""}},"summary":"Post teams csv","tags":["Import"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create new runners from csv and insert them into the provided team"}},"/api/permissions":{"get":{"operationId":"PermissionController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponsePermission"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Permission"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all permissions for all users and groups."},"post":{"operationId":"PermissionController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePermission"}}},"description":"CreatePermission","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponsePermission"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrincipalNotFoundError"}}},"description":""}},"summary":"Post","tags":["Permission"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new permission for a existing principal(user/group).
If a permission with this target, action and prinicpal already exists that permission will be returned instead of creating a new one."}},"/api/permissions/{id}":{"get":{"operationId":"PermissionController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponsePermission"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Permission"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the permission whose id got provided."},"put":{"operationId":"PermissionController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePermission"}}},"description":"UpdatePermission","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponsePrincipal"}}},"description":""},"404":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PermissionNotFoundError"},{"$ref":"#/components/schemas/PrincipalNotFoundError"}]}}},"description":""},"406":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PermissionIdsNotMatchingError"},{"$ref":"#/components/schemas/PermissionNeedsPrincipalError"}]}}},"description":""}},"summary":"Put","tags":["Permission"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update a permission object.
If updateing the permission object would result in duplicate permission (same target, action and principal) this permission will get deleted and the existing permission will be returned.
Please remember that ids can't be changed."},"delete":{"operationId":"PermissionController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponsePermission"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Permission"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Deletes the permission whose id you provide.
If no permission with this id exists it will just return 204(no content)."}},"/api/users/me/":{"get":{"operationId":"MeController.getPermissions","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserPermissions"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFoundError"}}},"description":""}},"summary":"Get permissions","tags":["Me"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all permissions granted to the you sorted into directly granted and inherited as permission response objects."},"put":{"operationId":"MeController.put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUser"}}},"description":"UpdateUser","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/UserIdsNotMatchingError"},{"$ref":"#/components/schemas/UsernameContainsIllegalCharacterError"}]}}},"description":""}},"summary":"Put","tags":["Me"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the yourself.
You can't edit your own permissions or group memberships here - Please use the /api/users/:id enpoint instead.
Please remember that ids can't be changed."},"delete":{"operationId":"MeController.remove","parameters":[{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDeletionNotConfirmedError"}}},"description":""}},"summary":"Remove","tags":["Me"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete yourself.
You have to confirm your decision by providing the ?force=true query param.
If there are any permissions directly granted to you they will get deleted as well."}},"/api/teams":{"get":{"operationId":"RunnerTeamController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunnerTeam"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Runner Team"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all teams.
This includes their parent organisation and contact (if existing/associated)."},"post":{"operationId":"RunnerTeamController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRunnerTeam"}}},"description":"CreateRunnerTeam","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerTeam"}}},"description":""}},"summary":"Post","tags":["Runner Team"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new organsisation.
Please remember to provide it's parent group's id."}},"/api/teams/{id}":{"get":{"operationId":"RunnerTeamController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerTeam"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerTeamNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Runner Team"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the team whose id got provided."},"put":{"operationId":"RunnerTeamController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRunnerTeam"}}},"description":"UpdateRunnerTeam","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerTeam"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerTeamNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerTeamIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Runner Team"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the team whose id you provided.
Please remember that ids can't be changed."},"delete":{"operationId":"RunnerTeamController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerTeam"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerTeamHasRunnersError"}}},"description":""}},"summary":"Remove","tags":["Runner Team"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the team whose id you provided.
If the team still has runners associated this will fail.
To delete the team with all associated runners set the force QueryParam to true (cascading deletion might take a while).
This won't delete the associated contact.
If no team with this id exists it will just return 204(no content)."}},"/api/organisations":{"get":{"operationId":"RunnerOrganisationController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseRunnerOrganisation"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Runner Organisation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all organisations.
This includes their address, contact and teams (if existing/associated)."},"post":{"operationId":"RunnerOrganisationController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRunnerOrganisation"}}},"description":"CreateRunnerOrganisation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerOrganisation"}}},"description":""}},"summary":"Post","tags":["Runner Organisation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new organsisation."}},"/api/organisations/{id}":{"get":{"operationId":"RunnerOrganisationController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerOrganisation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerOrganisationNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Runner Organisation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the organisation whose id got provided."},"put":{"operationId":"RunnerOrganisationController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRunnerOrganisation"}}},"description":"UpdateRunnerOrganisation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerOrganisation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerOrganisationNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerOrganisationIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Runner Organisation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the organisation whose id you provided.
Please remember that ids can't be changed."},"delete":{"operationId":"RunnerOrganisationController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseRunnerOrganisation"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""},"406":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/RunnerOrganisationHasTeamsError"},{"$ref":"#/components/schemas/RunnerOrganisationHasRunnersError"}]}}},"description":""}},"summary":"Remove","tags":["Runner Organisation"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the organsisation whose id you provided.
If the organisation still has runners and/or teams associated this will fail.
To delete the organisation with all associated runners and teams set the force QueryParam to true (cascading deletion might take a while).
This won't delete the associated contact.
If no organisation with this id exists it will just return 204(no content)."}},"/api/runners/me/{jwt}":{"get":{"operationId":"RunnerSelfServiceController.get","parameters":[{"in":"path","name":"jwt","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseSelfServiceRunner"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunnerNotFoundError"}}},"description":""}},"summary":"Get","tags":["Runner Self Service"],"description":"Lists all information about yourself.
Please provide your runner jwt(that code we gave you during registration) for auth.
If you lost your jwt/personalized link please contact support."}},"/api/stations":{"get":{"operationId":"ScanStationController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseScanStation"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Scan Station"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all stations.
This includes their associated tracks."},"post":{"operationId":"ScanStationController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateScanStation"}}},"description":"CreateScanStation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScanStation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackNotFoundError"}}},"description":""}},"summary":"Post","tags":["Scan Station"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new station.
Please remeber to provide the station's track's id.
Please also remember that the station key is only visibe on creation."}},"/api/stations/{id}":{"get":{"operationId":"ScanStationController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScanStation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStationNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Scan Station"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the station whose id got provided.
This includes it's associated track."},"put":{"operationId":"ScanStationController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateScanStation"}}},"description":"UpdateScanStation","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScanStation"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStationNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStationIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["Scan Station"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the station whose id you provided.
Please remember that only the description and enabled state can be changed."},"delete":{"operationId":"ScanStationController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseScanStation"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanStationHasScansError"}}},"description":""}},"summary":"Remove","tags":["Scan Station"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the station whose id you provided.
If no station with this id exists it will just return 204(no content).
If the station still has scans associated you have to provide the force=true query param (warning: this deletes all scans associated with/created by this station - please disable it instead)."}},"/api/statsclients":{"get":{"operationId":"StatsClientController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsClient"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Stats Client"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all stats clients. Please remember that the key can only be viewed on creation."},"post":{"operationId":"StatsClientController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStatsClient"}}},"description":"CreateStatsClient","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseStatsClient"}}},"description":""}},"summary":"Post","tags":["Stats Client"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new stats client.
Please remember that the client's key will be generated automaticly and that it can only be viewed on creation."}},"/api/statsclients/{id}":{"get":{"operationId":"StatsClientController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseStatsClient"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsClientNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Stats Client"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the stats client whose id got provided. Please remember that the key can only be viewed on creation."},"delete":{"operationId":"StatsClientController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseStatsClient"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Stats Client"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the stats client whose id you provided.
If no client with this id exists it will just return 204(no content)."}},"/api/stats":{"get":{"operationId":"StatsController.get","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseStats"}}},"description":""}},"summary":"Get","tags":["Stats"],"description":"A very basic stats endpoint providing basic counters for a dashboard or simmilar"}},"/api/stats/runners/distance":{"get":{"operationId":"StatsController.getTopRunnersByDistance","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsRunner"},"type":"array"}}},"description":""}},"summary":"Get top runners by distance","tags":["Stats"],"description":"Returns the top ten runners by distance.","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/stats/runners/donations":{"get":{"operationId":"StatsController.getTopRunnersByDonations","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsRunner"},"type":"array"}}},"description":""}},"summary":"Get top runners by donations","tags":["Stats"],"description":"Returns the top ten runners by donations.","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/stats/scans":{"get":{"operationId":"StatsController.getTopRunnersByTrackTime","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsRunner"},"type":"array"}}},"description":""}},"summary":"Get top runners by track time","tags":["Stats"],"description":"Returns the top ten fastest track times (with their runner and the runner's group).","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/stats/teams/distance":{"get":{"operationId":"StatsController.getTopTeamsByDistance","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsTeam"},"type":"array"}}},"description":""}},"summary":"Get top teams by distance","tags":["Stats"],"description":"Returns the top ten teams by distance.","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/stats/teams/donations":{"get":{"operationId":"StatsController.getTopTeamsByDonations","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsTeam"},"type":"array"}}},"description":""}},"summary":"Get top teams by donations","tags":["Stats"],"description":"Returns the top ten teams by donations.","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/stats/organisations/distance":{"get":{"operationId":"StatsController.getTopOrgsByDistance","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsOrgnisation"},"type":"array"}}},"description":""}},"summary":"Get top orgs by distance","tags":["Stats"],"description":"Returns the top ten organisations by distance.","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/stats/organisations/donations":{"get":{"operationId":"StatsController.getTopOrgsByDonations","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseStatsOrgnisation"},"type":"array"}}},"description":""}},"summary":"Get top orgs by donations","tags":["Stats"],"description":"Returns the top ten organisations by donations.","security":[{"StatsApiToken":[]},{"AuthToken":[]},{"RefreshTokenCookie":[]}]}},"/api/status":{"get":{"operationId":"StatusController.get","responses":{"200":{"content":{"application/json":{}},"description":"Successful response"}},"summary":"Get","tags":["Status"],"description":"A very basic status/health endpoint that just checks if the database connection is available.
The available information depth will be expanded later."}},"/api/version":{"get":{"operationId":"StatusController.getVersion","responses":{"200":{"content":{"application/json":{}},"description":"Successful response"}},"summary":"Get version","tags":["Status"],"description":"A very basic endpoint that just returns the curent package version."}},"/api/tracks":{"get":{"operationId":"TrackController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseTrack"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["Track"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all tracks."},"post":{"operationId":"TrackController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTrack"}}},"description":"CreateTrack","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTrack"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackLapTimeCantBeNegativeError"}}},"description":""}},"summary":"Post","tags":["Track"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new track.
Please remember that the track's distance must be greater than 0."}},"/api/tracks/{id}":{"get":{"operationId":"TrackController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTrack"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackNotFoundError"}}},"description":""}},"summary":"Get one","tags":["Track"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the track whose id got provided."},"put":{"operationId":"TrackController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTrack"}}},"description":"UpdateTrack","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTrack"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/TrackIdsNotMatchingError"},{"$ref":"#/components/schemas/TrackLapTimeCantBeNegativeError"}]}}},"description":""}},"summary":"Put","tags":["Track"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the track whose id you provided.
Please remember that ids can't be changed."},"delete":{"operationId":"TrackController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseTrack"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["Track"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the track whose id you provided.
If no track with this id exists it will just return 204(no content)."}},"/api/users":{"get":{"operationId":"UserController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ResponseUser"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["User"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all users.
This includes their groups and permissions granted to them."},"post":{"operationId":"UserController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUser"}}},"description":"CreateUser","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsernameContainsIllegalCharacterError"}}},"description":""}},"summary":"Post","tags":["User"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new user.
If you want to grant permissions to the user you have to create them seperately by posting to /api/permissions after creating the user."}},"/api/users/{id}":{"get":{"operationId":"UserController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFoundError"}}},"description":""}},"summary":"Get one","tags":["User"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the user whose id got provided.
Please remember that all permissions granted to the user will show up here."},"put":{"operationId":"UserController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUser"}}},"description":"UpdateUser","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/UserIdsNotMatchingError"},{"$ref":"#/components/schemas/UsernameContainsIllegalCharacterError"}]}}},"description":""}},"summary":"Put","tags":["User"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the user whose id you provided.
To change the permissions directly granted to the user please use /api/permissions instead.
Please remember that ids can't be changed."},"delete":{"operationId":"UserController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDeletionNotConfirmedError"}}},"description":""}},"summary":"Remove","tags":["User"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the user whose id you provided.
You have to confirm your decision by providing the ?force=true query param.
If there are any permissions directly granted to the user they will get deleted as well.
If no user with this id exists it will just return 204(no content)."}},"/api/users/{id}/permissions":{"get":{"operationId":"UserController.getPermissions","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUser"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserNotFoundError"}}},"description":""}},"summary":"Get permissions","tags":["User"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all permissions granted to the user sorted into directly granted and inherited as permission response objects."}},"/api/usergroups":{"get":{"operationId":"UserGroupController.getAll","responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserGroup"},"type":"array"}}},"description":""}},"summary":"Get all","tags":["User Group"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all groups.
The information provided might change while the project continues to evolve."},"post":{"operationId":"UserGroupController.post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserGroup"}}},"description":"CreateUserGroup","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/UserGroup"},{"$ref":"#/components/schemas/UserGroupNotFoundError"}]}}},"description":""}},"summary":"Post","tags":["User Group"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Create a new group.
If you want to grant permissions to the group you have to create them seperately by posting to /api/permissions after creating the group."}},"/api/usergroups/{id}":{"get":{"operationId":"UserGroupController.getOne","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroup"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroupNotFoundError"}}},"description":""}},"summary":"Get one","tags":["User Group"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Lists all information about the group whose id got provided.
The information provided might change while the project continues to evolve."},"put":{"operationId":"UserGroupController.put","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserGroup"}}},"description":"UpdateUserGroup","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroup"}}},"description":""},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroupNotFoundError"}}},"description":""},"406":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGroupIdsNotMatchingError"}}},"description":""}},"summary":"Put","tags":["User Group"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Update the group whose id you provided.
To change the permissions granted to the group please use /api/permissions instead.
Please remember that ids can't be changed."},"delete":{"operationId":"UserGroupController.remove","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"number"}},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseUserGroup"}}},"description":""},"204":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseEmpty"}}},"description":""}},"summary":"Remove","tags":["User Group"],"security":[{"AuthToken":[]},{"RefreshTokenCookie":[]}],"description":"Delete the group whose id you provided.
If there are any permissions directly granted to the group they will get deleted as well.
Users associated with this group won't get deleted - just deassociated.
If no group with this id exists it will just return 204(no content)."}}}} \ No newline at end of file diff --git a/package.json b/package.json index 96b4f61..7965b3b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@odit/lfk-client-node", "description": "A lib to interact with https://git.odit.services/lfk/backend. Use this version for NodeJS applications.", - "version": "0.2.0", + "version": "0.2.1", "license": "CC-BY-NC-SA-4.0", "main": "./dist/index.js", "types": "./dist/index.d.ts",