HRM_study / backend.py
Raph156's picture
Recommending videos
c370011
Raw
History Blame Contribute Delete
4.95 kB
from supabase import create_client
from dotenv import load_dotenv
load_dotenv()
import os
SUPABASE_URL = os.getenv("SUPABASE_URL")
SUPABASE_KEY = os.getenv("SUPABASE_KEY")
supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
def get_all_logs():
try:
response = supabase.table("student_skills").select("user_id, skill").execute()
return [(item["user_id"], item["skill"]) for item in response.data]
except Exception as e:
print(f"Supabase Fetch Error: {e}")
return []
def add_skill(user_id, skill):
# check if skill already exists for this user
existing = supabase.table("student_skills")\
.select("*")\
.eq("user_id", user_id)\
.eq("skill", skill)\
.execute()
if not existing.data:
supabase.table("student_skills")\
.insert({"user_id": user_id, "skill": skill})\
.execute()
print(f"Skill '{skill}' added for user {user_id}")
def init_db():
supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
def create_user(email, password, username):
try:
res = supabase.auth.sign_up({
"email": email,
"password": password,
"options": {
"data": {
"username": username
}
}
})
return "Registration successful! Connect with your email."
except Exception as e:
return f"Error: {str(e)}"
def login(email, password):
try:
res = supabase.auth.sign_in_with_password({
"email": email,
"password": password
})
if res.user is not None:
return res.user.id # return the supabase UUID
return None
except Exception as e:
print(f"Error during login: {e}")
return None
# ---------------- HIERARCHY & CLUSTERS (Condensed from Notebook) ----------------
HIERARCHY = {
"Arithmetic Operations": {1: ["whole numbers", "ordering", "number line"], 2: ["integers"], 3: ["decimals"], 4: ["order of operations"]},
"Fractions Decimals Percents": {1: ["equivalent fractions", "conversion"], 2: ["fraction", "decimal"], 3: ["mixed fractions"], 4: ["percent", "ratio", "rate"]},
"Algebra Basics": {1: ["expression", "terms"], 2: ["like terms", "distributive"], 3: ["simplifying"], 4: ["polynomial"]},
"Equations and Inequalities": {1: ["one step", "two step"], 2: ["solving"], 3: ["multi", "more than two"], 4: ["inequality"]},
"Linear Functions": {1: ["pattern", "table"], 2: ["slope"], 3: ["graph"], 4: ["write linear equation", "from situation"]},
"Systems of Equations": {3: ["graphing"], 4: ["substitution", "system"]},
"Geometry": {1: ["angles", "triangle", "polygon"], 2: ["perimeter", "area"], 3: ["volume"], 4: ["surface area", "3d"]},
"Statistics": {1: ["mean", "median", "mode"], 2: ["range"], 3: ["plot", "histogram"], 4: ["scatter", "sampling"]},
"Probability": {1: ["single"], 2: ["venn"], 3: ["two"], 4: ["combinatorics", "counting"]},
"Advanced Algebra": {2: ["factoring"], 3: ["quadratic"], 4: ["quadratic formula"]}
}
CLUSTERS = {
"Arithmetic Operations": ["addition", "subtraction", "multiplication", "division", "order of operations", "computation", "estimation"],
"Fractions Decimals Percents": ["fraction", "decimal", "percent", "ratio", "rate"],
"Number Theory": ["prime", "factor", "multiple", "divisibility", "gcf", "lcm", "odd", "even"],
"Algebra Basics": ["expression", "like terms", "distributive", "polynomial", "simplifying"],
"Equations and Inequalities": ["equation", "inequality", "solving", "variable"],
"Linear Functions": ["linear", "slope", "y-intercept", "graph", "table"],
"Systems of Equations": ["system"],
"Geometry": ["angle", "triangle", "polygon", "circle", "perimeter", "area", "volume", "surface area", "prism", "cone", "sphere"],
"Statistics": ["mean", "median", "mode", "range", "plot", "histogram", "scatter"],
"Probability": ["probability", "venn", "combinatorics", "counting"],
"Transformations": ["rotation", "reflection", "translation", "symmetry"],
"Coordinate Geometry": ["coordinate", "distance", "midpoint"],
"Advanced Algebra": ["quadratic", "factoring", "trinomials"]
}
def assign_cluster(skill):
skill_lower = skill.lower()
for cluster, keywords in CLUSTERS.items():
if any(keyword in skill_lower for keyword in keywords):
return cluster
return "Other"
def assign_hierarchy(skill):
skill_lower = skill.lower()
for domain, levels in HIERARCHY.items():
for level, keywords in levels.items():
if any(keyword in skill_lower for keyword in keywords):
return domain, level
return "Other", -1
#create_user("raphael.monteloup@gmail.com", "pass12345", "raph")
#create_user("raphael.leonardi@universite-paris-saclay.fr", "pass23456", "raphael")
#login_result = login("raph", "pass12345")