diff --git a/.github/.copilot-instructions.md b/.github/.copilot-instructions.md new file mode 100644 index 0000000..27fa930 --- /dev/null +++ b/.github/.copilot-instructions.md @@ -0,0 +1,25 @@ +# Copilot Instructions for FTA-Notepad + +## Project Overview +FTA-Notepad: SvelteKit web app for FIRST Robotics Competition field technical advisors. Client-side app for real-time collaboration on match notes, issues, and team interactions. + +## Tech Stack +- **Frontend**: SvelteKit 2.x + Svelte 5.x + TypeScript +- **Styling**: Tailwind CSS v4 (CSS-based config, NO tailwind.config.js) +- **Build**: Vite 6.x with `@tailwindcss/vite` plugin +- **Package Manager**: npm +- **Icons**: @steeze-ui/heroicons, **Data**: D3.js, **Realtime**: SignalR + +## Development +```bash +cd ui && npm run dev +``` + +## File Structure +``` +ui/src/ +├── lib/components/ # Svelte components +├── routes/ # SvelteKit pages +├── fms/ # Field Management System +└── app.css # Tailwind config +``` diff --git a/ui/README.md b/ui/README.md index 3f05f42..4a0d909 100644 --- a/ui/README.md +++ b/ui/README.md @@ -2,6 +2,18 @@ Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte). +## Shared Styles + +This project uses a focused approach to shared styles in `src/lib/styles.ts`. Only genuinely reusable patterns that appear across multiple components are centralized: + +- **Form inputs** - Standard input styling for consistent form appearance +- **Badges** - Color-coded badges used in notes, match cards, and team cards +- **Section headers** - Interactive headers for collapsible sections +- **Empty states** - Consistent styling for "no data" states +- **Error states** - Error messaging and retry button styling + +**Philosophy**: Keep component-specific and one-off styles local to the component. Only centralize styles that are truly shared to maintain a consistent visual theme while avoiding over-abstraction. + ## Developing Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: diff --git a/ui/fms-swagger.yml b/ui/fms-swagger.yml index 52a82a8..a3dfeed 100644 --- a/ui/fms-swagger.yml +++ b/ui/fms-swagger.yml @@ -41,10 +41,12 @@ paths: format: uuid - name: alliance in: query + description: The color assigned to a particular alliance. schema: $ref: '#/components/schemas/AllianceType' - name: station in: query + description: The names of the driver station positions schema: $ref: '#/components/schemas/StationType' responses: @@ -127,6 +129,7 @@ paths: parameters: - name: levelParam in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -162,11 +165,13 @@ paths: format: uuid - name: allianceParam in: path + description: The color assigned to a particular alliance. required: true schema: $ref: '#/components/schemas/AllianceType' - name: stationParam in: path + description: The names of the driver station positions required: true schema: $ref: '#/components/schemas/StationType' @@ -196,11 +201,13 @@ paths: parameters: - name: playoffSizeParam in: path + description: The permitted alliance counts of playoffs required: true schema: $ref: '#/components/schemas/PlayoffSizeTypes' - name: sublevelParam in: path + description: "PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. \r\n\r\nInvariants at a level:\r\n* at least one match is played\r\n* Pairings: for single and double elimination, an alliance is paired with exactly one other \r\n alliance in a level. For a round robin tournament, the round robin section would\r\n be treated as one level with alliances paired with >1 other alliance.\r\n* An alliance is not required to appear in a level." required: true schema: $ref: '#/components/schemas/PlayoffLevel' @@ -223,6 +230,23 @@ paths: type: array items: $ref: '#/components/schemas/PitPlayoffMatchup' + /api/v1.0/fieldmonitor/get/GetLastPlayedMatch: + get: + tags: + - FieldMonitorApi + responses: + '200': + description: OK + content: + text/plain: + schema: + $ref: '#/components/schemas/GuidNullableTournamentLevelNullableValueTuple' + application/json: + schema: + $ref: '#/components/schemas/GuidNullableTournamentLevelNullableValueTuple' + text/json: + schema: + $ref: '#/components/schemas/GuidNullableTournamentLevelNullableValueTuple' '/api/v1.0/fieldmonitor/get/GetTournamentLevelStatus/{levelParam}': get: tags: @@ -230,6 +254,7 @@ paths: parameters: - name: levelParam in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -253,6 +278,7 @@ paths: parameters: - name: levelParam in: path + description: "PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. \r\n\r\nInvariants at a level:\r\n* at least one match is played\r\n* Pairings: for single and double elimination, an alliance is paired with exactly one other \r\n alliance in a level. For a round robin tournament, the round robin section would\r\n be treated as one level with alliances paired with >1 other alliance.\r\n* An alliance is not required to appear in a level." required: true schema: $ref: '#/components/schemas/PlayoffLevel' @@ -293,6 +319,7 @@ paths: parameters: - name: playoffLevel in: path + description: "PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. \r\n\r\nInvariants at a level:\r\n* at least one match is played\r\n* Pairings: for single and double elimination, an alliance is paired with exactly one other \r\n alliance in a level. For a round robin tournament, the round robin section would\r\n be treated as one level with alliances paired with >1 other alliance.\r\n* An alliance is not required to appear in a level." required: true schema: $ref: '#/components/schemas/PlayoffLevel' @@ -316,6 +343,7 @@ paths: parameters: - name: playoffLevel in: path + description: "PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. \r\n\r\nInvariants at a level:\r\n* at least one match is played\r\n* Pairings: for single and double elimination, an alliance is paired with exactly one other \r\n alliance in a level. For a round robin tournament, the round robin section would\r\n be treated as one level with alliances paired with >1 other alliance.\r\n* An alliance is not required to appear in a level." required: true schema: $ref: '#/components/schemas/PlayoffLevel' @@ -363,6 +391,7 @@ paths: parameters: - name: tourneyLevel in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -409,6 +438,7 @@ paths: parameters: - name: playoffLevel in: path + description: "PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. \r\n\r\nInvariants at a level:\r\n* at least one match is played\r\n* Pairings: for single and double elimination, an alliance is paired with exactly one other \r\n alliance in a level. For a round robin tournament, the round robin section would\r\n be treated as one level with alliances paired with >1 other alliance.\r\n* An alliance is not required to appear in a level." required: true schema: $ref: '#/components/schemas/PlayoffLevel' @@ -432,6 +462,7 @@ paths: parameters: - name: tourneyLevel in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -461,6 +492,7 @@ paths: parameters: - name: levelParam in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -487,6 +519,7 @@ paths: parameters: - name: levelParam in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -513,6 +546,7 @@ paths: parameters: - name: fieldTypeParam in: path + description: "for multi field events\r\nPrimary - Main FMS with all functionality enabled\r\nSecondary - Match Play, Match Test, Match Review, Field Test, System Configuration\r\nPractice - Match Test, Field Test, System Configuration\r\nWe start the numbering at 1 since the field \"number\" is referenced around the solution" required: true schema: $ref: '#/components/schemas/FieldTypes' @@ -536,6 +570,7 @@ paths: parameters: - name: tourneyLevel in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -667,6 +702,30 @@ paths: schema: minLength: 3 type: string + - name: FMS-UsersRealName + in: header + required: true + schema: + type: string + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string + requestBody: + content: + application/json-patch+json: + schema: + type: string + application/json: + schema: + type: string + text/json: + schema: + type: string + application/*+json: + schema: + type: string responses: '200': description: OK @@ -731,11 +790,35 @@ paths: schema: minLength: 3 type: string + - name: FMS-UsersRealName + in: header + required: true + schema: + type: string + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string - name: noteId - in: query + in: path + required: true schema: type: string - format: uuid + requestBody: + content: + application/json-patch+json: + schema: + $ref: '#/components/schemas/EventNoteCreateModifyModel' + application/json: + schema: + $ref: '#/components/schemas/EventNoteCreateModifyModel' + text/json: + schema: + $ref: '#/components/schemas/EventNoteCreateModifyModel' + application/*+json: + schema: + $ref: '#/components/schemas/EventNoteCreateModifyModel' responses: '200': description: OK @@ -776,6 +859,36 @@ paths: schema: type: string format: uuid + - name: FMS-RecordVersion + in: header + required: true + schema: + type: integer + format: int64 + - name: FMS-UsersRealName + in: header + required: true + schema: + type: string + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string + requestBody: + content: + application/json-patch+json: + schema: + $ref: '#/components/schemas/EventNoteCreateModifyModel' + application/json: + schema: + $ref: '#/components/schemas/EventNoteCreateModifyModel' + text/json: + schema: + $ref: '#/components/schemas/EventNoteCreateModifyModel' + application/*+json: + schema: + $ref: '#/components/schemas/EventNoteCreateModifyModel' responses: '200': description: OK @@ -816,6 +929,22 @@ paths: schema: type: string format: uuid + - name: FMS-RecordVersion + in: header + required: true + schema: + type: integer + format: int64 + - name: FMS-UsersRealName + in: header + required: true + schema: + type: string + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string responses: '204': description: No Content @@ -880,11 +1009,30 @@ paths: schema: minLength: 3 type: string - - name: noteId - in: query + - name: FMS-UsersRealName + in: header + required: true schema: type: string - format: uuid + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string + requestBody: + content: + application/json-patch+json: + schema: + $ref: '#/components/schemas/EventNoteCreateModifyModel' + application/json: + schema: + $ref: '#/components/schemas/EventNoteCreateModifyModel' + text/json: + schema: + $ref: '#/components/schemas/EventNoteCreateModifyModel' + application/*+json: + schema: + $ref: '#/components/schemas/EventNoteCreateModifyModel' responses: '200': description: OK @@ -927,6 +1075,7 @@ paths: format: uuid - name: tournamentLevel in: query + description: 'The level of the tournament (practice, quals, etc)' schema: $ref: '#/components/schemas/TournamentLevel' - name: matchNumber @@ -992,6 +1141,7 @@ paths: format: uuid - name: tournamentLevel in: query + description: 'The level of the tournament (practice, quals, etc)' schema: $ref: '#/components/schemas/TournamentLevel' - name: matchNumber @@ -1024,6 +1174,64 @@ paths: $ref: '#/components/schemas/MatchNotesModel' '500': description: Internal Server Error + post: + tags: + - FTAAppApi + parameters: + - name: season + in: path + required: true + schema: + minimum: 2015 + maxLength: 4 + minLength: 4 + type: integer + format: int32 + - name: eventCode + in: path + required: true + schema: + minLength: 3 + type: string + - name: FMS-UsersRealName + in: header + required: true + schema: + type: string + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string + requestBody: + content: + application/json-patch+json: + schema: + $ref: '#/components/schemas/MatchNoteCreateModifyModel' + application/json: + schema: + $ref: '#/components/schemas/MatchNoteCreateModifyModel' + text/json: + schema: + $ref: '#/components/schemas/MatchNoteCreateModifyModel' + application/*+json: + schema: + $ref: '#/components/schemas/MatchNoteCreateModifyModel' + responses: + '200': + description: OK + content: + text/plain: + schema: + $ref: '#/components/schemas/NoteCreatedUpdatedModel' + application/json: + schema: + $ref: '#/components/schemas/NoteCreatedUpdatedModel' + text/json: + schema: + $ref: '#/components/schemas/NoteCreatedUpdatedModel' + '500': + description: Internal Server Error '/api/v1.0/FTA/{season}/{eventCode}/matchNotes/{noteId}': post: tags: @@ -1044,11 +1252,35 @@ paths: schema: minLength: 3 type: string + - name: FMS-UsersRealName + in: header + required: true + schema: + type: string + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string - name: noteId - in: query + in: path + required: true schema: type: string - format: uuid + requestBody: + content: + application/json-patch+json: + schema: + $ref: '#/components/schemas/MatchNoteCreateModifyModel' + application/json: + schema: + $ref: '#/components/schemas/MatchNoteCreateModifyModel' + text/json: + schema: + $ref: '#/components/schemas/MatchNoteCreateModifyModel' + application/*+json: + schema: + $ref: '#/components/schemas/MatchNoteCreateModifyModel' responses: '200': description: OK @@ -1089,6 +1321,36 @@ paths: schema: type: string format: uuid + - name: FMS-RecordVersion + in: header + required: true + schema: + type: integer + format: int64 + - name: FMS-UsersRealName + in: header + required: true + schema: + type: string + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string + requestBody: + content: + application/json-patch+json: + schema: + $ref: '#/components/schemas/MatchNoteCreateModifyModel' + application/json: + schema: + $ref: '#/components/schemas/MatchNoteCreateModifyModel' + text/json: + schema: + $ref: '#/components/schemas/MatchNoteCreateModifyModel' + application/*+json: + schema: + $ref: '#/components/schemas/MatchNoteCreateModifyModel' responses: '200': description: OK @@ -1129,6 +1391,22 @@ paths: schema: type: string format: uuid + - name: FMS-RecordVersion + in: header + required: true + schema: + type: integer + format: int64 + - name: FMS-UsersRealName + in: header + required: true + schema: + type: string + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string responses: '204': description: No Content @@ -1261,11 +1539,30 @@ paths: schema: minLength: 3 type: string - - name: noteId - in: query + - name: FMS-UsersRealName + in: header + required: true schema: type: string - format: uuid + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string + requestBody: + content: + application/json-patch+json: + schema: + $ref: '#/components/schemas/TeamIssueCreateModifyModel' + application/json: + schema: + $ref: '#/components/schemas/TeamIssueCreateModifyModel' + text/json: + schema: + $ref: '#/components/schemas/TeamIssueCreateModifyModel' + application/*+json: + schema: + $ref: '#/components/schemas/TeamIssueCreateModifyModel' responses: '200': description: OK @@ -1301,11 +1598,35 @@ paths: schema: minLength: 3 type: string + - name: FMS-UsersRealName + in: header + required: true + schema: + type: string + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string - name: noteId - in: query + in: path + required: true schema: type: string - format: uuid + requestBody: + content: + application/json-patch+json: + schema: + $ref: '#/components/schemas/TeamIssueCreateModifyModel' + application/json: + schema: + $ref: '#/components/schemas/TeamIssueCreateModifyModel' + text/json: + schema: + $ref: '#/components/schemas/TeamIssueCreateModifyModel' + application/*+json: + schema: + $ref: '#/components/schemas/TeamIssueCreateModifyModel' responses: '200': description: OK @@ -1346,6 +1667,36 @@ paths: schema: type: string format: uuid + - name: FMS-RecordVersion + in: header + required: true + schema: + type: integer + format: int64 + - name: FMS-UsersRealName + in: header + required: true + schema: + type: string + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string + requestBody: + content: + application/json-patch+json: + schema: + $ref: '#/components/schemas/TeamIssueCreateModifyModel' + application/json: + schema: + $ref: '#/components/schemas/TeamIssueCreateModifyModel' + text/json: + schema: + $ref: '#/components/schemas/TeamIssueCreateModifyModel' + application/*+json: + schema: + $ref: '#/components/schemas/TeamIssueCreateModifyModel' responses: '200': description: OK @@ -1386,6 +1737,22 @@ paths: schema: type: string format: uuid + - name: FMS-RecordVersion + in: header + required: true + schema: + type: integer + format: int64 + - name: FMS-UsersRealName + in: header + required: true + schema: + type: string + - name: FMS-DeviceIdentification + in: header + required: true + schema: + type: string responses: '204': description: No Content @@ -1413,6 +1780,7 @@ paths: type: string - name: tournamentLevel in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -1475,6 +1843,7 @@ paths: type: string - name: tournamentLevel in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -1533,6 +1902,7 @@ paths: type: string - name: tournamentLevel in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -1595,6 +1965,7 @@ paths: type: string - name: tournamentLevel in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -1753,6 +2124,7 @@ paths: default: 0 - name: tournamentLevel in: query + description: 'The level of the tournament (practice, quals, etc)' schema: $ref: '#/components/schemas/TournamentLevel' - name: matchNumber @@ -1806,6 +2178,7 @@ paths: default: 0 - name: tournamentLevel in: query + description: 'The level of the tournament (practice, quals, etc)' schema: $ref: '#/components/schemas/TournamentLevel' - name: matchNumber @@ -2122,6 +2495,7 @@ paths: parameters: - name: levelParam in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -2150,6 +2524,7 @@ paths: parameters: - name: levelParam in: path + description: "PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. \r\n\r\nInvariants at a level:\r\n* at least one match is played\r\n* Pairings: for single and double elimination, an alliance is paired with exactly one other \r\n alliance in a level. For a round robin tournament, the round robin section would\r\n be treated as one level with alliances paired with >1 other alliance.\r\n* An alliance is not required to appear in a level." required: true schema: $ref: '#/components/schemas/PlayoffLevel' @@ -2201,6 +2576,7 @@ paths: parameters: - name: playoffLevel in: path + description: "PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. \r\n\r\nInvariants at a level:\r\n* at least one match is played\r\n* Pairings: for single and double elimination, an alliance is paired with exactly one other \r\n alliance in a level. For a round robin tournament, the round robin section would\r\n be treated as one level with alliances paired with >1 other alliance.\r\n* An alliance is not required to appear in a level." required: true schema: $ref: '#/components/schemas/PlayoffLevel' @@ -2229,6 +2605,7 @@ paths: parameters: - name: playoffLevel in: path + description: "PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. \r\n\r\nInvariants at a level:\r\n* at least one match is played\r\n* Pairings: for single and double elimination, an alliance is paired with exactly one other \r\n alliance in a level. For a round robin tournament, the round robin section would\r\n be treated as one level with alliances paired with >1 other alliance.\r\n* An alliance is not required to appear in a level." required: true schema: $ref: '#/components/schemas/PlayoffLevel' @@ -2286,6 +2663,7 @@ paths: parameters: - name: tourneyLevel in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -2343,6 +2721,7 @@ paths: parameters: - name: playoffLevel in: path + description: "PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. \r\n\r\nInvariants at a level:\r\n* at least one match is played\r\n* Pairings: for single and double elimination, an alliance is paired with exactly one other \r\n alliance in a level. For a round robin tournament, the round robin section would\r\n be treated as one level with alliances paired with >1 other alliance.\r\n* An alliance is not required to appear in a level." required: true schema: $ref: '#/components/schemas/PlayoffLevel' @@ -2371,6 +2750,7 @@ paths: parameters: - name: tourneyLevel in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -2405,6 +2785,7 @@ paths: parameters: - name: levelParam in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -2436,6 +2817,7 @@ paths: parameters: - name: levelParam in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -2467,6 +2849,7 @@ paths: parameters: - name: fieldTypeParam in: path + description: "for multi field events\r\nPrimary - Main FMS with all functionality enabled\r\nSecondary - Match Play, Match Test, Match Review, Field Test, System Configuration\r\nPractice - Match Test, Field Test, System Configuration\r\nWe start the numbering at 1 since the field \"number\" is referenced around the solution" required: true schema: $ref: '#/components/schemas/FieldTypes' @@ -2495,6 +2878,7 @@ paths: parameters: - name: tourneyLevel in: path + description: 'The level of the tournament (practice, quals, etc)' required: true schema: $ref: '#/components/schemas/TournamentLevel' @@ -2647,6 +3031,16 @@ paths: schema: type: string responses: {} + /hubs/FieldMonitorEvents/FieldMonitorPreviousMacAddressesChanged: + post: + tags: + - FieldMonitorEvents + parameters: + - name: data + in: query + schema: + $ref: '#/components/schemas/PreviousMacAddressesData' + responses: {} /hubs/FTAAppEvents/NoteChanged: post: tags: @@ -2936,6 +3330,14 @@ components: - Create - Update - Delete + EventNoteCreateModifyModel: + type: object + properties: + noteText: + type: string + nullable: true + additionalProperties: false + description: 'FTA Notepad: Create event note request' EventNoteIssueTypes: enum: - RoboRioIssue @@ -3091,7 +3493,7 @@ components: isBypassed: type: boolean description: 'MessagePack Key: pb' - isEStopPressed: + isEStopLatched: type: boolean description: 'MessagePack Key: pc' isEStopped: @@ -3219,7 +3621,7 @@ components: type: string description: 'MessagePack Key: phh' nullable: true - isAStopPressed: + isAStopLatched: type: boolean description: 'MessagePack Key: pii' isAStopped: @@ -3229,6 +3631,19 @@ components: type: string description: 'MessagePack Key: pjk' nullable: true + radioConnectionQuality: + allOf: + - $ref: '#/components/schemas/RadioConnectionQuality' + - description: 'MessagePack Key: pll' + radioConnectedToAp: + type: boolean + description: 'MessagePack Key: pmm' + isEStopPressed: + type: boolean + description: 'MessagePack Key: pnn' + isAStopPressed: + type: boolean + description: 'MessagePack Key: poo' sNR: description: 'MessagePack Key: pk' mACAddress: @@ -3376,6 +3791,16 @@ components: - Primary - Secondary - Practice + GuidNullableTournamentLevelNullableValueTuple: + type: object + properties: + item1: + type: string + format: uuid + nullable: true + item2: + $ref: '#/components/schemas/TournamentLevel' + additionalProperties: false Int32Int32ValueTuple: type: object properties: @@ -3426,6 +3851,14 @@ components: type: integer format: int32 nullable: true + txRate: + type: number + format: double + nullable: true + rxRate: + type: number + format: double + nullable: true additionalProperties: false MatchGroupType: enum: @@ -3480,6 +3913,28 @@ components: $ref: '#/components/schemas/RankedAlliance' nullable: true additionalProperties: false + MatchNoteCreateModifyModel: + type: object + properties: + noteText: + type: string + nullable: true + tournamentLevel: + type: string + nullable: true + matchNumber: + type: integer + format: int32 + playNumber: + type: integer + format: int32 + nullable: true + teamNumber: + type: integer + format: int32 + nullable: true + additionalProperties: false + description: 'FTA Notepad: Create match note request' MatchNoteModel: type: object properties: @@ -3688,6 +4143,46 @@ components: - SevenAlliance - EightAlliance - SixteenAlliance + PreviousMacAddressesData: + type: object + properties: + red1MacAddress: + type: string + description: 'MessagePack Key: p1' + nullable: true + red2MacAddress: + type: string + description: 'MessagePack Key: p2' + nullable: true + red3MacAddress: + type: string + description: 'MessagePack Key: p3' + nullable: true + blue1MacAddress: + type: string + description: 'MessagePack Key: p4' + nullable: true + blue2MacAddress: + type: string + description: 'MessagePack Key: p5' + nullable: true + blue3MacAddress: + type: string + description: 'MessagePack Key: p6' + nullable: true + additionalProperties: false + RadioConnectionQuality: + enum: + - Warning + - Caution + - Good + - Excellent + type: string + x-enum-varnames: + - Warning + - Caution + - Good + - Excellent RankModel: type: object properties: @@ -4047,6 +4542,34 @@ components: - Station1 - Station2 - Station3 + TeamIssueCreateModifyModel: + type: object + properties: + noteText: + type: string + nullable: true + tournamentLevel: + type: string + nullable: true + matchNumber: + type: integer + format: int32 + playNumber: + type: integer + format: int32 + nullable: true + teamNumber: + type: integer + format: int32 + nullable: true + issueType: + type: string + nullable: true + resolutionStatus: + type: string + nullable: true + additionalProperties: false + description: 'FTA Notepad: Team issue create or edit options' TeamIssueModel: type: object properties: diff --git a/ui/src/fms/fms-api.ts b/ui/src/fms/fms-api.ts index 3c3777b..c3049e0 100644 --- a/ui/src/fms/fms-api.ts +++ b/ui/src/fms/fms-api.ts @@ -4,4151 +4,4528 @@ */ export interface paths { - '/FieldMonitor/MatchNumberAndPlay': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Returns an array of 3 numbers: the current match number, the current - * play number of that match, and the level of the match. */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': number[]; - 'application/json': number[]; - 'text/json': number[]; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/FieldMonitor/MatchGraphJson': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - matchId?: string; - alliance?: components['schemas']['AllianceType']; - station?: components['schemas']['StationType']; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['MatchGraphDetailViewModel'][]; - 'application/json': components['schemas']['MatchGraphDetailViewModel'][]; - 'text/json': components['schemas']['MatchGraphDetailViewModel'][]; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetResultsByFMSMatchId/{matchIdParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - matchIdParam: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['FieldServerWebMatchViewItem']; - 'application/json': components['schemas']['FieldServerWebMatchViewItem']; - 'text/json': components['schemas']['FieldServerWebMatchViewItem']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetResultsByTeamNumber/{teamNumberParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - teamNumberParam: number; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['FieldServerWebMatchViewItem'][]; - 'application/json': components['schemas']['FieldServerWebMatchViewItem'][]; - 'text/json': components['schemas']['FieldServerWebMatchViewItem'][]; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetResults/{levelParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - levelParam: components['schemas']['TournamentLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['FieldServerWebMatchViewItem'][]; - 'application/json': components['schemas']['FieldServerWebMatchViewItem'][]; - 'text/json': components['schemas']['FieldServerWebMatchViewItem'][]; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetLog/{matchIdParam}/{allianceParam}/{stationParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - matchIdParam: string; - allianceParam: components['schemas']['AllianceType']; - stationParam: components['schemas']['StationType']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['FieldServerWebMatchShowLogViewItem'][]; - 'application/json': components['schemas']['FieldServerWebMatchShowLogViewItem'][]; - 'text/json': components['schemas']['FieldServerWebMatchShowLogViewItem'][]; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetPlayoffMatchups/{playoffSizeParam}/{sublevelParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - playoffSizeParam: components['schemas']['PlayoffSizeTypes']; - sublevelParam: components['schemas']['PlayoffLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['PitPlayoffMatchup'][]; - 'application/json': components['schemas']['PitPlayoffMatchup'][]; - 'text/json': components['schemas']['PitPlayoffMatchup'][]; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetTournamentLevelStatus/{levelParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - levelParam: components['schemas']['TournamentLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['LevelStatus']; - 'application/json': components['schemas']['LevelStatus']; - 'text/json': components['schemas']['LevelStatus']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetPlayoffLevelStatus/{levelParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - levelParam: components['schemas']['PlayoffLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['LevelStatus']; - 'application/json': components['schemas']['LevelStatus']; - 'text/json': components['schemas']['LevelStatus']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetCurrentPlayoffLevel': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['PlayoffLevel']; - 'application/json': components['schemas']['PlayoffLevel']; - 'text/json': components['schemas']['PlayoffLevel']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetNextPlayoffLevel/{playoffLevel}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - playoffLevel: components['schemas']['PlayoffLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['PlayoffLevel']; - 'application/json': components['schemas']['PlayoffLevel']; - 'text/json': components['schemas']['PlayoffLevel']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetPreviousPlayoffLevel/{playoffLevel}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - playoffLevel: components['schemas']['PlayoffLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['PlayoffLevel']; - 'application/json': components['schemas']['PlayoffLevel']; - 'text/json': components['schemas']['PlayoffLevel']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetPlayoffLevelForMatch/{matchNumber}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - matchNumber: number; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['PlayoffLevel']; - 'application/json': components['schemas']['PlayoffLevel']; - 'text/json': components['schemas']['PlayoffLevel']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/TournamentLevelHasPlayableSchedule/{tourneyLevel}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - tourneyLevel: components['schemas']['TournamentLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': boolean; - 'application/json': boolean; - 'text/json': boolean; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetPlayoffMatchGroups': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description A map of match group ID to match group. */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': { - [key: string]: components['schemas']['MatchGroupView'] | undefined; - }; - 'application/json': { - [key: string]: components['schemas']['MatchGroupView'] | undefined; - }; - 'text/json': { - [key: string]: components['schemas']['MatchGroupView'] | undefined; - }; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetMatchRange/{playoffLevel}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - playoffLevel: components['schemas']['PlayoffLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['Int32Int32ValueTuple']; - 'application/json': components['schemas']['Int32Int32ValueTuple']; - 'text/json': components['schemas']['Int32Int32ValueTuple']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetMatchDescription/{tourneyLevel}/{matchNumber}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - tourneyLevel: components['schemas']['TournamentLevel']; - matchNumber: number; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': string; - 'application/json': string; - 'text/json': string; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/CountOfMatchesPlayed/{levelParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - levelParam: components['schemas']['TournamentLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': number; - 'application/json': number; - 'text/json': number; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/CountOfRankingsRecords/{levelParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - levelParam: components['schemas']['TournamentLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': number; - 'application/json': number; - 'text/json': number; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetCurrentMatchAndPlayNumber/{fieldTypeParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - fieldTypeParam: components['schemas']['FieldTypes']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['TournamentLevelInt32Int32ValueTuple']; - 'application/json': components['schemas']['TournamentLevelInt32Int32ValueTuple']; - 'text/json': components['schemas']['TournamentLevelInt32Int32ValueTuple']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetOrMakeFMSScheduleParameterId/{tourneyLevel}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - tourneyLevel: components['schemas']['TournamentLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': string; - 'application/json': string; - 'text/json': string; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetRankings/{eventIdParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - eventIdParam: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['RankModel'][]; - 'application/json': components['schemas']['RankModel'][]; - 'text/json': components['schemas']['RankModel'][]; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetAllTeamNumbers': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': number[]; - 'application/json': number[]; - 'text/json': number[]; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/fieldmonitor/get/GetAllAlliances': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['AllianceSelectionEventWizard'][]; - 'application/json': components['schemas']['AllianceSelectionEventWizard'][]; - 'text/json': components['schemas']['AllianceSelectionEventWizard'][]; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/FieldMonitor/Matches/Score': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - matchId?: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/appUsageData': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: { - parameters: { - query?: never; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/eventNotes/{noteId}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - noteId?: string; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['EventNotesModel']; - 'application/json': components['schemas']['EventNotesModel']; - 'text/json': components['schemas']['EventNotesModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put: { - parameters: { - query?: never; - header?: never; - path: { - season: number; - eventCode: string; - noteId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['NoteCreatedUpdatedModel']; - 'application/json': components['schemas']['NoteCreatedUpdatedModel']; - 'text/json': components['schemas']['NoteCreatedUpdatedModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - post: { - parameters: { - query?: { - noteId?: string; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['NoteCreatedUpdatedModel']; - 'application/json': components['schemas']['NoteCreatedUpdatedModel']; - 'text/json': components['schemas']['NoteCreatedUpdatedModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - delete: { - parameters: { - query?: never; - header?: never; - path: { - season: number; - eventCode: string; - noteId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description No Content */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/eventNotes': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - noteId?: string; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['EventNotesModel']; - 'application/json': components['schemas']['EventNotesModel']; - 'text/json': components['schemas']['EventNotesModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post: { - parameters: { - query?: { - noteId?: string; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['NoteCreatedUpdatedModel']; - 'application/json': components['schemas']['NoteCreatedUpdatedModel']; - 'text/json': components['schemas']['NoteCreatedUpdatedModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/matchNotes/{noteId}/{tournamentLevel}/{matchNumber}/{playNumber}/{teamNumber}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - noteId?: string; - tournamentLevel?: components['schemas']['TournamentLevel']; - matchNumber?: number; - playNumber?: number; - teamNumber?: number; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['MatchNotesModel']; - 'application/json': components['schemas']['MatchNotesModel']; - 'text/json': components['schemas']['MatchNotesModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/matchNotes': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - noteId?: string; - tournamentLevel?: components['schemas']['TournamentLevel']; - matchNumber?: number; - playNumber?: number; - teamNumber?: number; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['MatchNotesModel']; - 'application/json': components['schemas']['MatchNotesModel']; - 'text/json': components['schemas']['MatchNotesModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/matchNotes/{noteId}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put: { - parameters: { - query?: never; - header?: never; - path: { - season: number; - eventCode: string; - noteId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['NoteCreatedUpdatedModel']; - 'application/json': components['schemas']['NoteCreatedUpdatedModel']; - 'text/json': components['schemas']['NoteCreatedUpdatedModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - post: { - parameters: { - query?: { - noteId?: string; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['NoteCreatedUpdatedModel']; - 'application/json': components['schemas']['NoteCreatedUpdatedModel']; - 'text/json': components['schemas']['NoteCreatedUpdatedModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - delete: { - parameters: { - query?: never; - header?: never; - path: { - season: number; - eventCode: string; - noteId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description No Content */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/teamIssues/{noteId}/{teamNumber}/{issueType}/{resolutionStatus}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - noteId?: string; - teamNumber?: number; - issueType?: components['schemas']['EventNoteIssueTypes']; - resolutionStatus?: components['schemas']['EventNoteResolutionTypes']; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['TeamIssuesModel']; - 'application/json': components['schemas']['TeamIssuesModel']; - 'text/json': components['schemas']['TeamIssuesModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/teamIssues': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - noteId?: string; - teamNumber?: number; - issueType?: components['schemas']['EventNoteIssueTypes']; - resolutionStatus?: components['schemas']['EventNoteResolutionTypes']; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['TeamIssuesModel']; - 'application/json': components['schemas']['TeamIssuesModel']; - 'text/json': components['schemas']['TeamIssuesModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post: { - parameters: { - query?: { - noteId?: string; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['NoteCreatedUpdatedModel']; - 'application/json': components['schemas']['NoteCreatedUpdatedModel']; - 'text/json': components['schemas']['NoteCreatedUpdatedModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/teamIssues/{noteId}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put: { - parameters: { - query?: never; - header?: never; - path: { - season: number; - eventCode: string; - noteId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['NoteCreatedUpdatedModel']; - 'application/json': components['schemas']['NoteCreatedUpdatedModel']; - 'text/json': components['schemas']['NoteCreatedUpdatedModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - post: { - parameters: { - query?: { - noteId?: string; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['NoteCreatedUpdatedModel']; - 'application/json': components['schemas']['NoteCreatedUpdatedModel']; - 'text/json': components['schemas']['NoteCreatedUpdatedModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - delete: { - parameters: { - query?: never; - header?: never; - path: { - season: number; - eventCode: string; - noteId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description No Content */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/schedule/{tournamentLevel}/{teamNumber}/{start}/{end}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - teamNumber?: number; - start?: number; - end?: number; - }; - header?: never; - path: { - season: number; - eventCode: string; - tournamentLevel: components['schemas']['TournamentLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['EventScheduleModel']; - 'application/json': components['schemas']['EventScheduleModel']; - 'text/json': components['schemas']['EventScheduleModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/schedule/{tournamentLevel}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - teamNumber?: number; - start?: number; - end?: number; - }; - header?: never; - path: { - season: number; - eventCode: string; - tournamentLevel: components['schemas']['TournamentLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['EventScheduleModel']; - 'application/json': components['schemas']['EventScheduleModel']; - 'text/json': components['schemas']['EventScheduleModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/schedule/hybrid/{tournamentLevel}/{teamNumber}/{start}/{end}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - teamNumber?: number; - start?: number; - end?: number; - }; - header?: never; - path: { - season: number; - eventCode: string; - tournamentLevel: components['schemas']['TournamentLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['EventScheduleHybridModel']; - 'application/json': components['schemas']['EventScheduleHybridModel']; - 'text/json': components['schemas']['EventScheduleHybridModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/schedule/hybrid/{tournamentLevel}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - teamNumber?: number; - start?: number; - end?: number; - }; - header?: never; - path: { - season: number; - eventCode: string; - tournamentLevel: components['schemas']['TournamentLevel']; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['EventScheduleHybridModel']; - 'application/json': components['schemas']['EventScheduleHybridModel']; - 'text/json': components['schemas']['EventScheduleHybridModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/WPA/{teamNumber}/{connectionStatus}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - teamNumber?: number; - connectionStatus?: components['schemas']['WPAKeyStatusType']; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['ConnectionStatusInfoModel']; - 'application/json': components['schemas']['ConnectionStatusInfoModel']; - 'text/json': components['schemas']['ConnectionStatusInfoModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/WPA': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - teamNumber?: number; - connectionStatus?: components['schemas']['WPAKeyStatusType']; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['ConnectionStatusInfoModel']; - 'application/json': components['schemas']['ConnectionStatusInfoModel']; - 'text/json': components['schemas']['ConnectionStatusInfoModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/bypass/{teamNumber}/{tournamentLevel}/{matchNumber}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - teamNumber?: number; - tournamentLevel?: components['schemas']['TournamentLevel']; - matchNumber?: number; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['BypassStatusInfoModel']; - 'application/json': components['schemas']['BypassStatusInfoModel']; - 'text/json': components['schemas']['BypassStatusInfoModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/{eventCode}/bypass': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - teamNumber?: number; - tournamentLevel?: components['schemas']['TournamentLevel']; - matchNumber?: number; - }; - header?: never; - path: { - season: number; - eventCode: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['BypassStatusInfoModel']; - 'application/json': components['schemas']['BypassStatusInfoModel']; - 'text/json': components['schemas']['BypassStatusInfoModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/events/{eventCode}/{teamNumber}/{districtCode}/{excludeDistrict}/{active}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - eventCode?: string; - teamNumber?: number; - districtCode?: string; - excludeDistrict?: boolean; - active?: boolean; - }; - header?: never; - path: { - season: number; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['SeasonEventListingsModel']; - 'application/json': components['schemas']['SeasonEventListingsModel']; - 'text/json': components['schemas']['SeasonEventListingsModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/events': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - eventCode?: string; - teamNumber?: number; - districtCode?: string; - excludeDistrict?: boolean; - active?: boolean; - }; - header?: never; - path: { - season: number; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['SeasonEventListingsModel']; - 'application/json': components['schemas']['SeasonEventListingsModel']; - 'text/json': components['schemas']['SeasonEventListingsModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/teams/{eventCode}/{teamNumber}/{districtCode}/{page}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - eventCode?: string; - teamNumber?: number; - districtCode?: string; - page?: number; - }; - header?: never; - path: { - season: number; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['SeasonTeamListingsModel']; - 'application/json': components['schemas']['SeasonTeamListingsModel']; - 'text/json': components['schemas']['SeasonTeamListingsModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/teams': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: { - eventCode?: string; - teamNumber?: number; - districtCode?: string; - page?: number; - }; - header?: never; - path: { - season: number; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['SeasonTeamListingsModel']; - 'application/json': components['schemas']['SeasonTeamListingsModel']; - 'text/json': components['schemas']['SeasonTeamListingsModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/districts': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - season: number; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['SeasonDistrictListingsModel']; - 'application/json': components['schemas']['SeasonDistrictListingsModel']; - 'text/json': components['schemas']['SeasonDistrictListingsModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['ApiIndexModel']; - 'application/json': components['schemas']['ApiIndexModel']; - 'text/json': components['schemas']['ApiIndexModel']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTAAppApi/CurrentEventStatus': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['CurrentEventStatus']; - 'application/json': components['schemas']['CurrentEventStatus']; - 'text/json': components['schemas']['CurrentEventStatus']; - }; - }; - /** @description Internal Server Error */ - 500: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetTournamentLevelStatus/{levelParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - levelParam: components['schemas']['TournamentLevel']; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['LevelStatus']; - 'application/json': components['schemas']['LevelStatus']; - 'text/json': components['schemas']['LevelStatus']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetPlayoffLevelStatus/{levelParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - levelParam: components['schemas']['PlayoffLevel']; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['LevelStatus']; - 'application/json': components['schemas']['LevelStatus']; - 'text/json': components['schemas']['LevelStatus']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetCurrentPlayoffLevel': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['PlayoffLevel']; - 'application/json': components['schemas']['PlayoffLevel']; - 'text/json': components['schemas']['PlayoffLevel']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetNextPlayoffLevel/{playoffLevel}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - playoffLevel: components['schemas']['PlayoffLevel']; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['PlayoffLevel']; - 'application/json': components['schemas']['PlayoffLevel']; - 'text/json': components['schemas']['PlayoffLevel']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetPreviousPlayoffLevel/{playoffLevel}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - playoffLevel: components['schemas']['PlayoffLevel']; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['PlayoffLevel']; - 'application/json': components['schemas']['PlayoffLevel']; - 'text/json': components['schemas']['PlayoffLevel']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetPlayoffLevelForMatch/{matchNumber}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - matchNumber: number; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['PlayoffLevel']; - 'application/json': components['schemas']['PlayoffLevel']; - 'text/json': components['schemas']['PlayoffLevel']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/TournamentLevelHasPlayableSchedule/{tourneyLevel}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - tourneyLevel: components['schemas']['TournamentLevel']; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': boolean; - 'application/json': boolean; - 'text/json': boolean; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetPlayoffMatchGroups': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description A map of match group ID to match group. */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': { - [key: string]: components['schemas']['MatchGroupView'] | undefined; - }; - 'application/json': { - [key: string]: components['schemas']['MatchGroupView'] | undefined; - }; - 'text/json': { - [key: string]: components['schemas']['MatchGroupView'] | undefined; - }; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetMatchRange/{playoffLevel}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - playoffLevel: components['schemas']['PlayoffLevel']; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['Int32Int32ValueTuple']; - 'application/json': components['schemas']['Int32Int32ValueTuple']; - 'text/json': components['schemas']['Int32Int32ValueTuple']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetMatchDescription/{tourneyLevel}/{matchNumber}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - tourneyLevel: components['schemas']['TournamentLevel']; - matchNumber: number; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': string; - 'application/json': string; - 'text/json': string; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/CountOfMatchesPlayed/{levelParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - levelParam: components['schemas']['TournamentLevel']; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': number; - 'application/json': number; - 'text/json': number; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/CountOfRankingsRecords/{levelParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - levelParam: components['schemas']['TournamentLevel']; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': number; - 'application/json': number; - 'text/json': number; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetCurrentMatchAndPlayNumber/{fieldTypeParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - fieldTypeParam: components['schemas']['FieldTypes']; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['TournamentLevelInt32Int32ValueTuple']; - 'application/json': components['schemas']['TournamentLevelInt32Int32ValueTuple']; - 'text/json': components['schemas']['TournamentLevelInt32Int32ValueTuple']; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetOrMakeFMSScheduleParameterId/{tourneyLevel}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - tourneyLevel: components['schemas']['TournamentLevel']; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': string; - 'application/json': string; - 'text/json': string; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetRankings/{eventIdParam}': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - eventIdParam: string; - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['RankModel'][]; - 'application/json': components['schemas']['RankModel'][]; - 'text/json': components['schemas']['RankModel'][]; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetAllTeamNumbers': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': number[]; - 'application/json': number[]; - 'text/json': number[]; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1.0/FTA/{season}/get/GetAllAlliances': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get: { - parameters: { - query?: never; - header?: never; - path: { - season: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description OK */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - 'text/plain': components['schemas']['AllianceSelectionEventWizard'][]; - 'application/json': components['schemas']['AllianceSelectionEventWizard'][]; - 'text/json': components['schemas']['AllianceSelectionEventWizard'][]; - }; - }; - }; - }; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/hubs/FieldMonitorEvents/MatchStatusInfoChanged': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: { - parameters: { - query?: { - matchStatusInfoChangedParam?: components['schemas']['MatchStatusInfo']; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/hubs/FieldMonitorEvents/FieldMonitorDataChanged': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: { - parameters: { - query?: { - dataParam?: components['schemas']['FieldMonitorData'][]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/hubs/FieldMonitorEvents/ScheduleAheadBehindChanged': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: { - parameters: { - query?: { - aheadBehindParam?: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/hubs/FTAAppEvents/NoteChanged': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: { - parameters: { - query?: { - data?: components['schemas']['EventNoteChange']; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/hubs/FTAAppEvents/MatchStatusInfoChanged': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post: { - parameters: { - query?: { - matchStatusInfoChangedParam?: components['schemas']['MatchStatusInfo']; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; + "/FieldMonitor/MatchNumberAndPlay": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Returns an array of 3 numbers: the current match number, the current + * play number of that match, and the level of the match. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": number[]; + "application/json": number[]; + "text/json": number[]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/FieldMonitor/MatchGraphJson": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + matchId?: string; + /** @description The color assigned to a particular alliance. */ + alliance?: components["schemas"]["AllianceType"]; + /** @description The names of the driver station positions */ + station?: components["schemas"]["StationType"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["MatchGraphDetailViewModel"][]; + "application/json": components["schemas"]["MatchGraphDetailViewModel"][]; + "text/json": components["schemas"]["MatchGraphDetailViewModel"][]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetResultsByFMSMatchId/{matchIdParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + matchIdParam: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["FieldServerWebMatchViewItem"]; + "application/json": components["schemas"]["FieldServerWebMatchViewItem"]; + "text/json": components["schemas"]["FieldServerWebMatchViewItem"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetResultsByTeamNumber/{teamNumberParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + teamNumberParam: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["FieldServerWebMatchViewItem"][]; + "application/json": components["schemas"]["FieldServerWebMatchViewItem"][]; + "text/json": components["schemas"]["FieldServerWebMatchViewItem"][]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetResults/{levelParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + levelParam: components["schemas"]["TournamentLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["FieldServerWebMatchViewItem"][]; + "application/json": components["schemas"]["FieldServerWebMatchViewItem"][]; + "text/json": components["schemas"]["FieldServerWebMatchViewItem"][]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetLog/{matchIdParam}/{allianceParam}/{stationParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + matchIdParam: string; + /** @description The color assigned to a particular alliance. */ + allianceParam: components["schemas"]["AllianceType"]; + /** @description The names of the driver station positions */ + stationParam: components["schemas"]["StationType"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["FieldServerWebMatchShowLogViewItem"][]; + "application/json": components["schemas"]["FieldServerWebMatchShowLogViewItem"][]; + "text/json": components["schemas"]["FieldServerWebMatchShowLogViewItem"][]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetPlayoffMatchups/{playoffSizeParam}/{sublevelParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The permitted alliance counts of playoffs */ + playoffSizeParam: components["schemas"]["PlayoffSizeTypes"]; + /** @description PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. + * + * Invariants at a level: + * * at least one match is played + * * Pairings: for single and double elimination, an alliance is paired with exactly one other + * alliance in a level. For a round robin tournament, the round robin section would + * be treated as one level with alliances paired with >1 other alliance. + * * An alliance is not required to appear in a level. */ + sublevelParam: components["schemas"]["PlayoffLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["PitPlayoffMatchup"][]; + "application/json": components["schemas"]["PitPlayoffMatchup"][]; + "text/json": components["schemas"]["PitPlayoffMatchup"][]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetLastPlayedMatch": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["GuidNullableTournamentLevelNullableValueTuple"]; + "application/json": components["schemas"]["GuidNullableTournamentLevelNullableValueTuple"]; + "text/json": components["schemas"]["GuidNullableTournamentLevelNullableValueTuple"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetTournamentLevelStatus/{levelParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + levelParam: components["schemas"]["TournamentLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["LevelStatus"]; + "application/json": components["schemas"]["LevelStatus"]; + "text/json": components["schemas"]["LevelStatus"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetPlayoffLevelStatus/{levelParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. + * + * Invariants at a level: + * * at least one match is played + * * Pairings: for single and double elimination, an alliance is paired with exactly one other + * alliance in a level. For a round robin tournament, the round robin section would + * be treated as one level with alliances paired with >1 other alliance. + * * An alliance is not required to appear in a level. */ + levelParam: components["schemas"]["PlayoffLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["LevelStatus"]; + "application/json": components["schemas"]["LevelStatus"]; + "text/json": components["schemas"]["LevelStatus"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetCurrentPlayoffLevel": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["PlayoffLevel"]; + "application/json": components["schemas"]["PlayoffLevel"]; + "text/json": components["schemas"]["PlayoffLevel"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetNextPlayoffLevel/{playoffLevel}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. + * + * Invariants at a level: + * * at least one match is played + * * Pairings: for single and double elimination, an alliance is paired with exactly one other + * alliance in a level. For a round robin tournament, the round robin section would + * be treated as one level with alliances paired with >1 other alliance. + * * An alliance is not required to appear in a level. */ + playoffLevel: components["schemas"]["PlayoffLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["PlayoffLevel"]; + "application/json": components["schemas"]["PlayoffLevel"]; + "text/json": components["schemas"]["PlayoffLevel"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetPreviousPlayoffLevel/{playoffLevel}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. + * + * Invariants at a level: + * * at least one match is played + * * Pairings: for single and double elimination, an alliance is paired with exactly one other + * alliance in a level. For a round robin tournament, the round robin section would + * be treated as one level with alliances paired with >1 other alliance. + * * An alliance is not required to appear in a level. */ + playoffLevel: components["schemas"]["PlayoffLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["PlayoffLevel"]; + "application/json": components["schemas"]["PlayoffLevel"]; + "text/json": components["schemas"]["PlayoffLevel"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetPlayoffLevelForMatch/{matchNumber}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + matchNumber: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["PlayoffLevel"]; + "application/json": components["schemas"]["PlayoffLevel"]; + "text/json": components["schemas"]["PlayoffLevel"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/TournamentLevelHasPlayableSchedule/{tourneyLevel}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + tourneyLevel: components["schemas"]["TournamentLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": boolean; + "application/json": boolean; + "text/json": boolean; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetPlayoffMatchGroups": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A map of match group ID to match group. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": { + [key: string]: components["schemas"]["MatchGroupView"]; + }; + "application/json": { + [key: string]: components["schemas"]["MatchGroupView"]; + }; + "text/json": { + [key: string]: components["schemas"]["MatchGroupView"]; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetMatchRange/{playoffLevel}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. + * + * Invariants at a level: + * * at least one match is played + * * Pairings: for single and double elimination, an alliance is paired with exactly one other + * alliance in a level. For a round robin tournament, the round robin section would + * be treated as one level with alliances paired with >1 other alliance. + * * An alliance is not required to appear in a level. */ + playoffLevel: components["schemas"]["PlayoffLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["Int32Int32ValueTuple"]; + "application/json": components["schemas"]["Int32Int32ValueTuple"]; + "text/json": components["schemas"]["Int32Int32ValueTuple"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetMatchDescription/{tourneyLevel}/{matchNumber}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + tourneyLevel: components["schemas"]["TournamentLevel"]; + matchNumber: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": string; + "application/json": string; + "text/json": string; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/CountOfMatchesPlayed/{levelParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + levelParam: components["schemas"]["TournamentLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": number; + "application/json": number; + "text/json": number; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/CountOfRankingsRecords/{levelParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + levelParam: components["schemas"]["TournamentLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": number; + "application/json": number; + "text/json": number; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetCurrentMatchAndPlayNumber/{fieldTypeParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description for multi field events + * Primary - Main FMS with all functionality enabled + * Secondary - Match Play, Match Test, Match Review, Field Test, System Configuration + * Practice - Match Test, Field Test, System Configuration + * We start the numbering at 1 since the field "number" is referenced around the solution */ + fieldTypeParam: components["schemas"]["FieldTypes"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["TournamentLevelInt32Int32ValueTuple"]; + "application/json": components["schemas"]["TournamentLevelInt32Int32ValueTuple"]; + "text/json": components["schemas"]["TournamentLevelInt32Int32ValueTuple"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetOrMakeFMSScheduleParameterId/{tourneyLevel}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + tourneyLevel: components["schemas"]["TournamentLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": string; + "application/json": string; + "text/json": string; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetRankings/{eventIdParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + eventIdParam: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["RankModel"][]; + "application/json": components["schemas"]["RankModel"][]; + "text/json": components["schemas"]["RankModel"][]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetAllTeamNumbers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": number[]; + "application/json": number[]; + "text/json": number[]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/fieldmonitor/get/GetAllAlliances": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["AllianceSelectionEventWizard"][]; + "application/json": components["schemas"]["AllianceSelectionEventWizard"][]; + "text/json": components["schemas"]["AllianceSelectionEventWizard"][]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/FieldMonitor/Matches/Score": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + matchId?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/appUsageData": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: { + parameters: { + query?: never; + header: { + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json-patch+json": string; + "application/json": string; + "text/json": string; + "application/*+json": string; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/eventNotes/{noteId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + noteId?: string; + }; + header?: never; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["EventNotesModel"]; + "application/json": components["schemas"]["EventNotesModel"]; + "text/json": components["schemas"]["EventNotesModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put: { + parameters: { + query?: never; + header: { + "FMS-RecordVersion": number; + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + noteId: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json-patch+json": components["schemas"]["EventNoteCreateModifyModel"]; + "application/json": components["schemas"]["EventNoteCreateModifyModel"]; + "text/json": components["schemas"]["EventNoteCreateModifyModel"]; + "application/*+json": components["schemas"]["EventNoteCreateModifyModel"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["NoteCreatedUpdatedModel"]; + "application/json": components["schemas"]["NoteCreatedUpdatedModel"]; + "text/json": components["schemas"]["NoteCreatedUpdatedModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + post: { + parameters: { + query?: never; + header: { + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + noteId: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json-patch+json": components["schemas"]["EventNoteCreateModifyModel"]; + "application/json": components["schemas"]["EventNoteCreateModifyModel"]; + "text/json": components["schemas"]["EventNoteCreateModifyModel"]; + "application/*+json": components["schemas"]["EventNoteCreateModifyModel"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["NoteCreatedUpdatedModel"]; + "application/json": components["schemas"]["NoteCreatedUpdatedModel"]; + "text/json": components["schemas"]["NoteCreatedUpdatedModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete: { + parameters: { + query?: never; + header: { + "FMS-RecordVersion": number; + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + noteId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/eventNotes": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + noteId?: string; + }; + header?: never; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["EventNotesModel"]; + "application/json": components["schemas"]["EventNotesModel"]; + "text/json": components["schemas"]["EventNotesModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post: { + parameters: { + query?: never; + header: { + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json-patch+json": components["schemas"]["EventNoteCreateModifyModel"]; + "application/json": components["schemas"]["EventNoteCreateModifyModel"]; + "text/json": components["schemas"]["EventNoteCreateModifyModel"]; + "application/*+json": components["schemas"]["EventNoteCreateModifyModel"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["NoteCreatedUpdatedModel"]; + "application/json": components["schemas"]["NoteCreatedUpdatedModel"]; + "text/json": components["schemas"]["NoteCreatedUpdatedModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/matchNotes/{noteId}/{tournamentLevel}/{matchNumber}/{playNumber}/{teamNumber}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + noteId?: string; + /** @description The level of the tournament (practice, quals, etc) */ + tournamentLevel?: components["schemas"]["TournamentLevel"]; + matchNumber?: number; + playNumber?: number; + teamNumber?: number; + }; + header?: never; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["MatchNotesModel"]; + "application/json": components["schemas"]["MatchNotesModel"]; + "text/json": components["schemas"]["MatchNotesModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/matchNotes": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + noteId?: string; + /** @description The level of the tournament (practice, quals, etc) */ + tournamentLevel?: components["schemas"]["TournamentLevel"]; + matchNumber?: number; + playNumber?: number; + teamNumber?: number; + }; + header?: never; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["MatchNotesModel"]; + "application/json": components["schemas"]["MatchNotesModel"]; + "text/json": components["schemas"]["MatchNotesModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post: { + parameters: { + query?: never; + header: { + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json-patch+json": components["schemas"]["MatchNoteCreateModifyModel"]; + "application/json": components["schemas"]["MatchNoteCreateModifyModel"]; + "text/json": components["schemas"]["MatchNoteCreateModifyModel"]; + "application/*+json": components["schemas"]["MatchNoteCreateModifyModel"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["NoteCreatedUpdatedModel"]; + "application/json": components["schemas"]["NoteCreatedUpdatedModel"]; + "text/json": components["schemas"]["NoteCreatedUpdatedModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/matchNotes/{noteId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: { + parameters: { + query?: never; + header: { + "FMS-RecordVersion": number; + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + noteId: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json-patch+json": components["schemas"]["MatchNoteCreateModifyModel"]; + "application/json": components["schemas"]["MatchNoteCreateModifyModel"]; + "text/json": components["schemas"]["MatchNoteCreateModifyModel"]; + "application/*+json": components["schemas"]["MatchNoteCreateModifyModel"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["NoteCreatedUpdatedModel"]; + "application/json": components["schemas"]["NoteCreatedUpdatedModel"]; + "text/json": components["schemas"]["NoteCreatedUpdatedModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + post: { + parameters: { + query?: never; + header: { + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + noteId: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json-patch+json": components["schemas"]["MatchNoteCreateModifyModel"]; + "application/json": components["schemas"]["MatchNoteCreateModifyModel"]; + "text/json": components["schemas"]["MatchNoteCreateModifyModel"]; + "application/*+json": components["schemas"]["MatchNoteCreateModifyModel"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["NoteCreatedUpdatedModel"]; + "application/json": components["schemas"]["NoteCreatedUpdatedModel"]; + "text/json": components["schemas"]["NoteCreatedUpdatedModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete: { + parameters: { + query?: never; + header: { + "FMS-RecordVersion": number; + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + noteId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/teamIssues/{noteId}/{teamNumber}/{issueType}/{resolutionStatus}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + noteId?: string; + teamNumber?: number; + issueType?: components["schemas"]["EventNoteIssueTypes"]; + resolutionStatus?: components["schemas"]["EventNoteResolutionTypes"]; + }; + header?: never; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["TeamIssuesModel"]; + "application/json": components["schemas"]["TeamIssuesModel"]; + "text/json": components["schemas"]["TeamIssuesModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/teamIssues": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + noteId?: string; + teamNumber?: number; + issueType?: components["schemas"]["EventNoteIssueTypes"]; + resolutionStatus?: components["schemas"]["EventNoteResolutionTypes"]; + }; + header?: never; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["TeamIssuesModel"]; + "application/json": components["schemas"]["TeamIssuesModel"]; + "text/json": components["schemas"]["TeamIssuesModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post: { + parameters: { + query?: never; + header: { + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json-patch+json": components["schemas"]["TeamIssueCreateModifyModel"]; + "application/json": components["schemas"]["TeamIssueCreateModifyModel"]; + "text/json": components["schemas"]["TeamIssueCreateModifyModel"]; + "application/*+json": components["schemas"]["TeamIssueCreateModifyModel"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["NoteCreatedUpdatedModel"]; + "application/json": components["schemas"]["NoteCreatedUpdatedModel"]; + "text/json": components["schemas"]["NoteCreatedUpdatedModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/teamIssues/{noteId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: { + parameters: { + query?: never; + header: { + "FMS-RecordVersion": number; + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + noteId: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json-patch+json": components["schemas"]["TeamIssueCreateModifyModel"]; + "application/json": components["schemas"]["TeamIssueCreateModifyModel"]; + "text/json": components["schemas"]["TeamIssueCreateModifyModel"]; + "application/*+json": components["schemas"]["TeamIssueCreateModifyModel"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["NoteCreatedUpdatedModel"]; + "application/json": components["schemas"]["NoteCreatedUpdatedModel"]; + "text/json": components["schemas"]["NoteCreatedUpdatedModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + post: { + parameters: { + query?: never; + header: { + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + noteId: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json-patch+json": components["schemas"]["TeamIssueCreateModifyModel"]; + "application/json": components["schemas"]["TeamIssueCreateModifyModel"]; + "text/json": components["schemas"]["TeamIssueCreateModifyModel"]; + "application/*+json": components["schemas"]["TeamIssueCreateModifyModel"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["NoteCreatedUpdatedModel"]; + "application/json": components["schemas"]["NoteCreatedUpdatedModel"]; + "text/json": components["schemas"]["NoteCreatedUpdatedModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + delete: { + parameters: { + query?: never; + header: { + "FMS-RecordVersion": number; + "FMS-UsersRealName": string; + "FMS-DeviceIdentification": string; + }; + path: { + season: number; + eventCode: string; + noteId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/schedule/{tournamentLevel}/{teamNumber}/{start}/{end}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + teamNumber?: number; + start?: number; + end?: number; + }; + header?: never; + path: { + season: number; + eventCode: string; + /** @description The level of the tournament (practice, quals, etc) */ + tournamentLevel: components["schemas"]["TournamentLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["EventScheduleModel"]; + "application/json": components["schemas"]["EventScheduleModel"]; + "text/json": components["schemas"]["EventScheduleModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/schedule/{tournamentLevel}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + teamNumber?: number; + start?: number; + end?: number; + }; + header?: never; + path: { + season: number; + eventCode: string; + /** @description The level of the tournament (practice, quals, etc) */ + tournamentLevel: components["schemas"]["TournamentLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["EventScheduleModel"]; + "application/json": components["schemas"]["EventScheduleModel"]; + "text/json": components["schemas"]["EventScheduleModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/schedule/hybrid/{tournamentLevel}/{teamNumber}/{start}/{end}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + teamNumber?: number; + start?: number; + end?: number; + }; + header?: never; + path: { + season: number; + eventCode: string; + /** @description The level of the tournament (practice, quals, etc) */ + tournamentLevel: components["schemas"]["TournamentLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["EventScheduleHybridModel"]; + "application/json": components["schemas"]["EventScheduleHybridModel"]; + "text/json": components["schemas"]["EventScheduleHybridModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/schedule/hybrid/{tournamentLevel}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + teamNumber?: number; + start?: number; + end?: number; + }; + header?: never; + path: { + season: number; + eventCode: string; + /** @description The level of the tournament (practice, quals, etc) */ + tournamentLevel: components["schemas"]["TournamentLevel"]; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["EventScheduleHybridModel"]; + "application/json": components["schemas"]["EventScheduleHybridModel"]; + "text/json": components["schemas"]["EventScheduleHybridModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/WPA/{teamNumber}/{connectionStatus}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + teamNumber?: number; + connectionStatus?: components["schemas"]["WPAKeyStatusType"]; + }; + header?: never; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["ConnectionStatusInfoModel"]; + "application/json": components["schemas"]["ConnectionStatusInfoModel"]; + "text/json": components["schemas"]["ConnectionStatusInfoModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/WPA": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + teamNumber?: number; + connectionStatus?: components["schemas"]["WPAKeyStatusType"]; + }; + header?: never; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["ConnectionStatusInfoModel"]; + "application/json": components["schemas"]["ConnectionStatusInfoModel"]; + "text/json": components["schemas"]["ConnectionStatusInfoModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/bypass/{teamNumber}/{tournamentLevel}/{matchNumber}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + teamNumber?: number; + /** @description The level of the tournament (practice, quals, etc) */ + tournamentLevel?: components["schemas"]["TournamentLevel"]; + matchNumber?: number; + }; + header?: never; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["BypassStatusInfoModel"]; + "application/json": components["schemas"]["BypassStatusInfoModel"]; + "text/json": components["schemas"]["BypassStatusInfoModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/{eventCode}/bypass": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + teamNumber?: number; + /** @description The level of the tournament (practice, quals, etc) */ + tournamentLevel?: components["schemas"]["TournamentLevel"]; + matchNumber?: number; + }; + header?: never; + path: { + season: number; + eventCode: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["BypassStatusInfoModel"]; + "application/json": components["schemas"]["BypassStatusInfoModel"]; + "text/json": components["schemas"]["BypassStatusInfoModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/events/{eventCode}/{teamNumber}/{districtCode}/{excludeDistrict}/{active}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + eventCode?: string; + teamNumber?: number; + districtCode?: string; + excludeDistrict?: boolean; + active?: boolean; + }; + header?: never; + path: { + season: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["SeasonEventListingsModel"]; + "application/json": components["schemas"]["SeasonEventListingsModel"]; + "text/json": components["schemas"]["SeasonEventListingsModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/events": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + eventCode?: string; + teamNumber?: number; + districtCode?: string; + excludeDistrict?: boolean; + active?: boolean; + }; + header?: never; + path: { + season: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["SeasonEventListingsModel"]; + "application/json": components["schemas"]["SeasonEventListingsModel"]; + "text/json": components["schemas"]["SeasonEventListingsModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/teams/{eventCode}/{teamNumber}/{districtCode}/{page}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + eventCode?: string; + teamNumber?: number; + districtCode?: string; + page?: number; + }; + header?: never; + path: { + season: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["SeasonTeamListingsModel"]; + "application/json": components["schemas"]["SeasonTeamListingsModel"]; + "text/json": components["schemas"]["SeasonTeamListingsModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/teams": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: { + eventCode?: string; + teamNumber?: number; + districtCode?: string; + page?: number; + }; + header?: never; + path: { + season: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["SeasonTeamListingsModel"]; + "application/json": components["schemas"]["SeasonTeamListingsModel"]; + "text/json": components["schemas"]["SeasonTeamListingsModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/districts": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + season: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["SeasonDistrictListingsModel"]; + "application/json": components["schemas"]["SeasonDistrictListingsModel"]; + "text/json": components["schemas"]["SeasonDistrictListingsModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["ApiIndexModel"]; + "application/json": components["schemas"]["ApiIndexModel"]; + "text/json": components["schemas"]["ApiIndexModel"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTAAppApi/CurrentEventStatus": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["CurrentEventStatus"]; + "application/json": components["schemas"]["CurrentEventStatus"]; + "text/json": components["schemas"]["CurrentEventStatus"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetTournamentLevelStatus/{levelParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + levelParam: components["schemas"]["TournamentLevel"]; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["LevelStatus"]; + "application/json": components["schemas"]["LevelStatus"]; + "text/json": components["schemas"]["LevelStatus"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetPlayoffLevelStatus/{levelParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. + * + * Invariants at a level: + * * at least one match is played + * * Pairings: for single and double elimination, an alliance is paired with exactly one other + * alliance in a level. For a round robin tournament, the round robin section would + * be treated as one level with alliances paired with >1 other alliance. + * * An alliance is not required to appear in a level. */ + levelParam: components["schemas"]["PlayoffLevel"]; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["LevelStatus"]; + "application/json": components["schemas"]["LevelStatus"]; + "text/json": components["schemas"]["LevelStatus"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetCurrentPlayoffLevel": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["PlayoffLevel"]; + "application/json": components["schemas"]["PlayoffLevel"]; + "text/json": components["schemas"]["PlayoffLevel"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetNextPlayoffLevel/{playoffLevel}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. + * + * Invariants at a level: + * * at least one match is played + * * Pairings: for single and double elimination, an alliance is paired with exactly one other + * alliance in a level. For a round robin tournament, the round robin section would + * be treated as one level with alliances paired with >1 other alliance. + * * An alliance is not required to appear in a level. */ + playoffLevel: components["schemas"]["PlayoffLevel"]; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["PlayoffLevel"]; + "application/json": components["schemas"]["PlayoffLevel"]; + "text/json": components["schemas"]["PlayoffLevel"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetPreviousPlayoffLevel/{playoffLevel}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. + * + * Invariants at a level: + * * at least one match is played + * * Pairings: for single and double elimination, an alliance is paired with exactly one other + * alliance in a level. For a round robin tournament, the round robin section would + * be treated as one level with alliances paired with >1 other alliance. + * * An alliance is not required to appear in a level. */ + playoffLevel: components["schemas"]["PlayoffLevel"]; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["PlayoffLevel"]; + "application/json": components["schemas"]["PlayoffLevel"]; + "text/json": components["schemas"]["PlayoffLevel"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetPlayoffLevelForMatch/{matchNumber}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + matchNumber: number; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["PlayoffLevel"]; + "application/json": components["schemas"]["PlayoffLevel"]; + "text/json": components["schemas"]["PlayoffLevel"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/TournamentLevelHasPlayableSchedule/{tourneyLevel}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + tourneyLevel: components["schemas"]["TournamentLevel"]; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": boolean; + "application/json": boolean; + "text/json": boolean; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetPlayoffMatchGroups": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A map of match group ID to match group. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": { + [key: string]: components["schemas"]["MatchGroupView"]; + }; + "application/json": { + [key: string]: components["schemas"]["MatchGroupView"]; + }; + "text/json": { + [key: string]: components["schemas"]["MatchGroupView"]; + }; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetMatchRange/{playoffLevel}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. + * + * Invariants at a level: + * * at least one match is played + * * Pairings: for single and double elimination, an alliance is paired with exactly one other + * alliance in a level. For a round robin tournament, the round robin section would + * be treated as one level with alliances paired with >1 other alliance. + * * An alliance is not required to appear in a level. */ + playoffLevel: components["schemas"]["PlayoffLevel"]; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["Int32Int32ValueTuple"]; + "application/json": components["schemas"]["Int32Int32ValueTuple"]; + "text/json": components["schemas"]["Int32Int32ValueTuple"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetMatchDescription/{tourneyLevel}/{matchNumber}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + tourneyLevel: components["schemas"]["TournamentLevel"]; + matchNumber: number; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": string; + "application/json": string; + "text/json": string; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/CountOfMatchesPlayed/{levelParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + levelParam: components["schemas"]["TournamentLevel"]; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": number; + "application/json": number; + "text/json": number; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/CountOfRankingsRecords/{levelParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + levelParam: components["schemas"]["TournamentLevel"]; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": number; + "application/json": number; + "text/json": number; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetCurrentMatchAndPlayNumber/{fieldTypeParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description for multi field events + * Primary - Main FMS with all functionality enabled + * Secondary - Match Play, Match Test, Match Review, Field Test, System Configuration + * Practice - Match Test, Field Test, System Configuration + * We start the numbering at 1 since the field "number" is referenced around the solution */ + fieldTypeParam: components["schemas"]["FieldTypes"]; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["TournamentLevelInt32Int32ValueTuple"]; + "application/json": components["schemas"]["TournamentLevelInt32Int32ValueTuple"]; + "text/json": components["schemas"]["TournamentLevelInt32Int32ValueTuple"]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetOrMakeFMSScheduleParameterId/{tourneyLevel}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The level of the tournament (practice, quals, etc) */ + tourneyLevel: components["schemas"]["TournamentLevel"]; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": string; + "application/json": string; + "text/json": string; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetRankings/{eventIdParam}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + eventIdParam: string; + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["RankModel"][]; + "application/json": components["schemas"]["RankModel"][]; + "text/json": components["schemas"]["RankModel"][]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetAllTeamNumbers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": number[]; + "application/json": number[]; + "text/json": number[]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1.0/FTA/{season}/get/GetAllAlliances": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: { + parameters: { + query?: never; + header?: never; + path: { + season: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": components["schemas"]["AllianceSelectionEventWizard"][]; + "application/json": components["schemas"]["AllianceSelectionEventWizard"][]; + "text/json": components["schemas"]["AllianceSelectionEventWizard"][]; + }; + }; + }; + }; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/hubs/FieldMonitorEvents/MatchStatusInfoChanged": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: { + parameters: { + query?: { + matchStatusInfoChangedParam?: components["schemas"]["MatchStatusInfo"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/hubs/FieldMonitorEvents/FieldMonitorDataChanged": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: { + parameters: { + query?: { + dataParam?: components["schemas"]["FieldMonitorData"][]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/hubs/FieldMonitorEvents/ScheduleAheadBehindChanged": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: { + parameters: { + query?: { + aheadBehindParam?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/hubs/FieldMonitorEvents/FieldMonitorPreviousMacAddressesChanged": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: { + parameters: { + query?: { + data?: components["schemas"]["PreviousMacAddressesData"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/hubs/FTAAppEvents/NoteChanged": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: { + parameters: { + query?: { + data?: components["schemas"]["EventNoteChange"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/hubs/FTAAppEvents/MatchStatusInfoChanged": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: { + parameters: { + query?: { + matchStatusInfoChangedParam?: components["schemas"]["MatchStatusInfo"]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; } export type webhooks = Record; export interface components { - schemas: { - AllianceSelectionEventWizard: { - /** Format: uuid */ - fmsEventId?: string; - /** Format: int32 */ - number?: number; - name?: string | null; - substituteButtonEnabled?: boolean; - captainTeamNumberRaw?: string | null; - /** Format: int32 */ - captainTeamNumber?: number | null; - /** Format: int32 */ - captainTeamNumberHold?: number | null; - captainSubstituteChecked?: boolean; - captainFlag?: boolean; - /** Format: int32 */ - captainTabIndex?: number; - round1TeamNumberRaw?: string | null; - /** Format: int32 */ - round1TeamNumber?: number | null; - /** Format: int32 */ - round1TeamNumberHold?: number | null; - round1SubstituteChecked?: boolean; - round1Flag?: boolean; - /** Format: int32 */ - round1TabIndex?: number; - round2TeamNumberRaw?: string | null; - /** Format: int32 */ - round2TeamNumber?: number | null; - /** Format: int32 */ - round2TeamNumberHold?: number | null; - round2SubstituteChecked?: boolean; - round2Flag?: boolean; - /** Format: int32 */ - round2TabIndex?: number; - round3TeamNumberRaw?: string | null; - /** Format: int32 */ - round3TeamNumberHold?: number | null; - round3SubstituteChecked?: boolean; - /** Format: int32 */ - round3TeamNumber?: number | null; - round3Enabled?: boolean; - round3Flag?: boolean; - showUndoSubstitution?: boolean; - }; - /** - * @description The color assigned to a particular alliance. - * @enum {string} - */ - AllianceType: AllianceType; - /** @description FTA Notepad: API Index */ - ApiIndexModel: { - name?: string | null; - apiVersion?: string | null; - serviceMainifestName?: string | null; - serviceMainifestVersion?: string | null; - codePackageName?: string | null; - codePackageVersion?: string | null; - status?: string | null; - /** Format: int32 */ - currentSeason?: number; - /** Format: int32 */ - maxSeason?: number; - }; - /** @enum {string} */ - BWUtilizationType: BWUtilizationType; - /** - * @description Identifies which bracket a match group is part of, for head-to-head match groups. - * @enum {string} - */ - Bracket: Bracket; - BypassStatusInfoModel: { - TeamBypasses?: components['schemas']['BypassStatusInfoTeamModel'][] | null; - }; - BypassStatusInfoTeamModel: { - /** Format: int32 */ - teamNumber?: number; - /** Format: int32 */ - matchNumber?: number; - tournamentLevel?: string | null; - }; - ConnectionStatusInfoModel: { - TeamStatuses?: components['schemas']['ConnectionStatusInfoTeamModel'][] | null; - }; - ConnectionStatusInfoTeamModel: { - /** Format: int32 */ - teamNumber?: number; - wpaKeyExists?: boolean; - wpaKeyStatus?: string | null; - }; - CurrentEventStatus: { - eventActive?: boolean; - eventCode?: string | null; - /** Format: uuid */ - fmsEventId?: string; - tournamentLevel?: components['schemas']['TournamentLevel']; - }; - /** @enum {string} */ - DSStationStatus: DSStationStatus; - EventNoteChange: { - noteType?: components['schemas']['EventNoteTypes'] & unknown; - /** - * Format: uuid - * @description MessagePack Key: p2 - */ - fmsNoteId?: string; - /** - * Format: int64 - * @description MessagePack Key: p3 - */ - recordVersion?: number | null; - type?: components['schemas']['EventNoteChangeTypes'] & unknown; - /** @description MessagePack Key: p5 */ - fmsDeviceIdentification?: string | null; - /** - * Format: date-time - * @description MessagePack Key: p6 - */ - currentTimeStamp?: string; - /** - * Format: date-time - * @description MessagePack Key: p7 - */ - previousTimeStamp?: string | null; - }; - /** @enum {string} */ - EventNoteChangeTypes: EventNoteChangeTypes; - /** @enum {string} */ - EventNoteIssueTypes: EventNoteIssueTypes; - /** @description FTA Notepad: FTA EventNote */ - EventNoteModel: { - note?: string | null; - /** Format: uuid */ - noteId?: string; - /** Format: date-time */ - timeAdded?: string | null; - /** Format: date-time */ - timeUpdated?: string | null; - isDeleted?: boolean; - whoAdded?: string | null; - whoUpdated?: string | null; - /** Format: int64 */ - recordVersion?: number; - }; - /** @enum {string} */ - EventNoteResolutionTypes: EventNoteResolutionTypes; - /** @enum {string} */ - EventNoteTypes: EventNoteTypes; - EventNotesModel: { - eventNotes?: components['schemas']['EventNoteModel'][] | null; - /** Format: int32 */ - noteCount?: number; - }; - EventScheduleHybridModel: { - Schedule?: components['schemas']['ScheduleHybridModel'][] | null; - }; - EventScheduleModel: { - Schedule?: components['schemas']['ScheduledMatchModel'][] | null; - }; - FieldMonitorData: { - alliance?: components['schemas']['AllianceType'] & unknown; - station?: components['schemas']['StationType'] & unknown; - /** - * Format: int32 - * @description MessagePack Key: p3 - */ - teamNumber?: number; - /** @description MessagePack Key: p4 */ - connection?: boolean; - /** @description MessagePack Key: p5 */ - linkActive?: boolean; - /** @description MessagePack Key: p6 */ - dsLinkActive?: boolean; - /** @description MessagePack Key: p7 */ - radioLink?: boolean; - /** @description MessagePack Key: p8 */ - rioLink?: boolean; - /** @description MessagePack Key: p9 */ - isEnabled?: boolean; - /** @description MessagePack Key: pa */ - isAuto?: boolean; - /** @description MessagePack Key: pb */ - isBypassed?: boolean; - /** @description MessagePack Key: pc */ - isEStopPressed?: boolean; - /** @description MessagePack Key: pd */ - isEStopped?: boolean; - /** - * Format: double - * @description MessagePack Key: pe - */ - battery?: number; - monitorStatus?: components['schemas']['MonitorStatusType'] & unknown; - /** - * Format: int32 - * @description MessagePack Key: pg - */ - averageTripTime?: number; - /** - * Format: int32 - * @description MessagePack Key: ph - */ - lostPackets?: number; - /** - * Format: int32 - * @description MessagePack Key: pi - */ - signal?: number | null; - /** - * Format: int32 - * @description MessagePack Key: pj - */ - noise?: number | null; - /** Format: int32 */ - snr?: number; - /** - * Format: int32 - * @description MessagePack Key: pl - */ - inactivity?: number; - macAddress?: string | null; - /** - * Format: double - * @description MessagePack Key: pn - */ - txRate?: number | null; - /** - * Format: int32 - * @description MessagePack Key: po - */ - txMCS?: number | null; - /** - * Format: int32 - * @description MessagePack Key: pp - */ - txMCSBandWidth?: number | null; - /** @description MessagePack Key: pq */ - txVHT?: boolean | null; - /** - * Format: int32 - * @description MessagePack Key: pr - */ - txVHTNSS?: number | null; - /** - * Format: int32 - * @description MessagePack Key: ps - */ - txPackets?: number; - /** - * Format: double - * @description MessagePack Key: pt - */ - rxRate?: number | null; - /** - * Format: int32 - * @description MessagePack Key: pu - */ - rxMCS?: number | null; - /** - * Format: int32 - * @description MessagePack Key: pv - */ - rxMCSBandWidth?: number | null; - /** @description MessagePack Key: pw */ - rxVHT?: boolean | null; - /** - * Format: int32 - * @description MessagePack Key: px - */ - rxVHTNSS?: number | null; - /** - * Format: int32 - * @description MessagePack Key: py - */ - rxPackets?: number; - /** - * Format: double - * @description MessagePack Key: pz - */ - dataRateTotal?: number; - /** - * Format: double - * @description MessagePack Key: paa - */ - dataRateToRobot?: number; - /** - * Format: double - * @description MessagePack Key: pbb - */ - dataRateFromRobot?: number; - bwUtilization?: components['schemas']['BWUtilizationType']; - wpaKeyStatus?: components['schemas']['WPAKeyStatusType']; - /** @description MessagePack Key: pee */ - driverStationIsOfficial?: boolean; - stationStatus?: components['schemas']['DSStationStatus'] & unknown; - /** @description MessagePack Key: pgg */ - brownout?: boolean; - /** @description MessagePack Key: phh */ - eStopSource?: string | null; - /** @description MessagePack Key: pii */ - isAStopPressed?: boolean; - /** @description MessagePack Key: pjj */ - isAStopped?: boolean; - /** @description MessagePack Key: pjk */ - moveToStation?: string | null; - /** @description MessagePack Key: pk */ - sNR?: unknown; - /** @description MessagePack Key: pm */ - mACAddress?: unknown; - /** @description MessagePack Key: pcc */ - bWUtilization?: unknown; - /** @description MessagePack Key: pdd */ - wPAKeyStatus?: unknown; - }; - FieldServerWebMatchShowLogViewItem: { - /** Format: date-time */ - timeStamp?: string; - /** Format: double */ - matchTimeBase?: number; - /** Format: int32 */ - matchTime?: number; - auto?: boolean; - dsLinkActive?: boolean; - enabled?: boolean; - aStopPressed?: boolean; - eStopPressed?: boolean; - linkActive?: boolean; - radioLink?: boolean; - rioLink?: boolean; - /** Format: int32 */ - averageTripTime?: number; - /** Format: int32 */ - lostPackets?: number; - /** Format: int32 */ - sentPackets?: number; - /** Format: double */ - battery?: number; - brownout?: boolean; - /** Format: int32 */ - signal?: number | null; - /** Format: int32 */ - noise?: number | null; - /** Format: int32 */ - snr?: number; - /** Format: double */ - txRate?: number | null; - /** Format: int32 */ - txMCS?: number | null; - /** Format: double */ - rxRate?: number | null; - /** Format: int32 */ - rxMCS?: number | null; - /** Format: double */ - dataRateTotal?: number; - }; - FieldServerWebMatchViewItem: { - /** Format: uuid */ - fmsMatchId?: string; - tournamentLevel?: components['schemas']['TournamentLevel']; - /** Format: uuid */ - fmsEventId?: string; - /** Format: date-time */ - startTime?: string; - /** Format: date-time */ - actualStartTime?: string; - description?: string | null; - /** Format: int32 */ - dayNumber?: number; - /** Format: int32 */ - matchNumber?: number; - /** Format: int32 */ - playNumber?: number; - /** Format: int32 */ - teamNumberBlue1?: number | null; - /** Format: int32 */ - teamNumberBlue2?: number | null; - /** Format: int32 */ - teamNumberBlue3?: number | null; - /** Format: int32 */ - teamNumberRed1?: number | null; - /** Format: int32 */ - teamNumberRed2?: number | null; - /** Format: int32 */ - teamNumberRed3?: number | null; - }; - /** - * @description for multi field events - * Primary - Main FMS with all functionality enabled - * Secondary - Match Play, Match Test, Match Review, Field Test, System Configuration - * Practice - Match Test, Field Test, System Configuration - * We start the numbering at 1 since the field "number" is referenced around the solution - * @enum {string} - */ - FieldTypes: FieldTypes; - Int32Int32ValueTuple: { - /** Format: int32 */ - item1?: number; - /** Format: int32 */ - item2?: number; - }; - /** - * @description The current status of a tournament level. - * @enum {string} - */ - LevelStatus: LevelStatus; - MatchGraphDetailViewModel: { - auto?: boolean; - /** Format: double */ - matchTime?: number; - /** Format: double */ - averageRoundTrip?: number; - /** Format: double */ - battery?: number; - /** Format: double */ - dataRateTotal?: number; - /** Format: int32 */ - signal?: number | null; - /** Format: int32 */ - noise?: number | null; - }; - /** @enum {string} */ - MatchGroupType: MatchGroupType; - MatchGroupView: { - id?: string | null; - type?: components['schemas']['MatchGroupType']; - playoffLevel?: components['schemas']['PlayoffLevel']; - matchNumbers?: number[] | null; - isComplete?: boolean; - winnersNextRoundIsByeRound?: boolean; - /** Format: int32 */ - redAlliance?: number | null; - /** Format: int32 */ - blueAlliance?: number | null; - /** Format: int32 */ - matchesPlayed?: number; - /** Format: int32 */ - redWins?: number; - /** Format: int32 */ - blueWins?: number; - bracket?: components['schemas']['Bracket']; - currentRankings?: components['schemas']['RankedAlliance'][] | null; - }; - /** @description FTA Notepad: FTA MatchNote */ - MatchNoteModel: { - note?: string | null; - /** Format: uuid */ - noteId?: string; - tournamentLevel?: string | null; - /** Format: int32 */ - matchNumber?: number; - /** Format: int32 */ - playNumber?: number; - /** Format: int32 */ - teamNumber?: number | null; - /** Format: date-time */ - timeAdded?: string | null; - /** Format: date-time */ - timeUpdated?: string | null; - isDeleted?: boolean; - whoAdded?: string | null; - whoUpdated?: string | null; - /** Format: int64 */ - recordVersion?: number; - }; - MatchNotesModel: { - matchNotes?: components['schemas']['MatchNoteModel'][] | null; - /** Format: int32 */ - noteCount?: number; - }; - /** @enum {string} */ - MatchStateType: MatchStateType; - MatchStatusInfo: { - matchState?: components['schemas']['MatchStateType'] & unknown; - /** - * Format: int32 - * @description MessagePack Key: p2 - */ - matchNumber?: number; - /** - * Format: int32 - * @description MessagePack Key: p3 - */ - playNumber?: number; - level?: components['schemas']['TournamentLevel'] & unknown; - }; - /** @enum {string} */ - MonitorStatusType: MonitorStatusType; - /** @description FTA Notepad: Response upon successful note creation */ - NoteCreatedUpdatedModel: { - /** Format: uuid */ - noteId?: string; - /** Format: int64 */ - recordVersion?: number; - }; - PitPlayoffMatchup: { - /** Format: int32 */ - redAllianceNumber?: number; - /** Format: int32 */ - blueAllianceNumber?: number; - redAllianceTeams?: string | null; - blueAllianceTeams?: string | null; - /** Format: int32 */ - redAllianceWins?: number; - /** Format: int32 */ - blueAllianceWins?: number; - }; - /** - * @description PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. - * - * Invariants at a level: - * * at least one match is played - * * Pairings: for single and double elimination, an alliance is paired with exactly one other - * alliance in a level. For a round robin tournament, the round robin section would - * be treated as one level with alliances paired with >1 other alliance. - * * An alliance is not required to appear in a level. - * @enum {string} - */ - PlayoffLevel: PlayoffLevel; - /** - * @description The permitted alliance counts of playoffs - * @enum {string} - */ - PlayoffSizeTypes: PlayoffSizeTypes; - RankModel: { - /** Format: int32 */ - rank?: number; - /** Format: int32 */ - team?: number; - /** Format: int32 */ - wins?: number; - /** Format: int32 */ - losses?: number; - /** Format: int32 */ - ties?: number; - /** Format: double */ - rs?: number; - /** Format: double */ - avgScore?: number; - /** Format: int32 */ - played?: number; - /** Format: double */ - dq?: number; - /** Format: double */ - sort1?: number; - /** Format: double */ - sort2?: number; - /** Format: double */ - sort3?: number; - /** Format: double */ - sort4?: number; - /** Format: double */ - sort5?: number; - /** Format: double */ - sort6?: number; - }; - RankedAlliance: { - /** Format: int32 */ - readonly rank?: number; - readonly isTied?: boolean; - /** Format: int32 */ - readonly allianceNumber?: number; - /** Format: int32 */ - readonly matchesPlayed?: number; - /** Format: int32 */ - readonly wins?: number; - /** Format: int32 */ - readonly losses?: number; - /** Format: int32 */ - readonly ties?: number; - /** Format: double */ - readonly averageRankingPoints?: number; - readonly averageTiebreakers?: number[] | null; - }; - ScheduleHybridModel: { - description?: string | null; - tournamentLevel?: string | null; - /** Format: int32 */ - matchNumber?: number; - /** Format: date-time */ - startTime?: string | null; - /** Format: date-time */ - actualStartTime?: string | null; - /** Format: date-time */ - postResultTime?: string | null; - /** Format: int32 */ - scoreRedFinal?: number | null; - /** Format: int32 */ - scoreRedFoul?: number | null; - /** Format: int32 */ - scoreRedAuto?: number | null; - /** Format: int32 */ - scoreBlueFinal?: number | null; - /** Format: int32 */ - scoreBlueFoul?: number | null; - /** Format: int32 */ - scoreBlueAuto?: number | null; - teams?: components['schemas']['ScheduleHybridModelTeam'][] | null; - }; - ScheduleHybridModelTeam: { - /** Format: int32 */ - teamNumber?: number | null; - station?: string | null; - surrogate?: boolean; - dq?: boolean | null; - }; - ScheduledMatchModel: { - field?: string | null; - description?: string | null; - level?: string | null; - /** Format: date-time */ - startTime?: string | null; - /** Format: int32 */ - matchNumber?: number; - teams?: components['schemas']['ScheduledMatchTeamModel'][] | null; - }; - ScheduledMatchTeamModel: { - /** Format: int32 */ - teamNumber?: number | null; - station?: string | null; - surrogate?: boolean; - }; - SeasonDistrictListingsModel: { - districts?: components['schemas']['SeasonDistrictModel'][] | null; - /** Format: int32 */ - districtCount?: number; - }; - SeasonDistrictModel: { - code?: string | null; - name?: string | null; - }; - SeasonEventListingsModel: { - Events?: components['schemas']['SeasonEventModel'][] | null; - /** Format: int32 */ - eventCount?: number; - }; - SeasonEventModel: { - code?: string | null; - divisionCode?: string | null; - name?: string | null; - type?: string | null; - districtCode?: string | null; - venue?: string | null; - address?: string | null; - city?: string | null; - stateprov?: string | null; - country?: string | null; - website?: string | null; - webcasts?: string[] | null; - timezone?: string | null; - /** Format: date-time */ - dateStart?: string; - /** Format: date-time */ - dateEnd?: string; - }; - SeasonTeamListingsModel: { - teams?: components['schemas']['SeasonTeamModel'][] | null; - /** Format: int32 */ - teamCountTotal?: number; - /** Format: int32 */ - teamCountPage?: number; - /** Format: int32 */ - pageCurrent?: number; - /** Format: int32 */ - pageTotal?: number; - }; - SeasonTeamModel: { - /** Format: int32 */ - teamNumber?: number; - nameFull?: string | null; - nameShort?: string | null; - schoolName?: string | null; - city?: string | null; - stateProv?: string | null; - country?: string | null; - website?: string | null; - /** Format: int32 */ - rookieYear?: number | null; - robotName?: string | null; - districtCode?: string | null; - homeCMP?: string | null; - }; - /** - * @description The names of the driver station positions - * @enum {string} - */ - StationType: StationType; - /** @description FTA Notepad: FTA TeamIssues */ - TeamIssueModel: { - note?: string | null; - /** Format: uuid */ - noteId?: string; - tournamentLevel?: components['schemas']['TournamentLevel']; - /** Format: int32 */ - matchNumber?: number; - /** Format: int32 */ - playNumber?: number; - /** Format: int32 */ - teamNumber?: number; - issueType?: components['schemas']['EventNoteIssueTypes']; - resolutionStatus?: components['schemas']['EventNoteResolutionTypes']; - /** Format: date-time */ - timeAdded?: string | null; - /** Format: date-time */ - timeUpdated?: string | null; - isDeleted?: boolean; - whoAdded?: string | null; - whoUpdated?: string | null; - /** Format: int64 */ - recordVersion?: number; - }; - TeamIssuesModel: { - teamIssues?: components['schemas']['TeamIssueModel'][] | null; - /** Format: int32 */ - noteCount?: number; - }; - /** - * @description The level of the tournament (practice, quals, etc) - * @enum {string} - */ - TournamentLevel: TournamentLevel; - TournamentLevelInt32Int32ValueTuple: { - item1?: components['schemas']['TournamentLevel']; - /** Format: int32 */ - item2?: number; - /** Format: int32 */ - item3?: number; - }; - /** @enum {string} */ - WPAKeyStatusType: WPAKeyStatusType; - }; - responses: never; - parameters: never; - requestBodies: never; - headers: never; - pathItems: never; + schemas: { + AllianceSelectionEventWizard: { + /** Format: uuid */ + fmsEventId?: string; + /** Format: int32 */ + number?: number; + name?: string | null; + substituteButtonEnabled?: boolean; + captainTeamNumberRaw?: string | null; + /** Format: int32 */ + captainTeamNumber?: number | null; + /** Format: int32 */ + captainTeamNumberHold?: number | null; + captainSubstituteChecked?: boolean; + captainFlag?: boolean; + /** Format: int32 */ + captainTabIndex?: number; + round1TeamNumberRaw?: string | null; + /** Format: int32 */ + round1TeamNumber?: number | null; + /** Format: int32 */ + round1TeamNumberHold?: number | null; + round1SubstituteChecked?: boolean; + round1Flag?: boolean; + /** Format: int32 */ + round1TabIndex?: number; + round2TeamNumberRaw?: string | null; + /** Format: int32 */ + round2TeamNumber?: number | null; + /** Format: int32 */ + round2TeamNumberHold?: number | null; + round2SubstituteChecked?: boolean; + round2Flag?: boolean; + /** Format: int32 */ + round2TabIndex?: number; + round3TeamNumberRaw?: string | null; + /** Format: int32 */ + round3TeamNumberHold?: number | null; + round3SubstituteChecked?: boolean; + /** Format: int32 */ + round3TeamNumber?: number | null; + round3Enabled?: boolean; + round3Flag?: boolean; + showUndoSubstitution?: boolean; + }; + /** + * @description The color assigned to a particular alliance. + * @enum {string} + */ + AllianceType: AllianceType; + /** @description FTA Notepad: API Index */ + ApiIndexModel: { + name?: string | null; + apiVersion?: string | null; + serviceMainifestName?: string | null; + serviceMainifestVersion?: string | null; + codePackageName?: string | null; + codePackageVersion?: string | null; + status?: string | null; + /** Format: int32 */ + currentSeason?: number; + /** Format: int32 */ + maxSeason?: number; + }; + /** @enum {string} */ + BWUtilizationType: BWUtilizationType; + /** + * @description Identifies which bracket a match group is part of, for head-to-head match groups. + * @enum {string} + */ + Bracket: Bracket; + BypassStatusInfoModel: { + TeamBypasses?: components["schemas"]["BypassStatusInfoTeamModel"][] | null; + }; + BypassStatusInfoTeamModel: { + /** Format: int32 */ + teamNumber?: number; + /** Format: int32 */ + matchNumber?: number; + tournamentLevel?: string | null; + }; + ConnectionStatusInfoModel: { + TeamStatuses?: components["schemas"]["ConnectionStatusInfoTeamModel"][] | null; + }; + ConnectionStatusInfoTeamModel: { + /** Format: int32 */ + teamNumber?: number; + wpaKeyExists?: boolean; + wpaKeyStatus?: string | null; + }; + CurrentEventStatus: { + eventActive?: boolean; + eventCode?: string | null; + /** Format: uuid */ + fmsEventId?: string; + tournamentLevel?: components["schemas"]["TournamentLevel"]; + }; + /** @enum {string} */ + DSStationStatus: DSStationStatus; + EventNoteChange: { + noteType?: components["schemas"]["EventNoteTypes"] & unknown; + /** + * Format: uuid + * @description MessagePack Key: p2 + */ + fmsNoteId?: string; + /** + * Format: int64 + * @description MessagePack Key: p3 + */ + recordVersion?: number | null; + type?: components["schemas"]["EventNoteChangeTypes"] & unknown; + /** @description MessagePack Key: p5 */ + fmsDeviceIdentification?: string | null; + /** + * Format: date-time + * @description MessagePack Key: p6 + */ + currentTimeStamp?: string; + /** + * Format: date-time + * @description MessagePack Key: p7 + */ + previousTimeStamp?: string | null; + }; + /** @enum {string} */ + EventNoteChangeTypes: EventNoteChangeTypes; + /** @description FTA Notepad: Create event note request */ + EventNoteCreateModifyModel: { + noteText?: string | null; + }; + /** @enum {string} */ + EventNoteIssueTypes: EventNoteIssueTypes; + /** @description FTA Notepad: FTA EventNote */ + EventNoteModel: { + note?: string | null; + /** Format: uuid */ + noteId?: string; + /** Format: date-time */ + timeAdded?: string | null; + /** Format: date-time */ + timeUpdated?: string | null; + isDeleted?: boolean; + whoAdded?: string | null; + whoUpdated?: string | null; + /** Format: int64 */ + recordVersion?: number; + }; + /** @enum {string} */ + EventNoteResolutionTypes: EventNoteResolutionTypes; + /** @enum {string} */ + EventNoteTypes: EventNoteTypes; + EventNotesModel: { + eventNotes?: components["schemas"]["EventNoteModel"][] | null; + /** Format: int32 */ + noteCount?: number; + }; + EventScheduleHybridModel: { + Schedule?: components["schemas"]["ScheduleHybridModel"][] | null; + }; + EventScheduleModel: { + Schedule?: components["schemas"]["ScheduledMatchModel"][] | null; + }; + FieldMonitorData: { + alliance?: components["schemas"]["AllianceType"] & unknown; + station?: components["schemas"]["StationType"] & unknown; + /** + * Format: int32 + * @description MessagePack Key: p3 + */ + teamNumber?: number; + /** @description MessagePack Key: p4 */ + connection?: boolean; + /** @description MessagePack Key: p5 */ + linkActive?: boolean; + /** @description MessagePack Key: p6 */ + dsLinkActive?: boolean; + /** @description MessagePack Key: p7 */ + radioLink?: boolean; + /** @description MessagePack Key: p8 */ + rioLink?: boolean; + /** @description MessagePack Key: p9 */ + isEnabled?: boolean; + /** @description MessagePack Key: pa */ + isAuto?: boolean; + /** @description MessagePack Key: pb */ + isBypassed?: boolean; + /** @description MessagePack Key: pc */ + isEStopLatched?: boolean; + /** @description MessagePack Key: pd */ + isEStopped?: boolean; + /** + * Format: double + * @description MessagePack Key: pe + */ + battery?: number; + monitorStatus?: components["schemas"]["MonitorStatusType"] & unknown; + /** + * Format: int32 + * @description MessagePack Key: pg + */ + averageTripTime?: number; + /** + * Format: int32 + * @description MessagePack Key: ph + */ + lostPackets?: number; + /** + * Format: int32 + * @description MessagePack Key: pi + */ + signal?: number | null; + /** + * Format: int32 + * @description MessagePack Key: pj + */ + noise?: number | null; + /** Format: int32 */ + snr?: number; + /** + * Format: int32 + * @description MessagePack Key: pl + */ + inactivity?: number; + macAddress?: string | null; + /** + * Format: double + * @description MessagePack Key: pn + */ + txRate?: number | null; + /** + * Format: int32 + * @description MessagePack Key: po + */ + txMCS?: number | null; + /** + * Format: int32 + * @description MessagePack Key: pp + */ + txMCSBandWidth?: number | null; + /** @description MessagePack Key: pq */ + txVHT?: boolean | null; + /** + * Format: int32 + * @description MessagePack Key: pr + */ + txVHTNSS?: number | null; + /** + * Format: int32 + * @description MessagePack Key: ps + */ + txPackets?: number; + /** + * Format: double + * @description MessagePack Key: pt + */ + rxRate?: number | null; + /** + * Format: int32 + * @description MessagePack Key: pu + */ + rxMCS?: number | null; + /** + * Format: int32 + * @description MessagePack Key: pv + */ + rxMCSBandWidth?: number | null; + /** @description MessagePack Key: pw */ + rxVHT?: boolean | null; + /** + * Format: int32 + * @description MessagePack Key: px + */ + rxVHTNSS?: number | null; + /** + * Format: int32 + * @description MessagePack Key: py + */ + rxPackets?: number; + /** + * Format: double + * @description MessagePack Key: pz + */ + dataRateTotal?: number; + /** + * Format: double + * @description MessagePack Key: paa + */ + dataRateToRobot?: number; + /** + * Format: double + * @description MessagePack Key: pbb + */ + dataRateFromRobot?: number; + bwUtilization?: components["schemas"]["BWUtilizationType"]; + wpaKeyStatus?: components["schemas"]["WPAKeyStatusType"]; + /** @description MessagePack Key: pee */ + driverStationIsOfficial?: boolean; + stationStatus?: components["schemas"]["DSStationStatus"] & unknown; + /** @description MessagePack Key: pgg */ + brownout?: boolean; + /** @description MessagePack Key: phh */ + eStopSource?: string | null; + /** @description MessagePack Key: pii */ + isAStopLatched?: boolean; + /** @description MessagePack Key: pjj */ + isAStopped?: boolean; + /** @description MessagePack Key: pjk */ + moveToStation?: string | null; + radioConnectionQuality?: components["schemas"]["RadioConnectionQuality"] & unknown; + /** @description MessagePack Key: pmm */ + radioConnectedToAp?: boolean; + /** @description MessagePack Key: pnn */ + isEStopPressed?: boolean; + /** @description MessagePack Key: poo */ + isAStopPressed?: boolean; + /** @description MessagePack Key: pk */ + sNR?: unknown; + /** @description MessagePack Key: pm */ + mACAddress?: unknown; + /** @description MessagePack Key: pcc */ + bWUtilization?: unknown; + /** @description MessagePack Key: pdd */ + wPAKeyStatus?: unknown; + }; + FieldServerWebMatchShowLogViewItem: { + /** Format: date-time */ + timeStamp?: string; + /** Format: double */ + matchTimeBase?: number; + /** Format: int32 */ + matchTime?: number; + auto?: boolean; + dsLinkActive?: boolean; + enabled?: boolean; + aStopPressed?: boolean; + eStopPressed?: boolean; + linkActive?: boolean; + radioLink?: boolean; + rioLink?: boolean; + /** Format: int32 */ + averageTripTime?: number; + /** Format: int32 */ + lostPackets?: number; + /** Format: int32 */ + sentPackets?: number; + /** Format: double */ + battery?: number; + brownout?: boolean; + /** Format: int32 */ + signal?: number | null; + /** Format: int32 */ + noise?: number | null; + /** Format: int32 */ + snr?: number; + /** Format: double */ + txRate?: number | null; + /** Format: int32 */ + txMCS?: number | null; + /** Format: double */ + rxRate?: number | null; + /** Format: int32 */ + rxMCS?: number | null; + /** Format: double */ + dataRateTotal?: number; + }; + FieldServerWebMatchViewItem: { + /** Format: uuid */ + fmsMatchId?: string; + tournamentLevel?: components["schemas"]["TournamentLevel"]; + /** Format: uuid */ + fmsEventId?: string; + /** Format: date-time */ + startTime?: string; + /** Format: date-time */ + actualStartTime?: string; + description?: string | null; + /** Format: int32 */ + dayNumber?: number; + /** Format: int32 */ + matchNumber?: number; + /** Format: int32 */ + playNumber?: number; + /** Format: int32 */ + teamNumberBlue1?: number | null; + /** Format: int32 */ + teamNumberBlue2?: number | null; + /** Format: int32 */ + teamNumberBlue3?: number | null; + /** Format: int32 */ + teamNumberRed1?: number | null; + /** Format: int32 */ + teamNumberRed2?: number | null; + /** Format: int32 */ + teamNumberRed3?: number | null; + }; + /** + * @description for multi field events + * Primary - Main FMS with all functionality enabled + * Secondary - Match Play, Match Test, Match Review, Field Test, System Configuration + * Practice - Match Test, Field Test, System Configuration + * We start the numbering at 1 since the field "number" is referenced around the solution + * @enum {string} + */ + FieldTypes: FieldTypes; + GuidNullableTournamentLevelNullableValueTuple: { + /** Format: uuid */ + item1?: string | null; + item2?: components["schemas"]["TournamentLevel"]; + }; + Int32Int32ValueTuple: { + /** Format: int32 */ + item1?: number; + /** Format: int32 */ + item2?: number; + }; + /** + * @description The current status of a tournament level. + * @enum {string} + */ + LevelStatus: LevelStatus; + MatchGraphDetailViewModel: { + auto?: boolean; + /** Format: double */ + matchTime?: number; + /** Format: double */ + averageRoundTrip?: number; + /** Format: double */ + battery?: number; + /** Format: double */ + dataRateTotal?: number; + /** Format: int32 */ + signal?: number | null; + /** Format: int32 */ + noise?: number | null; + /** Format: double */ + txRate?: number | null; + /** Format: double */ + rxRate?: number | null; + }; + /** @enum {string} */ + MatchGroupType: MatchGroupType; + MatchGroupView: { + id?: string | null; + type?: components["schemas"]["MatchGroupType"]; + playoffLevel?: components["schemas"]["PlayoffLevel"]; + matchNumbers?: number[] | null; + isComplete?: boolean; + winnersNextRoundIsByeRound?: boolean; + /** Format: int32 */ + redAlliance?: number | null; + /** Format: int32 */ + blueAlliance?: number | null; + /** Format: int32 */ + matchesPlayed?: number; + /** Format: int32 */ + redWins?: number; + /** Format: int32 */ + blueWins?: number; + bracket?: components["schemas"]["Bracket"]; + currentRankings?: components["schemas"]["RankedAlliance"][] | null; + }; + /** @description FTA Notepad: Create match note request */ + MatchNoteCreateModifyModel: { + noteText?: string | null; + tournamentLevel?: string | null; + /** Format: int32 */ + matchNumber?: number; + /** Format: int32 */ + playNumber?: number | null; + /** Format: int32 */ + teamNumber?: number | null; + }; + /** @description FTA Notepad: FTA MatchNote */ + MatchNoteModel: { + note?: string | null; + /** Format: uuid */ + noteId?: string; + tournamentLevel?: string | null; + /** Format: int32 */ + matchNumber?: number; + /** Format: int32 */ + playNumber?: number; + /** Format: int32 */ + teamNumber?: number | null; + /** Format: date-time */ + timeAdded?: string | null; + /** Format: date-time */ + timeUpdated?: string | null; + isDeleted?: boolean; + whoAdded?: string | null; + whoUpdated?: string | null; + /** Format: int64 */ + recordVersion?: number; + }; + MatchNotesModel: { + matchNotes?: components["schemas"]["MatchNoteModel"][] | null; + /** Format: int32 */ + noteCount?: number; + }; + /** @enum {string} */ + MatchStateType: MatchStateType; + MatchStatusInfo: { + matchState?: components["schemas"]["MatchStateType"] & unknown; + /** + * Format: int32 + * @description MessagePack Key: p2 + */ + matchNumber?: number; + /** + * Format: int32 + * @description MessagePack Key: p3 + */ + playNumber?: number; + level?: components["schemas"]["TournamentLevel"] & unknown; + }; + /** @enum {string} */ + MonitorStatusType: MonitorStatusType; + /** @description FTA Notepad: Response upon successful note creation */ + NoteCreatedUpdatedModel: { + /** Format: uuid */ + noteId?: string; + /** Format: int64 */ + recordVersion?: number; + }; + PitPlayoffMatchup: { + /** Format: int32 */ + redAllianceNumber?: number; + /** Format: int32 */ + blueAllianceNumber?: number; + redAllianceTeams?: string | null; + blueAllianceTeams?: string | null; + /** Format: int32 */ + redAllianceWins?: number; + /** Format: int32 */ + blueAllianceWins?: number; + }; + /** + * @description PlayoffLevel represents a phase of the FMS.Common.Base.Enums.TournamentLevel.Playoff level of the tournament. + * + * Invariants at a level: + * * at least one match is played + * * Pairings: for single and double elimination, an alliance is paired with exactly one other + * alliance in a level. For a round robin tournament, the round robin section would + * be treated as one level with alliances paired with >1 other alliance. + * * An alliance is not required to appear in a level. + * @enum {string} + */ + PlayoffLevel: PlayoffLevel; + /** + * @description The permitted alliance counts of playoffs + * @enum {string} + */ + PlayoffSizeTypes: PlayoffSizeTypes; + PreviousMacAddressesData: { + /** @description MessagePack Key: p1 */ + red1MacAddress?: string | null; + /** @description MessagePack Key: p2 */ + red2MacAddress?: string | null; + /** @description MessagePack Key: p3 */ + red3MacAddress?: string | null; + /** @description MessagePack Key: p4 */ + blue1MacAddress?: string | null; + /** @description MessagePack Key: p5 */ + blue2MacAddress?: string | null; + /** @description MessagePack Key: p6 */ + blue3MacAddress?: string | null; + }; + /** @enum {string} */ + RadioConnectionQuality: RadioConnectionQuality; + RankModel: { + /** Format: int32 */ + rank?: number; + /** Format: int32 */ + team?: number; + /** Format: int32 */ + wins?: number; + /** Format: int32 */ + losses?: number; + /** Format: int32 */ + ties?: number; + /** Format: double */ + rs?: number; + /** Format: double */ + avgScore?: number; + /** Format: int32 */ + played?: number; + /** Format: double */ + dq?: number; + /** Format: double */ + sort1?: number; + /** Format: double */ + sort2?: number; + /** Format: double */ + sort3?: number; + /** Format: double */ + sort4?: number; + /** Format: double */ + sort5?: number; + /** Format: double */ + sort6?: number; + }; + RankedAlliance: { + /** Format: int32 */ + readonly rank?: number; + readonly isTied?: boolean; + /** Format: int32 */ + readonly allianceNumber?: number; + /** Format: int32 */ + readonly matchesPlayed?: number; + /** Format: int32 */ + readonly wins?: number; + /** Format: int32 */ + readonly losses?: number; + /** Format: int32 */ + readonly ties?: number; + /** Format: double */ + readonly averageRankingPoints?: number; + readonly averageTiebreakers?: number[] | null; + }; + ScheduleHybridModel: { + description?: string | null; + tournamentLevel?: string | null; + /** Format: int32 */ + matchNumber?: number; + /** Format: date-time */ + startTime?: string | null; + /** Format: date-time */ + actualStartTime?: string | null; + /** Format: date-time */ + postResultTime?: string | null; + /** Format: int32 */ + scoreRedFinal?: number | null; + /** Format: int32 */ + scoreRedFoul?: number | null; + /** Format: int32 */ + scoreRedAuto?: number | null; + /** Format: int32 */ + scoreBlueFinal?: number | null; + /** Format: int32 */ + scoreBlueFoul?: number | null; + /** Format: int32 */ + scoreBlueAuto?: number | null; + teams?: components["schemas"]["ScheduleHybridModelTeam"][] | null; + }; + ScheduleHybridModelTeam: { + /** Format: int32 */ + teamNumber?: number | null; + station?: string | null; + surrogate?: boolean; + dq?: boolean | null; + }; + ScheduledMatchModel: { + field?: string | null; + description?: string | null; + level?: string | null; + /** Format: date-time */ + startTime?: string | null; + /** Format: int32 */ + matchNumber?: number; + teams?: components["schemas"]["ScheduledMatchTeamModel"][] | null; + }; + ScheduledMatchTeamModel: { + /** Format: int32 */ + teamNumber?: number | null; + station?: string | null; + surrogate?: boolean; + }; + SeasonDistrictListingsModel: { + districts?: components["schemas"]["SeasonDistrictModel"][] | null; + /** Format: int32 */ + districtCount?: number; + }; + SeasonDistrictModel: { + code?: string | null; + name?: string | null; + }; + SeasonEventListingsModel: { + Events?: components["schemas"]["SeasonEventModel"][] | null; + /** Format: int32 */ + eventCount?: number; + }; + SeasonEventModel: { + code?: string | null; + divisionCode?: string | null; + name?: string | null; + type?: string | null; + districtCode?: string | null; + venue?: string | null; + address?: string | null; + city?: string | null; + stateprov?: string | null; + country?: string | null; + website?: string | null; + webcasts?: string[] | null; + timezone?: string | null; + /** Format: date-time */ + dateStart?: string; + /** Format: date-time */ + dateEnd?: string; + }; + SeasonTeamListingsModel: { + teams?: components["schemas"]["SeasonTeamModel"][] | null; + /** Format: int32 */ + teamCountTotal?: number; + /** Format: int32 */ + teamCountPage?: number; + /** Format: int32 */ + pageCurrent?: number; + /** Format: int32 */ + pageTotal?: number; + }; + SeasonTeamModel: { + /** Format: int32 */ + teamNumber?: number; + nameFull?: string | null; + nameShort?: string | null; + schoolName?: string | null; + city?: string | null; + stateProv?: string | null; + country?: string | null; + website?: string | null; + /** Format: int32 */ + rookieYear?: number | null; + robotName?: string | null; + districtCode?: string | null; + homeCMP?: string | null; + }; + /** + * @description The names of the driver station positions + * @enum {string} + */ + StationType: StationType; + /** @description FTA Notepad: Team issue create or edit options */ + TeamIssueCreateModifyModel: { + noteText?: string | null; + tournamentLevel?: string | null; + /** Format: int32 */ + matchNumber?: number; + /** Format: int32 */ + playNumber?: number | null; + /** Format: int32 */ + teamNumber?: number | null; + issueType?: string | null; + resolutionStatus?: string | null; + }; + /** @description FTA Notepad: FTA TeamIssues */ + TeamIssueModel: { + note?: string | null; + /** Format: uuid */ + noteId?: string; + tournamentLevel?: components["schemas"]["TournamentLevel"]; + /** Format: int32 */ + matchNumber?: number; + /** Format: int32 */ + playNumber?: number; + /** Format: int32 */ + teamNumber?: number; + issueType?: components["schemas"]["EventNoteIssueTypes"]; + resolutionStatus?: components["schemas"]["EventNoteResolutionTypes"]; + /** Format: date-time */ + timeAdded?: string | null; + /** Format: date-time */ + timeUpdated?: string | null; + isDeleted?: boolean; + whoAdded?: string | null; + whoUpdated?: string | null; + /** Format: int64 */ + recordVersion?: number; + }; + TeamIssuesModel: { + teamIssues?: components["schemas"]["TeamIssueModel"][] | null; + /** Format: int32 */ + noteCount?: number; + }; + /** + * @description The level of the tournament (practice, quals, etc) + * @enum {string} + */ + TournamentLevel: TournamentLevel; + TournamentLevelInt32Int32ValueTuple: { + item1?: components["schemas"]["TournamentLevel"]; + /** Format: int32 */ + item2?: number; + /** Format: int32 */ + item3?: number; + }; + /** @enum {string} */ + WPAKeyStatusType: WPAKeyStatusType; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; } export type $defs = Record; export enum AllianceType { - None = 'None', - Red = 'Red', - Blue = 'Blue' + None = "None", + Red = "Red", + Blue = "Blue" } export enum BWUtilizationType { - Low = 'Low', - Medium = 'Medium', - High = 'High', - VeryHigh = 'VeryHigh' + Low = "Low", + Medium = "Medium", + High = "High", + VeryHigh = "VeryHigh" } export enum Bracket { - Single = 'Single', - DoubleUpper = 'DoubleUpper', - DoubleLower = 'DoubleLower' + Single = "Single", + DoubleUpper = "DoubleUpper", + DoubleLower = "DoubleLower" } export enum DSStationStatus { - Good = 'Good', - MoveStation = 'MoveStation', - Waiting = 'Waiting', - Unknown = 'Unknown' + Good = "Good", + MoveStation = "MoveStation", + Waiting = "Waiting", + Unknown = "Unknown" } export enum EventNoteChangeTypes { - Create = 'Create', - Update = 'Update', - Delete = 'Delete' + Create = "Create", + Update = "Update", + Delete = "Delete" } export enum EventNoteIssueTypes { - RoboRioIssue = 'RoboRioIssue', - DSIssue = 'DSIssue', - NoRobot = 'NoRobot', - RadioIssue = 'RadioIssue', - RobotPwrIssue = 'RobotPwrIssue', - OtherRobotIssue = 'OtherRobotIssue', - VenueIssue = 'VenueIssue', - ElectricalIssue = 'ElectricalIssue', - MechanicalIssue = 'MechanicalIssue', - VolunteerIssue = 'VolunteerIssue', - Other = 'Other' + RoboRioIssue = "RoboRioIssue", + DSIssue = "DSIssue", + NoRobot = "NoRobot", + RadioIssue = "RadioIssue", + RobotPwrIssue = "RobotPwrIssue", + OtherRobotIssue = "OtherRobotIssue", + VenueIssue = "VenueIssue", + ElectricalIssue = "ElectricalIssue", + MechanicalIssue = "MechanicalIssue", + VolunteerIssue = "VolunteerIssue", + Other = "Other" } export enum EventNoteResolutionTypes { - Open = 'Open', - Resolved = 'Resolved', - NotApplicable = 'NotApplicable' + Open = "Open", + Resolved = "Resolved", + NotApplicable = "NotApplicable" } export enum EventNoteTypes { - FTAEvent = 'FTAEvent', - FTAMatch = 'FTAMatch', - FTATeamIssue = 'FTATeamIssue', - FTAAppUsageData = 'FTAAppUsageData', - FTATeam = 'FTATeam', - FMSAllianceTimeout = 'FMSAllianceTimeout', - FMSMatchMaker = 'FMSMatchMaker', - Staff = 'Staff' + FTAEvent = "FTAEvent", + FTAMatch = "FTAMatch", + FTATeamIssue = "FTATeamIssue", + FTAAppUsageData = "FTAAppUsageData", + FTATeam = "FTATeam", + FMSAllianceTimeout = "FMSAllianceTimeout", + FMSMatchMaker = "FMSMatchMaker", + Staff = "Staff" } export enum FieldTypes { - Primary = 'Primary', - Secondary = 'Secondary', - Practice = 'Practice' + Primary = "Primary", + Secondary = "Secondary", + Practice = "Practice" } export enum LevelStatus { - NoCurrentlySelectedEvent = 'NoCurrentlySelectedEvent', - NotScheduled = 'NotScheduled', - NotStarted = 'NotStarted', - InProgress = 'InProgress', - Completed = 'Completed' + NoCurrentlySelectedEvent = "NoCurrentlySelectedEvent", + NotScheduled = "NotScheduled", + NotStarted = "NotStarted", + InProgress = "InProgress", + Completed = "Completed" } export enum MatchGroupType { - HeadToHeadMatchup = 'HeadToHeadMatchup', - RankedPool = 'RankedPool' + HeadToHeadMatchup = "HeadToHeadMatchup", + RankedPool = "RankedPool" } export enum MatchStateType { - NoCurrentlyActiveEvent = 'NoCurrentlyActiveEvent', - NoCurrentlyActiveTournamentLevel = 'NoCurrentlyActiveTournamentLevel', - WaitingForPrestart = 'WaitingForPrestart', - WaitingForPrestartTO = 'WaitingForPrestartTO', - Prestarting = 'Prestarting', - PrestartingTO = 'PrestartingTO', - WaitingForSetAudience = 'WaitingForSetAudience', - WaitingForSetAudienceTO = 'WaitingForSetAudienceTO', - WaitingForMatchReady = 'WaitingForMatchReady', - WaitingForMatchStart = 'WaitingForMatchStart', - GameSpecificData = 'GameSpecificData', - MatchAuto = 'MatchAuto', - MatchTransition = 'MatchTransition', - MatchTeleop = 'MatchTeleop', - WaitingForCommit = 'WaitingForCommit', - WaitingForPostResults = 'WaitingForPostResults', - TournamentLevelComplete = 'TournamentLevelComplete', - MatchCancelled = 'MatchCancelled', - WaitingForMatchPreview = 'WaitingForMatchPreview', - WaitingForMatchPreviewTO = 'WaitingForMatchPreviewTO' + NoCurrentlyActiveEvent = "NoCurrentlyActiveEvent", + NoCurrentlyActiveTournamentLevel = "NoCurrentlyActiveTournamentLevel", + WaitingForPrestart = "WaitingForPrestart", + WaitingForPrestartTO = "WaitingForPrestartTO", + Prestarting = "Prestarting", + PrestartingTO = "PrestartingTO", + WaitingForSetAudience = "WaitingForSetAudience", + WaitingForSetAudienceTO = "WaitingForSetAudienceTO", + WaitingForMatchReady = "WaitingForMatchReady", + WaitingForMatchStart = "WaitingForMatchStart", + GameSpecificData = "GameSpecificData", + MatchAuto = "MatchAuto", + MatchTransition = "MatchTransition", + MatchTeleop = "MatchTeleop", + WaitingForCommit = "WaitingForCommit", + WaitingForPostResults = "WaitingForPostResults", + TournamentLevelComplete = "TournamentLevelComplete", + MatchCancelled = "MatchCancelled", + WaitingForMatchPreview = "WaitingForMatchPreview", + WaitingForMatchPreviewTO = "WaitingForMatchPreviewTO" } export enum MonitorStatusType { - Unknown = 'Unknown', - EStopped = 'EStopped', - AStopped = 'AStopped', - DisabledAuto = 'DisabledAuto', - DisabledTeleop = 'DisabledTeleop', - EnabledAuto = 'EnabledAuto', - EnabledTeleop = 'EnabledTeleop' + Unknown = "Unknown", + EStopped = "EStopped", + AStopped = "AStopped", + DisabledAuto = "DisabledAuto", + DisabledTeleop = "DisabledTeleop", + EnabledAuto = "EnabledAuto", + EnabledTeleop = "EnabledTeleop" } export enum PlayoffLevel { - Final = 'Final', - Level2 = 'Level2', - Level3 = 'Level3', - Level4 = 'Level4', - Level5 = 'Level5', - Level6 = 'Level6', - Level7 = 'Level7' + Final = "Final", + Level2 = "Level2", + Level3 = "Level3", + Level4 = "Level4", + Level5 = "Level5", + Level6 = "Level6", + Level7 = "Level7" } export enum PlayoffSizeTypes { - TwoAlliance = 'TwoAlliance', - FourAlliance = 'FourAlliance', - FiveAlliance = 'FiveAlliance', - SixAlliance = 'SixAlliance', - SevenAlliance = 'SevenAlliance', - EightAlliance = 'EightAlliance', - SixteenAlliance = 'SixteenAlliance' + TwoAlliance = "TwoAlliance", + FourAlliance = "FourAlliance", + FiveAlliance = "FiveAlliance", + SixAlliance = "SixAlliance", + SevenAlliance = "SevenAlliance", + EightAlliance = "EightAlliance", + SixteenAlliance = "SixteenAlliance" +} +export enum RadioConnectionQuality { + Warning = "Warning", + Caution = "Caution", + Good = "Good", + Excellent = "Excellent" } export enum StationType { - None = 'None', - Station1 = 'Station1', - Station2 = 'Station2', - Station3 = 'Station3' + None = "None", + Station1 = "Station1", + Station2 = "Station2", + Station3 = "Station3" } export enum TournamentLevel { - Match_Test = 'None', - Practice = 'Practice', - Qualification = 'Qualification', - Playoff = 'Playoff' + Match_Test = "None", + Practice = "Practice", + Qualification = "Qualification", + Playoff = "Playoff" } export enum WPAKeyStatusType { - NotTested = 'NotTested', - UsedInConnectionTest = 'UsedInConnectionTest', - UsedInMatch = 'UsedInMatch' + NotTested = "NotTested", + UsedInConnectionTest = "UsedInConnectionTest", + UsedInMatch = "UsedInMatch" } export type operations = Record; diff --git a/ui/src/lib/api-client/fms-client.ts b/ui/src/lib/api-client/fms-client.ts index dcead69..ed1d041 100644 --- a/ui/src/lib/api-client/fms-client.ts +++ b/ui/src/lib/api-client/fms-client.ts @@ -1,5 +1,6 @@ import createClient, { type Middleware } from 'openapi-fetch'; import type { paths, components } from '../../fms/fms-api'; +import { TournamentLevel, EventNoteIssueTypes, EventNoteResolutionTypes } from '../../fms/fms-api'; import { settingsStore } from '$lib/settings-store'; import { get } from 'svelte/store'; @@ -11,17 +12,55 @@ const season = 2025; const authMiddleware: Middleware = { async onRequest({ request }) { - let settings = get(settingsStore); - let auth = btoa(`${settings.username}:${settings.key}`); + const settings = get(settingsStore); + const auth = btoa(`${settings.username}:${settings.key}`); request.headers.set('Authorization', `Basic ${auth}`); return request; } }; fmsClient.use(authMiddleware); +// Type exports export type TeamIssue = components['schemas']['TeamIssueModel']; +export type EventNote = components['schemas']['EventNoteModel']; +export type MatchNote = components['schemas']['MatchNoteModel']; +export type ScheduledMatch = components['schemas']['ScheduledMatchModel']; +export type EventSchedule = components['schemas']['EventScheduleModel']; + +// Create/Modify model types +export type EventNoteCreateRequest = components['schemas']['EventNoteCreateModifyModel']; +export type MatchNoteCreateRequest = components['schemas']['MatchNoteCreateModifyModel']; +export type TeamIssueCreateRequest = components['schemas']['TeamIssueCreateModifyModel']; + +// Additional type exports for note creation (legacy - keeping for backward compatibility) +export type CreateEventNoteRequest = { + note: string; +}; + +export type CreateMatchNoteRequest = { + note: string; + tournamentLevel: string; + matchNumber: number; + playNumber?: number; + teamNumber?: number; +}; + +export type CreateTeamNoteRequest = { + noteText: string; + teamNumber: number; + tournamentLevel?: components['schemas']['TournamentLevel']; + matchNumber?: number; + playNumber?: number; + issueType: components['schemas']['EventNoteIssueTypes']; + resolutionStatus: components['schemas']['EventNoteResolutionTypes']; +}; + +// Export enums for use in components +export { EventNoteIssueTypes, EventNoteResolutionTypes, TournamentLevel }; + +// Team Issues/Notes API export async function getTeamNotes( - fetch: any, + fetch: typeof globalThis.fetch, options: { noteId?: string; teamNumber?: number; @@ -50,7 +89,343 @@ export async function getTeamNotes( }; } -export async function getCurrentEventCode(): Promise { +export async function getCurrentEventCode( + fetch: typeof globalThis.fetch +): Promise { const { data } = await fmsClient.GET('/api/v1.0/FTAAppApi/CurrentEventStatus', { fetch }); return data?.eventCode; } + +// Event Notes API +export async function getEventNotes(fetch: typeof globalThis.fetch) { + const { data, error, response } = await fmsClient.GET( + '/api/v1.0/FTA/{season}/{eventCode}/eventNotes', + { + params: { + path: { + season: season, + eventCode: get(settingsStore).eventCode + } + }, + fetch + } + ); + + return { + notes: data?.eventNotes, + error: error, + response + }; +} + +// Match Notes API +export async function getMatchNotes( + fetch: typeof globalThis.fetch, + options?: { + noteId?: string; + tournamentLevel?: components['schemas']['TournamentLevel']; + matchNumber?: number; + playNumber?: number; + teamNumber?: number; + } +) { + const { data, error, response } = await fmsClient.GET( + '/api/v1.0/FTA/{season}/{eventCode}/matchNotes', + { + params: { + query: options, + path: { + season: season, + eventCode: get(settingsStore).eventCode + } + }, + fetch + } + ); + + return { + notes: data?.matchNotes, + error: error, + response + }; +} + +// Schedule API +export async function getEventSchedule( + fetch: typeof globalThis.fetch, + tournamentLevel: components['schemas']['TournamentLevel'] = TournamentLevel.Qualification +) { + const { data, error, response } = await fmsClient.GET( + '/api/v1.0/FTA/{season}/{eventCode}/schedule/{tournamentLevel}', + { + params: { + path: { + season: season, + eventCode: get(settingsStore).eventCode, + tournamentLevel: tournamentLevel + } + }, + fetch + } + ); + + return { + schedule: data?.Schedule, + error: error, + response + }; +} + +// Get current event info +export function getCurrentEvent() { + const settings = get(settingsStore); + return { + eventCode: settings.eventCode, + season: season + }; +} + +// Helper functions for counting notes +export async function getNoteCounts(fetch: typeof globalThis.fetch) { + const [eventNotesResult, matchNotesResult, teamNotesResult] = await Promise.all([ + getEventNotes(fetch), + getMatchNotes(fetch), + getTeamNotes(fetch, {}) + ]); + + return { + eventNotes: eventNotesResult.notes || [], + matchNotes: matchNotesResult.notes || [], + teamNotes: teamNotesResult.notes || [], + errors: [eventNotesResult.error, matchNotesResult.error, teamNotesResult.error].filter(Boolean) + }; +} + +export function countMatchNotes( + matchNotes: MatchNote[], + matchNumber: number, + tournamentLevel: string +) { + return matchNotes.filter( + (note) => + note.matchNumber === matchNumber && + note.tournamentLevel === tournamentLevel && + !note.isDeleted + ).length; +} + +export function countTeamNotes( + teamNotes: TeamIssue[], + teamNumber: number, + matchNumber?: number, + tournamentLevel?: string +) { + return teamNotes.filter((note) => { + if (note.teamNumber !== teamNumber || note.isDeleted) return false; + + // If match-specific, filter by match and tournament level + if (matchNumber !== undefined && tournamentLevel !== undefined) { + return note.matchNumber === matchNumber && note.tournamentLevel === tournamentLevel; + } + + // Otherwise, count all notes for this team + return true; + }).length; +} + +export function countTeamMatchSpecificNotes( + teamNotes: TeamIssue[], + teamNumber: number, + matchNumber: number, + tournamentLevel: string +) { + return teamNotes.filter( + (note) => + note.teamNumber === teamNumber && + note.matchNumber === matchNumber && + note.tournamentLevel === tournamentLevel && + !note.isDeleted + ).length; +} + +export function countTeamGeneralNotes(teamNotes: TeamIssue[], teamNumber: number) { + return teamNotes.filter( + (note) => + note.teamNumber === teamNumber && + !note.matchNumber && // General team notes don't have a match number + !note.isDeleted + ).length; +} + +export async function createEventNote( + fetch: typeof globalThis.fetch, + noteData: CreateEventNoteRequest +) { + const settings = get(settingsStore); + + // Log the note data for debugging + console.log('Creating event note:', { + note: noteData.note, + eventCode: settings.eventCode, + username: settings.username, + realName: settings.realName + }); + + const { data, error, response } = await fmsClient.POST( + '/api/v1.0/FTA/{season}/{eventCode}/eventNotes', + { + params: { + path: { + season: season, + eventCode: settings.eventCode + }, + header: { + 'FMS-UsersRealName': settings.realName || settings.username, + 'FMS-DeviceIdentification': getDeviceName() + } + }, + body: { noteText: noteData.note }, + fetch + } + ); + + return { data, error, response }; +} + +export async function createMatchNote( + fetch: typeof globalThis.fetch, + noteData: CreateMatchNoteRequest +) { + const settings = get(settingsStore); + + // Log the note data for debugging + console.log('Creating match note:', { + note: noteData.note, + tournamentLevel: noteData.tournamentLevel, + matchNumber: noteData.matchNumber, + playNumber: noteData.playNumber, + teamNumber: noteData.teamNumber, + eventCode: settings.eventCode, + username: settings.username, + realName: settings.realName + }); + + const { data, error, response } = await fmsClient.POST( + '/api/v1.0/FTA/{season}/{eventCode}/matchNotes', + { + params: { + path: { + season: season, + eventCode: settings.eventCode + }, + header: { + 'FMS-UsersRealName': settings.realName || settings.username, + 'FMS-DeviceIdentification': getDeviceName() + } + }, + body: { + noteText: noteData.note, + tournamentLevel: noteData.tournamentLevel, + matchNumber: noteData.matchNumber, + playNumber: noteData.playNumber, + teamNumber: noteData.teamNumber + }, + fetch + } + ); + + return { data, error, response }; +} + +export async function createTeamNote( + fetch: typeof globalThis.fetch, + noteData: CreateTeamNoteRequest +) { + const settings = get(settingsStore); + + // Log the note data for debugging + console.log('Creating team note:', { + note: noteData.noteText, + teamNumber: noteData.teamNumber, + tournamentLevel: noteData.tournamentLevel, + matchNumber: noteData.matchNumber, + playNumber: noteData.playNumber, + issueType: noteData.issueType, + resolutionStatus: noteData.resolutionStatus, + eventCode: settings.eventCode, + username: settings.username, + realName: settings.realName + }); + + const { data, error, response } = await fmsClient.POST( + '/api/v1.0/FTA/{season}/{eventCode}/teamIssues', + { + params: { + path: { + season: season, + eventCode: settings.eventCode + }, + header: { + 'FMS-UsersRealName': settings.realName || settings.username, + 'FMS-DeviceIdentification': getDeviceName() + } + }, + body: { + noteText: noteData.noteText, + teamNumber: noteData.teamNumber, + tournamentLevel: noteData.tournamentLevel, + matchNumber: noteData.matchNumber, + playNumber: noteData.playNumber, + issueType: noteData.issueType, + resolutionStatus: noteData.resolutionStatus + }, + fetch + } + ); + + return { data, error, response }; +} + +// Helper to get current username +export function getCurrentUsername(): string { + return get(settingsStore).username || 'Unknown User'; +} + +// Function to generate a device name using browser APIs +export function getDeviceName(): string { + const userAgent = navigator.userAgent; + let browserName = 'Unknown Browser'; + let osName = 'Unknown OS'; + + // Detect browser + if (userAgent.includes('Chrome') && !userAgent.includes('Edg')) { + browserName = 'Chrome'; + } else if (userAgent.includes('Firefox')) { + browserName = 'Firefox'; + } else if (userAgent.includes('Safari') && !userAgent.includes('Chrome')) { + browserName = 'Safari'; + } else if (userAgent.includes('Edg')) { + browserName = 'Edge'; + } else if (userAgent.includes('Opera') || userAgent.includes('OPR')) { + browserName = 'Opera'; + } + + // Detect OS + if (userAgent.includes('Windows NT')) { + osName = 'Windows'; + } else if (userAgent.includes('Mac OS X')) { + osName = 'macOS'; + } else if (userAgent.includes('Linux')) { + osName = 'Linux'; + } else if (userAgent.includes('Android')) { + osName = 'Android'; + } else if (userAgent.includes('iOS')) { + osName = 'iOS'; + } + + // Try to get hostname if available + const hostname = window.location.hostname; + const deviceId = hostname !== 'localhost' && hostname !== '127.0.0.1' ? hostname : 'local-device'; + + return `${browserName} on ${osName} (${deviceId})`; +} diff --git a/ui/src/lib/components/Button.svelte b/ui/src/lib/components/Button.svelte index 0da37e7..b1c290c 100644 --- a/ui/src/lib/components/Button.svelte +++ b/ui/src/lib/components/Button.svelte @@ -1,5 +1,6 @@ @@ -50,7 +55,7 @@ {@render children()} {:else} - {/if} diff --git a/ui/src/lib/components/MatchCard.svelte b/ui/src/lib/components/MatchCard.svelte new file mode 100644 index 0000000..613f61d --- /dev/null +++ b/ui/src/lib/components/MatchCard.svelte @@ -0,0 +1,127 @@ + + +
+
+
+

