Skip to content

Schema Snapshot

  • Generated at: 2026-03-02T14:26:08.564Z
  • Commit SHA: a2a722217e30dc6002a2fbacbbc7910a108c2e8b
  • Total tables: 80

Tabelas

  • achievements
  • admin_users
  • app_events
  • attempts
  • cosmetics
  • courses
  • daily_platform_stats
  • did_you_know_cards
  • exercise_variants
  • feature_flags
  • grammar_card_assets
  • grammar_card_examples
  • grammar_cards
  • grammar_concepts
  • health_check
  • league_divisions
  • league_seasons
  • lesson_summaries
  • lessons
  • morphology_rules
  • notifications
  • pet_feed_events
  • pos_colors
  • practice_queue
  • practice_queue_items
  • semantic_relations
  • sentence_tags
  • sentence_templates
  • sentence_tokens
  • sentences
  • session_continue_events
  • session_exercises
  • sessions
  • skills
  • stages
  • tags
  • tts_assets
  • units
  • user_achievements
  • user_consents
  • user_cosmetics
  • user_course_enrollments
  • user_daily_stats
  • user_friends
  • user_item_state
  • user_item_stats
  • user_league_membership
  • user_pet_state
  • user_profile
  • user_security_events
  • user_settings
  • user_skill_progress
  • user_skill_state
  • user_stage_progress
  • user_streak
  • user_subscriptions
  • user_tag_stats
  • user_variant_history
  • user_wallet
  • user_xp
  • vocabulary
  • vw_dashboard_metrics
  • vw_leaderboard_global
  • vw_league_leaderboard
  • vw_recent_activity
  • vw_schema_snapshot
  • vw_session_summary
  • vw_skill_unlock_state
  • vw_user_achievements
  • vw_user_streak
  • vw_user_today_stats
  • vw_wallet_overview
  • wallet_transactions
  • word_assets
  • word_forms
  • word_grammar
  • word_tags
  • word_translations
  • worlds
  • xp_transactions

Colunas por tabela

achievements

Column Type Nullable Default
id uuid NO gen_random_uuid()
key text NO
title text NO
description text YES
icon_path text YES
xp_reward integer NO 0
cookie_reward integer NO 0
is_active boolean NO true

admin_users

Column Type Nullable Default
user_id uuid NO
created_at timestamp with time zone NO now()

app_events

Column Type Nullable Default
id uuid NO gen_random_uuid()
user_id uuid YES
session_id uuid YES
name text NO
properties jsonb NO '{}'::jsonb
created_at timestamp with time zone NO now()

attempts

Column Type Nullable Default
id uuid NO gen_random_uuid()
user_id uuid NO
session_id uuid YES
session_exercise_id uuid YES
item_id uuid NO
ex_type text NO
user_answer text YES
stt_transcript text YES
is_correct boolean YES
score numeric YES
duration_ms integer YES
created_at timestamp with time zone NO now()

cosmetics

Column Type Nullable Default
id uuid NO gen_random_uuid()
key text NO
title text NO
kind text NO
cookie_price integer NO 0
asset_path text YES
is_active boolean NO true

courses

Column Type Nullable Default
id uuid NO gen_random_uuid()
slug text NO
title text NO
source_lang text NO 'pt'::text
target_lang text NO 'en'::text
level text NO 'A1'::text
is_published boolean NO false
created_at timestamp with time zone NO now()
name text YES

daily_platform_stats

Column Type Nullable Default
day date NO
total_users integer NO 0
active_users integer NO 0
total_sessions integer NO 0
total_xp bigint NO 0
total_cookies_earned bigint NO 0
created_at timestamp with time zone NO now()

did_you_know_cards

Column Type Nullable Default
id uuid NO gen_random_uuid()
course_id uuid NO
world_id uuid YES
stage_id uuid YES
title text NO 'Did you know?'::text
body text NO
image_path text YES
tags ARRAY NO '{}'::text[]
is_active boolean NO true
created_at timestamp with time zone NO now()

exercise_variants

