Spaces:
Sleeping
Sleeping
| from gamification.objects import UserPoints ,SimpleIndividualUserLevel,IndividualUserLevel,UserLevel | |
| from gamification.imports import * | |
| from gamification.levelLogic import get_all_levels_func | |
| from concurrent.futures import ThreadPoolExecutor | |
| executor = ThreadPoolExecutor(max_workers=5) | |
| # utils | |
| def get_particular_level(totalPoints,dreamJob)->UserLevel: | |
| # query db and get the results of all the level probably re use a function | |
| levels = get_all_levels_func() | |
| particularLevel= [level for level in levels if (level.maxPoints >= totalPoints) and (level.minPoints<=totalPoints)and (level.careerPath==dreamJob)] | |
| defaulLevel= [level for level in levels if level.levelName=="default" ] | |
| if len(particularLevel)>0: | |
| return particularLevel | |
| return defaulLevel | |
| def get_dream_job(userId): | |
| db_uri=MONGO_URI | |
| db_name = "crayonics" | |
| collection_name = "Questionaire" | |
| client = MongoClient(db_uri) | |
| db = client[db_name] | |
| collection = db[collection_name] | |
| questionaire_doc = collection.find_one({"userId": userId}) | |
| if questionaire_doc: | |
| return questionaire_doc['dreamRole'] | |
| else: return False | |
| def create_points_func(document:UserPoints)->bool: | |
| from app import handle_change3 | |
| db_uri = MONGO_URI | |
| db_name = "crayonics" | |
| collection_name="Points" | |
| client = MongoClient(db_uri) | |
| db = client[db_name] | |
| collection = db[collection_name] | |
| if document!=None: | |
| doc = document.model_dump() | |
| doc['earnedAt']=datetime.now() | |
| result = collection.insert_one(doc) | |
| executor.submit (handle_change3 , document.userId) | |
| return True | |
| else: | |
| client.close() | |
| return False | |
| def get_all_points_func(userId) -> IndividualUserLevel: | |
| db_uri = MONGO_URI | |
| db_name = "crayonics" | |
| collection_name = "Points" | |
| client = MongoClient(db_uri) | |
| db = client[db_name] | |
| collection = db[collection_name] | |
| dreamJob = get_dream_job(userId=userId) | |
| point_cursor = collection.find({"userId": userId}) | |
| # Convert the cursor to a list so we can reuse it | |
| points_list = list(point_cursor) | |
| # Calculate the total points | |
| totalPoints = sum([point['numOfPoints'] for point in points_list]) | |
| particularLevelInfo = get_particular_level(dreamJob=dreamJob,totalPoints=totalPoints) | |
| # Create the individual points list | |
| individualPoints = [indpoint for indpoint in points_list] | |
| print([pointss for pointss in individualPoints if all(val is not None for val in pointss.values())]) | |
| # Create the IndividualUserLevel object with totalPoints and individualPoints | |
| points = IndividualUserLevel(totalpoints=totalPoints,levelName=particularLevelInfo[0].levelName,minPoints=particularLevelInfo[0].minPoints,maxPoints=particularLevelInfo[0].maxPoints,levelNumber=particularLevelInfo[0].levelNumber, individualPoints=individualPoints) | |
| return points | |
| def get_all_simple_points_func(userId) -> SimpleIndividualUserLevel: | |
| db_uri = MONGO_URI | |
| db_name = "crayonics" | |
| collection_name = "Points" | |
| client = MongoClient(db_uri) | |
| db = client[db_name] | |
| collection = db[collection_name] | |
| dreamJob = get_dream_job(userId=userId) | |
| print(dreamJob) | |
| point_cursor = collection.find({"userId": userId}) | |
| try: | |
| points_list = list(point_cursor) | |
| totalPoints = sum([point['numOfPoints'] for point in points_list]) | |
| particularLevelInfo = get_particular_level(dreamJob=dreamJob,totalPoints=totalPoints) | |
| print(particularLevelInfo) | |
| points = SimpleIndividualUserLevel(totalpoints=totalPoints,levelName=particularLevelInfo[0].levelName,maxPoints=particularLevelInfo[0].maxPoints,minPoints=particularLevelInfo[0].minPoints,levelNumber=particularLevelInfo[0].levelNumber) | |
| except: | |
| totalPoints = 0 | |
| points = SimpleIndividualUserLevel(totalpoints=totalPoints) | |
| return points | |