+ {match.description || `Match ${match.matchNumber}`} +

+ {#if match.field} + + {match.field} + + {/if} +
+
+ {#if startTime} + {startTime} + {/if} + +
+
+ + {#if match.teams && match.teams.length > 0} +
+ +
+

+
+ Blue Alliance +

+
+ {#each blueTeams as team} + + {/each} + {#if blueTeams.length === 0} +
+ No teams assigned +
+ {/if} +
+
+ + +
+

+
+ Red Alliance +

+
+ {#each redTeams as team} + + {/each} + {#if redTeams.length === 0} +
+ No teams assigned +
+ {/if} +
+
+
+ {/if} +
diff --git a/ui/src/lib/components/Modal.svelte b/ui/src/lib/components/Modal.svelte index f5d1335..04c1498 100644 --- a/ui/src/lib/components/Modal.svelte +++ b/ui/src/lib/components/Modal.svelte @@ -2,11 +2,12 @@ import { Icon } from '@steeze-ui/svelte-icon'; import { XMark, type IconSource } from '@steeze-ui/heroicons'; import { twMerge } from 'tailwind-merge'; + import { styles } from '$lib'; interface ModalProps { open: boolean; title?: string; - size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'fit'; + size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'fit' | 'responsive'; dismissable?: boolean; outsideclose?: boolean; icon?: IconSource; @@ -28,7 +29,7 @@ icon, iconColor = 'primary', fixed = false, - modalClass = 'relative transform overflow-hidden rounded-lg bg-white dark:bg-neutral-700 px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:p-6 w-full', + modalClass = 'relative transform overflow-hidden rounded-lg bg-white dark:bg-neutral-700 px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:p-6 min-w-0 mx-4 my-6', modalOpenClass = { open: 'opacity-100 translate-y-0 sm:scale-100 ease-out duration-300', close: 'opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95 ease-in duration-200' @@ -40,16 +41,16 @@ const iconBGColors = { primary: 'bg-primary-100', - red: 'bg-red-100', + red: styles.alliance.red.secondary, green: 'bg-green-100', - blue: 'bg-blue-100' + blue: styles.alliance.blue.secondary }; const iconFGColors = { primary: 'text-primary-600', - red: 'text-red-600', + red: styles.alliance.red.text, green: 'text-green-600', - blue: 'text-blue-600' + blue: styles.alliance.blue.text }; const sizeClass = { @@ -59,7 +60,8 @@ lg: 'max-w-2xl', xl: 'max-w-4xl', '2xl': 'max-w-6xl', - fit: 'w-fit' + fit: 'w-fit', + responsive: 'max-w-xs sm:max-w-md md:max-w-lg lg:max-w-2xl xl:max-w-4xl 2xl:max-w-5xl' }; function backdropClick(e: Event) { @@ -98,7 +100,7 @@
diff --git a/ui/src/lib/components/field-monitor/MonitorRow.svelte b/ui/src/lib/components/field-monitor/MonitorRow.svelte index b4747a8..f2ebce4 100644 --- a/ui/src/lib/components/field-monitor/MonitorRow.svelte +++ b/ui/src/lib/components/field-monitor/MonitorRow.svelte @@ -1,6 +1,7 @@ + +
+
+
+ Event Note +
+ + {formatTimestamp(note.timeAdded)} + +
+ +
+ {note.note || 'No note text'} +
+
diff --git a/ui/src/lib/components/notes/TeamNoteDisplay.svelte b/ui/src/lib/components/notes/TeamNoteDisplay.svelte new file mode 100644 index 0000000..d68766c --- /dev/null +++ b/ui/src/lib/components/notes/TeamNoteDisplay.svelte @@ -0,0 +1,49 @@ + + +
+
+
+ + {formatIssueType(note.issueType)} + + + {formatResolutionStatus(note.resolutionStatus)} + + {#if isMatchSpecific} + + Match {note.matchNumber}{note.playNumber ? `.${note.playNumber}` : ''} + + {/if} +
+ + {formatTimestamp(note.timeAdded)} + +
+ +
+ {note.note || 'No note text'} +
+
diff --git a/ui/src/lib/enum-formatters.ts b/ui/src/lib/enum-formatters.ts new file mode 100644 index 0000000..e07ef06 --- /dev/null +++ b/ui/src/lib/enum-formatters.ts @@ -0,0 +1,90 @@ +import { EventNoteIssueTypes, EventNoteResolutionTypes } from './api-client/fms-client'; + +/** + * Shared utilities for formatting enum values to display strings + */ + +// Issue type formatting +export function formatIssueType(issueType: string | undefined): string { + if (!issueType) return 'Unknown'; + + switch (issueType) { + case EventNoteIssueTypes.RoboRioIssue: + return 'RoboRIO Issue'; + case EventNoteIssueTypes.DSIssue: + return 'Driver Station Issue'; + case EventNoteIssueTypes.NoRobot: + return 'No Robot'; + case EventNoteIssueTypes.RadioIssue: + return 'Radio Issue'; + case EventNoteIssueTypes.RobotPwrIssue: + return 'Robot Power Issue'; + case EventNoteIssueTypes.OtherRobotIssue: + return 'Other Robot Issue'; + case EventNoteIssueTypes.VenueIssue: + return 'Venue Issue'; + case EventNoteIssueTypes.ElectricalIssue: + return 'Electrical Issue'; + case EventNoteIssueTypes.MechanicalIssue: + return 'Mechanical Issue'; + case EventNoteIssueTypes.VolunteerIssue: + return 'Volunteer Issue'; + case EventNoteIssueTypes.Other: + return 'Other'; + default: + return issueType; + } +} + +// Resolution status formatting +export function formatResolutionStatus(status: string | undefined): string { + if (!status) return 'Unknown'; + + switch (status) { + case EventNoteResolutionTypes.Open: + return 'Open'; + case EventNoteResolutionTypes.Resolved: + return 'Resolved'; + case EventNoteResolutionTypes.NotApplicable: + return 'Not Applicable'; + default: + return status; + } +} + +// Status color classes for UI components +export function getStatusColor(status: string | undefined): string { + switch (status) { + case EventNoteResolutionTypes.Open: + return 'bg-red-100 text-red-800 dark:bg-red-900/20 dark:text-red-300'; + case EventNoteResolutionTypes.Resolved: + return 'bg-green-100 text-green-800 dark:bg-green-900/20 dark:text-green-300'; + case EventNoteResolutionTypes.NotApplicable: + return 'bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-300'; + default: + return 'bg-gray-100 text-gray-800 dark:bg-gray-900/20 dark:text-gray-300'; + } +} + +// Issue type options for form dropdowns +export const issueTypeOptions = Object.values(EventNoteIssueTypes).map((val) => ({ + value: val, + label: formatIssueType(val) +})); + +// Resolution status options for form dropdowns +export const resolutionStatusOptions = Object.values(EventNoteResolutionTypes).map((val) => ({ + value: val, + label: formatResolutionStatus(val) +})); + +// Utility function to format timestamps consistently +export function formatTimestamp(timestamp: string | null | undefined): string { + if (!timestamp) return ''; + try { + const date = new Date(timestamp); + return date.toLocaleString(); + } catch { + return timestamp; + } +} diff --git a/ui/src/lib/index.ts b/ui/src/lib/index.ts index 856f2b6..c0bb51d 100644 --- a/ui/src/lib/index.ts +++ b/ui/src/lib/index.ts @@ -1 +1,4 @@ // place files you want to import through the `$lib` alias in this folder. + +export * from './enum-formatters'; +export { styles, cn } from './styles'; diff --git a/ui/src/lib/settings-store.ts b/ui/src/lib/settings-store.ts index f485d5d..e5dafda 100644 --- a/ui/src/lib/settings-store.ts +++ b/ui/src/lib/settings-store.ts @@ -6,6 +6,7 @@ export interface Settings { developerMode: boolean; darkMode: boolean; username: string; + realName: string; key: string; fmsUrl: string; eventCode: string; @@ -18,6 +19,7 @@ const defaultSettings: Settings = { developerMode: false, darkMode: true, username: '', + realName: '', key: '', fmsUrl: 'http://10.0.100.5', eventCode: '' diff --git a/ui/src/lib/styles.ts b/ui/src/lib/styles.ts new file mode 100644 index 0000000..0d30aef --- /dev/null +++ b/ui/src/lib/styles.ts @@ -0,0 +1,80 @@ +import { type ClassValue, clsx } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +/** + * Utility function to merge class names with proper Tailwind handling + */ +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} + +/** + * Shared styles for commonly repeated UI patterns across the app. + * Only includes styles that are genuinely reused across multiple components. + */ +export const styles = { + // Form inputs - repeated 5+ times in AddNoteModal + input: { + base: 'w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white' + }, + + // Badges - used in multiple components (MatchCard, TeamCard, note displays) + badge: { + base: 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium', + blue: 'bg-blue-100 text-blue-800 dark:bg-blue-900/20 dark:text-blue-300', + orange: 'bg-orange-100 text-orange-800 dark:bg-orange-900/20 dark:text-orange-300', + purple: 'bg-purple-100 text-purple-800 dark:bg-purple-900/20 dark:text-purple-300' + }, + + // Section headers - used 4 times in notes page + sectionHeader: { + button: + 'flex items-center justify-between w-full text-left mb-4 p-2 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors' + }, + + // Empty states - used 4 times in notes page + emptyState: { + container: 'text-center py-6 bg-gray-50 rounded-lg dark:bg-gray-800' + }, + // Error states - used in multiple places + error: { + container: 'rounded-md bg-red-50 p-4 dark:bg-red-900/20', + message: 'p-3 bg-red-100 border border-red-400 text-red-700 rounded-md', + button: + 'rounded-md bg-red-50 px-2 py-1.5 text-sm font-medium text-red-800 hover:bg-red-100 focus:outline-none focus:ring-2 focus:ring-red-600 focus:ring-offset-2 focus:ring-offset-red-50 dark:bg-red-900/20 dark:text-red-200 dark:hover:bg-red-900/40' + }, + + // Alliance colors - consistent red/blue theming throughout the app + alliance: { + red: { + // Bold main colors + primary: 'bg-red-500 text-white', + primaryHover: 'hover:bg-red-600', + primaryFocus: 'focus-visible:bg-red-500', + border: 'border-red-500', + text: 'text-red-600 dark:text-red-400', + // Subdued secondary colors + secondary: 'bg-red-50 dark:bg-red-900/20', + secondaryBorder: 'border-red-200 dark:border-red-800', + secondaryText: 'text-red-800 dark:text-red-200', + // Indicator/accent + indicator: 'bg-red-500', + darkBorder: 'dark:border-red-400' + }, + blue: { + // Bold main colors + primary: 'bg-blue-500 text-white', + primaryHover: 'hover:bg-blue-600', + primaryFocus: 'focus-visible:bg-blue-500', + border: 'border-blue-500', + text: 'text-blue-600 dark:text-blue-400', + // Subdued secondary colors + secondary: 'bg-blue-50 dark:bg-blue-900/20', + secondaryBorder: 'border-blue-200 dark:border-blue-800', + secondaryText: 'text-blue-800 dark:text-blue-200', + // Indicator/accent + indicator: 'bg-blue-500', + darkBorder: 'dark:border-blue-400' + } + } +}; diff --git a/ui/src/routes/+layout.svelte b/ui/src/routes/+layout.svelte index 3258aff..2af748a 100644 --- a/ui/src/routes/+layout.svelte +++ b/ui/src/routes/+layout.svelte @@ -102,7 +102,7 @@ @@ -159,9 +123,9 @@
  • @@ -200,7 +155,7 @@
  • - - Your profile - - + +
  • @@ -312,14 +219,14 @@
    Field Monitor
    - +
    diff --git a/ui/src/routes/+page.svelte b/ui/src/routes/fieldMonitor/+page.svelte similarity index 95% rename from ui/src/routes/+page.svelte rename to ui/src/routes/fieldMonitor/+page.svelte index c242df9..e8a3d02 100644 --- a/ui/src/routes/+page.svelte +++ b/ui/src/routes/fieldMonitor/+page.svelte @@ -1,7 +1,7 @@ + + + Notes Overview - FTA Notepad + + +
    + +
    +
    +
    +

    + Notes Overview +

    +

    + Event: {currentEvent.eventCode} • Season: + {currentEvent.season} +

    +
    + +
    +
    + + {#if loading} +
    + +
    + {:else if error} +
    +
    +
    +

    Error loading data

    +
    +

    {error}

    +
    +
    + +
    +
    +
    +
    + {:else} + +
    + + {#if eventNotesExpanded} + {#if eventNotes.filter((note) => !note.isDeleted).length === 0} +
    +

    No event notes yet

    +
    + {:else} +
    + {#each eventNotes + .filter((note) => !note.isDeleted) + .sort((a, b) => { + const timeA = a.timeAdded ? new Date(a.timeAdded).getTime() : 0; + const timeB = b.timeAdded ? new Date(b.timeAdded).getTime() : 0; + return timeB - timeA; + }) as note (note.noteId)} + + {/each} +
    + {/if} + {/if} +
    + + +
    + +
    + + {#if practiceExpanded} + {#if practiceSchedule.length === 0} +
    +

    No practice matches scheduled

    +
    + {:else} +
    + {#each practiceSchedule as match (match.matchNumber)} + + {/each} +
    + {/if} + {/if} +
    + + +
    + + {#if qualificationExpanded} + {#if qualificationSchedule.length === 0} +
    +

    + No qualification matches scheduled +

    +
    + {:else} +
    + {#each qualificationSchedule as match (match.matchNumber)} + + {/each} +
    + {/if} + {/if} +
    + + +
    + + {#if playoffExpanded} + {#if playoffSchedule.length === 0} +
    +

    No playoff matches scheduled

    +
    + {:else} +
    + {#each playoffSchedule as match (match.matchNumber)} + + {/each} +
    + {/if} + {/if} +
    + + + {#if practiceSchedule.length === 0 && qualificationSchedule.length === 0 && playoffSchedule.length === 0} +
    + + + +

    + No matches scheduled +

    +

    + Check the FMS connection or try refreshing the data. +

    +
    + {/if} +
    + {/if} + + + +
    diff --git a/ui/src/routes/notes/+page.ts b/ui/src/routes/notes/+page.ts new file mode 100644 index 0000000..b230cc0 --- /dev/null +++ b/ui/src/routes/notes/+page.ts @@ -0,0 +1,4 @@ +// +page.ts is not needed for this page as we're doing client-side data loading +// This file can be left empty or removed, but having it here allows for future server-side loading if needed + +export const ssr = false; diff --git a/ui/src/routes/notes/[teamNumber]/+page.svelte b/ui/src/routes/notes/[teamNumber]/+page.svelte index 9b56cca..c9748b1 100644 --- a/ui/src/routes/notes/[teamNumber]/+page.svelte +++ b/ui/src/routes/notes/[teamNumber]/+page.svelte @@ -1,9 +1,9 @@