ChannelViewModel.ets 6.15 KB
import { NavigationBodyDTO, NavigationDetailDTO, } from 'wdBean';

import { Logger, ResourcesUtils } from 'wdKit';
import { CacheData, ResponseDTO } from 'wdNetwork';
import { PageRepository } from '../repository/PageRepository';

const TAG = 'ChannelViewModel';

/**
 * 首页底导、顶导相关
 */
export class ChannelViewModel {


  /**
   *  获取预置新闻顶导预置数据
   * @returns
   */
  async getBottomNavPresetData() : Promise<NavigationBodyDTO | null>{
    return new Promise<NavigationBodyDTO | null>((success) => {
      ResourcesUtils.getResourcesJson<ResponseDTO<NavigationBodyDTO|null>>(getContext(), 'home_bottom_data_product.json').then((data) => {
        if (data) {
          let navBean = data.data as NavigationBodyDTO
          success(navBean)
        } else {
          success(null)
        }
      }).catch((err: object) => {
        Logger.error(TAG, 'getBottomNavPresetData catch err: ' + JSON.stringify(err));
        success(null)
      })
    })
  }


  /**
   * 获取底导缓存数据
   */
  async getBottomNavCacheData(): Promise<NavigationBodyDTO | null> {
    Logger.info(TAG, `getBottomNavCacheData start`);
    return new Promise<NavigationBodyDTO | null>((success) => {
      CacheData.getLocalCacheData(CacheData.bottomCacheKey).then((data) => {
        // Logger.debug(TAG, 'getBottomNavCacheData 333 ' + JSON.stringify(data));
        if (data) {
          let navBean = JSON.parse(CacheData.getNetworkData(data)) as NavigationBodyDTO
          success(navBean)
        } else {
          success(null)
        }
      }).catch((err: object) => {
        Logger.error(TAG, 'getBottomNavCacheData catch err: ' + JSON.stringify(err));
        success(null)
      })
    });
  }

  /**
   * 保存底导数据到缓存
   */
  saveBottomData(data: NavigationBodyDTO) {
    CacheData.saveCacheData(CacheData.bottomCacheKey, data, data.md5)
  }

  /**
   * 获取底导详情(顶导)缓存数据
   */
  getBottomNavDetailCacheData(id: number): Promise<NavigationDetailDTO | null> {
    return new Promise<NavigationDetailDTO | null>((success) => {
      CacheData.getLocalCacheData(CacheData.channelCacheDataKey + id).then((data) => {
        if (data) {
          let navBean = JSON.parse(CacheData.getNetworkData(data)) as NavigationDetailDTO
          success(navBean)
        } else {
          success(null)
        }
      }).catch((err: object) => {
        Logger.error(TAG, 'getBottomNavDetailCacheData catch err: ' + JSON.stringify(err));
        success(null)
      })
    })
  }

  /**
   *  获取预置新闻顶导预置数据
   * @returns
   */
    async getPresetNewsTopTabData() : Promise<NavigationDetailDTO | null>{
      return new Promise<NavigationDetailDTO | null>((success) => {
        ResourcesUtils.getResourcesJson<ResponseDTO<NavigationDetailDTO|null>>(getContext(), 'news_top_data_product.json').then((data) => {
          if (data) {
            let navBean = data.data as NavigationDetailDTO
            success(navBean)
          } else {
            success(null)
          }
        }).catch((err: object) => {
          Logger.error(TAG, 'getBottomNavDetailCacheData catch err: ' + JSON.stringify(err));
          success(null)
        })
      })
  }


  /**
   * 保存顶部导详情数据到缓存
   */
  saveBottomDetailData(data: NavigationDetailDTO) {
    CacheData.saveCacheData(CacheData.channelCacheDataKey + data?.id, data, data.md5)
  }

  /**
   * 获取底导接口数据
   */
  async getBottomNavData(): Promise<NavigationBodyDTO> {
    Logger.info(TAG, `getBottomNavData start`);
    return this.getNavData();
  }

  /**
   * 获取底导详情(顶导)接口数据
   */
  async getBottomNavDetailData(id: number, myChannelIds?: string): Promise<NavigationDetailDTO|null> {
    Logger.info(TAG, `getBottomNavDetailData start`);
    return this.getNavDetailData(id,myChannelIds);
  }

  private getNavData(): Promise<NavigationBodyDTO> {
    return new Promise<NavigationBodyDTO>((success, error) => {
      Logger.info(TAG, `getNavData start`);
      PageRepository.fetchNavigationDataApi().then((navResDTO: ResponseDTO<NavigationBodyDTO>) => {
        if (!navResDTO || !navResDTO.data) {
          Logger.error(TAG, 'getNavData then navResDTO is empty');
          error('navResDTO is empty');
          return
        }
        if (navResDTO.code != 0) {
          Logger.error(TAG, `getNavData then code:${navResDTO.code}, message:${navResDTO.message}`);
          error('navResDTO Response Code is failure');
          return
        }
        // let navResStr = JSON.stringify(navResDTO);
        Logger.info(TAG, "getNavData then,navResDTO.timestamp:" + navResDTO.timestamp);
        navResDTO.data.md5 = navResDTO.meta?.md5 || ''
        success(navResDTO.data);
      }).catch((err: Error) => {
        Logger.error(TAG, `fetchNavigationDataApi catch, error.name : ${err.name},  error.message:${err.message}`);
        error(err);
      })
    })
  }

  /**
   * 请求获取顶部导航栏数据
   * @param id
   * @param myChannelIds
   * @returns
   */
  private getNavDetailData(id: number, myChannelIds?: string): Promise<NavigationDetailDTO|null> {
    return new Promise<NavigationDetailDTO|null>((success, error) => {
      Logger.info(TAG, `getNavData start`);
      PageRepository.fetchNavigationDetailDataApi(id,myChannelIds).then((navResDTO: ResponseDTO<NavigationDetailDTO>) => {
        if (!navResDTO || !navResDTO.data) {
          Logger.error(TAG, 'getNavData then navResDTO is empty');
          success(null);
          return
        }
        if (navResDTO.code != 0) {
          Logger.error(TAG, `getNavData then code:${navResDTO.code}, message:${navResDTO.message}`);
          success(null);
          return
        }
        // let navResStr = JSON.stringify(navResDTO);
        Logger.info(TAG, "getNavData then,navResDTO.timestamp:" + navResDTO.timestamp);
        navResDTO.data.md5 = navResDTO.meta?.md5 || ''
        success(navResDTO.data);
      }).catch((err: Error) => {
        Logger.error(TAG, `fetchNavigationDataApi catch, error.name : ${err.name},  error.message:${err.message}`);
        success(null);
      })
    })
  }




}


let channelViewModel = new ChannelViewModel();

export default channelViewModel as ChannelViewModel;