SPR-453 Draft Redesign

https://spordle.atlassian.net/browse/SPR-453

 

Drafts currently function as isolated schedules which are very intentionally self-contained as a separate workflow. Due to the nature of the database modelling, there are a lot of limitations to being able to easily share draft games to associations and allow them to work on multiple drafts.

Instead, we’ll move away from the single Draft model to a parallel games table (likely called DraftGames) which we can work with like any other model.

Requirements

List of issues that this proposal aims to resolve

  • Draft games need to be shared to associations who need to be able to view all their draft games in one place regardless of schedule

    • Draft games must be in their own model to make this relation feasible

  • Draft games may impact availability as soon as they’re scheduled even if not yet “published”

    • This setting currently exists

  • If a draft game reschedules an existing game this should be clearer

    • Currently this matches on game number transparently

  • Need more flexibility on draft creation flows

    • Currently it’s a rigid info/teams/review/publish flow, certain options may require more details for improved UX

  • Should be possible to partially publish some draft games as they’re ready

    • e.g., one association is done early but others aren’t ready yet

Out of scope

These issues are not specifically addressed by this proposal and will be addressed in other proposals. This proposal creates a framework to resolve these issues.

  • Total games per round

    • Provide a matrix to show how many games each team plays against each other to produce a set of games to be scheduled

  • Date scheduling in calendar

    • Scheduler must produce dates to be able to use the calendar currently

  • Rescheduling

    • Teams need to be able to propose changes to scheduled games and need approval by other team and/or league

UX

Draft creation will no longer be a single page workflow, since games will no longer be within a draft. Instead, draft creation behaves more like an import modal. This applies to entering the options before games are produced (as in the first two steps currently).

Draft page will be replaced with an importer-style modal

Once the information from the draft modal is filled out, draft games are created and they’ll be available in cards on the schedule, office and teams pages.

Having a new card being available on these different pages allows schedulers flexibility on how they want to schedule. They could go to the office page for the league to schedule all divisions at once, or to an association page to focus on games involving that association. The card will also have additional filters available to be able to fine-tune to the desired context.

The card will work identical to how the games step currently works with the calendar drag and drop mode being available. We can make use of card expanding (from the reports card) to provide more space to schedule games and use the calendar, or provide a dedicated tab instead.

Generated

  • The current schedule info step is split into multiple steps for matchups and scheduling in the modal

  • Starting game number input is no longer necessary as drafts will not use a sequence until the games are published

  • Need to add a previous round input so that the scheduler can continue schedules as usual

    • This already exists, but isn’t exposed in the UI. It’s automatically populated based on the “previous draft” input, so this will be replaced with a previous round input.

    • Helper text should show the latest used round in DraftGames if applicable

  • ScheduleTeams are now the source for generating the schedule, replacing the teams step

    • Order matters in team selection. An order will be added on ScheduleTeams so it can be easily reused. Otherwise, the teams step just duplicates the schedule’s teams tab

    • We’re able to add more context about number of games produced in the helper text of certain inputs. Originally this wasn’t entirely certain as the teams step came after

  • When specifying game per team, limit the total games to even numbers to prevent unbalanced schedules

  • Cross group schedules

    • Selecting two groups will produce a cross-group schedule

      • Previously you would select no group then select the team/group in the teams step. This no longer exists, so you need to specify the groups that will be crossed

      • Creating a draft would need you to select a groupId where applicable. For cross-group, provide a switch input that reveals a crossGroupId group input for the cross group to help enforce the notion that you’re only crossing two groups

    • Game numbers are pulled from the sequence of the home team group

    • Resulting games do not have a group associated to them, existing logic around stats does not change

Uploaded

  • This can behave exactly like existing import modals

  • Will still need to reuse logic of matching teams and arenas

  • When matching teams, limit to existing ScheduleTeams

Reusing the existing importer UX

 

Manual

  • This just becomes creating a single draft game at at time, so there’s no special flow necessary as the only configuration was a starting game number

Updates

  • When a DraftGame is created, search for an existing game the schedule by number and link the gameId automatically. Not applicable on updates.

  • This will become relevant later when reusing this functionality for game change requests

  • When editing and display the draft game, clearly show that a game will be updated as a result of publishing

Analysis

  • We must maintain the existing analysis functionality and move this into an API

  • The great thing is it’ll be very easy now to mix the published games and draft games and show the analysis at all times in the schedule view (and potentially even the office)

  • Would want to allow being able to toggle showing draft games so you can see what your schedule is like currently and how the draft games will affect it

  • 🚩 Rounds

Models

Draft

Deprecated. Unpublished games will be created as DraftGame in the migration

DraftGame

Identical to Game, with additional properties:

Property

Type

Description

Property

Type

Description

updatedGameId

number

Optional. ID of game being updated or the resulting game that was published

This would be automatically filled in based on the game number when generating/uploading games and would be used when using the (future) rescheduling function

round

number

Optional

isShared

boolean

Grants access to scheduling:drafts role

sharedAt

datetime

When the game was shared

sharedUntil

datetime

When sharing access expires

isPublished

boolean

Acts as isDeleted, but differentiates that it was used

publishedAt

datetime

When the game was published

ScheduleTeam

Same as before, with additional properties:

Property

Type

Description

Property

Type

Description

order

number

This is used to maintain schedule balance when generating additional games. This can also be used for initial games in brackets.

Adding a scheduleteam would automatically use the next order. Schedulers would be able to adjust the order in the UI

⚠️ Competitions integration will create ScheduleTeams, so order needs to be automatic through the API

ScheduleSequence

This replaces the start number option in drafts since drafts will no longer exist

Property

Type

Description

Property

Type

Description

scheduleId

number

 

groupId

number

 

start

string

Starting number (U15T2500)

current

number

Zero indexed. Increments start (U15T2500) + current (5) = U15T1005

max

number

Max number to generate from this sequence (100 caps at U152599)

Implementation

This can live behind a feature flag under development, as the isolation of drafts makes this convenient.

Model changes TODO

Manual creation TODO

https://spordle.atlassian.net/browse/SPR-455

  • Modal to create draft games one by one via the new DraftGame card

  • Select multiple games to publish, share, or delete

Generation TODO

https://spordle.atlassian.net/browse/SPR-454

  • Create a stepper modal that mimics the existing cards

  • New POST /schedules/:id/generate API would accept the parameters and create draft games

Import modal TODO

https://spordle.atlassian.net/browse/SPR-437

  • Follow the existing importers to parse a file

  • This would import as draft games as well as schedule teams

  • Should we provide an option to publish directly?

Analysis dialog TODO

https://spordle.atlassian.net/browse/SPR-456

  • Move the game analysis logic into a library and accessible through the API

  • Provide an analysis dialog on the schedule page

Release TODO

  • Existing unpublished drafts to be converted to draft games

  • Cleanup flags, UI and deprecate API

Planner