补充页面图片接口

This commit is contained in:
2025-10-27 12:48:37 +08:00
parent cc944f6a19
commit c0dded3e43
11 changed files with 490 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package pageImage
import (
"fmt"
"net/http"
"github.com/JACKYMYPERSON/hldrCenter/config"
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/logic/pageImage"
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/model"
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/types"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/rest/httpx"
)
func GetPageImagesHandler(cfg *config.Config) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.GetPageImagesReq
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
mysqlCfg := cfg.MySQL
dsn := fmt.Sprintf(
"%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=true&loc=Local",
mysqlCfg.Username,
mysqlCfg.Password,
mysqlCfg.Host,
mysqlCfg.Port,
mysqlCfg.Database,
mysqlCfg.Charset,
)
fmt.Println("接收到articlePost请求")
conn := sqlx.NewSqlConn("mysql", dsn)
imgModel := model.NewPageImageModel(conn)
l := pageImage.NewGetPageImagesLogic(r.Context(), cfg, imgModel)
resp, err := l.GetPageImages(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,50 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package pageImage
import (
"fmt"
"net/http"
"github.com/JACKYMYPERSON/hldrCenter/config"
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/logic/pageImage"
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/model"
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/types"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/rest/httpx"
)
func SavePageImageHandler(cfg *config.Config) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.SavePageImageReq
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
mysqlCfg := cfg.MySQL
dsn := fmt.Sprintf(
"%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=true&loc=Local",
mysqlCfg.Username,
mysqlCfg.Password,
mysqlCfg.Host,
mysqlCfg.Port,
mysqlCfg.Database,
mysqlCfg.Charset,
)
fmt.Println("接收到articlePost请求")
conn := sqlx.NewSqlConn("mysql", dsn)
imgModel := model.NewPageImageModel(conn)
l := pageImage.NewSavePageImageLogic(r.Context(), cfg, imgModel)
resp, err := l.SavePageImage(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,70 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package pageImage
import (
"context"
"fmt"
"sort"
"github.com/JACKYMYPERSON/hldrCenter/config"
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/model"
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetPageImagesLogic struct {
logx.Logger
ctx context.Context
cfg *config.Config
model model.PageImageModel
}
func NewGetPageImagesLogic(ctx context.Context, cfg *config.Config, model model.PageImageModel) *GetPageImagesLogic {
return &GetPageImagesLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
cfg: cfg,
model: model,
}
}
func (l *GetPageImagesLogic) GetPageImages(req *types.GetPageImagesReq) (resp *types.GetPageImagesResp, err error) {
images, err := l.model.FindByPage(l.ctx, req.Page)
if err != nil {
// 处理数据库查询错误(如记录不存在时返回空列表,不报错)
if err == model.ErrNotFound {
return &types.GetPageImagesResp{
Images: []types.PageImage{},
Msg: "该页面暂无图片",
}, nil
}
return nil, fmt.Errorf("查询图片失败:%v", err)
}
// 2. 转换模型数据到响应结构体
var respImages []types.PageImage
for _, img := range images {
respImages = append(respImages, types.PageImage{
Id: img.Id,
Page: img.Page,
ImageUrl: img.ImageUrl,
Sort: int(img.Sort),
CreateTime: img.CreateTime.Format("2006-01-02 15:04:05"), // 格式化时间
UpdateTime: img.UpdateTime.Format("2006-01-02 15:04:05"),
})
}
// 3. 按 sort 字段升序排序(确保首页轮播图顺序正确)
sort.Slice(respImages, func(i, j int) bool {
return respImages[i].Sort < respImages[j].Sort
})
// 4. 返回响应
return &types.GetPageImagesResp{
Images: respImages,
Msg: "查询成功",
}, nil
}

View File

@@ -0,0 +1,36 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package pageImage
import (
"context"
"github.com/JACKYMYPERSON/hldrCenter/config"
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/model"
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type SavePageImageLogic struct {
logx.Logger
ctx context.Context
cfg *config.Config
model model.PageImageModel
}
func NewSavePageImageLogic(ctx context.Context, cfg *config.Config, model model.PageImageModel) *SavePageImageLogic {
return &SavePageImageLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
cfg: cfg,
model: model,
}
}
func (l *SavePageImageLogic) SavePageImage(req *types.SavePageImageReq) (resp *types.SavePageImageResp, err error) {
// todo: add your logic here and delete this line
return
}

View File

@@ -0,0 +1,29 @@
package model
import "github.com/zeromicro/go-zero/core/stores/sqlx"
var _ PageImageModel = (*customPageImageModel)(nil)
type (
// PageImageModel is an interface to be customized, add more methods here,
// and implement the added methods in customPageImageModel.
PageImageModel interface {
pageImageModel
withSession(session sqlx.Session) PageImageModel
}
customPageImageModel struct {
*defaultPageImageModel
}
)
// NewPageImageModel returns a model for the database table.
func NewPageImageModel(conn sqlx.SqlConn) PageImageModel {
return &customPageImageModel{
defaultPageImageModel: newPageImageModel(conn),
}
}
func (m *customPageImageModel) withSession(session sqlx.Session) PageImageModel {
return NewPageImageModel(sqlx.NewSqlConnFromSession(session))
}

View File

@@ -0,0 +1,121 @@
// Code generated by goctl. DO NOT EDIT.
// versions:
// goctl version: 1.9.2
package model
import (
"context"
"database/sql"
"fmt"
"strings"
"time"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/core/stringx"
)
var (
pageImageFieldNames = builder.RawFieldNames(&PageImage{})
pageImageRows = strings.Join(pageImageFieldNames, ",")
pageImageRowsExpectAutoSet = strings.Join(stringx.Remove(pageImageFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
pageImageRowsWithPlaceHolder = strings.Join(stringx.Remove(pageImageFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"
)
type (
pageImageModel interface {
Insert(ctx context.Context, data *PageImage) (sql.Result, error)
FindOne(ctx context.Context, id int64) (*PageImage, error)
FindOneByPageSort(ctx context.Context, page string, sort int64) (*PageImage, error)
Update(ctx context.Context, data *PageImage) error
Delete(ctx context.Context, id int64) error
FindByPage(ctx context.Context, page string) ([]*PageImage, error)
}
defaultPageImageModel struct {
conn sqlx.SqlConn
table string
}
PageImage struct {
Id int64 `db:"id"` // 图片ID主键
Page string `db:"page"` // 所属页面home-首页base-overview-基地概况等)
ImageUrl string `db:"image_url"` // 图片URL
Sort int64 `db:"sort"` // 排序首页1-3其他页面1
CreateTime time.Time `db:"create_time"` // 创建时间
UpdateTime time.Time `db:"update_time"` // 更新时间
}
)
func newPageImageModel(conn sqlx.SqlConn) *defaultPageImageModel {
return &defaultPageImageModel{
conn: conn,
table: "`page_image`",
}
}
func (m *defaultPageImageModel) Delete(ctx context.Context, id int64) error {
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
_, err := m.conn.ExecCtx(ctx, query, id)
return err
}
func (m *defaultPageImageModel) FindOne(ctx context.Context, id int64) (*PageImage, error) {
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", pageImageRows, m.table)
var resp PageImage
err := m.conn.QueryRowCtx(ctx, &resp, query, id)
switch err {
case nil:
return &resp, nil
case sqlx.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}
func (m *defaultPageImageModel) FindOneByPageSort(ctx context.Context, page string, sort int64) (*PageImage, error) {
var resp PageImage
query := fmt.Sprintf("select %s from %s where `page` = ? and `sort` = ? limit 1", pageImageRows, m.table)
err := m.conn.QueryRowCtx(ctx, &resp, query, page, sort)
switch err {
case nil:
return &resp, nil
case sqlx.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}
func (m *defaultPageImageModel) Insert(ctx context.Context, data *PageImage) (sql.Result, error) {
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?)", m.table, pageImageRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.Page, data.ImageUrl, data.Sort)
return ret, err
}
func (m *defaultPageImageModel) Update(ctx context.Context, newData *PageImage) error {
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, pageImageRowsWithPlaceHolder)
_, err := m.conn.ExecCtx(ctx, query, newData.Page, newData.ImageUrl, newData.Sort, newData.Id)
return err
}
func (m *defaultPageImageModel) tableName() string {
return m.table
}
func (m *defaultPageImageModel) FindByPage(ctx context.Context, page string) ([]*PageImage, error) {
// pageImageRows 是 goctl 生成的字段列表常量(如 "id,page,image_url,sort,create_time,update_time"
query := fmt.Sprintf("select %s from %s USE INDEX (idx_page) where page = ?", pageImageRows, m.table)
var images []*PageImage
err := m.conn.QueryRowsCtx(ctx, &images, query, page)
if err != nil {
if err == sql.ErrNoRows {
return []*PageImage{}, nil // 返回空切片,避免上层处理 ErrNotFound 导致的错误
}
return nil, fmt.Errorf("查询失败:%v", err)
}
return images, nil
}

View File

@@ -0,0 +1,5 @@
package model
import "github.com/zeromicro/go-zero/core/stores/sqlx"
var ErrNotFound = sqlx.ErrNotFound

View File

@@ -0,0 +1,44 @@
// Code generated by goctl. DO NOT EDIT.
// goctl 1.9.2
package types
type DeletePageImageReq struct {
Id int64 `json:"id" validate:"required"` // 图片ID
}
type DeletePageImageResp struct {
Success bool `json:"success"`
Msg string `json:"message"`
}
type GetPageImagesReq struct {
Page string `json:"page" validate:"required"` // 页面标识如home、base-overview等
}
type GetPageImagesResp struct {
Images []PageImage `json:"images"` // 图片列表首页返回3张其他页面返回1张
Msg string `json:"message"`
}
type PageImage struct {
Id int64 `json:"id"` // 图片ID
Page string `json:"page"` // 所属页面(对应路由的页面标识)
ImageUrl string `json:"image_url"` // 图片URL
Sort int `json:"sort"` // 排序首页1-3其他页面1
CreateTime string `json:"create_time"` // 创建时间
UpdateTime string `json:"update_time"` // 更新时间
}
type SavePageImageReq struct {
Id int64 `json:"id,omitempty"` // 可选更新时传ID
Page string `json:"page" validate:"required"` // 页面标识
ImageUrl string `json:"image_url" validate:"required"` // 图片URL
Sort int `json:"sort" validate:"required"` // 排序首页1-3其他页面1
}
type SavePageImageResp struct {
Success bool `json:"success"`
Msg string `json:"message"`
Id int64 `json:"id,omitempty"` // 新增时返回ID
}