import 'package:analytics_sdk/const/event_type.dart'; import 'package:analytics_sdk/manager/sdk_context.dart'; import 'package:analytics_sdk/enum/read_behavior_enum.dart'; /// 漫画事件 class ComicEvent { final String event = EventType.comicEvent.event; late final String eventId; /// 漫画 id final String comicId; /// 漫画标题 final String comicTitle; /// 分类ID final String comicTypeId; /// 分类名称 final String comicTypeName; /// 标签KEY, 多个标签使用英文逗号分隔 final String comicTagKey; /// 标签名称,多个标签使用英文逗号分隔 final String comicTagName; /// 推荐引擎的trace_id,未接推荐引擎传空字符串 final String recommendTraceId; /// 阅读进度百分比(0-100) final int readProgress; /// 当前阅读第几页(从1开始) final int pageNo; /// 行为标识:view(展示), page_next(下一页), page_prev(上一页), complete(读完) 等 final ReadBehaviorEnum comicBehavior; /// 章节ID,没有章节上报空字符串,没有对接搜索推荐引擎的上报空字符串 final String chapterId; /// 章节名称,没有章节上报空字符串,没有对接搜索推荐引擎的上报空字符串 final String chapterName; /// 老司机媒体资源ID,如未使用老司机库资源可传空字符串 final String mediaId; late final Map _commonFields; ComicEvent({ required this.comicId, required this.comicTitle, required this.comicTypeId, required this.comicTypeName, required this.comicTagKey, required this.comicTagName, required this.readProgress, required this.pageNo, required this.comicBehavior, this.recommendTraceId = '', this.mediaId = '', this.chapterId = '', this.chapterName = '', }) { _commonFields = SdkContext.generateCommonFields(event); eventId = SdkContext.generateEventIdFromCommonFields(_commonFields, [ comicId, comicTitle, comicTypeId, comicTypeName, comicTagKey, comicTagName, readProgress.toString(), pageNo.toString(), comicBehavior.key, comicBehavior.name, recommendTraceId, mediaId, chapterId, chapterName, ]); } Map toJson() { Map payload = { 'comic_id': comicId, 'comic_title': comicTitle, 'comic_type_id': comicTypeId, 'comic_type_name': comicTypeName, 'comic_tag_key': comicTagKey, 'comic_tag_name': comicTagName, 'recommend_trace_id': recommendTraceId, 'read_progress': readProgress, 'page_no': pageNo, 'comic_behavior_key': comicBehavior.key, 'comic_behavior_name': comicBehavior.name, 'media_id': mediaId, 'chapter_id': chapterId, 'chapter_name': chapterName, }; return {..._commonFields, 'event_id': eventId, "payload": payload}; } factory ComicEvent.fromJson(Map json) { final behaviorKey = json['comic_behavior_key'] as String? ?? ''; final behaviorName = json['comic_behavior_name'] as String? ?? ''; final behavior = ReadBehaviorEnum( behaviorKey.isNotEmpty ? behaviorKey : ReadBehaviorEnum.VIEW.key, behaviorName.isNotEmpty ? behaviorName : ReadBehaviorEnum.VIEW.name, ); return ComicEvent( comicId: json['comic_id'] as String, comicTitle: json['comic_title'] as String, comicTypeId: json['comic_type_id'] as String, comicTypeName: json['comic_type_name'] as String, comicTagKey: json['comic_tag_key'] as String, comicTagName: json['comic_tag_name'] as String, readProgress: json['read_progress'] as int, pageNo: json['page_no'] as int, comicBehavior: behavior, recommendTraceId: json['recommend_trace_id'] as String? ?? '', mediaId: json['media_id'] as String? ?? '', chapterId: json['chapter_id'] as String? ?? '', chapterName: json['chapter_name'] as String? ?? '', ); } }