结构调整

This commit is contained in:
jianzhichu
2026-01-19 09:57:40 +08:00
parent d9cb721f64
commit f5449f3ace
77 changed files with 4060 additions and 1516 deletions
+36
View File
@@ -0,0 +1,36 @@
using System.Diagnostics.CodeAnalysis;
namespace dy.net.model.entity
{
[SqlSugar.SugarTable(TableName = "login_user_info")]
public class AdminUserInfo
{
public string UserName { get; set;}
public string Password { get; set; }
[SqlSugar.SugarColumn(IsPrimaryKey = true)]
public string Id { get; set; }
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[SqlSugar.SugarColumn(IsNullable = true)]
public DateTime UpdateTime { get; set; }
/// <summary>
/// 原密码,不存在数据库
/// </summary>
[SqlSugar.SugarColumn(IsIgnore =true)]
public string? OldPwd { get; set; }
/// <summary>
/// 头像
/// </summary>
[SqlSugar.SugarColumn(IsNullable = true)]
public string Avatar { get; set; }
}
}
+105
View File
@@ -0,0 +1,105 @@
using Newtonsoft.Json;
using SqlSugar;
using System.Text.RegularExpressions;
namespace dy.net.model.entity
{
[SugarTable(TableName = "dy_app_config")]
public class AppConfig
{
/// <summary>
/// 是否是程序启动时...
/// </summary>
public bool IsFirstRunning { get; set; }
/// <summary>
///
/// </summary>
[SugarColumn(IsPrimaryKey = true,Length =100)]
public string Id { get; set; }
[SugarColumn(Length =200,IsNullable =true)]
public int Cron { get; set; }
/// <summary>
/// 每次查询数量
/// </summary>
public int BatchCount { get; set; } = 18;
/// <summary>
/// 博主视频是否 直接用标题做文件名
/// </summary>
public bool UperUseViedoTitle { get; set; }
/// <summary>
/// 是否博主视频直接放一个根目录,不另外按名字建文件夹
/// </summary>
public bool UperSaveTogether { get; set; }
/// <summary>
/// 是否下载图片视频
/// </summary>
public bool DownImageVideo { get; set; }
/// <summary>
/// 图文视频 是否额外下载图片
/// </summary>
public bool DownImage { get; set; }
/// <summary>
/// 图文视频 是否额外下载mp3
/// </summary>
public bool DownMp3 { get; set; }
/// <summary>
/// 日志保留天数,防止容器日志太多,默认10天
/// </summary>
public int LogKeepDay { get; set; } = 10;
/// <summary>
/// 关注的视频标题命名模板{id}{VideoTitle}{SyncTime}{ReleaseTime}{FileHash}{Resolution}{FileSize}
/// </summary>
public string FollowedTitleTemplate { get; set; }
/// <summary>
/// 分隔符
/// </summary>
public string FollowedTitleSeparator { get; set; }
/// <summary>
/// 完整的标题模板,包含分隔符
/// </summary>
public string FullFollowedTitleTemplate { get; set; }
/// <summary>
/// 图文视频是否单独存放,否的话则按原类型存储位置存放,比如收藏夹、喜欢等
/// </summary>
public bool ImageViedoSaveAlone { get; set; }
/// <summary>
/// 自动去重-逻辑是遇到相同ID的视频直接跳过
/// </summary>
public bool AutoDistinct { get; set; }
/// <summary>
/// 去重优先级配置,json字符串格式存储
/// </summary>
[SugarColumn(Length = 500, IsNullable = true)]
public string PriorityLevel { get; set; }
/// <summary>
/// 是否下载动态图视频
/// </summary>
public bool DownDynamicVideo { get; set; }
/// <summary>
/// 仅同步新视频(github 有人提议增加这个配置项,因为之前收藏了很多烂七八糟的视频。不想同步,又不想一个一个清除)
/// </summary>
public bool OnlySyncNew { get; set; } = true;
/// <summary>
/// 是否合并下载动态图视频
/// </summary>
public bool MegDynamicVideo { get; set; }
/// <summary>
/// 保留原动态视频文件
/// </summary>
public bool KeepDynamicVideo { get; set; }
}
}
+52
View File
@@ -0,0 +1,52 @@
using SqlSugar;
namespace dy.net.model.entity
{
/// <summary>
/// 收藏夹-自定义收藏夹、合集、短剧
/// </summary>
[SugarTable(TableName = "dy_collect_cate")]
public class DouyinCollectCate
{
/// <summary>
///
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string Id { get; set; }
/// <summary>
/// 关联cookieId
/// </summary>
public long CookieId { get; set; }
/// <summary>
/// 收藏夹名称
/// </summary>
[SugarColumn(Length = 500, IsNullable = false)]
public string Name { get; set; }
/// <summary>
/// 收藏夹Id
/// </summary>
[SugarColumn(Length =60,IsNullable =false)]
public string XId { get; set; }
/// <summary>
/// 封面
/// </summary>
public string CoverUrl { get; set; }
/// <summary>
/// 保存文件夹
/// </summary>
public string SaveFolder { get; set; }
/// <summary>
/// 是否开启同步
/// </summary>
public bool Sync { get; set; }
/// <summary>
/// 收藏夹类型(0:自定义收藏夹,1:合集,2:短剧)
/// </summary>
public int CollectType { get; set; }
}
}
+119
View File
@@ -0,0 +1,119 @@
using SqlSugar;
namespace dy.net.model.entity
{
[SugarTable(TableName = "dy_cookie")]
public class DouyinCookie
{
[SugarColumn(IsPrimaryKey = true)]
public string Id { get; set; }
/// <summary>
/// 用户抖音ID,对应我关注信息里面的myself_user_id
/// </summary>
[SugarColumn(Length =500,IsNullable =true)]
public string MyUserId { get; set; }
/// <summary>
/// 用户描述
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 用户抖音Cookie
/// </summary>
[SugarColumn(Length =-1,IsNullable =true)]
public string Cookies { get; set; }
/// <summary>
/// 存储路径(收藏视频的存储路径)
/// </summary>
[SugarColumn(Length =255,IsNullable =true)]
public string SavePath { get; set; }
/// <summary>
/// 是否按收藏夹文件夹来存储视频
/// </summary>
public bool UseCollectFolder { get; set; }
/// <summary>
/// 是否下载合集
/// </summary>
public bool DownMix { get; set; }
/// <summary>
/// 是否下载短剧
/// </summary>
public bool DownSeries { get; set; }
/// <summary>
/// 1 开启同步 0 关闭同步
/// </summary>
public int Status { get; set; }
/// <summary>
/// 同步喜欢的视频需要sec_user_id
/// </summary>
[SugarColumn(Length =500,IsNullable =true)]
public string SecUserId { get; set; }
/// <summary>
/// 喜欢的视频存储路径
/// </summary>
[SugarColumn(Length =500,IsNullable =true)]
public string FavSavePath { get; set; }
///// <summary>
///// 最新收藏夹的分页页码
///// </summary>
//[SugarColumn(Length =500,IsNullable =true)]
//public string CollectMaxCursor { get; set; }
///// <summary>
///// 最新我喜欢的分页页码
///// </summary>
//[SugarColumn(Length = 500, IsNullable = true)]
//public string FavoriteMaxCursor { get; set; }
/// <summary>
/// 是否已经同步过了(就是是否是第一次同步) 0-未同步 1-已同步
/// 如果是0,则同步时会获取全部数据;如果是1,则同步时只获取最新的数据(也就是只查一次)
/// 接口可以将该值改为0,下次开始同步就会重新获取全部数据
/// </summary>
public int CollHasSyncd { get; set; }
public int FavHasSyncd { get; set; }
public int UperSyncd { get; set; }
/// <summary>
/// 关注的用户sec_user_id列表 json字符串存储
/// </summary>
//[SugarColumn(Length =-1,IsNullable =true)]
//public string UpSecUserIds { get; set; }
/// <summary>
/// Up主发布的视频存储路径
/// </summary>
[SugarColumn(Length = 500, IsNullable = true)]
public string UpSavePath { get; set; }
/// <summary>
/// 图片视频存储路径
/// </summary>
[SugarColumn(Length = 500, IsNullable = true)]
public string ImgSavePath { get; set; }
/// <summary>
/// 抖音返回的状态码,主要用于判断Cookie是否有效
/// 0 正常 8 - 用户未登录
/// </summary>
public int StatusCode { get; set; }
/// <summary>
///
/// </summary>
[SugarColumn(Length = 100, IsNullable = true)]
public string StatusMsg { get; set; }
/// <summary>
/// 是否统一一个路径(savepath)
/// </summary>
public bool useSinglePath { get; set; }
}
}
+76
View File
@@ -0,0 +1,76 @@
using Newtonsoft.Json;
using SqlSugar;
namespace dy.net.model.entity
{
[SugarTable(TableName = "dy_follow")]
public class DouyinFollowed
{
/// <summary>
///
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string Id { get; set; }
//[SugarColumn(IsNullable = false,Length =200)]
//public string UperId { get; set; }
/// <summary>
/// 博主sec_uid
/// </summary>
[SugarColumn(IsNullable = false,Length =500)]
public string SecUid { get; set; }
[SugarColumn(IsNullable = false, Length =200)]
public string UperName { get; set; }
[SugarColumn(IsNullable = true, Length =1000)]
public string UperAvatar { get; set; }
/// <summary>
/// 官方账号(企业认证)
/// </summary>
[SugarColumn(IsNullable = true, Length =200)]
public string Enterprise { get; set; }
/// <summary>
/// 是否开启同步
/// </summary>
public bool OpenSync { get; set; }
/// <summary>
/// 是否全量同步
/// </summary>
public bool FullSync { get; set; }
/// <summary>
/// 最后更新时间
/// </summary>
public DateTime LastSyncTime { get; set; }
/// <summary>
/// 我的userId,关注者的抖音userid
/// </summary>
[SugarColumn(IsNullable = false,Length =200)]
public string mySelfId { get; set; }
/// <summary>
/// 签名
/// </summary>
[SugarColumn(IsNullable = true,Length =500)]
public string Signature { get; set; }
/// <summary>
/// 同步文件保存路径
/// </summary>
[SugarColumn(IsNullable = true,Length =500)]
public string SavePath { get; set; }
/// <summary>
/// 博主Id
/// </summary>
[SugarColumn(IsNullable = true,Length =100)]
public string UperId { get; set; }
/// <summary>
/// 标记为非关注的用户-手动增加的
/// </summary>
public bool IsNoFollowed { get; set; }
}
}
+37
View File
@@ -0,0 +1,37 @@
using SqlSugar;
namespace dy.net.model.entity
{
/// <summary>
/// 重新下载的列表
/// </summary>
[SugarTable(TableName = "dy_rd_video")]
public class DouyinReDownload
{
/// <summary>
///
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string Id { get; set; }
/// <summary>
/// 原视频Id
/// </summary>
[SugarColumn(IsNullable =true,Length =50)]
public string ViedoId { get; set; }
/// <summary>
/// 原保存目录
/// </summary>
[SugarColumn(IsNullable =true,Length =1000)]
public string SavePath { get; set; }
public string CookieId { get; set; }
/// <summary>
/// 0-未下载 1-下载成功 2-下载失败
/// </summary>
public int Status { get; set; }
public DateTime CreateTime { get; set; }
public DateTime DownTime { get; set; }
public DateTime UpdateTime { get; set; }
}
}
+163
View File
@@ -0,0 +1,163 @@
using dy.net.extension;
using dy.net.model.dto;
using SqlSugar;
namespace dy.net.model.entity
{
[SugarTable(TableName = "dy_collect_video")]
public class DouyinVideo
{
/// <summary>
///
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string Id { get; set; }
[SugarColumn(Length =200,IsNullable =true)]
public string DyUserId { get; set; }
[SugarColumn(IsIgnore =true)]
public string DyUser { get; set; }
[SugarColumn(Length =200,IsNullable =true)]
public string CookieId { get; set; }
/// <summary>
/// aweme_id
/// </summary>
[SugarColumn(Length =200,IsNullable =true)]
public string AwemeId { get; set; }
public DateTime SyncTime { get; set; }
public DateTime CreateTime { get; set; }
/// <summary>
/// 视频标题
/// </summary>
[SugarColumn(Length =2000,IsNullable =true)]
public string VideoTitle { get; set; }
/// <summary>
/// 如果配置文件 UperFileNameUseViedoTitle=true
/// 简化后的标题 默认空 只有关注的博主的 视频会存储该字段,实际UP主的视频文件名是 VideoTitleSimplify + VideoTitleSimplifyPrefix
/// </summary>
[SugarColumn(Length =500,IsNullable =true)]
public string VideoTitleSimplify { get; set; }
/// <summary>
/// 精简标题的前缀 默认空,其实就是序号,类似 001-,002-
/// </summary>
[SugarColumn(Length =50,IsNullable =true)]
public string VideoTitleSimplifyPrefix { get; set; }
/// <summary>
/// 标签(分类)
/// </summary>
[SugarColumn(Length =200,IsNullable =true)]
public string Tag1 { get; set; }
/// <summary>
/// 标签(分类)
/// </summary>
[SugarColumn(Length =200,IsNullable =true)]
public string Tag2 { get; set; }
[SugarColumn(Length =200,IsNullable =true)]
public string Tag3 { get; set; }
///// <summary>
///// 视频描述
///// </summary>
//public string VideoDesc { get; set; }
/// <summary>
/// 视频地址(解析会有多个取第一个)
/// </summary>
[SugarColumn(Length =2000,IsNullable =true)]
public string VideoUrl { get; set; }
/// <summary>
/// 视频下载后保存路径
/// </summary>
[SugarColumn(Length =2000,IsNullable =true)]
public string VideoSavePath { get; set; }
/// <summary>
/// 视频封面地址
/// </summary>
[SugarColumn(Length =2000,IsNullable =true)]
public string VideoCoverUrl { get; set; }
/// <summary>
/// 视频封面保存路径
/// </summary>
[SugarColumn(Length =2000,IsNullable =true)]
public string VideoCoverSavePath { get; set; }
/// <summary>
/// 作者
/// </summary>
[SugarColumn(Length =200,IsNullable =true)]
public string Author { get; set; }
/// <summary>
/// 作者ID
/// </summary>
[SugarColumn(Length =200,IsNullable =true)]
public string AuthorId { get; set; }
/// <summary>
/// 作者头像
/// </summary>
[SugarColumn(Length =2000,IsNullable =true)]
public string AuthorAvatar { get; set; }
[SugarColumn(Length =2000,IsNullable =true)]
public string AuthorAvatarUrl { get; set; }
/// <summary>
/// 文件hash值唯一值
/// </summary>
[SugarColumn(Length =200,IsNullable =true)]
public string FileHash { get; set; }
/// <summary>
/// 文件大小(字节)
/// </summary>
[SugarColumn(Length =200,IsNullable =true)]
public long FileSize { get; set; }
/// <summary>
/// 分辨率(如1920x1080, 3840x2160等)
/// </summary>
[SugarColumn(Length =200,IsNullable =true)]
public string Resolution { get; set; }
/// <summary>
/// 作者发布视频日期
/// </summary>
[SugarColumn(IsIgnore = true)]
public string createTimeStr => CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
[SugarColumn(IsIgnore = true)]
public string SyncTimeStr => SyncTime.ToString("yyyy-MM-dd HH:mm:ss");
/// <summary>
/// 1喜欢的,2收藏的,3关注的 ,4 图片视频
/// </summary>
[SugarColumn(Length =200,IsNullable =true)]
public VideoTypeEnum ViedoType { get; set; }
/// <summary>
/// 是否合成视频
/// </summary>
public int IsMergeVideo { get; set; }
[SugarColumn(IsIgnore = true)]
public string ViedoTypeStr => ViedoType.GetDescription();
[SugarColumn(IsIgnore = true)]
public string ViedoCate =>(string.IsNullOrWhiteSpace(Tag1) ? "" : Tag1) + "/" + (string.IsNullOrWhiteSpace(Tag2) ? "" : Tag2);
// 普通字符串字段,显式标记为 SQLite TEXT 类型
[SugarColumn(ColumnDataType = "TEXT", Length = -1,IsNullable =true)]
public string DynamicVideos { get; set; }
/// <summary>
/// 是否仅下载图片或仅下载音频
/// </summary>
public bool OnlyImgOrOnlyMp3 { get; set; }
}
}
+29
View File
@@ -0,0 +1,29 @@
using SqlSugar;
namespace dy.net.model.entity
{
/// <summary>
/// 永久删除的视频记录-不再下载
/// </summary>
[SugarTable(TableName = "dy_delete_video")]
public class DouyinVideoDelete
{
/// <summary>
///
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string Id { get; set; }
/// <summary>
/// 原视频Id
/// </summary>
[SugarColumn(IsNullable =true,Length =50)]
public string ViedoId { get; set; }
public DateTime DeleteTime { get; set; }
[SugarColumn(IsNullable =true,Length =1000)]
public string VideoTitle { get; set; }
[SugarColumn(IsNullable = true, Length = 1000)]
public string VideoSavePath { get; set; }
}
}