gorm+gin 教务管理系统
搭建环境
gin框架下载
go get -u github.com/gin-gonic/gin 下载gin框架
gorm框架下载
go get gorm.io/driver/mysql
go get gorm.io/gorm
数据库搭建
create database school_go default charset=utf8;
创建指定数据库用户
create user "123" identified by '123';
grant all privileges on school_go.* to '123'@'%';
flush privileges;
拆分业务
根目录下新建main.go函数 作为项目总入口
package main
import "main/router"
func main() {
r := router.Router()
_ = r.Run("0.0.0.0:8080")
}
在根路径下创建router目录
里面新建app.go文件
package router
import (
"github.com/gin-gonic/gin"
"main/service"
)
func Router() *gin.Engine {
router := gin.Default()
router.GET("/ping", service.Ping)
return router
}
在根路径下创建service目录 业务逻辑就写在这里
package service
import "github.com/gin-gonic/gin"
func Ping(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LKwe5n5y-1682330141324)(教务管理系统.assets/image-20230420174809720.png)]
设计数据库
连接数据库
在根目录下新建一个models目录
里面新建一个init.go文件 用来连接数据库
package models
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
func init() {
username := "123" //账号
password := "123" //密码
host := "127.0.0.1" //数据库地址,可以是Ip或者域名
port := 3306 //数据库端口
Dbname := "school_go" //数据库名
timeout := "10s" //连接超时,10秒
// username:password@tcp(127.0.0.1:3306)/gorm?
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s",
username, password, host, port, Dbname, timeout)
//连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("连接数据库失败, error=" + err.Error())
}
// 连接成功
DB = db
}
设计数据库表结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TNFjiLdx-1682330141325)(教务管理系统.assets/image-20230424170931797.png)]
在models中新建这样的文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DqEE2jjD-1682330141326)(教务管理系统.assets/image-20230421152349705.png)]
class.go
package models
import "gorm.io/gorm"
// 班级表
type Class struct {
gorm.Model
Name string `gorm:"type:VARCHAR(16);COMMENT:班级名称" json:"name" form:"name"`
Students []Student `gorm:"foreignKey:class_id;references:id" `
Course_selections []Course_selection `gorm:"foreignKey:class_id;references:id"`
}
course.go
package models
import "gorm.io/gorm"
// 课程表
type Course struct {
gorm.Model
Name string `gorm:"type:VARCHAR(16);COMMENT:课程名" json:"name" form:"name"`
Hour int `gorm:"type:INT;COMMENT:学时" json:"hour" form:"hour"`
Credit int `gorm:"type:INT;COMMENT:学分" json:"credit" form:"credit"`
Course_selections []Course_selection `gorm:"foreignKey:course_id;references:id" json:"course_selections"`
}
course_selection.go
package models
import "gorm.io/gorm"
// 选课表
type Course_selection struct {
gorm.Model
Positon string `gorm:"type:VARCHAR(32);COMMENT:上课地点" json:"position" form:"position"`
Time string `gorm:"type:VARCHAR(32);COMMENT:上课时间" json:"time" form:"time"`
Class_id uint `gorm:"tpye:BIGINT;COMMENT:外键关联班级表" json:"class_id" form:"class_id"`
Course_id uint `gorm:"tpye:BIGINT;COMMENT:外键关联课程表" json:"course_id" form:"course_id"`
Teacher_id uint `gorm:"tpye:BIGINT;COMMENT:外键关联教师表" json:"teacher_id" form:"teacher_id"`
Exam Exam `gorm:"foreignKey:course_selection_id;references:id" json:"exam"`
Grades []Grade `gorm:"foreignKey:course_id;references:id" json:"grades"`
}
department.go
package models
import "gorm.io/gorm"
// 部门表(系表)
type Department struct {
gorm.Model
Name string `gorm:"type:VARCHAR(16);COMMENT:二级学院名称" json:"name" form:"name" binding:"required"`
Location string `gorm:"type:VARCHAR(32);COMMENT:地址" json:"location" form:"location"`
Professionals []Professional `gorm:"foreignKey:Department_id;references:id" json:"professionals" `
Teachers []Teacher `gorm:"foreignKey:Department_id;references:id" json:"teachers" `
}
exam.go
package models
import "gorm.io/gorm"
// 考试安排表
type Exam struct {
gorm.Model
Exam_data string `gorm:"type:DATE;COMMENT:考试时间 格式:2023-03-24" json:"exam_data" form:"exam_data"`
Start_time string `gorm:"type:TIME;COMMENT:开考时间 格式:2023-04-24 12:26:53" json:"start_time" form:"start_time"`
End_time string `gorm:"type:TIME;COMMENT:结束时间 格式:2023-04-24 12:26:53" json:"end_time" form:"end_time"`
Position string `gorm:"type:VARCHAR(32);COMMENT:考点" json:"position" form:"position"`
Course_selection_id uint `gorm:"type:BIGINT;COMMENT:外键关联课程选择表" form:"course_selection_id"`
}
grade.go
package models
import "gorm.io/gorm"
// 成绩表
type Grade struct {
gorm.Model
Score int `gorm:"type:INT;COMMENT:得分" json:"score" form:"score"`
Student_id uint `gorm:"type:BIGINT;COMMENT:外键关联学生表" json:"student_id" form:"student_id"`
Course_id uint `gorm:"type:BIGINT;COMMENT:外键关联选课表" json:"course_id" form:"course_id"` //关联的是选课表
}
professional.go
package models
import "gorm.io/gorm"
// 专业表
type Professional struct {
gorm.Model
Name string `gorm:"type:VARCHAR(16);COMMENT:专业名;" json:"name" form:"name"`
Department_id uint `gorm:"type:BIGINT;COMMENT:外键关联部门表" json:"department_id" form:"department_id"`
Students []Student `gorm:"foreignKey:professional_id;references:id" json:"students"`
}
student.go
package models
import "gorm.io/gorm"
// 学生表
type Student struct {
gorm.Model
Name string `gorm:"type:VARCHAR(16);COMMENT:姓名;" json:"name" form:"name"`
Age int `gorm:"type:TINYINT(3);COMMENT:分类id;" json:"age" form:"age" `
Gender int `gorm:"type:TINYINT(1);COMMENT:性别 0-女 1-男 " json:"gender" form:"gender"`
Class_id uint `gorm:"type:BIGINT;COMMENT:外键关联课程表" json:"class_id" form:"class_id"`
Professional_id uint `gorm:"type:BIGINT;COMMENT:外键关联专业表" json:"professional_id" form:"professional_id"`
Grades []Grade `gorm:"foreignKey:Student_id;references:ID" `
}
teacher.go
package models
import "gorm.io/gorm"
// 教师表
type Teacher struct {
gorm.Model
Name string `gorm:"type:VARCHAR(16);COMMENT:教师名" json:"name" form:"name"`
Age int `gorm:"type:TINYINT(3);COMMENT:年龄" json:"age" form:"age"`
Education string `gorm:"VARCHAR(32);COMMENT:学历" json:"education" form:"education"`
Title string `gorm:"VARCHAR(16);COMMENT:职称" json:"title" form:"title"`
Gender int `gorm:"TINYINT(1);COMMENT:性别 0-女 1-男" json:"gender" form:"gender"`
Department_id uint `gorm:"type:BIGINT;COMMENT:外键关联部门表" json:"department_id" form:"department_id"`
Course_selections []Course_selection `gorm:"foreignKey:teacher_id;references:id" json:"course_selections"`
}
迁移数据库表结构
修改models/init.go文件
package models
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB = Init()
func migrate(db *gorm.DB) {
err := db.AutoMigrate(&Department{}, &Professional{}, &Teacher{})
err = db.AutoMigrate(&Professional{}, &Class{}, &Student{})
err = db.AutoMigrate(&Teacher{}, &Class{}, &Course{}, &Course_selection{})
err = db.AutoMigrate(&Course_selection{}, &Exam{})
err = db.AutoMigrate(&Course_selection{}, &Student{}, &Grade{})
if err != nil {
fmt.Println(err)
return
}
}
func Init() *gorm.DB {
username := "123" //账号
password := "123" //密码
host := "127.0.0.1" //数据库地址,可以是Ip或者域名
port := 3306 //数据库端口
Dbname := "school_go" //数据库名
timeout := "10s" //连接超时,10秒
// username:password@tcp(127.0.0.1:3306)/gorm?
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s",
username, password, host, port, Dbname, timeout)
//连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("连接数据库失败, error=" + err.Error())
}
// 连接成功
//数据迁移 生成数据库
migrate(db)
return db
}
使用swag
下载gin-swagger
go install github.com/swaggo/swag/cmd/swag@latest
swag init
go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/files
修改主函数main.go
package main
import (
swaggerfiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
"main/docs"
"main/router"
)
func main() {
r := router.Router()
// 将SwaggerInfo的BasePath设置为空字符串
docs.SwaggerInfo.BasePath = ""
// 将GET请求与Swagger UI的处理程序进行包装
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
_ = r.Run("0.0.0.0:8080")
}
设计业务
新建一个define路径下的define.go
存放默认值
package define
const (
DefaultPage = "1"
DefaultSize = "20"
)
service路径下每个模块创建一个go文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DipcAJl8-1682330141326)(教务管理系统.assets/image-20230424171122179.png)]
班级
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AKrRcdFD-1682330141327)(教务管理系统.assets/image-20230424164857963.png)]
package service
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"main/define"
"main/models"
"net/http"
"strconv"
)
// ClassDetail
// @Tags 班级
// @Summary 班级详细
// @Param int query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /class/detail [get]
func ClassDetail(c *gin.Context) {
ID := c.Query("id")
data := new(models.Class)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": data,
})
}
// ClassCreate
// @Tags 班级
// @Summary 班级创建
// @Param name formData string true "name"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /class/create [post]
func ClassCreate(c *gin.Context) {
var classdata models.Class
err := c.ShouldBind(&classdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
err = models.DB.Create(&classdata).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("class create error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": "班级创建成功",
})
}
// ClassModify
// @Tags 班级
// @Summary 班级修改
// @Param id query int true "id"
// @Param name formData string false "name"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /class/update [put]
func ClassModify(c *gin.Context) {
var classdata models.Class
ID := c.Query("id")
err := c.ShouldBind(&classdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
beforedata := new(models.Class)
err = models.DB.First(beforedata, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
models.DB.Model(beforedata).Updates(&classdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("class update error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "修改成功",
})
}
// ClassDelete
// @Tags 班级
// @Summary 班级删除
// @Param id query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /class/delete [delete]
func ClassDelete(c *gin.Context) {
ID := c.Query("id")
data := new(models.Class)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
err = models.DB.Delete(data).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("class delete error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "删除成功",
})
}
// GetClassList
// @Tags 班级
// @Summary 班级列表
// @Param page query int false "page"
// @Param size query int false "size"
// @Param keyword query string false "keyword"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /class/list [get]
func GetClassList(c *gin.Context) {
size, _ := strconv.Atoi(c.DefaultQuery("size", define.DefaultSize))
page, err := strconv.Atoi(c.DefaultQuery("page", define.DefaultPage))
if err != nil {
log.Println("GetClassList Page strconv Error:", err)
return
}
page = (page - 1) * size
keyword := c.Query("keyword")
var count int64
var list = make([]models.Class, 0)
err = models.DB.Model(new(models.Class)).Preload("Students").Preload("Course_selections").
Count(&count).Offset(page).Limit(size).
Where("name like ?", "%"+keyword+"%").Find(&list).Error
if err != nil {
log.Println("Get Class List Error", err)
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": "Get Class List Error" + err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": map[string]interface{}{
"list": list,
"count": count,
},
})
}
课程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u3bMm4C8-1682330141327)(教务管理系统.assets/image-20230424165903313.png)]
package service
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"main/define"
"main/models"
"net/http"
"strconv"
)
// CourseDetail
// @Tags 课程
// @Summary 课程详细
// @Param int query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /course/detail [get]
func CourseDetail(c *gin.Context) {
ID := c.Query("id")
data := new(models.Course)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": data,
})
}
// CourseCreate
// @Tags 课程
// @Summary 课程创建
// @Param name formData string true "name"
// @Param hour formData int true "hour"
// @Param credit formData int true "credit"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /course/create [post]
func CourseCreate(c *gin.Context) {
var Coursedata models.Course
err := c.ShouldBind(&Coursedata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
err = models.DB.Create(&Coursedata).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Course create error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": "课程创建成功",
})
}
// CourseModify
// @Tags 课程
// @Summary 课程修改
// @Param id query int true "id"
// @Param name formData string true "name"
// @Param hour formData int true "hour"
// @Param credit formData int true "credit"
// @Param prerequisite_id formData string false "prerequisite_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /course/update [put]
func CourseModify(c *gin.Context) {
var Coursedata models.Course
ID := c.Query("id")
err := c.ShouldBind(&Coursedata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
beforedata := new(models.Course)
err = models.DB.First(beforedata, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
models.DB.Model(beforedata).Updates(&Coursedata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Course update error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "修改成功",
})
}
// CourseDelete
// @Tags 课程
// @Summary 课程删除
// @Param id query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /course/delete [delete]
func CourseDelete(c *gin.Context) {
ID := c.Query("id")
data := new(models.Course)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
err = models.DB.Delete(data).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Course delete error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "删除成功",
})
}
// GetCourseList
// @Tags 课程
// @Summary 课程列表
// @Param page query int false "page"
// @Param size query int false "size"
// @Param keyword query string false "keyword"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /course/list [get]
func GetCourseList(c *gin.Context) {
size, _ := strconv.Atoi(c.DefaultQuery("size", define.DefaultSize))
page, err := strconv.Atoi(c.DefaultQuery("page", define.DefaultPage))
if err != nil {
log.Println("GetCourseList Page strconv Error:", err)
return
}
page = (page - 1) * size
keyword := c.Query("keyword")
var count int64
var list = make([]models.Course, 0)
err = models.DB.Model(new(models.Course)).Preload("Course_selections").Count(&count).Offset(page).Limit(size).
Where("name like ? ", "%"+keyword+"%").
Find(&list).Error
if err != nil {
log.Println("Get Course List Error", err)
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": "Get Course List Error" + err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": map[string]interface{}{
"list": list,
"count": count,
},
})
}
课程选择
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SDTaxBwI-1682330141328)(教务管理系统.assets/image-20230424165922429.png)]
package service
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"main/define"
"main/models"
"net/http"
"strconv"
)
// Course_selectionDetail
// @Tags 课程选择
// @Summary 课程选择详细
// @Param int query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /course_selection/detail [get]
func Course_selectionDetail(c *gin.Context) {
ID := c.Query("id")
data := new(models.Course_selection)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": data,
})
}
// Course_selectionCreate
// @Tags 课程选择
// @Summary 课程选择创建
// @Param position formData string true "position"
// @Param time formData string true "time"
// @Param class_id formData int true "class_id"
// @Param course_id formData int true "course_id"
// @Param teacher_id formData int true "teacher_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /course_selection/create [post]
func Course_selectionCreate(c *gin.Context) {
var Course_selectiondata models.Course_selection
err := c.ShouldBind(&Course_selectiondata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
err = models.DB.Create(&Course_selectiondata).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Course_selection create error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": "课程选择创建成功",
})
}
// Course_selectionModify
// @Tags 课程选择
// @Summary 课程选择修改
// @Param id query int true "id"
// @Param position formData string false "position"
// @Param time formData string false "time"
// @Param class_id formData int false "class_id"
// @Param course_id formData int false "course_id"
// @Param teacher_id formData int false "teacher_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /course_selection/update [put]
func Course_selectionModify(c *gin.Context) {
var Course_selectiondata models.Course_selection
ID := c.Query("id")
err := c.ShouldBind(&Course_selectiondata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
beforedata := new(models.Course_selection)
err = models.DB.First(beforedata, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
models.DB.Model(beforedata).Updates(&Course_selectiondata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Course_selection update error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "修改成功",
})
}
// Course_selectionDelete
// @Tags 课程选择
// @Summary 课程选择删除
// @Param id query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /course_selection/delete [delete]
func Course_selectionDelete(c *gin.Context) {
ID := c.Query("id")
data := new(models.Course_selection)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
err = models.DB.Delete(data).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Course_selection delete error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "删除成功",
})
}
// GetCourse_selectionList
// @Tags 课程选择
// @Summary 课程选择列表
// @Param page query int false "page"
// @Param size query int false "size"
// @Param keyword query string false "keyword"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /course_selection/list [get]
func GetCourse_selectionList(c *gin.Context) {
size, _ := strconv.Atoi(c.DefaultQuery("size", define.DefaultSize))
page, err := strconv.Atoi(c.DefaultQuery("page", define.DefaultPage))
if err != nil {
log.Println("GetCourse_selectionList Page strconv Error:", err)
return
}
page = (page - 1) * size
keyword := c.Query("keyword")
var count int64
var list = make([]models.Course_selection, 0)
err = models.DB.Model(new(models.Course_selection)).Preload("Exam").Preload("Grades").Count(&count).Offset(page).Limit(size).
Where("Time like ? OR Positon like ?", "%"+keyword+"%", "%"+keyword+"%").
Find(&list).Error
if err != nil {
log.Println("Get Course_selection List Error", err)
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": "Get Course_selection List Error" + err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": map[string]interface{}{
"list": list,
"count": count,
},
})
}
部门
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0oyC4iUu-1682330141328)(教务管理系统.assets/image-20230424165945578.png)]
package service
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"main/define"
"main/models"
"net/http"
"strconv"
)
// DepartmentCreate
// @Tags 部门
// @Summary 部门创建
// @Param name formData string true "name"
// @Param location formData string true "location"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /department/create [post]
func DepartmentCreate(c *gin.Context) {
var departmentdata models.Department
err := c.ShouldBind(&departmentdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
err = models.DB.Create(&departmentdata).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("department create error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": "部门创建成功",
})
}
// DepartmentModify
// @Tags 部门
// @Summary 部门修改
// @Param id query int true "id"
// @Param name formData string false "name"
// @Param location formData string false "location"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /department/update [put]
func DepartmentModify(c *gin.Context) {
var departmentdata models.Department
ID := c.Query("id")
err := c.ShouldBind(&departmentdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
beforedata := new(models.Department)
err = models.DB.First(beforedata, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
models.DB.Model(beforedata).Updates(&departmentdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("department update error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "修改成功",
})
}
// DepartmentDelete
// @Tags 部门
// @Summary 部门删除
// @Param id query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /department/delete [delete]
func DepartmentDelete(c *gin.Context) {
ID := c.Query("id")
data := new(models.Department)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
err = models.DB.Delete(data).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("department delete error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "删除成功",
})
}
// GetDepartmentList
// @Tags 部门
// @Summary 部门列表
// @Param page query int false "page"
// @Param size query int false "size"
// @Param keyword query string false "keyword"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /department/list [get]
func GetDepartmentList(c *gin.Context) {
size, _ := strconv.Atoi(c.DefaultQuery("size", define.DefaultSize))
page, err := strconv.Atoi(c.DefaultQuery("page", define.DefaultPage))
if err != nil {
log.Println("GetDepartmentList Page strconv Error:", err)
return
}
page = (page - 1) * size
keyword := c.Query("keyword")
var count int64
var list = make([]models.Department, 0)
err = models.DB.Model(new(models.Department)).Preload("Professionals").Preload("Teachers").Count(&count).Offset(page).Limit(size).
Where("name like ? OR location like ?", "%"+keyword+"%", "%"+keyword+"%").
Find(&list).Error
if err != nil {
log.Println("Get Department List Error", err)
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": "Get Department List Error" + err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": map[string]interface{}{
"list": list,
"count": count,
},
})
}
考试安排
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x96PCFiY-1682330141328)(教务管理系统.assets/image-20230424170007930.png)]
package service
import (
"fmt"
"github.com/gin-gonic/gin"
"main/models"
"net/http"
)
// ExamDetail
// @Tags 考试安排
// @Summary 考试安排详细
// @Param int query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /exam/detail [get]
func ExamDetail(c *gin.Context) {
ID := c.Query("id")
data := new(models.Exam)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": data,
})
}
// ExamCreate
// @Tags 考试安排
// @Summary 考试安排创建
// @Param exam_data formData string true "exam_data"
// @Param start_time formData string true "start_time"
// @Param end_time formData string true "end_time"
// @Param position formData string true "position"
// @Param course_selection_id formData string true "course_selection_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /exam/create [post]
func ExamCreate(c *gin.Context) {
var Examdata models.Exam
err := c.ShouldBind(&Examdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
err = models.DB.Create(&Examdata).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Exam create error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": "考试安排创建成功",
})
}
// ExamModify
// @Tags 考试安排
// @Summary 考试安排修改
// @Param id query int true "id"
// @Param exam_data formData string false "exam_data"
// @Param start_time formData string false "start_time"
// @Param end_time formData string false "end_time"
// @Param position formData string false "position"
// @Param course_selection_id formData string false "course_selection_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /exam/update [put]
func ExamModify(c *gin.Context) {
var Examdata models.Exam
ID := c.Query("id")
err := c.ShouldBind(&Examdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
beforedata := new(models.Exam)
err = models.DB.First(beforedata, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
models.DB.Model(beforedata).Updates(&Examdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Exam update error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "修改成功",
})
}
// ExamDelete
// @Tags 考试安排
// @Summary 考试安排删除
// @Param id query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /exam/delete [delete]
func ExamDelete(c *gin.Context) {
ID := c.Query("id")
data := new(models.Exam)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
err = models.DB.Delete(data).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Exam delete error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "删除成功",
})
}
成绩
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-550tlg5N-1682330141329)(教务管理系统.assets/image-20230424170019103.png)]
package service
import (
"fmt"
"github.com/gin-gonic/gin"
"main/models"
"net/http"
)
// GradeDetail
// @Tags 成绩
// @Summary 成绩详细
// @Param int query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /grade/detail [get]
func GradeDetail(c *gin.Context) {
ID := c.Query("id")
data := new(models.Grade)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": data,
})
}
// GradeCreate
// @Tags 成绩
// @Summary 成绩创建
// @Param score formData string true "score"
// @Param student_id formData string true "student_id"
// @Param course_id formData string true "course_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /grade/create [post]
func GradeCreate(c *gin.Context) {
var Gradedata models.Grade
err := c.ShouldBind(&Gradedata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
err = models.DB.Create(&Gradedata).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Grade create error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": "成绩创建成功",
})
}
// GradeModify
// @Tags 成绩
// @Summary 成绩修改
// @Param id query int true "id"
// @Param score formData string false "score"
// @Param student_id formData string false "student_id"
// @Param course_id formData string false "course_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /grade/update [put]
func GradeModify(c *gin.Context) {
var Gradedata models.Grade
ID := c.Query("id")
err := c.ShouldBind(&Gradedata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
beforedata := new(models.Grade)
err = models.DB.First(beforedata, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
models.DB.Model(beforedata).Updates(&Gradedata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Grade update error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "修改成功",
})
}
// GradeDelete
// @Tags 成绩
// @Summary 成绩删除
// @Param id query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /grade/delete [delete]
func GradeDelete(c *gin.Context) {
ID := c.Query("id")
data := new(models.Grade)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
err = models.DB.Delete(data).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Grade delete error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "删除成功",
})
}
专业
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GqbGeaTB-1682330141329)(教务管理系统.assets/image-20230424170058687.png)]
package service
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"main/define"
"main/models"
"net/http"
"strconv"
)
// ProfessionalDetail
// @Tags 专业
// @Summary 专业详细
// @Param int query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /professional/detail [get]
func ProfessionalDetail(c *gin.Context) {
ID := c.Query("id")
data := new(models.Professional)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": data,
})
}
// ProfessionalCreate
// @Tags 专业
// @Summary 专业创建
// @Param name formData string true "name"
// @Param department_id formData int false "department_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /professional/create [post]
func ProfessionalCreate(c *gin.Context) {
var professionaldata models.Professional
err := c.ShouldBind(&professionaldata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
err = models.DB.Create(&professionaldata).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("professional create error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": "专业创建成功",
})
}
// ProfessionalModify
// @Tags 专业
// @Summary 专业修改
// @Param id query int true "id"
// @Param name formData string false "name"
// @Param department_id formData int false "department_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /professional/update [put]
func ProfessionalModify(c *gin.Context) {
var professionaldata models.Professional
ID := c.Query("id")
err := c.ShouldBind(&professionaldata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
beforedata := new(models.Professional)
err = models.DB.First(beforedata, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
models.DB.Model(beforedata).Updates(&professionaldata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("professional update error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "修改成功",
})
}
// ProfessionalDelete
// @Tags 专业
// @Summary 专业删除
// @Param id query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /professional/delete [delete]
func ProfessionalDelete(c *gin.Context) {
ID := c.Query("id")
data := new(models.Professional)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
err = models.DB.Delete(data).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Professional delete error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "删除成功",
})
}
// GetProfessionalList
// @Tags 专业
// @Summary 专业列表
// @Param page query int false "page"
// @Param size query int false "size"
// @Param keyword query string false "keyword"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /professional/list [get]
func GetProfessionalList(c *gin.Context) {
size, _ := strconv.Atoi(c.DefaultQuery("size", define.DefaultSize))
page, err := strconv.Atoi(c.DefaultQuery("page", define.DefaultPage))
if err != nil {
log.Println("GetProfessionalList Page strconv Error:", err)
return
}
page = (page - 1) * size
keyword := c.Query("keyword")
var count int64
var list = make([]models.Professional, 0)
err = models.DB.Model(new(models.Professional)).Preload("Students").
Count(&count).Offset(page).Limit(size).
Where("name like ?", "%"+keyword+"%").Find(&list).Error
if err != nil {
log.Println("Get Professional List Error", err)
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": "Get Professional List Error" + err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": map[string]interface{}{
"list": list,
"count": count,
},
})
}
学生
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JGGu8N3N-1682330141329)(教务管理系统.assets/image-20230424170134698.png)]
package service
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"main/define"
"main/models"
"net/http"
"strconv"
)
// StudentDetail
// @Tags 学生
// @Summary 学生详细
// @Param int query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /student/detail [get]
func StudentDetail(c *gin.Context) {
ID := c.Query("id")
data := new(models.Student)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": data,
})
}
// StudentCreate
// @Tags 学生
// @Summary 学生创建
// @Param name formData string true "name"
// @Param age formData int true "age"
// @Param gender formData int true "gender"
// @Param class_id formData int true "class_id"
// @Param professional_id formData int true "professional_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /student/create [post]
func StudentCreate(c *gin.Context) {
var Studentdata models.Student
err := c.ShouldBind(&Studentdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
err = models.DB.Create(&Studentdata).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Student create error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": "学生创建成功",
})
}
// StudentModify
// @Tags 学生
// @Summary 学生修改
// @Param id query int true "id"
// @Param name formData string false "name"
// @Param age formData int false "age"
// @Param gender formData int false "gender"
// @Param class_id formData int false "class_id"
// @Param professional_id formData int false "professional_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /student/update [put]
func StudentModify(c *gin.Context) {
var Studentdata models.Student
ID := c.Query("id")
err := c.ShouldBind(&Studentdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
beforedata := new(models.Student)
err = models.DB.First(beforedata, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
models.DB.Model(beforedata).Updates(&Studentdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Student update error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "修改成功",
})
}
// StudentDelete
// @Tags 学生
// @Summary 学生删除
// @Param id query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /student/delete [delete]
func StudentDelete(c *gin.Context) {
ID := c.Query("id")
data := new(models.Student)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
err = models.DB.Delete(data).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("Student delete error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "删除成功",
})
}
// GetStudentList
// @Tags 学生
// @Summary 学生列表
// @Param page query int false "page"
// @Param size query int false "size"
// @Param keyword query string false "keyword"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /student/list [get]
func GetStudentList(c *gin.Context) {
size, _ := strconv.Atoi(c.DefaultQuery("size", define.DefaultSize))
page, err := strconv.Atoi(c.DefaultQuery("page", define.DefaultPage))
if err != nil {
log.Println("GetStudentList Page strconv Error:", err)
return
}
page = (page - 1) * size
keyword := c.Query("keyword")
var count int64
var list = make([]models.Student, 0)
err = models.DB.Model(new(models.Student)).Preload("Grades").Count(&count).Offset(page).Limit(size).
Where("name like ?", "%"+keyword+"%").Find(&list).Error
if err != nil {
log.Println("Get Student List Error", err)
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": "Get Student List Error" + err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": map[string]interface{}{
"list": list,
"count": count,
},
})
}
教师
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xn7vGyk9-1682330141330)(教务管理系统.assets/image-20230424170154975.png)]
package service
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"main/define"
"main/models"
"net/http"
"strconv"
)
// TeacherDetail
// @Tags 教师
// @Summary 教师详细
// @Param int query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /teacher/detail [get]
func TeacherDetail(c *gin.Context) {
ID := c.Query("id")
data := new(models.Teacher)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": data,
})
}
// TeacherCreate
// @Tags 教师
// @Summary 教师创建
// @Param name formData string true "name"
// @Param age formData int true "age"
// @Param education formData string true "education"
// @Param title formData string true "title"
// @Param gender formData int true "gender"
// @Param department_id formData int false "department_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /teacher/create [post]
func TeacherCreate(c *gin.Context) {
var teacherdata models.Teacher
err := c.ShouldBind(&teacherdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
err = models.DB.Create(&teacherdata).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("teacher create error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": "教师创建成功",
})
}
// TeacherModify
// @Tags 教师
// @Summary 教师修改
// @Param id query int true "id"
// @Param name formData string false "name"
// @Param age formData int false "age"
// @Param education formData string false "education"
// @Param title formData string false "title"
// @Param gender formData int false "gender"
// @Param department_id formData int false "department_id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /teacher/update [put]
func TeacherModify(c *gin.Context) {
var teacherdata models.Teacher
ID := c.Query("id")
err := c.ShouldBind(&teacherdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("binding failed:" + err.Error()),
})
return
}
beforedata := new(models.Teacher)
err = models.DB.First(beforedata, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
models.DB.Model(beforedata).Updates(&teacherdata)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("teacher update error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "修改成功",
})
}
// TeacherDelete
// @Tags 教师
// @Summary 教师删除
// @Param id query int true "id"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /teacher/delete [delete]
func TeacherDelete(c *gin.Context) {
ID := c.Query("id")
data := new(models.Teacher)
err := models.DB.First(data, ID).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("ID not found:" + err.Error()),
})
return
}
err = models.DB.Delete(data).Error
if err != nil {
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": fmt.Sprintf("teacher delete error:" + err.Error()),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "删除成功",
})
}
// GetTeacherList
// @Tags 教师
// @Summary 教师列表
// @Param page query int false "page"
// @Param size query int false "size"
// @Param keyword query string false "keyword"
// @Success 200 {string} json "{"code":"200","data":""}"
// @Router /teacher/list [get]
func GetTeacherList(c *gin.Context) {
size, _ := strconv.Atoi(c.DefaultQuery("size", define.DefaultSize))
page, err := strconv.Atoi(c.DefaultQuery("page", define.DefaultPage))
if err != nil {
log.Println("GetTeacherList Page strconv Error:", err)
return
}
page = (page - 1) * size
keyword := c.Query("keyword")
var count int64
var list = make([]models.Teacher, 0)
err = models.DB.Model(new(models.Teacher)).Preload("Course_selections").Count(&count).Offset(page).Limit(size).
Where("name like ? ", "%"+keyword+"%").
Find(&list).Error
if err != nil {
log.Println("Get Teacher List Error", err)
c.JSON(http.StatusOK, gin.H{
"code": -1,
"msg": "Get Teacher List Error" + err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": map[string]interface{}{
"list": list,
"count": count,
},
})
}
注册路由
最后在router路径下的app.go中
package router
import (
"github.com/gin-gonic/gin"
"main/service"
)
func Router() *gin.Engine {
router := gin.Default()
department := router.Group("/department")
{
department.POST("/create", service.DepartmentCreate)
department.PUT("/update", service.DepartmentModify)
department.DELETE("/delete", service.DepartmentDelete)
department.GET("/list", service.GetDepartmentList)
}
teacher := router.Group("/teacher")
{
teacher.GET("/detail", service.TeacherDetail)
teacher.POST("/create", service.TeacherCreate)
teacher.PUT("/update", service.TeacherModify)
teacher.DELETE("/delete", service.TeacherDelete)
teacher.GET("/list", service.GetTeacherList)
}
professional := router.Group("/professional")
{
professional.GET("/detail", service.ProfessionalDetail)
professional.POST("/create", service.ProfessionalCreate)
professional.PUT("/update", service.ProfessionalModify)
professional.DELETE("/delete", service.ProfessionalDelete)
professional.GET("/list", service.GetProfessionalList)
}
class := router.Group("/class")
{
class.GET("/detail", service.ClassDetail)
class.POST("/create", service.ClassCreate)
class.PUT("/update", service.ClassModify)
class.DELETE("/delete", service.ClassDelete)
class.GET("/list", service.GetClassList)
}
student := router.Group("/student")
{
student.GET("/detail", service.StudentDetail)
student.POST("/create", service.StudentCreate)
student.PUT("/update", service.StudentModify)
student.DELETE("/delete", service.StudentDelete)
student.GET("/list", service.GetStudentList)
}
course := router.Group("/course")
{
course.GET("/detail", service.CourseDetail)
course.POST("/create", service.CourseCreate)
course.PUT("/update", service.CourseModify)
course.DELETE("/delete", service.CourseDelete)
course.GET("/list", service.GetCourseList)
}
course_selection := router.Group("/course_selection")
{
course_selection.GET("/detail", service.Course_selectionDetail)
course_selection.POST("/create", service.Course_selectionCreate)
course_selection.PUT("/update", service.Course_selectionModify)
course_selection.DELETE("/delete", service.Course_selectionDelete)
course_selection.GET("/list", service.GetCourse_selectionList)
}
exam := router.Group("/exam")
{
exam.GET("/detail", service.ExamDetail)
exam.POST("/create", service.ExamCreate)
exam.PUT("/update", service.ExamModify)
exam.DELETE("/delete", service.ExamDelete)
}
grade := router.Group("/grade")
{
grade.GET("/detail", service.GradeDetail)
grade.POST("/create", service.GradeCreate)
grade.PUT("/update", service.GradeModify)
grade.DELETE("/delete", service.GradeDelete)
}
return router
}
professional.GET("/detail", service.ProfessionalDetail)
professional.POST("/create", service.ProfessionalCreate)
professional.PUT("/update", service.ProfessionalModify)
professional.DELETE("/delete", service.ProfessionalDelete)
professional.GET("/list", service.GetProfessionalList)
}
class := router.Group("/class")
{
class.GET("/detail", service.ClassDetail)
class.POST("/create", service.ClassCreate)
class.PUT("/update", service.ClassModify)
class.DELETE("/delete", service.ClassDelete)
class.GET("/list", service.GetClassList)
}
student := router.Group("/student")
{
student.GET("/detail", service.StudentDetail)
student.POST("/create", service.StudentCreate)
student.PUT("/update", service.StudentModify)
student.DELETE("/delete", service.StudentDelete)
student.GET("/list", service.GetStudentList)
}
course := router.Group("/course")
{
course.GET("/detail", service.CourseDetail)
course.POST("/create", service.CourseCreate)
course.PUT("/update", service.CourseModify)
course.DELETE("/delete", service.CourseDelete)
course.GET("/list", service.GetCourseList)
}
course_selection := router.Group("/course_selection")
{
course_selection.GET("/detail", service.Course_selectionDetail)
course_selection.POST("/create", service.Course_selectionCreate)
course_selection.PUT("/update", service.Course_selectionModify)
course_selection.DELETE("/delete", service.Course_selectionDelete)
course_selection.GET("/list", service.GetCourse_selectionList)
}
exam := router.Group("/exam")
{
exam.GET("/detail", service.ExamDetail)
exam.POST("/create", service.ExamCreate)
exam.PUT("/update", service.ExamModify)
exam.DELETE("/delete", service.ExamDelete)
}
grade := router.Group("/grade")
{
grade.GET("/detail", service.GradeDetail)
grade.POST("/create", service.GradeCreate)
grade.PUT("/update", service.GradeModify)
grade.DELETE("/delete", service.GradeDelete)
}
return router
}