const { pool } = require("../modules/database") const { DefaultError } = require("../errors/errors") async function assignBadgeToUser(userId, badgeId) { try { const sql = "INSERT INTO `user_badges` (userId, badgeId) VALUES (?, ?)" const rows = await pool.query(sql, [userId, badgeId]) return rows.insertId } catch (error) { throw new DefaultError(500, "Internal Server Error", error) } } async function findUserBadges(userId) { try { const sql = `SELECT ub.*, b.name, b.description, b.icon, b.condition FROM \`user_badges\` ub JOIN \`badges\` b ON ub.badgeId = b.id WHERE ub.userId = ? ORDER BY ub.unlockedAt DESC` const rows = await pool.query(sql, [userId]) return rows } catch (error) { throw new DefaultError(500, "Internal Server Error", error) } } async function hasBadge(userId, badgeId) { try { const sql = "SELECT COUNT(*) as count FROM `user_badges` WHERE userId = ? AND badgeId = ?" const rows = await pool.query(sql, [userId, badgeId]) return rows[0].count > 0 } catch (error) { throw new DefaultError(500, "Internal Server Error", error) } } async function removeBadgeFromUser(userId, badgeId) { try { const sql = "DELETE FROM `user_badges` WHERE userId = ? AND badgeId = ?" const rows = await pool.query(sql, [userId, badgeId]) return rows.affectedRows > 0 } catch (error) { throw new DefaultError(500, "Internal Server Error", error) } } async function countUserBadges(userId) { try { const sql = "SELECT COUNT(*) as count FROM `user_badges` WHERE userId = ?" const rows = await pool.query(sql, [userId]) return rows[0].count } catch (error) { throw new DefaultError(500, "Internal Server Error", error) } } module.exports = { assignBadgeToUser, findUserBadges, hasBadge, removeBadgeFromUser, countUserBadges }