Column Type Nullable Default
id uuid NO gen_random_uuid()
item_id uuid NO
ex_type text NO
prompt_text text NO
target_text text NO
choices jsonb YES
hint text YES
weight smallint NO 1
is_active boolean NO true
flow_group_id uuid YES
flow_order integer YES
tts_asset_id uuid YES

feature_flags

Column Type Nullable Default
key text NO
is_enabled boolean NO false
metadata jsonb NO '{}'::jsonb

grammar_card_assets

Column Type Nullable Default
id uuid NO gen_random_uuid()
card_id uuid NO
type text NO
lang text YES
url text NO
provider text YES
preset text YES
cache_key text YES
created_at timestamp with time zone NO now()

grammar_card_examples

Column Type Nullable Default
id uuid NO gen_random_uuid()
card_id uuid NO
sentence_id uuid NO
order_index integer NO 0
highlight_token_index integer YES
note text YES

grammar_cards

Column Type Nullable Default
id uuid NO gen_random_uuid()
concept_id uuid NO
title text NO
explanation_native text YES
native_lang text NO
explanation_target text YES
target_lang text YES
status text NO 'draft'::text
curriculum_tags jsonb YES
created_at timestamp with time zone NO now()
updated_at timestamp with time zone NO now()

grammar_concepts

Column Type Nullable Default
id uuid NO gen_random_uuid()
name text NO
cefr_level text YES
introduced_chapter integer YES
structure_pattern text YES
explanation text YES
code text YES
title text YES
description text YES
created_at timestamp with time zone NO now()
base_lang text YES
level text YES
updated_at timestamp with time zone NO now()

health_check

Column Type Nullable Default
id uuid NO gen_random_uuid()

league_divisions

Column Type Nullable Default
id uuid NO gen_random_uuid()
key text NO
title text NO
idx integer NO
promotion_slots integer NO 10
demotion_slots integer NO 10

league_seasons

Column Type Nullable Default
id uuid NO gen_random_uuid()
course_id uuid YES
starts_at date NO
ends_at date NO
name text YES
is_active boolean NO true

lesson_summaries

Column Type Nullable Default
id uuid NO gen_random_uuid()
skill_id uuid NO
title text NO
content jsonb NO
version integer NO 1
created_at timestamp with time zone NO now()
updated_at timestamp with time zone NO now()

lessons

Column Type Nullable Default
id uuid NO gen_random_uuid()
skill_id uuid NO
type text NO
order_index integer NO 1
created_at timestamp with time zone NO now()

morphology_rules

Column Type Nullable Default
id uuid NO gen_random_uuid()
language text NO
pos text NO
rule_name text YES
pattern jsonb YES
transformation jsonb YES
created_at timestamp with time zone NO now()

notifications

Column Type Nullable Default
id uuid NO gen_random_uuid()
user_id uuid NO
kind text NO
title text NO
body text YES
metadata jsonb NO '{}'::jsonb
is_read boolean NO false
created_at timestamp with time zone NO now()

pet_feed_events

Column Type Nullable Default
id uuid NO gen_random_uuid()
user_id uuid NO
cookies_spent integer NO
hunger_before integer NO
hunger_after integer NO
energy_before integer NO
energy_after integer NO
bond_xp_gained integer NO
created_at timestamp with time zone NO now()

pos_colors

Column Type Nullable Default
pos text NO
color_hex text NO

practice_queue

Column Type Nullable Default
id uuid NO gen_random_uuid()
user_id uuid NO
course_id uuid NO
created_at timestamp with time zone NO now()
source text NO 'most_wrong'::text
metadata jsonb NO '{}'::jsonb

practice_queue_items

Column Type Nullable Default
queue_id uuid NO
item_id uuid NO
idx integer NO

semantic_relations

Column Type Nullable Default
id uuid NO gen_random_uuid()
word_id uuid NO
related_word_id uuid NO
relation_type text NO
created_at timestamp with time zone NO now()

sentence_tags

Column Type Nullable Default
sentence_id uuid NO
tag_id uuid NO
created_at timestamp with time zone NO now()

sentence_templates

Column Type Nullable Default
id uuid NO gen_random_uuid()
grammar_concept_id uuid YES
structure_pattern text NO
cefr_level text YES
introduced_chapter integer YES

