dao、service、controller分层打通

This commit is contained in:
TianJun
2021-04-28 17:19:29 +08:00
parent 685b7267f9
commit a45c852aa5
8 changed files with 195 additions and 53 deletions
+27 -19
View File
@@ -3,7 +3,7 @@ package dao
import (
"lingye-gin/src/config"
"lingye-gin/src/entity"
"lingye-gin/src/service/dto"
"lingye-gin/src/service/query"
"lingye-gin/src/util"
)
@@ -36,29 +36,37 @@ func (UserDAO) SelectList(resource entity.User) []entity.User {
}
// 条件分页查询
func (UserDAO) SelectPage(dto dto.UserDTO) []entity.User {
func (UserDAO) SelectPage(condition query.UserQuery) ([]entity.User, int) {
var users []entity.User
var total int
page, pageSize := util.FixPage(dto.Page, dto.PageSize)
page, pageSize := util.FixPage(condition.Page, condition.PageSize)
// 分页条件
pageConfig := config.SqlExcutor.Where("username LIKE ?", "%"+dto.Username+"%")
pageConfig := config.SqlExcutor.Where("username LIKE ?", "%"+condition.Username+"%")
// 分页参数
pageConfig = pageConfig.Limit((page - 1) * pageSize).Offset(pageSize)
pageConfig.Find(&users)
return users
pageConfig = pageConfig.Find(&users)
// 统计数量
pageConfig.Count(&total)
return users, total
}
func test() {
//
//user := entity.User{Username: "lingye"}
//
//userDAO := dao.UserDAO{}
//userDAO.Insert(&user)
//userDAO.SelectAll()
//userDAO.SelectOne(1)
//userDAO.SelectList(user)
//
//dto := dto2.UserDTO{}
//dto.Username = "测试"
//userDAO.SelectPage(dto)
func (UserDAO) UpdateAll(user *entity.User) {
config.SqlExcutor.Save(&user)
}
// 更新特定字段
func (UserDAO) UpdateById(user *entity.User) {
model := &entity.User{}
model.ID = user.ID
config.SqlExcutor.Model(model).Updates(map[string]interface{}{
"username": user.UserName,
})
}
// 删除
func (UserDAO) DeleteById(id uint) {
user := entity.User{}
user.ID = id
config.SqlExcutor.Delete(&user)
}
+10 -10
View File
@@ -5,16 +5,16 @@ import (
)
type User struct {
base.BaseDO
UserName string `gorm:"column:user_name;type:varchar(255);not null;index:idx_username" json:"username" form:"username"`
NickName string `gorm:"column:nick_name;type:varchar(255)" json:"nickname" form:"nickname"`
Email string `gorm:"column:email;type:varchar(255)" json:"email" form:"email"`
PhoneNumber string `gorm:"column:phone_number;type:varchar(255)" json:"phoneNumber" form:"phoneNumber"`
Sex string `gorm:"column:sex;type:varchar(255)" json:"sex" form:"sex"`
Avatar string `gorm:"column:avatar;type:varchar(255)" json:"avatar" form:"avatar"`
Password string `gorm:"column:password;type:varchar(255);not null" json:"password" form:"password"`
Status string `gorm:"column:status;type:varchar(255);not null" json:"status" form:"status"`
Remark string `gorm:"column:remark;type:text(0)" json:"remark" form:"remark"`
base.LingYeDO
UserName string `gorm:"column:user_name;type:varchar(255);not null;index:idx_username"`
NickName string `gorm:"column:nick_name;type:varchar(255)"`
Email string `gorm:"column:email;type:varchar(255)"`
PhoneNumber string `gorm:"column:phone_number;type:varchar(255)"`
Sex string `gorm:"column:sex;type:varchar(255)"`
Avatar string `gorm:"column:avatar;type:varchar(255)"`
Password string `gorm:"column:password;type:varchar(255);not null"`
Status string `gorm:"column:status;type:varchar(255);not null"`
Remark string `gorm:"column:remark;type:text(0)"`
}
// 设置User的表名为`sys_user`
-20
View File
@@ -1,20 +0,0 @@
package api
import (
"github.com/gin-gonic/gin"
)
type Student struct {
ID uint `json:"id"`
Username string `json:"username"`
Age uint `json:"age"`
}
func DescribeStudents(c *gin.Context) {
var students []Student
c.JSON(200, gin.H{
"data": students,
"page": 1,
"pageSize": 15,
})
}
+91
View File
@@ -0,0 +1,91 @@
package api
import (
"github.com/gin-gonic/gin"
"lingye-gin/src/service"
"lingye-gin/src/service/dto"
"lingye-gin/src/service/query"
"net/http"
"strconv"
)
func DescribeUsers(c *gin.Context) {
var userQuery query.UserQuery
_ = c.BindJSON(&userQuery)
users, total := new(service.UserService).DescribeUsers(userQuery)
c.JSON(http.StatusOK, gin.H{
"code": http.StatusOK,
"data": users,
"total": total,
})
}
func DescribeUserById(c *gin.Context) {
id := c.Params.ByName("id")
uid, _ := strconv.Atoi(id)
user := new(service.UserService).DescribeUserById(uint(uid))
if user.ID == 0 {
c.JSON(http.StatusNotFound, gin.H{
"code": http.StatusNotFound,
"message": "user not found",
})
return
}
c.JSON(http.StatusOK, gin.H{
"code": http.StatusOK,
"message": "success",
"data": user,
})
}
func CreateUser(c *gin.Context) {
var userDTO dto.UserDTO
// 绑定一个请求主体到一个类型
_ = c.BindJSON(&userDTO)
new(service.UserService).Save(&userDTO)
c.JSON(http.StatusOK, gin.H{
"code": http.StatusOK,
"message": "success",
})
}
func ModifyUserById(c *gin.Context) {
id := c.Params.ByName("id")
uid, _ := strconv.Atoi(id)
localUser := new(service.UserService).DescribeUserById(uint(uid))
if localUser.ID == 0 {
c.JSON(http.StatusNotFound, gin.H{
"code": http.StatusNotFound,
"message": "user not found",
})
return
} else {
var userDTO dto.UserDTO
_ = c.BindJSON(&userDTO)
new(service.UserService).ModifyById(&userDTO)
c.JSON(http.StatusOK, gin.H{
"code": http.StatusOK,
"message": "success",
})
}
}
func DeleteUserById(c *gin.Context) {
id := c.Params.ByName("id")
uid, _ := strconv.Atoi(id)
localUser := new(service.UserService).DescribeUserById(uint(uid))
if localUser.ID == 0 {
c.JSON(http.StatusNotFound, gin.H{
"code": http.StatusNotFound,
"message": "user not found",
})
return
} else {
new(service.UserService).RemoveById(uint(uid))
c.JSON(http.StatusOK, gin.H{
"code": http.StatusOK,
"message": "success",
})
}
}
+11 -2
View File
@@ -2,7 +2,7 @@ package rest
import (
"github.com/gin-gonic/gin"
v3 "lingye-gin/src/rest/api"
"lingye-gin/src/rest/api"
v1 "lingye-gin/src/rest/v1"
v2 "lingye-gin/src/rest/v2"
"lingye-gin/src/util"
@@ -39,5 +39,14 @@ var Urls = [...]RequestApi{
// v2
{GroupName: "v2", GroupHandleFunction: util.VerifySign, Mode: "get", RelativePath: "/students", HandleFunction: v2.DescribeStudents},
// api jwt
{GroupName: "api", Mode: "get", RelativePath: "/students", HandleFunction: v3.DescribeStudents},
// 获取所有用户
{GroupName: "api", Mode: "get", RelativePath: "/users", HandleFunction: api.DescribeUsers},
// 根据ID获取用户
{GroupName: "api", Mode: "get", RelativePath: "/users/:id", HandleFunction: api.DescribeUserById},
// 保存用户
{GroupName: "api", Mode: "post", RelativePath: "/users", HandleFunction: api.CreateUser},
// 根据ID更新用户
{GroupName: "api", Mode: "put", RelativePath: "/users/:id", HandleFunction: api.ModifyUserById},
// 根据ID删除用户
{GroupName: "api", Mode: "delete", RelativePath: "/users/:id", HandleFunction: api.DeleteUserById},
}
+4 -2
View File
@@ -3,6 +3,8 @@ package dto
import "lingye-gin/src/base"
type UserDTO struct {
base.SimplePage
Username string
base.LingYeDTO
UserName string `json:"username" form:"username"`
Email string `json:"email" form:"email"`
Password string `json:"password" form:"password"`
}
+8
View File
@@ -0,0 +1,8 @@
package query
import "lingye-gin/src/base"
type UserQuery struct {
base.SimplePage
Username string `json:"username"`
}
+44
View File
@@ -0,0 +1,44 @@
package service
import (
"lingye-gin/src/dao"
"lingye-gin/src/entity"
"lingye-gin/src/service/dto"
"lingye-gin/src/service/query"
"lingye-gin/src/util"
)
type UserService struct{}
func (UserService) Save(resource *dto.UserDTO) {
if resource.ID != 0 {
panic("id is not zero")
}
record := &entity.User{}
util.StructCopy(resource, record)
new(dao.UserDAO).Insert(record)
}
func (UserService) RemoveById(id uint) {
if id == 0 {
panic("id is zero")
}
new(dao.UserDAO).DeleteById(id)
}
func (UserService) ModifyById(resource *dto.UserDTO) {
if resource.ID == 0 {
panic("id is zero")
}
record := &entity.User{}
util.StructCopy(resource, record)
new(dao.UserDAO).UpdateById(record)
}
func (UserService) DescribeUsers(condition query.UserQuery) ([]entity.User, int) {
return new(dao.UserDAO).SelectPage(condition)
}
func (UserService) DescribeUserById(id uint) entity.User {
return new(dao.UserDAO).SelectOne(id)
}