第一版完成
This commit is contained in:
70
internal/controller/admin.go
Normal file
70
internal/controller/admin.go
Normal file
@@ -0,0 +1,70 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"cms-api/internal/model"
|
||||
"cms-api/internal/service"
|
||||
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
)
|
||||
|
||||
// 管理员控制器
|
||||
type cAdmin struct{}
|
||||
|
||||
var Admin = &cAdmin{}
|
||||
|
||||
// Login 管理员登录
|
||||
func (c *cAdmin) Login(r *ghttp.Request) {
|
||||
var req *model.LoginRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用管理员服务进行登录验证
|
||||
adminService := service.Admin()
|
||||
result, err := adminService.Login(r.Context(), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "登录失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "登录成功", Data: result})
|
||||
}
|
||||
|
||||
// Logout 管理员登出
|
||||
func (c *cAdmin) Logout(r *ghttp.Request) {
|
||||
// 简单的登出处理,清除token等
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "登出成功"})
|
||||
}
|
||||
|
||||
// Detail 获取管理员详情
|
||||
func (c *cAdmin) Detail(r *ghttp.Request) {
|
||||
// 调用管理员服务获取当前管理员信息
|
||||
adminService := service.Admin()
|
||||
result, err := adminService.Profile(r.Context())
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取管理员信息失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// Update 更新管理员信息
|
||||
func (c *cAdmin) Update(r *ghttp.Request) {
|
||||
var req *model.UpdateAdminRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用管理员服务更新信息
|
||||
adminService := service.Admin()
|
||||
err := adminService.UpdateProfile(r.Context(), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "更新管理员信息失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "更新成功"})
|
||||
}
|
||||
173
internal/controller/article.go
Normal file
173
internal/controller/article.go
Normal file
@@ -0,0 +1,173 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"cms-api/internal/model"
|
||||
"cms-api/internal/service"
|
||||
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
// 文章控制器
|
||||
type cArticle struct{}
|
||||
|
||||
var Article = &cArticle{}
|
||||
|
||||
// List 获取文章列表(公开接口)
|
||||
func (c *cArticle) List(r *ghttp.Request) {
|
||||
var req *model.ArticleListRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用文章服务获取列表
|
||||
articleService := service.Article()
|
||||
result, err := articleService.List(r.Context(), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取文章列表失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// AdminList 获取文章列表(管理后台)
|
||||
func (c *cArticle) AdminList(r *ghttp.Request) {
|
||||
var req *model.ArticleListRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用文章服务获取管理后台列表
|
||||
articleService := service.Article()
|
||||
result, err := articleService.List(r.Context(), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取文章列表失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// Create 创建文章
|
||||
func (c *cArticle) Create(r *ghttp.Request) {
|
||||
var req *model.CreateArticleRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用文章服务创建文章
|
||||
articleService := service.Article()
|
||||
err := articleService.Create(r.Context(), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "创建文章失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "创建文章成功"})
|
||||
}
|
||||
|
||||
// Detail 获取文章详情(公开接口)
|
||||
func (c *cArticle) Detail(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
slug := gconv.String(r.Get("slug"))
|
||||
|
||||
if id <= 0 && slug == "" {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "文章ID或别名无效"})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用文章服务获取详情
|
||||
articleService := service.Article()
|
||||
var result *model.Article
|
||||
var err error
|
||||
|
||||
if id > 0 {
|
||||
result, err = articleService.GetById(r.Context(), id)
|
||||
} else {
|
||||
result, err = articleService.GetBySlug(r.Context(), slug)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取文章详情失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if result == nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 404, Message: "文章不存在"})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// AdminDetail 获取文章详情(管理后台)
|
||||
func (c *cArticle) AdminDetail(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
if id <= 0 {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "文章ID无效"})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用文章服务获取管理后台详情
|
||||
articleService := service.Article()
|
||||
result, err := articleService.GetById(r.Context(), id)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取文章详情失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if result == nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 404, Message: "文章不存在"})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// Update 更新文章
|
||||
func (c *cArticle) Update(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
if id <= 0 {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "文章ID无效"})
|
||||
return
|
||||
}
|
||||
|
||||
var req *model.UpdateArticleRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用文章服务更新文章
|
||||
articleService := service.Article()
|
||||
err := articleService.Update(r.Context(), id, req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "更新文章失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "更新文章成功"})
|
||||
}
|
||||
|
||||
// Delete 删除文章
|
||||
func (c *cArticle) Delete(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
if id <= 0 {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "文章ID无效"})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用文章服务删除文章
|
||||
articleService := service.Article()
|
||||
err := articleService.Delete(r.Context(), id)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "删除文章失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "删除文章成功"})
|
||||
}
|
||||
96
internal/controller/attachment.go
Normal file
96
internal/controller/attachment.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"cms-api/internal/model"
|
||||
"cms-api/internal/service"
|
||||
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
// 附件控制器
|
||||
type cAttachment struct{}
|
||||
|
||||
var Attachment = &cAttachment{}
|
||||
|
||||
// List 获取附件列表
|
||||
func (c *cAttachment) List(r *ghttp.Request) {
|
||||
var req *model.AttachmentListRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用附件服务获取列表
|
||||
attachmentService := service.Attachment()
|
||||
result, err := attachmentService.List(r.Context(), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取附件列表失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// Upload 上传附件
|
||||
func (c *cAttachment) Upload(r *ghttp.Request) {
|
||||
// 获取上传的文件
|
||||
file := r.GetUploadFile("file")
|
||||
if file == nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "请选择要上传的文件"})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用附件服务处理上传
|
||||
attachmentService := service.Attachment()
|
||||
result, err := attachmentService.Upload(r.Context(), file, "uploads")
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "文件上传失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "上传成功", Data: result})
|
||||
}
|
||||
|
||||
// Delete 删除附件
|
||||
func (c *cAttachment) Delete(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
if id <= 0 {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "附件ID无效"})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用附件服务删除附件
|
||||
attachmentService := service.Attachment()
|
||||
err := attachmentService.Delete(r.Context(), id)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "删除附件失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "删除附件成功"})
|
||||
}
|
||||
|
||||
// Detail 获取附件详情
|
||||
func (c *cAttachment) Detail(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
if id <= 0 {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "附件ID无效"})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用附件服务获取详情
|
||||
attachmentService := service.Attachment()
|
||||
result, err := attachmentService.GetById(r.Context(), id)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取附件详情失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if result == nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 404, Message: "附件不存在"})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
71
internal/controller/config.go
Normal file
71
internal/controller/config.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"cms-api/internal/model"
|
||||
"cms-api/internal/service"
|
||||
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
// 网站配置控制器
|
||||
type cConfig struct{}
|
||||
|
||||
var Config = &cConfig{}
|
||||
|
||||
// List 获取配置列表
|
||||
func (c *cConfig) List(r *ghttp.Request) {
|
||||
var req *model.ConfigListRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用配置服务获取列表
|
||||
configService := service.Config()
|
||||
result, err := configService.List(r.Context(), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取配置列表失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// Update 更新配置
|
||||
func (c *cConfig) Update(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
if id <= 0 {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "配置ID无效"})
|
||||
return
|
||||
}
|
||||
|
||||
var req *model.UpdateConfigRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用配置服务更新配置
|
||||
configService := service.Config()
|
||||
err := configService.Update(r.Context(), gconv.String(id), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "更新配置失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "更新配置成功"})
|
||||
}
|
||||
|
||||
// Public 获取公开配置
|
||||
func (c *cConfig) Public(r *ghttp.Request) {
|
||||
// 调用配置服务获取公开配置
|
||||
configService := service.Config()
|
||||
result, err := configService.GetPublicConfigs(r.Context())
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取公开配置失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
159
internal/controller/news.go
Normal file
159
internal/controller/news.go
Normal file
@@ -0,0 +1,159 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"cms-api/internal/model"
|
||||
"cms-api/internal/service"
|
||||
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
// 新闻控制器
|
||||
type cNews struct{}
|
||||
|
||||
var News = &cNews{}
|
||||
|
||||
// List 获取新闻列表(公开接口)
|
||||
func (c *cNews) List(r *ghttp.Request) {
|
||||
var req *model.NewsListRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用新闻服务获取列表
|
||||
newsService := service.News()
|
||||
result, err := newsService.List(r.Context(), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取新闻列表失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// AdminList 获取新闻列表(管理后台)
|
||||
func (c *cNews) AdminList(r *ghttp.Request) {
|
||||
var req *model.NewsListRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用新闻服务获取列表(暂时使用相同方法)
|
||||
newsService := service.News()
|
||||
result, err := newsService.List(r.Context(), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取新闻列表失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// Create 创建新闻
|
||||
func (c *cNews) Create(r *ghttp.Request) {
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "功能开发中"})
|
||||
}
|
||||
|
||||
// Detail 获取新闻详情(公开接口)
|
||||
func (c *cNews) Detail(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
slug := gconv.String(r.Get("slug"))
|
||||
|
||||
if id <= 0 && slug == "" {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "新闻ID或别名无效"})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用新闻服务获取详情
|
||||
newsService := service.News()
|
||||
var result *model.News
|
||||
var err error
|
||||
|
||||
if id > 0 {
|
||||
result, err = newsService.GetById(r.Context(), id)
|
||||
} else {
|
||||
result, err = newsService.GetBySlug(r.Context(), slug)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取新闻详情失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if result == nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 404, Message: "新闻不存在"})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// AdminDetail 获取新闻详情(管理后台)
|
||||
func (c *cNews) AdminDetail(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
if id <= 0 {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "新闻ID无效"})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用新闻服务获取管理后台详情
|
||||
newsService := service.News()
|
||||
result, err := newsService.GetById(r.Context(), id)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取新闻详情失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if result == nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 404, Message: "新闻不存在"})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// Update 更新新闻
|
||||
func (c *cNews) Update(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
if id <= 0 {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "新闻ID无效"})
|
||||
return
|
||||
}
|
||||
|
||||
var req *model.UpdateNewsRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用新闻服务更新新闻
|
||||
newsService := service.News()
|
||||
err := newsService.Update(r.Context(), id, req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "更新新闻失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "更新新闻成功"})
|
||||
}
|
||||
|
||||
// Delete 删除新闻
|
||||
func (c *cNews) Delete(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
if id <= 0 {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "新闻ID无效"})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用新闻服务删除新闻
|
||||
newsService := service.News()
|
||||
err := newsService.Delete(r.Context(), id)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "删除新闻失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "删除新闻成功"})
|
||||
}
|
||||
106
internal/controller/router.go
Normal file
106
internal/controller/router.go
Normal file
@@ -0,0 +1,106 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
)
|
||||
|
||||
// RegisterRoutes 注册所有路由
|
||||
func RegisterRoutes(s *ghttp.Server) {
|
||||
// API v1 路由组
|
||||
v1 := s.Group("/api/v1")
|
||||
|
||||
// 公开API路由 - 不需要认证
|
||||
public := v1.Group("/public")
|
||||
{
|
||||
// 网站配置
|
||||
public.GET("/configs", Config.Public)
|
||||
|
||||
// 文章相关
|
||||
articles := public.Group("/articles")
|
||||
{
|
||||
articles.GET("/", Article.List)
|
||||
articles.GET("/{id}", Article.Detail)
|
||||
}
|
||||
|
||||
// 新闻相关
|
||||
news := public.Group("/news")
|
||||
{
|
||||
news.GET("/", News.List)
|
||||
news.GET("/{id}", News.Detail)
|
||||
}
|
||||
}
|
||||
|
||||
// 用户API路由
|
||||
user := v1.Group("/user")
|
||||
{
|
||||
user.POST("/login", User.Login)
|
||||
user.POST("/register", User.Create)
|
||||
user.GET("/profile", User.Detail)
|
||||
user.PUT("/profile", User.Update)
|
||||
}
|
||||
|
||||
// 管理员API路由
|
||||
admin := v1.Group("/admin")
|
||||
{
|
||||
// 管理员认证
|
||||
admin.POST("/login", Admin.Login)
|
||||
admin.POST("/logout", Admin.Logout)
|
||||
admin.GET("/profile", Admin.Detail)
|
||||
admin.PUT("/profile", Admin.Update)
|
||||
|
||||
// 用户管理
|
||||
users := admin.Group("/users")
|
||||
{
|
||||
users.GET("/", User.List)
|
||||
users.POST("/", User.Create)
|
||||
users.GET("/{id}", User.Detail)
|
||||
users.PUT("/{id}", User.Update)
|
||||
users.DELETE("/{id}", User.Delete)
|
||||
}
|
||||
|
||||
// 文章管理
|
||||
articles := admin.Group("/articles")
|
||||
{
|
||||
articles.GET("/", Article.List)
|
||||
articles.POST("/", Article.Create)
|
||||
articles.GET("/{id}", Article.Detail)
|
||||
articles.PUT("/{id}", Article.Update)
|
||||
articles.DELETE("/{id}", Article.Delete)
|
||||
}
|
||||
|
||||
// 新闻管理
|
||||
news := admin.Group("/news")
|
||||
{
|
||||
news.GET("/", News.List)
|
||||
news.POST("/", News.Create)
|
||||
news.GET("/{id}", News.Detail)
|
||||
news.PUT("/{id}", News.Update)
|
||||
news.DELETE("/{id}", News.Delete)
|
||||
}
|
||||
|
||||
// 附件管理
|
||||
attachments := admin.Group("/attachments")
|
||||
{
|
||||
attachments.GET("/", Attachment.List)
|
||||
attachments.POST("/upload", Attachment.Upload)
|
||||
attachments.GET("/{id}", Attachment.Detail)
|
||||
attachments.DELETE("/{id}", Attachment.Delete)
|
||||
}
|
||||
|
||||
// 系统配置管理
|
||||
configs := admin.Group("/configs")
|
||||
{
|
||||
configs.GET("/", Config.List)
|
||||
configs.PUT("/{id}", Config.Update)
|
||||
}
|
||||
}
|
||||
|
||||
// 健康检查
|
||||
s.BindHandler("/health", func(r *ghttp.Request) {
|
||||
r.Response.WriteJson(g.Map{
|
||||
"status": "ok",
|
||||
"message": "CMS API服务运行正常",
|
||||
})
|
||||
})
|
||||
}
|
||||
139
internal/controller/user.go
Normal file
139
internal/controller/user.go
Normal file
@@ -0,0 +1,139 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"cms-api/internal/model"
|
||||
"cms-api/internal/service"
|
||||
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
// 用户控制器
|
||||
type cUser struct{}
|
||||
|
||||
var User = &cUser{}
|
||||
|
||||
// List 获取用户列表
|
||||
func (c *cUser) List(r *ghttp.Request) {
|
||||
var req *model.UserListRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用用户服务获取列表
|
||||
userService := service.User()
|
||||
result, err := userService.List(r.Context(), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取用户列表失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// Create 创建用户
|
||||
func (c *cUser) Create(r *ghttp.Request) {
|
||||
var req *model.CreateUserRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用用户服务创建用户
|
||||
userService := service.User()
|
||||
err := userService.Create(r.Context(), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "创建用户失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "创建用户成功"})
|
||||
}
|
||||
|
||||
// Detail 获取用户详情
|
||||
func (c *cUser) Detail(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
if id <= 0 {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "用户ID无效"})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用用户服务获取详情
|
||||
userService := service.User()
|
||||
result, err := userService.GetById(r.Context(), id)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "获取用户详情失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
if result == nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 404, Message: "用户不存在"})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "获取成功", Data: result})
|
||||
}
|
||||
|
||||
// Update 更新用户
|
||||
func (c *cUser) Update(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
if id <= 0 {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "用户ID无效"})
|
||||
return
|
||||
}
|
||||
|
||||
var req *model.UpdateUserRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用用户服务更新用户
|
||||
userService := service.User()
|
||||
err := userService.Update(r.Context(), id, req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "更新用户失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "更新用户成功"})
|
||||
}
|
||||
|
||||
// Delete 删除用户
|
||||
func (c *cUser) Delete(r *ghttp.Request) {
|
||||
id := gconv.Int(r.Get("id"))
|
||||
if id <= 0 {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "用户ID无效"})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用用户服务删除用户
|
||||
userService := service.User()
|
||||
err := userService.Delete(r.Context(), id)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "删除用户失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "删除用户成功"})
|
||||
}
|
||||
|
||||
// Login 用户登录
|
||||
func (c *cUser) Login(r *ghttp.Request) {
|
||||
var req *model.UserLoginRequest
|
||||
if err := r.Parse(&req); err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 400, Message: "参数解析失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
// 调用用户服务进行登录验证
|
||||
userService := service.User()
|
||||
result, err := userService.Login(r.Context(), req)
|
||||
if err != nil {
|
||||
r.Response.WriteJson(&model.Response{Code: 500, Message: "登录失败", Data: err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
r.Response.WriteJson(&model.Response{Code: 200, Message: "登录成功", Data: result})
|
||||
}
|
||||
Reference in New Issue
Block a user