sentence_tokens

Column Type Nullable Default
sentence_id uuid NO
word_id uuid NO
position integer NO
role text YES
created_at timestamp with time zone NO now()
form_id uuid YES
expected_features jsonb YES
dependency_role text YES
head_position integer YES
slot_id text YES

sentences

Column Type Nullable Default
id uuid NO gen_random_uuid()
template_id uuid YES
generated_text text YES
difficulty_score numeric YES
audio_url text YES
lang text YES
cefr_level text YES
introduced_chapter integer YES
created_at timestamp with time zone NO now()
text text YES
source_lang text NO 'en'::text
target_lang text NO 'pt'::text
updated_at timestamp with time zone NO now()

session_continue_events

Column Type Nullable Default
id uuid NO gen_random_uuid()
session_id uuid NO
user_id uuid NO
pack_cost integer NO 10
pack_amount integer NO 10
wallet_balance_before integer YES
wallet_balance_after integer YES
created_at timestamp with time zone NO now()

session_exercises

Column Type Nullable Default
id uuid NO gen_random_uuid()
session_id uuid NO
variant_id uuid NO
idx integer NO
item_id uuid NO
ex_type text NO
was_correct boolean YES
score numeric YES
answered_at timestamp with time zone YES

sessions

Column Type Nullable Default
id uuid NO gen_random_uuid()
user_id uuid NO
course_id uuid NO
unit_id uuid YES
skill_id uuid YES
stage_id uuid YES
mode USER-DEFINED NO 'standard'::session_mode
created_at timestamp with time zone NO now()
completed_at timestamp with time zone YES
target_xp integer NO 20
earned_xp integer NO 0
session_cookies_start integer NO 10
session_cookies_current integer NO 10
continues_used integer NO 0
ended_reason USER-DEFINED YES
meta jsonb NO '{}'::jsonb

skills

Column Type Nullable Default
id uuid NO gen_random_uuid()
unit_id uuid NO
idx integer NO
title text NO
description text YES
cookie_cost integer NO 0
requires_prev_completed boolean NO true
session_cookie_start integer NO 10
continue_pack_cost integer NO 10
continue_pack_amount integer NO 10
min_sessions_required integer NO 1
min_mastery_required smallint NO 70
is_published boolean NO false
order_index integer NO 1

stages

Column Type Nullable Default
id uuid NO gen_random_uuid()
world_id uuid NO
idx integer NO
title text NO
skill_id uuid YES
cookie_cost integer NO 0
required_mastery smallint NO 0
is_published boolean NO false

tags

Column Type Nullable Default
id uuid NO gen_random_uuid()
key text NO
category text NO
weight numeric NO 1
created_at timestamp with time zone NO now()
name text YES
kind text NO 'general'::text

tts_assets

Column Type Nullable Default
id uuid NO gen_random_uuid()
lang text NO 'en'::text
voice text NO 'default'::text
text_hash text NO
text text NO
audio_path text NO
duration_ms integer YES
created_at timestamp with time zone NO now()
entity_type text NO
entity_id uuid NO
voice_preset text YES
url text NO
provider text YES
meta jsonb YES

units

Column Type Nullable Default
id uuid NO gen_random_uuid()
course_id uuid NO
idx integer NO
title text NO
is_published boolean NO false
order_index integer NO 1

user_achievements

Column Type Nullable Default
user_id uuid NO
achievement_id uuid NO
unlocked_at timestamp with time zone NO now()

user_consents

Column Type Nullable Default
user_id uuid NO
terms_accepted_at timestamp with time zone YES
privacy_accepted_at timestamp with time zone YES
marketing_opt_in boolean NO false
updated_at timestamp with time zone NO now()

user_cosmetics

Column Type Nullable Default
user_id uuid NO
cosmetic_id uuid NO
owned_at timestamp with time zone NO now()
is_equipped boolean NO false

user_course_enrollments

Column Type Nullable Default
user_id uuid NO
course_id uuid NO
enrolled_at timestamp with time zone NO now()

user_daily_stats

