Palette: #F4E285 #F4A259 #7A4419 #755C1B
[ ] I need to fix the broken APIs, using serverless functions
- Likes
- Search words
- API1 - everytime XX is searched, inc
- API2 - read all search words and sort and show
[x] chapter要加数量呀 [x] dev env
- 本地nginx, 能跑起来, 有数据 (archives.json也用本地版本)
- 点赞数, 要有接口. 要起lanting-server (mysql). 有没有不用的办法... 好像没有. 也可以放弃点赞这个功能
- search keywords, 有接口
- Create & Update
- 电脑上, 用git + mysql机制: single-file -> comment -> yarn archives:compile -> yarn archives:add
- 手机上, 用tribute页面: https://lanting.wiki/lanting/tribute -> lanting-server
[x] commit mgs prefix [x] 原文图标需要一点空格 [x] 标签, 有一个空 [x] 原文 for Book, 用豆瓣页面吧 [x] Work on server [x] New get latest id [x] 接口很慢. 不要等接口, 先展示 (按ID倒序), 然后re-sort [x] compile archives, 在更新archives.json的时候, 得用DB的origs. 不是本地. 要不然服务器端根本对不了
[x] 日期特殊排序
[x] 自己的tag排序
[x] archives就把数据理好
[x] 文章排序? 用星期做种子乱序! -> timestamp + likes
[x] 芦柑笔谈 in menu
[x] 评分功能, 所有东西进DB吧, DB可以commit进来. mongo适合点?
[x] 评分优化性能
[x] 评分筛选
[x] 重做redux tree design. 只存在一个地方, 一个大map. 其他地方记ID, 不记数据. map的subtree给很多地方
[x] 单个article link, title就link到single page
[x] 渲染两次问题?? -> 好像没有这个现象了?... 第一次渲染之后就有东西了?
[x] 加上ID, 灰一点
-
页面上很多input, 不用用户全都手动填
-
首先最重要的是第一个field, link. 填了link之后, onblur (也就是lose focus), 就来调我一个后端接口,
https://lanting.wiki/api/user/tribute/info?link=https://xxxxxx
. 后端会返回
{
"status": "success",
"code": "",
"data": {
"title": "某某标题",
"author": "某某作者",
"publisher": "某某报社",
"date": "2016-12"
}
}
-
注意如果某个字段没提取出来, 会给null. 比如
title: null
. 另外注意date是一个string, 格式yyyy-mm
-
这时候, 把收到的几个字段, 如果有值, 就填到下面. 如果没值就没办法了, 留空
-
用户会填好其他几个field. 都是string就行, 我后端会处理格式
-
填好之后, 发一个post request,
https://lanting.wiki/api/user/tribute/save
, body里面带着所有field. 完美, 完事
[x] 批量导入现有的, 所有的过一遍 (这里不需要建comments) [x] 批量导入evernote但是没有comments的 (这里需要建comments) [x] 浏览器里右键save singlefile [x] 之后如果微信等需要存, 就做一个接口. headless browser + singleFile CLI 以上两个都需要同时建comments, 尽量抽metadata
[x] orig肯定要放public了 [x] 生成archive.json放assets [x] 随园食单不要直接import了, fetch, 就可以也放到public
[x] 整个变成一个vault, 应该没问题, 编辑的时候也OK
[x] 放在archive.json, 什么后缀名 [x] 从public读, 链接先直接跳到orig, 以后考虑iframe?
兰亭 - 兰亭文存 芦柑 - 芦柑笔谈 异端 - 异端年刻
Heresy Anthology Lanting Florilegium Soda Manuscripts
两个用例: 微信上存链接 - 公众号. 电脑上打开页面 - chrome extension [x] 把 joplin 插件代码找到 [x] 还是存到本地不变, 路径变一下, 文件名变一下只需要 ID. ID 哪里来? 去 repo 查. 不要打本地, 打接口, 然后本地 pull 吧 [x] 从第一行解析出标题, 试图解析出 metadata, 解析最后 metadata 里有用的部分. 建对应的 orig 和 comment, metadata都放comment, 都进入compile流程. 通过 ID 来对应. 有了就不建, 等于是补全.
综合webclipper, 第一图片怎么处理, 第二css是不是OK, 第三下下来之后触发什么
[x]批量现有的导过来 [ ] archive.json会不会越来越大. 如果会, 就把remarks字段也用fetch. 前X个char在archives.json, 展开的时候fetch. 怎么判断有没有更多 (除了加property, flag)? 看字数行不行. 如果现在的是小于50, 比如49. 就没有. 如果50整, 就有. 怎么解决刚好50的comment? 我能想到的只有砍掉一个char... 哦! 有主意了. 加一个. 弄成51个. 所以凡是[1, 49], [51, Inf], 都是不用展开的
- 加一个API, 用于获取一个文章的full comment. 如果之前拿到的是前50个char, 就可以用这个API来获取
- 这样的话搜索就不能用前端, 需要走后端接口了. 后端返回的东西会有点复杂. 还要highlight, 有点麻烦了
[x] compile-archives产出一个 json, metadata [x] 少了一些字段, 等orig好了才能好. 还有就是找不到没有的情况 [x] 实际量大的数据主要去实际.md 里面找
分页的话也要给文本搜索框, 不分页先不要
不喜欢立刻生效的, 可以给个选了tag之后的确认按钮
[x] 缩上去, 放上面
[x] 照着抄先. 给个评星功能? [x] 分chapter [x] 本纪 [x] 随园食单
[x] 包, 小小小 [x] 按需加载, archives.json不打包
[x] ant card body [x] padding: 16px 0;
[x] collapse header [x] padding: 0; [x] font-size: 20px; [x] line-height: 1;
重来一遍. 又是当初几个步骤. 等于是ver2.0:
- add
- 现有的文章的迁移
- 从PC上, 添加文章
- 从Mobile上, 添加文章
- save 两种形式
- 一种是存好的html文件, 上传html + 发送metadata, 服务端会把html文件再上传到OSS (并正确命名), 然后metadata + OSS链接存到mysql里. 然后更新archives json obj缓存
- 一种是没有存好的html, 发送原url + 发送metadata, 服务端会先存好html, 然后把html文件再上传到OSS (并正确命名), 然后metadata + OSS链接存到mysql里. 然后更新archives json obj缓存
- data structure
- 在mysql, 有一个表. 数据可以需要经常备份经常dump
- 主表是archives表
- 还需要tag表, author表, publisher表. 把现有数据导进去作为示例, 就能理解看懂了
- 在mysql, 有一个表. 数据可以需要经常备份经常dump
- query
- 上来就处理好一个archives json obj, 存在内存里, 用于发给前端
把现在的metadata装到一个表里. 把静态文件的部分存一个链接或者说是object id, 能去云服务里找到
html静态文件的部分, 存到object store一类的里面. 设为private, 访问的时候用access key -> 或者public, 也行
不管是本地还是远程, 还是手机, 都用网页来存. 存了的网页可以preview, 如果preview结果不对, 允许手动上传 (还允许上传多个) 存的时候摒弃现在的git commit的方式, 而是做 上传 -> mysql -> OK 这样ID也是从数据库来
为了前端速度, 现在还是可以打包到前端. 也就是 mysql -> 生成一个json -> 打到包里
走API吧, 保证最新
上传源文件到 OSS. repo 里也存一份只用来存档, 来判断有没有, 页面直接拼 URL -> 可以! markdown这边, 改下代码想办法让图片跟markdown塞在一起吧 -> 用OSS那份非https的?
- 连上mysql (没在navicat里面加过, 怀疑可能bind 127 IP). 晚点可以再关了, 现在不用
- 备份数据库的routine (用scheduled task + 上传OSS)
OSS / CDN会有https的问题, 怎么办? 因为阿里云如果要上https, 需要每三个月上传我的certbot证书. 或者也许阿里云有更新证书的API, 但是调起来比较麻烦吧. 可以用nginx做反向代理, 不改url的那种. 但是这样速度上可能慢, 不是跟没搞一样吗. 唯一一个是数据源唯一了. 不行, 还是买阿里云证书吧... 烦哦没有https问题... 允许跨域就行了- 建表. 我知道可以加索引, 懒还没加
[x] compile archives.json的时候, orig不能走本地了. 走DB
想想步骤和需要的改变
- 所有archive, orig + archives.json
- 所有代码, 就上传build / dist就可以了
发布流程 (代码):
- yarn deploy -> build, index.html上ec2, 剩下上oss
添加流程PC:
- 用旧流程保存html, 到origs. 保存comments
- 跑yarn archive:compile, 还是会更新archives.json, 会添加comments, 但是不会加orig. 因为gitignore了
- yarn archive:upload, 会上传所有. 然后deploy那里的routine不会上传, 因为dist里只会复制2个文件. 这样, 就对了. 代码和archive data分开了. 加archive的时候, 上传archive; 改代码的时候, 上传代码. 只是上传dest位置混在一起罢了