昨天我们实现了用户相关的接口,今天我们来实现文章相关的接口
项目地址:
由于我是先实现完再写的这篇文章,如果有些地方无法运行,可以看下我项目里的代码。
目前我还在往全栈的方向学习,所以如果看的不顺眼,请多多包涵。如果觉得那里可以改进,麻烦评论区说下,谢谢~
增和改的逻辑基本上都是一样的,所以复用同一个接口即可。
我们现在src
文件夹下创建article
文件夹,然后在里面分别创建四个文件
注意这里的db_service
以及route
和auth
里的名字是一样的,但是并不会有冲突,因为它们都只会用在文件夹里面。
然后我们在mod.rs
中引入它们
接着我们先去到type/mod.rs
中新增一个类型,这个类型用于存储token
里用户的id
,这么做是为了校验是否是作者本人。如果不是,直接扔给400
。
然后我们为增/改新增一个类型
SetArticleData
:这个用来和post
传输过来的form
对应。SetArticleDataState
:这个作为Response
时和RtData
组装的类型。这里我只返回修改的时间。然后回到route.rs
中直接上代码
代码稍微有些长,但是非常好理解。
就是拿到数据后组装md
文件的存储路径,将它存储在src
同级的md
文件夹里,以md/${author_id}/${article_id}
作为路径。
如果id
不为空,那么就是set
,否则为add
。add
的场景会创建新的.md
文件。
我们来实现这里的save_article
,回到article/db_service
里面
在这一步创建时间戳,表示最后的修改时间,插入/修改成功之后返回modify_time
。
然后我们去到file_operate
文件中
方法很简单,就是对文件的读和写,如果中间过程出错直接return Err(500)
。
然后我们去到main.rs
中注册
第一步我们需要登录,拿到_token
再进行下一步新增文章
拿到token
之后放到Header
的_token
字段中。
然后我们再调用/user/set_article
然后回过头来看文件夹中多了一个.md
文件
那么插入就成功了,如果不放心,可以去数据库里看下
然后我们再来测试下修改
把id
也带上
测试正常
删除的就比较简单了
我这里只是删除该id
在数据里的索引,文章内容还是保留着。
当然,还是得判断是否是同一个用户。
去到article/db_service
中
先查询下对应的文章是否是改用户写的,然后再删除这一列。
别忘了去注册路由,我这里就不贴代码了。
记得先拿到_token
我们看下数据库里是否还存在该条信息
可以看到没了
老样子,这个也是需要获得用户的id
用于匹配是否是作者本人,这样我们可以判断该用户是否可以对文章进行编辑
我们先实现文章细节的类型,去到article/mod.rs
中
这一套轻车熟路,就不用我都说了。
然后我们回到article/route
中实现路由
然后去到article/db_service
中
另外db/mod.rs
中补充下一些内容
对于一些常用类型的封装
别忘了去注册路由~
。。。刚刚就不应该先测试删除的。。。
这样就只能重复 登录 -> 新增 的操作了。
获取成功
这个接口我们可以和/
根路径接口重合,根路径重定向去到我们的分页查询路由
老样子,我们先补充下类型,去到type/mod.rs
然后回到我们的路由文件
对于/
路径,直接Redirect
[1]到get_article
路径
然后去到db_service
中
如果all
为true
,则分页查询,如果all
为false
,id
不为空,则查询单个。
呃。。。这个函数有些问题。。。对于查询单个的场景没有做limit
移除处理。。。只能由前端自行调整了。
另外有个点需要注意,那就是只有is_publish
为true
的文章才能被这个接口查询到。
而is_publish
为false
则表示是草稿状态。
注册完之后我们来测试下
获取单个
获取多个
正常。
这个主要是用在搜索栏里的,这个东西要搞可以搞到非常非常复杂,比如深度神经学习、大数据什么的。。
而我这里只是个demo
,简单的通过字符串匹配
老规矩先上类型,article/mod.rs
中
然后回到route.rs
中
然后db_service
这里根据的是pgsql
提供的%[key]%
来模糊查询
正常
那么到这里就差不多了,这一个demo
主要是带大家(包括我自己)入门以及熟悉下rust
代码的编写
实际上很多东西我都没有去实现,比如:
log
日志RtData
的类型太多了,导致重复的实现太多了,实际上可以整合成一个枚举类型redis
io
操作,每次set/add
都是io
操作,这样会有很大的性能问题sql
语句优化最后如果你觉得这些文章对你有帮助,请务必点个赞~
吐槽:卧槽了,公司项目的重构是真的恶心,本来还以为能划水,现在搞得还不如做需求呢。。。
发布于 2023-06-07 18:01・IP 属地广东