Column Type Nullable Default
user_id uuid NO
day date NO
xp integer NO 0
sessions integer NO 0
practice_sessions integer NO 0
correct integer NO 0
wrong integer NO 0
cookies_earned integer NO 0
cookies_spent integer NO 0

user_friends

Column Type Nullable Default
user_id uuid NO
friend_user_id uuid NO
status text NO 'pending'::text
created_at timestamp with time zone NO now()

user_item_state

Column Type Nullable Default
user_id uuid NO
item_id uuid NO
ease numeric NO 2.5
interval_days numeric NO 0
due_at timestamp with time zone NO now()
last_seen_at timestamp with time zone YES
correct_streak integer NO 0
wrong_recent integer NO 0
seen_count integer NO 0
status text NO 'new'::text

user_item_stats

Column Type Nullable Default
user_id uuid NO
item_id uuid NO
attempts integer NO 0
wrong integer NO 0
correct integer NO 0
last_attempt_at timestamp with time zone YES

user_league_membership

Column Type Nullable Default
user_id uuid NO
season_id uuid NO
division_id uuid NO
xp_in_season integer NO 0
rank_in_division integer YES
joined_at timestamp with time zone NO now()

user_pet_state

Column Type Nullable Default
user_id uuid NO
pet_name text NO 'Spoke'::text
bond_level integer NO 1
bond_xp integer NO 0
hunger integer NO 0
energy integer NO 50
skin_key text YES 'default'::text
last_fed_at timestamp with time zone YES
updated_at timestamp with time zone NO now()

user_profile

Column Type Nullable Default
user_id uuid NO
display_name text YES
username text YES
avatar_url text YES
country text YES
timezone text YES 'Europe/Istanbul'::text
created_at timestamp with time zone NO now()
updated_at timestamp with time zone NO now()
email text YES
status text YES 'active'::text

user_security_events

Column Type Nullable Default
id uuid NO gen_random_uuid()
user_id uuid YES
ip_address text YES
user_agent text YES
event text YES
metadata jsonb NO '{}'::jsonb
created_at timestamp with time zone NO now()

user_settings

Column Type Nullable Default
user_id uuid NO
ui_lang text NO 'pt'::text
learning_goal_minutes integer NO 10
notifications_enabled boolean NO true
sound_enabled boolean NO true
speaking_enabled boolean NO true
accessibility jsonb NO '{}'::jsonb
updated_at timestamp with time zone NO now()

user_skill_progress

Column Type Nullable Default
user_id uuid NO
skill_id uuid NO
status USER-DEFINED NO 'locked'::progress_status
started_at timestamp with time zone YES
completed_at timestamp with time zone YES
sessions_completed integer NO 0
mastery numeric YES 0

user_skill_state

Column Type Nullable Default
user_id uuid NO
skill_id uuid NO
mastery smallint NO 0
last_seen_at timestamp with time zone YES

user_stage_progress

Column Type Nullable Default
user_id uuid NO
stage_id uuid NO
status USER-DEFINED NO 'locked'::progress_status
unlocked_at timestamp with time zone YES
started_at timestamp with time zone YES
completed_at timestamp with time zone YES

user_streak

Column Type Nullable Default
user_id uuid NO
current_streak integer NO 0
best_streak integer NO 0
last_active_day date YES
freezes integer NO 0
updated_at timestamp with time zone NO now()

user_subscriptions

Column Type Nullable Default
user_id uuid NO
plan text YES
starts_at timestamp with time zone YES
ends_at timestamp with time zone YES
is_active boolean NO false
updated_at timestamp with time zone NO now()

user_tag_stats

Column Type Nullable Default
user_id uuid NO
tag_id uuid NO
attempts integer NO 0
wrong integer NO 0
correct integer NO 0
last_attempt_at timestamp with time zone YES

user_variant_history

Column Type Nullable Default
user_id uuid NO
variant_id uuid NO
seen_at timestamp with time zone NO now()

user_wallet

Column Type Nullable Default
user_id uuid NO
cookies integer NO 0
updated_at timestamp with time zone NO now()

user_xp

Column Type Nullable Default
user_id uuid NO
xp_total bigint NO 0
updated_at timestamp with time zone NO now()

