#!/usr/bin/env python # -*- coding:utf-8 -*- # project: 4月 # author: NinEveN # date: 2021/4/13 import logging from api.models import AppReleaseInfo, APPToDeveloper, UserInfo, AppScreenShot, AppStorage from api.utils.app.supersignutils import IosUtils from api.utils.response import BaseResponse from api.utils.utils import delete_local_files, delete_app_screenshots_files, change_storage_and_change_head_img, \ migrating_storage_data, clean_storage_data, check_storage_is_new_storage from common.cache.state import MigrateStorageState from common.utils.caches import del_cache_response_by_short, del_cache_by_delete_app, \ del_cache_storage from common.utils.storage import Storage logger = logging.getLogger(__name__) def app_delete(app_obj): res = BaseResponse() if not app_obj: res.code = 1001 res.msg = "应用不存在" return res user_obj = app_obj.user_id if MigrateStorageState(user_obj.uid).get_state(): res.code = 1001 res.msg = "数据迁移中" return res count = APPToDeveloper.objects.filter(app_id=app_obj).count() if app_obj.issupersign or count > 0: logger.info(f"app_id:{app_obj.app_id} is supersign ,delete this app need clean IOS developer") IosUtils.clean_app_by_user_obj(app_obj) storage = Storage(user_obj) has_combo = app_obj.has_combo del_cache_response_by_short(app_obj.app_id) del_cache_by_delete_app(app_obj.app_id) for app_release_obj in AppReleaseInfo.objects.filter(app_id=app_obj).all(): logger.info(f"delete app_id:{app_obj.app_id} need clean all release,release_id:{app_release_obj.release_id}") storage.delete_file(app_release_obj.release_id, app_release_obj.release_type) delete_local_files(app_release_obj.release_id, app_release_obj.release_type) storage.delete_file(app_release_obj.icon_url) app_release_obj.delete() delete_app_screenshots_files(storage, app_obj) if has_combo: logger.info( f"app_id:{app_obj.app_id} has_combo ,delete this app need uncombo and clean del_cache_response_by_short") has_combo.has_combo = None has_combo.save(update_fields=['has_combo']) app_obj.delete() return res def app_screen_delete(screen_id, apps_obj, storage): screen_obj = AppScreenShot.objects.filter(pk=screen_id, app_id=apps_obj).first() if screen_obj: storage.delete_file(screen_obj.screenshot_url) screen_obj.delete() del_cache_response_by_short(apps_obj.app_id) def app_release_delete(app_obj, release_id, storage): res = BaseResponse() user_obj = app_obj.user_id if app_obj: apprelease_count = AppReleaseInfo.objects.filter(app_id=app_obj).values("release_id").count() appreleaseobj = AppReleaseInfo.objects.filter(app_id=app_obj, release_id=release_id).first() if not appreleaseobj.is_master: logger.info(f"delete app release {appreleaseobj}") storage.delete_file(appreleaseobj.release_id, appreleaseobj.release_type) delete_local_files(appreleaseobj.release_id, appreleaseobj.release_type) storage.delete_file(appreleaseobj.icon_url) appreleaseobj.delete() elif appreleaseobj.is_master and apprelease_count < 2: logger.info(f"delete app master release {appreleaseobj} and clean app {app_obj} ") count = APPToDeveloper.objects.filter(app_id=app_obj).count() if app_obj.issupersign or count > 0: logger.info(f"app_id:{app_obj.app_id} is supersign ,delete this app need clean IOS developer") IosUtils.clean_app_by_user_obj(app_obj) storage.delete_file(appreleaseobj.release_id, appreleaseobj.release_type) delete_local_files(appreleaseobj.release_id, appreleaseobj.release_type) storage.delete_file(appreleaseobj.icon_url) del_cache_by_delete_app(app_obj.app_id) appreleaseobj.delete() delete_app_screenshots_files(storage, app_obj) has_combo = app_obj.has_combo if has_combo: app_obj.has_combo.has_combo = None app_obj.delete() else: pass del_cache_response_by_short(app_obj.app_id) return res def storage_change(use_storage_id, user_obj, force): if use_storage_id: if user_obj.storage and use_storage_id == user_obj.storage.id: return True try: if use_storage_id == -1: change_storage_and_change_head_img(user_obj, None) if migrating_storage_data(user_obj, None, False): if check_storage_is_new_storage(user_obj, None): clean_storage_data(user_obj) UserInfo.objects.filter(pk=user_obj.pk).update(storage=None) else: new_storage_obj = AppStorage.objects.filter(pk=use_storage_id).first() change_storage_and_change_head_img(user_obj, new_storage_obj) if migrating_storage_data(user_obj, new_storage_obj, False): if check_storage_is_new_storage(user_obj, new_storage_obj): clean_storage_data(user_obj) UserInfo.objects.filter(pk=user_obj.pk).update(storage_id=use_storage_id) except Exception as e: logger.error(f"update user {user_obj} storage failed Exception:{e}") if force: if use_storage_id == -1: UserInfo.objects.filter(pk=user_obj.pk).update(storage=None) else: UserInfo.objects.filter(pk=user_obj.pk).update(storage_id=use_storage_id) else: return False del_cache_storage(user_obj) return True