Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion tools/migrations/26-02-19--add_badges.sql
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ CREATE TABLE badge (
CREATE TABLE badge_level (
id INT AUTO_INCREMENT PRIMARY KEY,
badge_id INT NOT NULL,
name VARCHAR(100),
level INT NOT NULL,
target_value INT NOT NULL,
icon_name VARCHAR(255),
Expand Down
84 changes: 42 additions & 42 deletions tools/migrations/26-02-28--insert_default_badges.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,61 +2,61 @@

INSERT INTO badge (id, code, name, description)
VALUES
(1, 'TRANSLATED_WORDS', 'Meaning Builder', 'Translate {target_value} unique words while reading.'),
(1, 'TRANSLATED_WORDS', 'Lexical Leader', 'Translate {target_value} unique words while reading.'),
(2, 'CORRECT_EXERCISES', 'Practice Builder', 'Solve {target_value} exercises correctly.'),
(3, 'COMPLETED_AUDIO_LESSONS', 'Sound Scholar', 'Complete {target_value} audio lessons.'),
(4, 'STREAK_COUNT', 'Consistency Champion', 'Maintain a streak for {target_value} days.'),
(5, 'LEARNED_WORDS', 'Word Collector', 'Learn {target_value} new words.'),
(3, 'COMPLETED_AUDIO_LESSONS', 'Sound Scholar', 'Complete {target_value} audio lesson(s).'),
(4, 'STREAK_COUNT', 'Habit Hero', 'Maintain a streak for {target_value} days.'),
(5, 'LEARNED_WORDS', 'Word Collector', 'Learn {target_value} new word(s).'),
(6, 'READ_ARTICLES', 'Active Reader', 'Read {target_value} articles.'),
(7, 'NUMBER_OF_FRIENDS', 'Influencer', 'Add {target_value} friends.');
(7, 'NUMBER_OF_FRIENDS', 'Influencer', 'Add {target_value} friend(s).');

INSERT INTO badge_level (id, badge_id, name, level, target_value, icon_name)
INSERT INTO badge_level (id, badge_id, level, target_value, icon_name)
VALUES
-- Translated Words
(1, 1, '', 1, 10, 'translated-words-1.svg'),
(2, 1, '', 2, 100, 'translated-words-2.svg'),
(3, 1, '', 3, 500, 'translated-words-3.svg'),
(4, 1, '', 4, 1000, 'translated-words-4.svg'),
(5, 1, '', 5, 2500, 'translated-words-5.svg'),
-- Translated Words
(1, 1, 1, 10, 'translated-words-3.svg'),
(2, 1, 2, 100, 'translated-words-3.svg'),
(3, 1, 3, 500, 'translated-words-3.svg'),
(4, 1, 4, 1000, 'translated-words-3.svg'),
(5, 1, 5, 2500, 'translated-words-3.svg'),

-- Correct Exercises
(6, 2, '', 1, 10, 'correct-exercises-1.svg'),
(7, 2, '', 2, 250, 'correct-exercises-2.svg'),
(8, 2, '', 3, 1000, 'correct-exercises-3.svg'),
(9, 2, '', 4, 5000, 'correct-exercises-4.svg'),
(10, 2, '', 5, 20000, 'correct-exercises-5.svg'),
(6, 2, 1, 10, 'correct-exercises-5.svg'),
(7, 2, 2, 250, 'correct-exercises-5.svg'),
(8, 2, 3, 1000, 'correct-exercises-5.svg'),
(9, 2, 4, 5000, 'correct-exercises-5.svg'),
(10, 2, 5, 20000, 'correct-exercises-5.svg'),

-- Completed Audio Lessons
(11, 3, '', 1, 1, 'completed-audio-lessons-1.svg'),
(12, 3, '', 2, 25, 'completed-audio-lessons-2.svg'),
(13, 3, '', 3, 50, 'completed-audio-lessons-3.svg'),
(14, 3, '', 4, 150, 'completed-audio-lessons-4.svg'),
(15, 3, '', 5, 300, 'completed-audio-lessons-5.svg'),
(11, 3, 1, 1, 'completed-audio-lessons-4.svg'),
(12, 3, 2, 25, 'completed-audio-lessons-4.svg'),
(13, 3, 3, 50, 'completed-audio-lessons-4.svg'),
(14, 3, 4, 150, 'completed-audio-lessons-4.svg'),
(15, 3, 5, 300, 'completed-audio-lessons-4.svg'),

-- Streak Count
(16, 4, '', 1, 7, 'streak-count-1.svg'),
(17, 4, '', 2, 30, 'streak-count-2.svg'),
(18, 4, '', 3, 90, 'streak-count-3.svg'),
(19, 4, '', 4, 180, 'streak-count-4.svg'),
(20, 4, '', 5, 365, 'streak-count-5.svg'),
(16, 4, 1, 7, 'streak-count-1.svg'),
(17, 4, 2, 30, 'streak-count-1.svg'),
(18, 4, 3, 90, 'streak-count-1.svg'),
(19, 4, 4, 180, 'streak-count-1.svg'),
(20, 4, 5, 365, 'streak-count-1.svg'),

-- Learned Words
(21, 5, '', 1, 1, 'learned-words-1.svg'),
(22, 5, '', 2, 10, 'learned-words-2.svg'),
(23, 5, '', 3, 50, 'learned-words-3.svg'),
(24, 5, '', 4, 250, 'learned-words-4.svg'),
(25, 5, '', 5, 750, 'learned-words-5.svg'),
(21, 5, 1, 1, 'learned-words-5.svg'),
(22, 5, 2, 10, 'learned-words-5.svg'),
(23, 5, 3, 50, 'learned-words-5.svg'),
(24, 5, 4, 250, 'learned-words-5.svg'),
(25, 5, 5, 750, 'learned-words-5.svg'),

-- Read Articles
(26, 6, '', 1, 5, 'read-articles-1.svg'),
(27, 6, '', 2, 25, 'read-articles-2.svg'),
(28, 6, '', 3, 100, 'read-articles-3.svg'),
(29, 6, '', 4, 500, 'read-articles-4.svg'),
(30, 6, '', 5, 1000, 'read-articles-5.svg'),
(26, 6, 1, 5, 'read-articles-3.svg'),
(27, 6, 2, 25, 'read-articles-3.svg'),
(28, 6, 3, 100, 'read-articles-3.svg'),
(29, 6, 4, 500, 'read-articles-3.svg'),
(30, 6, 5, 1000, 'read-articles-3.svg'),

-- Number of Friends
(31, 7, '', 1, 1, 'number-of-friends-1.svg'),
(32, 7, '', 2, 3, 'number-of-friends-2.svg'),
(33, 7, '', 3, 5, 'number-of-friends-3.svg'),
(34, 7, '', 4, 7, 'number-of-friends-4.svg'),
(35, 7, '', 5, 10, 'number-of-friends-5.svg');
(31, 7, 1, 1, 'number-of-friends-1.svg'),
(32, 7, 2, 3, 'number-of-friends-1.svg'),
(33, 7, 3, 5, 'number-of-friends-1.svg'),
(34, 7, 4, 7, 'number-of-friends-1.svg'),
(35, 7, 5, 10, 'number-of-friends-1.svg');
6 changes: 2 additions & 4 deletions zeeguu/api/endpoints/badges.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,7 @@ def get_badges_for_user(username: str = None):
"icon_name": "/badge1.svg",
"achieved": true,
"achieved_at": "2026-03-03T12:34:56",
"is_shown": false,
"name": "Beginner"
"is_shown": false
}, ...]
"current_value": 10
}, ... ]
Expand Down Expand Up @@ -126,6 +125,5 @@ def serialize_badge_level(level: BadgeLevel, user_level: UserBadgeLevel | None)
if user_level and user_level.achieved_at
else None
),
"is_shown": user_level.is_shown if user_level else False,
"name": level.name,
"is_shown": user_level.is_shown if user_level else False
}
1 change: 0 additions & 1 deletion zeeguu/core/model/badge_level.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class BadgeLevel(db.Model):
__tablename__ = "badge_level"

id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
badge_id = db.Column(db.Integer, db.ForeignKey("badge.id"), nullable=False)
level = db.Column(db.Integer, nullable=False)
target_value = db.Column(db.Integer, nullable=False)
Expand Down
Loading