vocabulary

Column Type Nullable Default
id uuid NO gen_random_uuid()
lemma text NO
pos text NO
cefr_level text YES
frequency_rank integer YES
introduced_chapter integer YES
created_at timestamp without time zone YES now()
updated_at timestamp with time zone NO now()
source_lang text NO 'en'::text
target_lang text NO 'pt'::text
base_lang text YES
universal_concept_id uuid YES

vw_dashboard_metrics

Column Type Nullable Default
total_students bigint YES
active_courses bigint YES
sessions_30d bigint YES
avg_study_minutes numeric YES
total_xp_30d bigint YES

vw_leaderboard_global

Column Type Nullable Default
user_id uuid YES
username text YES
display_name text YES
avatar_url text YES
xp_total bigint YES
rank_position bigint YES

vw_league_leaderboard

Column Type Nullable Default
season_id uuid YES
season_name text YES
division_key text YES
user_id uuid YES
username text YES
display_name text YES
avatar_url text YES
xp_in_season integer YES
rank_position bigint YES

vw_recent_activity

Column Type Nullable Default
type text YES
label text YES
created_at timestamp with time zone YES

vw_schema_snapshot

Column Type Nullable Default
table_name name YES
column_name name YES
data_type character varying YES
is_nullable character varying YES
column_default character varying YES

vw_session_summary

Column Type Nullable Default
user_id uuid YES
session_id uuid YES
total_exercises bigint YES
correct_answers bigint YES

vw_skill_unlock_state

Column Type Nullable Default
skill_id uuid YES
title text YES
idx integer YES
cookie_cost integer YES
user_id uuid YES
status USER-DEFINED YES
completed_at timestamp with time zone YES

vw_user_achievements

Column Type Nullable Default
user_id uuid YES
key text YES
title text YES
description text YES
icon_path text YES
unlocked_at timestamp with time zone YES

vw_user_streak

Column Type Nullable Default
user_id uuid YES
current_streak integer YES
best_streak integer YES
last_active_day date YES
active_today boolean YES

vw_user_today_stats

Column Type Nullable Default
user_id uuid YES
day date YES
xp integer YES
sessions integer YES
practice_sessions integer YES
correct integer YES
wrong integer YES
cookies_earned integer YES
cookies_spent integer YES

vw_wallet_overview

Column Type Nullable Default
user_id uuid YES
cookies integer YES
last_tx_amount integer YES
last_tx_kind USER-DEFINED YES
last_tx_created_at timestamp with time zone YES

wallet_transactions

Column Type Nullable Default
id uuid NO gen_random_uuid()
user_id uuid NO
kind USER-DEFINED NO
source text NO
amount integer NO
session_id uuid YES
skill_id uuid YES
stage_id uuid YES
metadata jsonb NO '{}'::jsonb
created_at timestamp with time zone NO now()

word_assets

Column Type Nullable Default
id uuid NO gen_random_uuid()
word_id uuid YES
kind text YES
url text YES
provider text YES
style jsonb YES
voice jsonb YES
created_at timestamp with time zone NO now()

word_forms

Column Type Nullable Default
id uuid NO gen_random_uuid()
word_id uuid YES
form_type text YES
form_value text NO
form text NO
features jsonb NO
is_irregular boolean NO false
created_at timestamp with time zone NO now()

word_grammar

Column Type Nullable Default
word_id uuid NO
concept_id uuid NO
created_at timestamp with time zone NO now()

word_tags

Column Type Nullable Default
word_id uuid NO
tag_id uuid NO

word_translations

Column Type Nullable Default
id uuid NO gen_random_uuid()
word_id uuid YES
lang text YES
text text YES
is_primary boolean NO false
created_at timestamp with time zone NO now()

worlds

Column Type Nullable Default
id uuid NO gen_random_uuid()
course_id uuid NO
idx integer NO
title text NO
location_key text YES
is_published boolean NO false

xp_transactions

Column Type Nullable Default
id uuid NO gen_random_uuid()
user_id uuid NO
amount integer NO
source text NO
session_id uuid YES
item_id uuid YES
created_at timestamp with time zone NO now()