import { Notification, toast } from '@/components/ui' import { generateBackgroundWorkers } from '@/services/background-worker.service' import { getLocalization } from '@/services/localization.service' import { store } from '@/store' import { clearRedisCache } from './languageText.service' import { kickUser } from './identity.service' import { dynamicServiceService } from './dynamicService.service' import { streamSetupMigrate } from './setup.service' import { openDbMigrateLogPanel, dispatchMigrateLog, dispatchMigrateDone } from '@/components/shared/DbMigrateLogPanel' export abstract class UiEvalService { static Init = () => { //console.log('init') } private static translate = ( localizationKey: string, params?: Record, defaultResourceName?: string, ): string => { const { texts, config } = store.getState().abpConfig if (!texts) return localizationKey return getLocalization( texts, defaultResourceName ?? config?.localization?.defaultResourceName, localizationKey, params, ) } private static runWithToast = (asyncFn: () => Promise, toastKey: string) => { asyncFn() toast.push( {UiEvalService.translate(toastKey)} , { placement: 'bottom-end' }, ) } static ApiGenerateBackgroundWorkers = () => { UiEvalService.runWithToast(() => generateBackgroundWorkers(), '::App.BackgroundWorkers.BackgroundWorkersMessage') } static ApiClearRedisCache = () => { UiEvalService.runWithToast(() => clearRedisCache(), '::App.ClearRedisCache.ClearRedisCacheMessage') } static ApiKickUser = (userId: string, gridRef?: any) => { UiEvalService.runWithToast(async () => { await kickUser(userId) if (gridRef?.current) { gridRef.current.instance().refresh() } }, '::App.KickUser.KickUserMessage') } /** * Dynamic Service kaydını siler. Ham SQL yerine servisten geçer; yalnızca böyle * yüklenmiş assembly ve Swagger kaydı da runtime'dan düşer. */ static ApiDeleteDynamicService = (id: string, gridRef?: any) => { if (!id) return if (!window.confirm(UiEvalService.translate('::App.DeveloperKitDynamicServices.DeleteConfirm'))) { return } void dynamicServiceService .delete(id) .then(() => { if (gridRef?.current) { gridRef.current.instance().refresh() } toast.push( {UiEvalService.translate('::App.Platform.ObjectDeletedSuccessfully')} , { placement: 'bottom-end' }, ) }) .catch(() => { toast.push( {UiEvalService.translate('::App.DeveloperKitDynamicServices.DeleteError')} , { placement: 'bottom-end' }, ) }) } /** * Canlı sistemde migration tetikler (SQL Query Manager ve Wizard dosya yöneticisi ortak kullanır). * Yetki sunucu tarafında `App.Setup.Migrate` izniyle doğrulanır. `onSuccess`, migrate hatasız * bittiğinde çağrılır; migrate'in kurduğu kayıtları gösteren ekran kendini yeniler. */ static ApiDbMigrate = (onSuccess?: () => void) => { toast.push( {UiEvalService.translate('::App.Platform.StartMessage')} , { placement: 'bottom-end' }, ) openDbMigrateLogPanel() let failed = false streamSetupMigrate({ onLog: dispatchMigrateLog, onError: (err) => { failed = true toast.push( {UiEvalService.translate('::App.DbMigrate.ErrorMessage')} {`: ${err.message}`} , { placement: 'bottom-end' }, ) }, onFinished: () => { dispatchMigrateDone() if (failed) return toast.push( {UiEvalService.translate('::App.DbMigrate.EndMessage')} , { placement: 'bottom-end' }, ) onSuccess?.() }, }) } } const _global = (window || global) as any _global.UiEvalService = UiEvalService