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')
Example #2
0
    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
Example #5
0
 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
Example #8
0
 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