Skip to content

Latest commit

 

History

History
190 lines (118 loc) · 5.99 KB

README.md

File metadata and controls

190 lines (118 loc) · 5.99 KB

uhihz

👀简介

基于gin框架实现的婴儿级知乎后端

功能

用户

  • 登录与注册
  • 修改个人信息(如用户名,个性签名)
  • 可以对文章、问题登进行点赞
  • 查看自己的提问、回答、收藏

问答

  • 能够发布问题并进行管理
  • 可以发布并修改自己的回答
  • 可以对评论进行回复和点赞

文章

  • 可以发布文章并进行管理
  • 可以回复和点赞评论

项目结构🎨

├── app ----------------------------- (项目文件)
    	├── api ------------------------- (api层)
    		├── article ------------------ (关于文章的api)
    		├── user ------------------(关于用户的api)
    		├── question -------------------- (关于提问的api)
    	├── global ---------------------- (全局组件)
    	├── internal -------------------- (内部包)
    		├── middleware -------------- (中间件)
    		├── model ------------------- (模型)
    		├── service ----------------- (服务层)
    	├── router ---------------------- (路由层)
    ├── boot ---------------------------- (项目启动包)
    ├── utils --------------------------- (工具包)
    	├── jwt ---------------------------(jwt使用)

🚲技术栈

img

Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本。具有快速灵活,容错方便等特点。

只会这个😂

img

  • MySQL

由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一

img

  • Redis

使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库

img

  • JWT

  • SON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。

后端

Token

  • 使用 **"github.com/golang-jwt/jwt/v4"**包,用自定义声明和自定义密钥来为用户颁发Token

    type CustomClaims struct {
       //额外保存用户id
       Uid int
       jwt.RegisteredClaims
    }
    
  • 后续的处理处理函数可以取出Token中存储的信息

问答

  • 缓存问题相关数据

在redis存储问题的点击数、回答数、被点赞数,减少与mysql的交互

key := fmt.Sprintf("question:%s", strconv.Itoa(qid))
filed := "answerNum"

g.Redis.HIncrBy(ctx, key, filed, int64(incr))

文章

  • 缓存相关数据

和问答一样,把一些会高频更新的数据存在redis里

评论和回复

  • 模仿贴吧的评论模式,分为评论和回复,回复别人的评论时会显示被回复者id(用户名)

image-20230118155011012

🐱‍👓存储设计

表设计

  • user:记录用户信息

image-20230118155414461

  • article:记录文章信息

image-20230118155508093

  • question:记录提问信息

image-20230118155539658

  • article_comment:记录文章下评论信息

image-20230118155704527

  • answer_comment:记录提问下回答和评论信息

image-20230118155721309

  • article_collection:记录用户收藏文章

image-20230118155759755

用户id和文章id组成联合主键,避免重复收藏

📮缓存设计

提问缓存

image-20230118205351081

用hash来存储高频更新的字段(点赞数,点击数,评论数)

文章缓存

同提问缓存

点赞缓存

用set存对文章、评论、提问、回答进行点赞的用户id,避免重复点赞 image-20230118214805616 image-20230118214826301

🔎完成情况总结

  • 基础功能完成
  • 加分项实现了密码加密;用户状态保存使用JWT;在文章和提问的一些情境下使用缓存;SQL语句做预处理防止sql注入

👓TODO

  • 注册登录
  • 发布问题
  • 发布文章
  • 回答问题
  • 评论系统
  • 获取用户基本信息
  • 修改个人信息(密码,用户名)
  • 收藏文章
  • 获取自己的提问、文章、回答
  • 管理自己的提问、文章、回答
  • 绑定邮箱
  • 热榜
  • 关注
  • 通知
  • 搜索

📕API文档

乎知 - Powered by Apipost V7