2 Star 6 Fork 0

Vincez / LMS-图书借阅系统-GO-GIN-GORM

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

基于Gin + Gorm - LMS图书借阅后端系统

基于Gin + Gorm 后端的图书借阅系统。Restful风格。

使用到了gingormswaggerzapviper

集成jwt鉴权Redis缓存MySql

可根据系统版本号,自动初始化SQL数据。

该项目是一个基础项目,可以自行扩展更多功能。

系统架构

系统架构图

系统架构图

目录结构

├── api             (api层)
│   └── v1          (v1版本接口)
├── config          (配置包)
├── constant		(常量)
├── core            (核心文件)
├── docs            (swagger文档目录)
├── global          (全局对象)                    
├── initialize      (初始化)                        
├── middleware      (中间件层)                       
├── model           (模型层)                    
│   ├── request     (入参结构体)                     
│   └── response    (出参结构体)                     
├── routes          (路由层)                    
├── service         (service层)                    
├── source          (source层)  
│   └── sql_init	(sql初始化脚本)
│       └── v1.0 	(v1.0版本的初始化脚本)
├── unit_test    	(单元测试)
└── utils           (工具包)                    
├── config-default.yaml
├── config-dev.yaml
├── config-docker.yaml
├── Dockerfile
├── go.mod
├── LICENSE
├── main.go			(程序启动入口)
├── Makefile
└── README.md

主要功能

  • 用户管理:用户信息的增、删、改、查。账户的角色信息的修改。登录、退出功能。
  • 角色管理:角色信息的增、删、改、查。
  • 授权管理:基于JWT实现授权(权限)管理。
  • 图书管理:图书信息的增、删、改、查。
  • 借阅管理:图书借阅信息的增、删、改、查。
  • 分页封装:图书、借阅、用户信息查询通过分页查询。
  • 条件搜索:根据条件进行数据的搜索。

API介绍

LMS API 接口文档

API 概览

系统相关接口

详情:系统相关接口

请求方式 接口 功能
POST /login 登录
POST /logout 退出登录
POST /register 账户注册

用户管理相关接口

详情:用户管理相关接口

请求方式 接口 功能
GET /user/self 查询用户信息
PUT /user/self 更新用户信息
POST /user/self 更改密码

角色相关接口

详情:角色相关接口

请求方式 接口 功能
GET /role/list 获取角色信息列表
PUT /role/ur 更改用户角色
POST /role 添加角色信息
PUT /role 修改角色信息
DELETE /role 删除角色信息

图书管理相关接口

详情:图书管理相关接口

请求方式 接口 功能
PUT /book 更新图书
POST /book 添加图书
DELETE /book 删除图书
GET /book/list/publisher 获取所有出版社名称
GET /book/list/search/:page 根据条件查询图书列表
GET /book/list/:page 分页查询图书列表

借阅管理相关接口

详情:借阅管理相关接口

请求方式 接口 功能
PUT /lr 更新借阅信息
POST /lr 添加借阅信息
DELETE /lr 删除借阅信息
PUT /lr/hs 还书
GET /lr/list/search/:page 根据条件查询
GET /lr/list/:page 获取借阅信息列表

配置介绍

启动参数

启动参数读取优先级:传参 > 启动参数 > 环境变量 > Env配置

传参:main.gocore.Viper(传参指定配置文件)

环境变量:配置LMS_CONFIG 指定配置文件

ENV配置:在 constant/configConstant.goENV常量设置

参数
-conf 指定yaml配置文件。

在系统启动时:

  • 若已编译成二进制可执行文件指定配置文件:

    ./lms_server -conf config-docker.yaml
  • GOLAND编译器指定配置文件:

    image-20230203173709146

CONFIG YAML配置

配置文件:config-[type].yaml

SYSTEM

KEY 描述
name 表示本系统的名称,可自定义
version 鉴别本系统的版本。影响sql的初始化。根据该版本号在程序启动时,会查看数据库是否存在该版本号记录,如不存在则会执行./source/sql_init目录下对应版本号的sql初始化脚本。
db-type 用于指定使用的数据库。本系统仅支持mysql。可databaseInit.go文件自行扩展支持其他数据库。
router-prefix api访问的前缀。
transfer-pw-decode http传输的登录密码是否需要解密。默认:false(即传入系统的密码是明文)

