Created by
Alexander Tryastsyn
last modified
| from novakid.backend.db.utils import exists
from novakid.backend.utils.other import log2console
from novakid.backend.student_game_profile.models import ItemTypeModel, GameProfileModel, ProfileSelectedItemModel
from novakid.backend.student_game_profile.models_processes import update_student_last_login_in_game_profile
def update_student_last_login(request, dry_run=True, logprint=False):
log2console(f'update field "stundent_last_login": dry_run={dry_run}')
profiles_all = 0
profiles_found = 0
profiles_login_updated = 0
db_session = request.db_session
profiles_ids = []
with request.tm:
q = db_session.query(
GameProfileModel.student_id
)
for x in q:
profiles_ids.append(x[0])
item_type_query = db_session.query(ItemTypeModel).filter_by(label='character')
if exists(item_type_query):
item_type_id = item_type_query.one().id
log2console(f'all profiles: {len(profiles_ids)}')
log2console(f'item_type_id: {item_type_id}')
query_profile = db_session.query(
GameProfileModel
)
for profile_id in profiles_ids:
profiles_all += 1
with request.tm:
profile = query_profile.get(profile_id)
if profile and profile.student_last_login is None:
query_profile_items = db_session.query(
ProfileSelectedItemModel
).filter(
ProfileSelectedItemModel.profile_id == profile_id,
ProfileSelectedItemModel.item_type_id == item_type_id
)
if not exists(query_profile_items):
continue
profiles_found += 1
if dry_run is False:
update_student_last_login_in_game_profile(request, profile_id)
db_session.refresh(profile)
if profile.student_last_login is not None:
profiles_login_updated += 1
if logprint:
log2console(f'student id: {profile.student_id}, last login:{profile.student_last_login}')
log2console(f'profiles_all: {profiles_all}')
log2console(f'profiles_found: {profiles_found}')
log2console(f'profiles_login_updated: {profiles_login_updated}')
|