package controller
import (
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
"log"
"oceanlearn.teach/ginessential/common"
"oceanlearn.teach/ginessential/model"
"oceanlearn.teach/ginessential/response"
"oceanlearn.teach/ginessential/vo"
"strconv"
)
type IPostController interface {
RestController
PageList(ctx *gin.Context)
}
type PostController struct {
DB *gorm.DB
}
func (p PostController) Create(ctx *gin.Context) {
var requestPost vo.CreatePostRequst
// 数据验证
if err := ctx.ShouldBind(&requestPost); err != nil {
log.Println(err.Error())
response.Fail(ctx, "数据验证错误", nil)
return
}
// 获取登录用户 user
user, _ := ctx.Get("user")
// 创建post
post := model.Post{
UserId: user.(model.User).ID,
CategoryId: requestPost.CategoryId,
Title: requestPost.Title,
HeadImg: requestPost.HeadImg,
Content: requestPost.Content,
}
if err := p.DB.Create(&post).Error; err != nil{
panic(err)
return
}
response.Success(ctx, nil, "创建成功")
}
func (p PostController) Update(ctx *gin.Context) {
var requestPost vo.CreatePostRequst
// 数据验证
if err := ctx.ShouldBind(&requestPost); err != nil {
log.Println(err.Error())
response.Fail(ctx, "数据验证错误", nil)
return
}
// 获取path 中的id
postId := ctx.Params.ByName("id")
var post model.Post
if p.DB.Where("id = ?", postId).First(&post).RecordNotFound() {
response.Fail(ctx, "文章不存在", nil)
return
}
// 判断当前用户是否为文章的作者
// 获取登录用户 user
user, _ := ctx.Get("user")
userId := user.(model.User).ID
if userId != post.UserId {
response.Fail(ctx, "文章不属于您,请勿非法操作", nil)
return
}
// 更新文章
if err := p.DB.Model(&post).Update(requestPost).Error; err != nil {
response.Fail(ctx, "更新失败", nil)
return
}
response.Success(ctx, gin.H{"post":post}, "更新成功")
}
func (p PostController) Show(ctx *gin.Context) {
// 获取path 中的id
postId := ctx.Params.ByName("id")
var post model.Post
if p.DB.Preload("Category").Where("id = ?", postId).First(&post).RecordNotFound() {
response.Fail(ctx, "文章不存在", nil)
return
}
response.Success(ctx, gin.H{"post":post}, "成功")
}
func (p PostController) Delete(ctx *gin.Context) {
// 获取path 中的id
postId := ctx.Params.ByName("id")
var post model.Post
if p.DB.Where("id = ?", postId).First(&post).RecordNotFound() {
response.Fail(ctx, "文章不存在", nil)
return
}
// 判断当前用户是否为文章的作者
// 获取登录用户 user
user, _ := ctx.Get("user")
userId := user.(model.User).ID
if userId != post.UserId {
response.Fail(ctx, "文章不属于您,请勿非法操作", nil)
return
}
p.DB.Delete(&post)
response.Success(ctx, gin.H{"post":post}, "删除成功")
}
func (p PostController) PageList(ctx *gin.Context) {
// 获取分页参数
pageNum,_ := strconv.Atoi(ctx.DefaultQuery("pageNum", "1"))
pageSize, _ := strconv.Atoi(ctx.DefaultQuery("pageSize", "20"))
// 分页
var posts []model.Post
p.DB.Order("created_at desc").Offset((pageNum - 1) * pageSize).Limit(pageSize).Find(&posts);
// 前端渲染分页需要知道总数
var total int
p.DB.Model(model.Post{}).Count(&total)
response.Success(ctx, gin.H{"data": posts, "total": total}, "成功")
}
func NewPostController() IPostController {
db := common.GetDB();
db.AutoMigrate(model.Post{})
return PostController{DB:db}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Gin+Vue前后端分离项目实战Gin项目代码.zip
共27个文件
go:21个
sum:1个
mod:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 162 浏览量
2023-10-21
23:24:36
上传
评论 1
收藏 8.87MB ZIP 举报
温馨提示
Gin+Vue前后端分离项目实战Gin项目代码.zip
资源推荐
资源详情
资源评论
收起资源包目录
Gin+Vue前后端分离项目实战Gin项目代码.zip (27个子文件)
gin-vue-gin-essential-master
go.mod 878B
repository
CategoryRepository.go 1KB
go.sum 21KB
ginessential 18.02MB
controller
RestController.go 192B
CategoryController.go 2KB
PostController.go 3KB
UserController.go 3KB
middleware
AuthMiddleware.go 1KB
CORSMiddleware.go 594B
RecoveryMiddleware.go 319B
ss.md 37B
response
response.go 437B
common
database.go 947B
jwt.go 954B
model
post.go 663B
time.go 1KB
user.go 228B
category.go 263B
dto
user_dto.go 266B
.gitignore 5B
routes.go 1KB
util
util.go 317B
vo
post.go 243B
category.go 96B
config
application.yml 179B
main.go 601B
共 27 条
- 1
资源评论
天天501
- 粉丝: 596
- 资源: 4666
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功