IPS:

  • transfer-pw-decode

    若为true,可传以下json进行登录

    {
        "username":"admin",
        "password":"MTI1zNDUp2oCiA=",
        "loginTime":"2023-01-31T13:58:18+08:00"
    }

    http传入系统的加密解密方式逻辑可参考:utils/hashUtils.go:PasswordDecode()

    解密逻辑: 后台更具loginTime时间进行计算。计算规则为:小时%10取余,分钟%100取余,秒%10取余,获取的数进行从小到大排序,将其看成索引,将password对应索引位置的字符元素删除之后形成的字符串就是正确的base64码,然后进行base解码。

    tips: 本加密解密逻辑非常简单,不适合正式场景的使用。需要自行制定修改前后端传输密码的加密解密逻辑。

GIN

KEY 描述
PORT 指定web服务启动端口

JWT

KEY 描述
signing-key 签名密钥
expires-time jwt多久过期。可设置天数d,小时h。如:一天则1d,一小时则1h
buffer-time jwt缓冲时间可设置天数d,小时h。如:一天则1d,一小时则1h
issuer 签发者

ZAP

KEY 描述
level 日志等级。debug info warn error dpanic panic fatal 默认debug
gorm-level gorm日志等级。info warn error silent 默认 info
format 日志输出格式。可选 consolejson,默认 console
path 日志存放路径。
prefix 日志打印前缀。
log-in-console 日志是否打印到console

TIPS:

zap引入file-rotatelogs按天切割日志,需注意:按时间切割效率与按文件大小切割相比低且不能保证日志数据不被破坏

REDIS

KEY 描述
db 指定存入的库
addr ip:port
password 密码

MYSQL

KEY 描述
ip ip地址
port 端口号
db-name 数据库名
username 用户名
password 密码
charset 字符
max-idle-conns 最大空闲数
max-open-conns 最大连接数
log-mode 日志模式
log-zap -

快速使用

GOLAND编译器运行

将代码克隆下来之后,按照配置介绍相关信息自行进行配置。

启动后访问http://127.0.0.1:8081/api/v1/swagger/index.html即可。

DOCKER部署运行

本步骤使用环境:CENTOS 8.0

TIPS:项目克隆下来之后建议先修改config-docker.yaml文件的配置信息,若不修改镜像制作好之后启动由于config-docker.yaml配置错误会报错启动不起来,后续还是要在数据卷中去修改config-docker.yaml

  • 将项目克隆到自己制定的文件夹下,执行

    docker build -f ./Dockerfile -t lms:v1.0.0 .

    完成之后,会提示成功的提示

  • 查看docker镜像列表

    docker images

    此时就有了lms的镜像:

    image-20230203181425924

  • 创建数据卷(可选)

    # 创建名为lms_volume的数据卷
    docker volume create lms_volume
    
    # 查看所有数据卷列表
    docker volume ls

    image-20230203181916344

    TIPS :如果没有创建数据卷,那么会在docker目录下自动生成绑定数据卷。一般自动生成的数据卷挂载路径为:/var/lib/docker/volumes/ 该目录下

  • 启动lms镜像

    docker run -d -p 8888:8888 -v lms_volume:/go/src/github.com/lms --name lms_server [image id]

    TIPS:若没有创建数据卷,则启动命令为:

    docker run -d -p 8888:8888 --name lms_server [image id]
  • 查看镜像启动状态

    docker ps -a

    STATUS显示EXIT退出或者没有成功启动。可以到对应的数据卷进行查看日志或修改config-docker.yaml文件配置。

    image-20230203182918657

    再重启lms_server容器

    # 重启命令
    docker restart [容器id]
  • 容器启动成功访问:http://ip:8088/api/v1/swagger/index.html

启动成功展示页

image-20230203183029821

其他问题

如果启动之后访问不了,建议查看防火墙是否放开8888端口。

特别鸣谢


学习资料 & 相关文档:


感谢 JetBrains 为本开源项目提供免费的 IntelliJ GoLand 授权

img

Copyright (c) 2023 Vincez

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

GO语言,基于gin+gorm搭建的开发基础后端接口平台。使用到了swagger,zap,viper,gin,gorm。集成jwt鉴权,Redis缓存。根据系统版本号,自动初始化sql数据。该项目是一个基础项目,可以自行扩展更多功能 展开 收起
Go 等 3 种语言
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/turbo30/lms.git
git@gitee.com:turbo30/lms.git
turbo30
lms
LMS-图书借阅系统-GO-GIN-GORM
master

搜索帮助