From 85794f13a41cb3d4ae0c3edcd41b9277247827ab Mon Sep 17 00:00:00 2001 From: cialloo Date: Sat, 25 Oct 2025 12:09:12 +0800 Subject: [PATCH] update --- api/Blog.api | 75 +++++++++++++++++++++++- app/internal/handler/getposthandler.go | 29 +++++++++ app/internal/handler/listpostshandler.go | 29 +++++++++ app/internal/handler/listtagshandler.go | 29 +++++++++ app/internal/handler/routes.go | 30 +++++++++- app/internal/logic/getpostlogic.go | 31 ++++++++++ app/internal/logic/listpostslogic.go | 31 ++++++++++ app/internal/logic/listtagslogic.go | 31 ++++++++++ app/internal/types/types.go | 43 ++++++++++++++ 9 files changed, 322 insertions(+), 6 deletions(-) create mode 100644 app/internal/handler/getposthandler.go create mode 100644 app/internal/handler/listpostshandler.go create mode 100644 app/internal/handler/listtagshandler.go create mode 100644 app/internal/logic/getpostlogic.go create mode 100644 app/internal/logic/listpostslogic.go create mode 100644 app/internal/logic/listtagslogic.go diff --git a/api/Blog.api b/api/Blog.api index 89dba1d..c9a7521 100644 --- a/api/Blog.api +++ b/api/Blog.api @@ -64,6 +64,49 @@ type ( DeletePostResp {} ) +type ( + GetPostReq { + post_id string `json:"post_id"` + } + GetPostResp { + post_id string `json:"post_id"` + title string `json:"title"` + content string `json:"content"` + cover_image_url string `json:"cover_image_url"` + created_at int64 `json:"created_at"` + updated_at int64 `json:"updated_at"` + } +) + +type ( + ListPostsReq { + page int `json:"page"` + page_size int `json:"page_size"` + } + ListPostsResp { + posts []ListPostsRespPosts `json:"posts"` + total_count int `json:"total_count"` + } + ListPostsRespPosts { + post_id string `json:"post_id"` + title string `json:"title"` + cover_image_url string `json:"cover_image_url"` + created_at int64 `json:"created_at"` + updated_at int64 `json:"updated_at"` + } +) + +type ( + ListTagsReq {} + ListTagsResp { + tags []ListTagsRespTags `json:"tags"` + } + ListTagsRespTags { + tag_id string `json:"tag_id"` + tag_name string `json:"tag_name"` + } +) + @server ( prefix: /api/blog ) @@ -76,6 +119,32 @@ service Blog { get /ping (PingReq) returns (PingResp) } +@server ( + prefix: /api/blog/view +) +service Blog { + @doc ( + summary: "Get a blog post by ID" + description: "Get a blog post by ID" + ) + @handler GetPostHandler + post /post (GetPostReq) returns (GetPostResp) + + @doc ( + summary: "Get a list of blog posts" + description: "Get a list of blog posts with pagination" + ) + @handler ListPostsHandler + post /posts (ListPostsReq) returns (ListPostsResp) + + @doc ( + summary: "Get a list of blog tags" + description: "Get a list of blog tags" + ) + @handler ListTagsHandler + post /tags (ListTagsReq) returns (ListTagsResp) +} + @server ( middleware: SuperAdminAuthMiddleware prefix: /api/blog/post @@ -105,7 +174,7 @@ service Blog { @server ( middleware: SuperAdminAuthMiddleware - prefix: /api/blog + prefix: /api/blog/file ) service Blog { @doc ( @@ -113,13 +182,13 @@ service Blog { description: "Get presigned URL for file upload" ) @handler UploadPresignedURLHandler - post /file/upload (UploadPresignedURLReq) returns (UploadPresignedURLResp) + post /upload (UploadPresignedURLReq) returns (UploadPresignedURLResp) @doc ( summary: "Get presigned URL for file download" description: "Get presigned URL for file download" ) @handler DownloadPresignedURLHandler - post /file/download (DownloadPresignedURLReq) returns (DownloadPresignedURLResp) + post /download (DownloadPresignedURLReq) returns (DownloadPresignedURLResp) } diff --git a/app/internal/handler/getposthandler.go b/app/internal/handler/getposthandler.go new file mode 100644 index 0000000..2a710a2 --- /dev/null +++ b/app/internal/handler/getposthandler.go @@ -0,0 +1,29 @@ +package handler + +import ( + "net/http" + + "git.cialloo.com/CiallooWeb/Blog/app/internal/logic" + "git.cialloo.com/CiallooWeb/Blog/app/internal/svc" + "git.cialloo.com/CiallooWeb/Blog/app/internal/types" + "github.com/zeromicro/go-zero/rest/httpx" +) + +// Get a blog post by ID +func GetPostHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.GetPostReq + if err := httpx.Parse(r, &req); err != nil { + httpx.ErrorCtx(r.Context(), w, err) + return + } + + l := logic.NewGetPostLogic(r.Context(), svcCtx) + resp, err := l.GetPost(&req) + if err != nil { + httpx.ErrorCtx(r.Context(), w, err) + } else { + httpx.OkJsonCtx(r.Context(), w, resp) + } + } +} diff --git a/app/internal/handler/listpostshandler.go b/app/internal/handler/listpostshandler.go new file mode 100644 index 0000000..ba9cdb5 --- /dev/null +++ b/app/internal/handler/listpostshandler.go @@ -0,0 +1,29 @@ +package handler + +import ( + "net/http" + + "git.cialloo.com/CiallooWeb/Blog/app/internal/logic" + "git.cialloo.com/CiallooWeb/Blog/app/internal/svc" + "git.cialloo.com/CiallooWeb/Blog/app/internal/types" + "github.com/zeromicro/go-zero/rest/httpx" +) + +// Get a list of blog posts +func ListPostsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.ListPostsReq + if err := httpx.Parse(r, &req); err != nil { + httpx.ErrorCtx(r.Context(), w, err) + return + } + + l := logic.NewListPostsLogic(r.Context(), svcCtx) + resp, err := l.ListPosts(&req) + if err != nil { + httpx.ErrorCtx(r.Context(), w, err) + } else { + httpx.OkJsonCtx(r.Context(), w, resp) + } + } +} diff --git a/app/internal/handler/listtagshandler.go b/app/internal/handler/listtagshandler.go new file mode 100644 index 0000000..adaa68b --- /dev/null +++ b/app/internal/handler/listtagshandler.go @@ -0,0 +1,29 @@ +package handler + +import ( + "net/http" + + "git.cialloo.com/CiallooWeb/Blog/app/internal/logic" + "git.cialloo.com/CiallooWeb/Blog/app/internal/svc" + "git.cialloo.com/CiallooWeb/Blog/app/internal/types" + "github.com/zeromicro/go-zero/rest/httpx" +) + +// Get a list of blog tags +func ListTagsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.ListTagsReq + if err := httpx.Parse(r, &req); err != nil { + httpx.ErrorCtx(r.Context(), w, err) + return + } + + l := logic.NewListTagsLogic(r.Context(), svcCtx) + resp, err := l.ListTags(&req) + if err != nil { + httpx.ErrorCtx(r.Context(), w, err) + } else { + httpx.OkJsonCtx(r.Context(), w, resp) + } + } +} diff --git a/app/internal/handler/routes.go b/app/internal/handler/routes.go index 8fa1bf7..36c740a 100644 --- a/app/internal/handler/routes.go +++ b/app/internal/handler/routes.go @@ -24,6 +24,30 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { rest.WithPrefix("/api/blog"), ) + server.AddRoutes( + []rest.Route{ + { + // Get a blog post by ID + Method: http.MethodPost, + Path: "/post", + Handler: GetPostHandler(serverCtx), + }, + { + // Get a list of blog posts + Method: http.MethodPost, + Path: "/posts", + Handler: ListPostsHandler(serverCtx), + }, + { + // Get a list of blog tags + Method: http.MethodPost, + Path: "/tags", + Handler: ListTagsHandler(serverCtx), + }, + }, + rest.WithPrefix("/api/blog/view"), + ) + server.AddRoutes( rest.WithMiddlewares( []rest.Middleware{serverCtx.SuperAdminAuthMiddleware}, @@ -58,17 +82,17 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { { // Get presigned URL for file download Method: http.MethodPost, - Path: "/file/download", + Path: "/download", Handler: DownloadPresignedURLHandler(serverCtx), }, { // Get presigned URL for file upload Method: http.MethodPost, - Path: "/file/upload", + Path: "/upload", Handler: UploadPresignedURLHandler(serverCtx), }, }..., ), - rest.WithPrefix("/api/blog"), + rest.WithPrefix("/api/blog/file"), ) } diff --git a/app/internal/logic/getpostlogic.go b/app/internal/logic/getpostlogic.go new file mode 100644 index 0000000..353b036 --- /dev/null +++ b/app/internal/logic/getpostlogic.go @@ -0,0 +1,31 @@ +package logic + +import ( + "context" + + "git.cialloo.com/CiallooWeb/Blog/app/internal/svc" + "git.cialloo.com/CiallooWeb/Blog/app/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type GetPostLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +// Get a blog post by ID +func NewGetPostLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetPostLogic { + return &GetPostLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetPostLogic) GetPost(req *types.GetPostReq) (resp *types.GetPostResp, err error) { + // todo: add your logic here and delete this line + + return +} diff --git a/app/internal/logic/listpostslogic.go b/app/internal/logic/listpostslogic.go new file mode 100644 index 0000000..1c2ca68 --- /dev/null +++ b/app/internal/logic/listpostslogic.go @@ -0,0 +1,31 @@ +package logic + +import ( + "context" + + "git.cialloo.com/CiallooWeb/Blog/app/internal/svc" + "git.cialloo.com/CiallooWeb/Blog/app/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type ListPostsLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +// Get a list of blog posts +func NewListPostsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListPostsLogic { + return &ListPostsLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *ListPostsLogic) ListPosts(req *types.ListPostsReq) (resp *types.ListPostsResp, err error) { + // todo: add your logic here and delete this line + + return +} diff --git a/app/internal/logic/listtagslogic.go b/app/internal/logic/listtagslogic.go new file mode 100644 index 0000000..ec52ac6 --- /dev/null +++ b/app/internal/logic/listtagslogic.go @@ -0,0 +1,31 @@ +package logic + +import ( + "context" + + "git.cialloo.com/CiallooWeb/Blog/app/internal/svc" + "git.cialloo.com/CiallooWeb/Blog/app/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type ListTagsLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +// Get a list of blog tags +func NewListTagsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListTagsLogic { + return &ListTagsLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *ListTagsLogic) ListTags(req *types.ListTagsReq) (resp *types.ListTagsResp, err error) { + // todo: add your logic here and delete this line + + return +} diff --git a/app/internal/types/types.go b/app/internal/types/types.go index 470963c..809dca1 100644 --- a/app/internal/types/types.go +++ b/app/internal/types/types.go @@ -39,6 +39,49 @@ type EditPostReq struct { type EditPostResp struct { } +type GetPostReq struct { + Post_id string `json:"post_id"` +} + +type GetPostResp struct { + Post_id string `json:"post_id"` + Title string `json:"title"` + Content string `json:"content"` + Cover_image_url string `json:"cover_image_url"` + Created_at int64 `json:"created_at"` + Updated_at int64 `json:"updated_at"` +} + +type ListPostsReq struct { + Page int `json:"page"` + Page_size int `json:"page_size"` +} + +type ListPostsResp struct { + Posts []ListPostsRespPosts `json:"posts"` + Total_count int `json:"total_count"` +} + +type ListPostsRespPosts struct { + Post_id string `json:"post_id"` + Title string `json:"title"` + Cover_image_url string `json:"cover_image_url"` + Created_at int64 `json:"created_at"` + Updated_at int64 `json:"updated_at"` +} + +type ListTagsReq struct { +} + +type ListTagsResp struct { + Tags []ListTagsRespTags `json:"tags"` +} + +type ListTagsRespTags struct { + Tag_id string `json:"tag_id"` + Tag_name string `json:"tag_name"` +} + type PingReq struct { }