MovesTable
tableBreakdex::DataStores::MovesTable
Stores every breakdancing move in the arsenal with video attachment and learning state
Moves are the atomic unit of the breakdancer's arsenal. Every other entity (combos, reviews, FSRS cards, aura links, achievements) depends on moves existing. A move without a video is valid — it represents intent to learn.
Relationships
Depends On 2
moves_daovideo_service
Writes To 1
sync_log_table
Breaks If 2
drift_migration_failsname_uniqueness_trigger_dropped
Data Access
Owns 1
sync_log_table
Writes 1
sync_log_table
Answers
States
| State | Behavior |
|---|---|
| archived | message: Move excluded from arsenal, reviews, and combos but retained for history and sync shows: hidden_from_default_queries |
| no Content Hash | message: Legacy move created before v10 — hash computed on next edit or sync shows: pending_hash_computation |
| no Video | message: Move is valid — renders with placeholder, reviews without playback shows: placeholder_thumbnail |
Columns
| Name | Type | Constraints |
|---|---|---|
| id | text | NOT NULL |
| name | text | NOT NULL MIN: 1 |
| learning_state | text | NOT NULL DEFAULT: NEW ENUM: NEW, LEARNING, MASTERY |
| category | text | NOT NULL DEFAULT: default |
| video_path | text | |
| original_video_name | text | |
| managed_album_asset_id | text | |
| managed_album_filename | text | |
| managed_album_name | text | |
| archived_at | datetime | |
| archive_reason | text | |
| notes | text | |
| content_hash | text | |
| created_at | datetime | NOT NULL DEFAULT: now |
Primary Key
idTriggers
moves_name_unique_insert Enforces case-insensitive name uniqueness on INSERT (SQLite lacks partial unique indexes)
moves_name_unique_update Enforces case-insensitive name uniqueness on UPDATE
Concerns
SyncAwareArchivableContentAddressed