def team_training_model_sync(team_id): app.logger.info(f'team_training_model_sync service called for team: {team_id}') app.logger.info('sync sync_category_score_for_team') sync_category_score_for_team(team_id) app.logger.info('sync sync_root_category_score_for_team') skill_value = sync_root_category_score_for_team(team_id) app.logger.info('sync sync_overall_stat_for_team') sync_overall_stat_for_team(team_id, skill_value) skill = Skill() user_skill_level = skill.get_skill_level_from_skill(skill_value) app.logger.info('sync get_skill_level_from_skill done') sync_problem_score_for_team(team_id, user_skill_level) app.logger.info('sync sync_problem_score_for_team done') team_details = get_team_details(team_id) app.logger.info(f' end team_details{team_details}') member_list = team_details.get('member_list', []) for member in member_list: member_details = get_user_details_by_handle_name(member['user_handle']) app.logger.info(f' member_details {member_details}') notification_data = { 'user_id': member_details['id'], 'sender_id': 'System', 'notification_type': 'System Notification', 'redirect_url': '', 'notification_text': 'Training model for your team ' + team_details['team_name'] + ' has been synced by', 'status': 'UNREAD', } app.logger.info(f' add_notification {notification_data}') add_notification(notification_data) app.logger.info(f'team_training_model_sync service completed')
def get(self, team_id): app.logger.info('Get classroom training model api called') current_user = get_jwt_identity().get('id') if get_user_team_access(current_user, team_id) is False: return {'message': 'bad request'}, 400 team_details = get_team_details(team_id) member_stat = [] member_list = team_details.get('member_list', []) for member in member_list: user_details = get_user_details_by_handle_name(member['user_handle']) if user_details is None: continue user_public_info = get_user_details_public(user_details['id']) skill_list = search_top_skilled_categoires_for_user(user_details['id'], 'root', 'category_id', 15, True) user_public_info['status'] = 'pending' for f in user_public_info: member[f] = user_public_info[f] store = { 'user_handle': member['user_handle'], 'skill_color': member['skill_color'], 'skill_list': skill_list } member_stat.append(store) team_details['member_stat'] = member_stat category_list = [] for cat in member_stat[0]['skill_list']: category_list.append(cat['category_info']) team_details['category_list'] = category_list return team_details
def sync_overall_stat_for_team(team_id, skill_value=None): try: team_details = get_team_details(team_id) mark_problem = {} solve_count = 0 for member in team_details['member_list']: user_details = get_user_details_by_handle_name( member['user_handle']) if user_details is None: continue user_id = user_details['id'] problem_list = find_problems_for_user_by_status_filtered( ['SOLVED'], user_id) for problem in problem_list: if problem not in mark_problem: mark_problem[problem] = 1 solve_count += 1 if skill_value is None: skill_value = generate_skill_value_for_user(team_id) skill_obj = Skill() skill_title = skill_obj.get_skill_title(skill_value) skill_data = { 'skill_value': int(skill_value), 'solve_count': int(solve_count), 'skill_title': skill_title, } app.logger.info('Team final stat to update: ' + json.dumps(skill_data)) update_team_details(team_id, skill_data) except Exception as e: raise e
def sync_root_category_score_for_team(team_id): try: team_details = get_team_details(team_id) solved_problems = [] for member in team_details['member_list']: user_details = get_user_details_by_handle_name( member['user_handle']) if user_details is None: continue user_id = user_details['id'] problem_list = find_problems_for_user_by_status_filtered( ['SOLVED'], user_id) for problem in problem_list: if problem not in solved_problems: solved_problems.append(problem) root_solved_count = root_category_solved_count_by_solved_problem_list( solved_problems) category_list = search_categories({'category_root': 'root'}, 0, 100) skill_value = 0 for category in category_list: data = generate_sync_data_for_root_category( team_id, category, root_solved_count) add_user_category_data(team_id, category['category_id'], data) skill_value += data['skill_value_by_percentage'] return skill_value except Exception as e: raise e
def post(self, user_handle): app.logger.info('Team search method called') try: current_user = get_jwt_identity().get('id') user_details = get_user_details_by_handle_name(user_handle) if user_details['id'] != current_user: return {'message': 'bad request'}, 400 param = request.get_json() print('param given: ', param) team_list = search_teams_for_user(user_handle, param) return {'team_list': team_list}, 200 except Exception as e: return {'message': str(e)}, 500
def add_team_members_bulk(member_list, team_id, team_type, logged_in_user): try: team_lead = None for member in member_list: member_details = get_user_details_by_handle_name( member['user_handle']) edge = { 'team_id': team_id, 'team_type': team_type, 'user_handle': member['user_handle'], 'user_id': member_details['id'], 'remarks': member.get('remarks', None), 'status': 'confirmed' } if team_lead is not None: edge['status'] = 'pending' else: team_lead = member add_team_member(edge) notification_data = { 'user_id': member_details['id'], 'sender_id': logged_in_user, 'notification_type': 'Team Invitation', 'redirect_url': '/team/list/', 'notification_text': 'You have been invited to join a team by', 'status': 'UNREAD', } if team_type == 'classroom': notification_data = { 'user_id': member_details['id'], 'sender_id': logged_in_user, 'notification_type': 'Classroom Invitation', 'redirect_url': '/classroom/list/', 'notification_text': 'You have been invited to join a classroom by', 'status': 'UNREAD', } if member_details['id'] != logged_in_user: add_notification(notification_data) except Exception as e: raise e
def sync_category_score_for_team(team_id): try: team_details = get_team_details(team_id) user_list = [] for member in team_details['member_list']: user_details = get_user_details_by_handle_name( member['user_handle']) if user_details is None: continue user_list.append(user_details['id']) category_list = category_wise_problem_solve_for_users(user_list) for category in category_list: if category['category_root'] == 'root': continue data = generate_sync_data_for_category(team_id, category) add_user_category_data(team_id, category['category_id'], data) except Exception as e: raise e
def post(self, team_id): app.logger.info('Get individual training model api called') param = request.get_json() team_details = get_team_details(team_id) if 'training_problems' in param and param['training_problems']: team_details['problem_stat'] = search_top_skilled_problems_for_user(team_id, 'relevant_score', 10, True) if 'training_categories' in param and param['training_categories']: team_details['category_stat'] = search_top_skilled_categoires_for_user(team_id, 'ALL', 'relevant_score', 10, True) if 'category_skill' in param and param['category_skill']: team_details['category_skill_list'] = search_top_skilled_categoires_for_user(team_id, 'ALL', 'skill_value', 200, True) if 'root_category_skill' in param and param['root_category_skill']: team_details['root_category_skill_list'] = search_top_skilled_categoires_for_user(team_id, 'root', 'category_id', 20, True) if 'skill_comparison_info' in param and param['skill_comparison_info']: team_details['skill_info'] = [] member_list = team_details.get('member_list', []) for member in member_list: user_details = get_user_details_by_handle_name(member['user_handle']) if user_details is None: continue skill_list = search_top_skilled_categoires_for_user(user_details['id'], 'root', 'category_id', 15, True) team_details['skill_info'].append({'skill_list': skill_list}) return team_details
def sync_problem_score_for_team(team_id, user_skill_level): try: team_details = get_team_details(team_id) marked_list = {} for member in team_details['member_list']: user_details = get_user_details_by_handle_name( member['user_handle']) if user_details is None: continue user_id = user_details['id'] problem_list = available_problems_for_user(user_id) for problem in problem_list: problem_id = problem['id'] if problem_id in marked_list: continue marked_list[problem_id] = 1 data = generate_sync_data_for_problem(team_id, user_skill_level, problem) add_user_problem_status(team_id, problem['id'], data) except Exception as e: raise e