bug修改&朋友圈功能完善

This commit is contained in:
2025-07-23 18:35:17 +08:00
parent c0c8c6758a
commit 5e7d77a66b
10 changed files with 637 additions and 1516 deletions

View File

@@ -3,8 +3,10 @@ package mysql
import (
"acquaintances/biz/model"
"acquaintances/biz/model/user"
"errors"
"fmt"
"github.com/cloudwego/hertz/pkg/common/hlog"
"gorm.io/gorm"
"time"
)
// SaveMomentWithImages 新建动态
@@ -20,11 +22,10 @@ func SaveMomentWithImages(moment *model.Moment, imageURLs []string) error {
// 保存图片(如果有)
if len(imageURLs) > 0 {
images := make([]model.MomentImage, 0, len(imageURLs))
for i, url := range imageURLs {
for _, url := range imageURLs {
images = append(images, model.MomentImage{
MomentID: moment.ID,
ImageURL: url,
SortOrder: uint8(i), // 按URL顺序排序
MomentID: moment.ID,
ImageURL: url,
})
}
if err := tx.Create(&images).Error; err != nil {
@@ -48,100 +49,36 @@ func CheckUserExists(userID string) (bool, error) {
return count > 0, nil
}
// 构建可见性查询条件
func buildVisibilityCondition(currentUserID string) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
// 可见性条件:公开 或者 仅自己可见(且是当前用户) 或者 仅好友可见(需要查询好友关系)
return db.Where("(visibility = ?) OR (visibility = ? AND user_id = ?) OR (visibility = ? AND user_id IN (?))",
model.VisibilityPublic,
model.VisibilitySelfOnly,
currentUserID,
model.VisibilityFriendsOnly,
getFriendUserIDs(currentUserID), // 需要实现好友关系查询
)
}
}
// 获取当前用户的好友ID列表
func getFriendUserIDs(userID string) []string {
// 实际项目中需要查询好友关系表
// 这里简化处理,返回空列表
return []string{}
}
// ConvertMomentsToDTOs 将数据库模型转换为API响应DTO
func ConvertMomentsToDTOs(moments []model.Moment, currentUserID string) ([]user.Moment, error) {
db := DB
var result []user.Moment
// 提取所有用户ID用于批量查询
userIDs := make([]string, 0, len(moments))
for _, m := range moments {
userIDs = append(userIDs, m.UserID)
}
// 批量查询用户信息
userMap, err := batchGetUserInfo(userIDs)
// 获取当前用户的好友ID列表
func getFriendUserIDs(userID string) ([]string, error) {
var friends []model.FriendRelationship
// 一次查询所有与当前用户相关的已通过好友关系
err := DB.Model(model.FriendRelationship{}).
Where("(applicant_id = ? OR target_user_id = ?) AND status = 1", userID, userID).
Find(&friends).Error
if err != nil {
return nil, err
return nil, fmt.Errorf("查询好友列表失败: %w", err)
}
// 处理每条动态
for _, m := range moments {
// 获取用户信息
userInfo := convertUserModelToDTO(userMap[m.UserID])
// 查询动态图片
var images []model.MomentImage
if err := db.Where("moment_id = ?", m.ID).
Order("sort_order ASC").
Find(&images).Error; err != nil {
return nil, err
// 使用map去重
friendMap := make(map[string]struct{})
for _, rel := range friends {
// 根据关系方向添加对应的好友ID
if rel.ApplicantID == userID {
friendMap[rel.TargetUserID] = struct{}{}
} else {
friendMap[rel.ApplicantID] = struct{}{}
}
// 转换图片列表
momentImages := make([]*user.MomentImage, 0, len(images))
for _, img := range images {
momentImages = append(momentImages, &user.MomentImage{
ID: int64(img.ID),
MomentID: int64(img.MomentID),
ImageURL: img.ImageURL,
})
}
// 构建动态DTO
result = append(result, user.Moment{
ID: int64(m.ID),
UserID: m.UserID,
User: &userInfo,
Content: m.Content,
Visibility: user.MomentVisibility(m.Visibility),
Location: m.Location,
Status: user.ContentStatus(m.Status),
LikeCount: int32(m.LikeCount),
CommentCount: int32(m.CommentCount),
Images: momentImages,
CreatedAt: m.CreatedAt.Format(time.RFC3339),
UpdatedAt: m.UpdatedAt.Format(time.RFC3339),
})
}
return result, nil
}
// 批量获取用户信息
func batchGetUserInfo(userIDs []string) (map[string]model.User, error) {
db := DB
var users []model.User
if err := db.Where("user_id IN (?)", userIDs).Find(&users).Error; err != nil {
return nil, err
// 转换map为切片
friendUserIDs := make([]string, 0, len(friendMap))
for id := range friendMap {
friendUserIDs = append(friendUserIDs, id)
}
userMap := make(map[string]model.User)
for _, u := range users {
userMap[u.UserID] = u
}
return userMap, nil
return friendUserIDs, nil
}
// 将用户模型转换为DTO
@@ -162,3 +99,280 @@ func convertUserModelToDTO(u model.User) user.UserInfoReq {
return userInfo
}
// GetMomentsImage 获取指定动态的图像列表
func GetMomentsImage(ids uint) ([]*user.MomentImage, error) {
db := DB
var images []model.MomentImage
var data []*user.MomentImage
err := db.Model(&model.MomentImage{}).Where("moment_id = ?", ids).Find(&images).Error
if err != nil {
return nil, err
}
for _, v := range images {
data = append(data, &user.MomentImage{
ID: int64(v.ID),
MomentID: int64(v.MomentID),
ImageURL: v.ImageURL,
})
}
return data, nil
}
// GetFriendsMoments 获取好友动态
func GetFriendsMoments(req user.ListMomentsRequest) ([]*user.Moment, int32, error) {
db := DB
//获取好友id列表
friends, err := getFriendUserIDs(req.UserID)
if err != nil {
return nil, 0, err
}
// 校验分页参数
if req.Page < 1 {
req.Page = 1
}
if req.PageSize < 1 {
req.PageSize = 10
}
// 查询总数
var total int64
query := db.Model(&model.Moment{}).Where("user_id = ?", req.UserID)
if len(friends) > 0 {
query = query.Or("user_id IN (?) AND visibility != ?", friends, model.VisibilitySelfOnly)
}
if err := query.Count(&total).Error; err != nil {
return nil, 0, err
}
//获取朋友圈内容信息
var moments []model.Moment
query = db.Model(&model.Moment{}).Where("user_id = ?", req.UserID)
if len(friends) > 0 {
query = query.Or("user_id IN (?) AND visibility != ?", friends, model.VisibilitySelfOnly)
}
err = query.Limit(int(req.PageSize)).Offset(int(req.PageSize * (req.Page - 1))).Find(&moments).Error
if err != nil {
return nil, 0, err
}
//批量查询用户信息
var userIDs []string
for _, v := range moments {
userIDs = append(userIDs, v.UserID)
}
userInfo, err := GetUsersById(userIDs...) // 自定义批量查询函数
if err != nil {
hlog.Errorf("批量查询用户失败: %v", err)
return nil, 0, err
}
var data []*user.Moment
query = db.Model(&model.Moment{}).Where("user_id = ?", req.UserID)
if len(friends) > 0 {
query = query.Or("user_id IN (?) AND visibility != ?", friends, model.VisibilitySelfOnly)
}
err = query.Limit(int(req.PageSize)).Offset(int(req.PageSize * (req.Page - 1))).Find(&moments).Error
if err != nil {
return nil, 0, err
}
for k, v := range moments {
images, err := GetMomentsImage(v.ID)
if err != nil {
continue
}
data = append(data, &user.Moment{
ID: int64(v.ID),
UserID: v.UserID,
User: userInfo[k],
Content: v.Content,
Location: v.Location,
Status: user.ContentStatus(int64(v.Status)),
LikeCount: int32(v.LikeCount),
CommentCount: int32(v.CommentCount),
Images: images,
CreatedAt: v.CreatedAt.Format("2006-01-02 15:04"),
})
}
return data, int32(total), nil
}
// GetMomentsAppoint 获取指定好友动态
func GetMomentsAppoint(req user.ListMomentsAppointRequest) ([]*user.Moment, int32, error) {
db := DB
// 校验分页参数
if req.Page < 1 {
req.Page = 1
}
if req.PageSize < 1 {
req.PageSize = 10
}
// 查询总数
var total int64
query := db.Model(&model.Moment{}).Where("user_id = ?", req.UserID)
if err := query.Count(&total).Error; err != nil {
return nil, 0, err
}
//获取朋友圈内容信息
var moments []model.Moment
query = db.Model(&model.Moment{}).Where("user_id = ?", req.UserID)
err := query.Limit(int(req.PageSize)).Offset(int(req.PageSize * (req.Page - 1))).Find(&moments).Error
if err != nil {
return nil, 0, err
}
//查询用户信息
userInfo, err := GetUsersById(req.UserID) // 自定义批量查询函数
if err != nil || len(userInfo) != 1 {
hlog.Errorf("批量查询用户失败: %v", err)
return nil, 0, err
}
var data []*user.Moment
query = db.Model(&model.Moment{}).Where("user_id = ?", req.UserID).Limit(int(req.PageSize)).Offset(int(req.PageSize * (req.Page - 1))).Find(&moments)
if db.Error != nil {
return nil, 0, err
}
for _, v := range moments {
images, err := GetMomentsImage(v.ID)
if err != nil {
continue
}
data = append(data, &user.Moment{
ID: int64(v.ID),
UserID: v.UserID,
User: userInfo[0],
Content: v.Content,
Location: v.Location,
Status: user.ContentStatus(int64(v.Status)),
LikeCount: int32(v.LikeCount),
CommentCount: int32(v.CommentCount),
Images: images,
CreatedAt: v.CreatedAt.Format("2006-01-02 15:04"),
})
}
return data, int32(total), nil
}
// DeleteMoment 删除朋友圈动态
func DeleteMoment(req user.DeleteMomentRequest) error {
db := DB
// 使用事务确保数据一致性
return db.Transaction(func(tx *gorm.DB) error {
// 保存动态
if err := tx.Model(&model.Moment{}).Where("id = ?", req.MomentID).Delete(&model.Moment{}).Error; err != nil {
return err
}
// 删除图片
if err := tx.Model(model.MomentImage{}).Where("moment_id = ?", req.MomentID).Delete(&model.MomentImage{}).Error; err != nil {
return err
}
//删除评论
//TODO
//删除点赞
//TODO
return nil
})
}
// LikeMoment 点赞朋友圈动态
func LikeMoment(req user.LikeMomentRequest) error {
db := DB
// 使用事务确保数据一致性
return db.Transaction(func(tx *gorm.DB) error {
// 检查是否已经点赞
var existingLike model.MomentLike
err := tx.Model(&model.MomentLike{}).
Where("user_id = ? AND moment_id = ?", req.UserID, req.MomentID).
First(&existingLike).Error
// 如果不是"未找到"错误,说明查询异常
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
return fmt.Errorf("检查点赞记录失败: %w", err)
}
// 如果已经点赞,返回错误
if err == nil {
return errors.New("已经点赞过该动态")
}
// 新增点赞记录
if err := tx.Model(&model.MomentLike{}).Create(&model.MomentLike{
UserID: req.UserID,
MomentID: uint(req.MomentID),
}).Error; err != nil {
return fmt.Errorf("创建点赞记录失败: %w", err)
}
// 点赞数原子增加1避免并发问题
result := tx.Model(model.Moment{}).
Where("moment_id = ?", req.MomentID).
Update("like_count", gorm.Expr("like_count + 1"))
if result.Error != nil {
return fmt.Errorf("更新点赞数失败: %w", result.Error)
}
// 检查动态是否存在
if result.RowsAffected == 0 {
return errors.New("动态不存在")
}
return nil
})
}
// UnlikeMoment 取消点赞朋友圈动态
func UnlikeMoment(req user.UnlikeMomentRequest) error {
db := DB
// 使用事务确保数据一致性
return db.Transaction(func(tx *gorm.DB) error {
// 检查是否存在点赞记录
var like model.MomentLike
err := tx.Model(&model.MomentLike{}).
Where("user_id = ? AND moment_id = ?", req.UserID, req.MomentID).
First(&like).Error
// 如果不是"未找到"错误,说明查询异常
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
return fmt.Errorf("检查点赞记录失败: %w", err)
}
// 如果没有点赞记录,返回错误
if errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("未点赞该动态,无法取消")
}
// 删除点赞记录
if err := tx.Model(&model.MomentLike{}).
Where("user_id = ? AND moment_id = ?", req.UserID, req.MomentID).
Delete(&model.MomentLike{}).Error; err != nil {
return fmt.Errorf("删除点赞记录失败: %w", err)
}
// 点赞数原子减少1
result := tx.Model(model.Moment{}).
Where("moment_id = ? AND like_count > 0", req.MomentID). // 确保点赞数不会小于0
Update("like_count", gorm.Expr("like_count - 1"))
if result.Error != nil {
return fmt.Errorf("更新点赞数失败: %w", result.Error)
}
// 检查动态是否存在
if result.RowsAffected == 0 {
return errors.New("动态不存在或点赞数已为0")
}
return nil
})
}

View File

@@ -33,7 +33,7 @@ func Init() {
panic(err)
}
// 自动迁移
err = DB.AutoMigrate(model.User{}, model.Country{}, model.UserRelations{}, model.FriendRelationship{}, model.ChatGroupInfo{}, model.GroupUserRelation{})
err = DB.AutoMigrate(model.User{}, model.Country{}, model.UserRelations{}, model.FriendRelationship{}, model.ChatGroupInfo{}, model.GroupUserRelation{}, model.Moment{}, model.MomentImage{}, model.MomentLike{}, model.MomentComment{})
if err != nil {
hlog.Error("AutoMigrate failed: " + err.Error())
return

View File

@@ -45,9 +45,6 @@ func DeleteUser(userId string) error {
return errTransaction
}
func UpdateUser(user *user.User) error {
return DB.Updates(user).Error
}
func UpdatesUser(user *user.UpdateUserRequest) error {
db := DB.Model(&model.User{})
maps := make(map[string]interface{})

View File

@@ -6,6 +6,7 @@ import (
"acquaintances/biz/dal/mysql"
"acquaintances/biz/model"
"context"
"github.com/cloudwego/hertz/pkg/common/hlog"
user "acquaintances/biz/model/user"
"github.com/cloudwego/hertz/pkg/app"
@@ -20,18 +21,18 @@ func CreateMoment(ctx context.Context, c *app.RequestContext) {
// 绑定并验证请求参数
if err = c.BindAndValidate(&req); err != nil {
c.String(consts.StatusBadRequest, "请求参数错误: %v", err)
c.JSON(consts.StatusBadRequest, "请求参数错误")
return
}
hlog.Errorf("+++++++")
// 验证用户是否存在实际项目中应通过token获取用户ID并验证
exists, err := mysql.CheckUserExists(req.UserID)
if err != nil {
c.String(consts.StatusInternalServerError, "查询用户信息失败: %v", err)
c.JSON(consts.StatusInternalServerError, "查询用户信息失败")
return
}
if !exists {
c.String(consts.StatusForbidden, "用户不存在")
c.JSON(consts.StatusForbidden, "用户不存在")
return
}
@@ -45,7 +46,7 @@ func CreateMoment(ctx context.Context, c *app.RequestContext) {
}
// 保存动态到数据库
if err = mysql.SaveMomentWithImages(&moment, req.ImageURLs); err != nil {
if err = mysql.SaveMomentWithImages(&moment, req.ImageUrls); err != nil {
c.JSON(consts.StatusInternalServerError, &user.CreateMomentResponse{Code: user.Code_DBErr, Msg: err.Error()})
return
}
@@ -56,50 +57,46 @@ func CreateMoment(ctx context.Context, c *app.RequestContext) {
c.JSON(consts.StatusOK, resp)
}
// ListMoments .
// ListMoments 获取朋友圈动态
// @router /v1/Moments/list/ [GET]
func ListMoments(ctx context.Context, c *app.RequestContext) {
var err error
var req user.ListMomentsRequest
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
c.JSON(consts.StatusBadRequest, err.Error())
return
}
data, total, err := mysql.GetFriendsMoments(req)
if err != nil {
c.JSON(consts.StatusInternalServerError, err.Error())
return
}
resp := new(user.ListMomentsResponse)
resp.Moments = data
resp.Total = total
c.JSON(consts.StatusOK, resp)
}
// ListMomentsAppoint .
// ListMomentsAppoint 获取指定用户朋友圈动态
// @router /v1/Moments/user/list/ [GET]
func ListMomentsAppoint(ctx context.Context, c *app.RequestContext) {
var err error
var req user.ListMomentsAppointRequest
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
c.JSON(consts.StatusBadRequest, err.Error())
return
}
resp := new(user.ListMomentsAppointResponse)
c.JSON(consts.StatusOK, resp)
}
// GetMoment .
// @router /v1/Moments/info/ [GET]
func GetMoment(ctx context.Context, c *app.RequestContext) {
var err error
var req user.GetMomentRequest
err = c.BindAndValidate(&req)
data, total, err := mysql.GetMomentsAppoint(req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
c.JSON(consts.StatusInternalServerError, err.Error())
return
}
resp := new(user.GetMomentResponse)
resp := new(user.ListMomentsAppointResponse)
resp.Moments = data
resp.Total = total
c.JSON(consts.StatusOK, resp)
}
@@ -111,10 +108,14 @@ func DeleteMoment(ctx context.Context, c *app.RequestContext) {
var req user.DeleteMomentRequest
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
c.JSON(consts.StatusBadRequest, err.Error())
return
}
err = mysql.DeleteMoment(req)
if err != nil {
c.JSON(consts.StatusInternalServerError, err.Error())
return
}
resp := new(user.DeleteMomentResponse)
c.JSON(consts.StatusOK, resp)
@@ -127,10 +128,14 @@ func LikeMoment(ctx context.Context, c *app.RequestContext) {
var req user.LikeMomentRequest
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
c.JSON(consts.StatusBadRequest, err.Error())
return
}
err = mysql.LikeMoment(req)
if err != nil {
c.JSON(consts.StatusInternalServerError, err.Error())
return
}
resp := new(user.LikeMomentResponse)
c.JSON(consts.StatusOK, resp)
@@ -143,10 +148,14 @@ func UnlikeMoment(ctx context.Context, c *app.RequestContext) {
var req user.UnlikeMomentRequest
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
c.JSON(consts.StatusBadRequest, err.Error())
return
}
err = mysql.UnlikeMoment(req)
if err != nil {
c.JSON(consts.StatusInternalServerError, err.Error())
return
}
resp := new(user.UnlikeMomentResponse)
c.JSON(consts.StatusOK, resp)
@@ -159,7 +168,7 @@ func ListMomentLikes(ctx context.Context, c *app.RequestContext) {
var req user.ListMomentLikesRequest
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
c.JSON(consts.StatusBadRequest, err.Error())
return
}
@@ -175,7 +184,7 @@ func CommentMoment(ctx context.Context, c *app.RequestContext) {
var req user.CommentMomentRequest
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
c.JSON(consts.StatusBadRequest, err.Error())
return
}
@@ -191,7 +200,7 @@ func ListMomentComments(ctx context.Context, c *app.RequestContext) {
var req user.ListMomentCommentsRequest
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
c.JSON(consts.StatusBadRequest, err.Error())
return
}
@@ -207,7 +216,7 @@ func DeleteComment(ctx context.Context, c *app.RequestContext) {
var req user.DeleteCommentRequest
err = c.BindAndValidate(&req)
if err != nil {
c.String(consts.StatusBadRequest, err.Error())
c.JSON(consts.StatusBadRequest, err.Error())
return
}

View File

@@ -20,35 +20,28 @@ type Moment struct {
Status uint8 `gorm:"column:status;type:tinyint unsigned;default:1;comment:'状态;0:删除,1:正常'"`
LikeCount uint32 `gorm:"column:like_count;type:int unsigned;default:0;comment:'点赞数'"`
CommentCount uint32 `gorm:"column:comment_count;type:int unsigned;default:0;comment:'评论数'"`
// 关联
Images []MomentImage `gorm:"foreignKey:MomentID"`
Likes []MomentLike `gorm:"foreignKey:MomentID"`
Comments []MomentComment `gorm:"foreignKey:MomentID"`
}
// 朋友圈图片表
type MomentImage struct {
gorm.Model
MomentID uint `gorm:"column:moment_id;type:int unsigned;not null;index:idx_moment_id;comment:'朋友圈动态ID'"`
ImageURL string `gorm:"column:image_url;type:varchar(255);not null;comment:'图片URL'"`
SortOrder uint8 `gorm:"column:sort_order;type:tinyint unsigned;default:0;comment:'排序序号'"`
MomentID uint `gorm:"column:moment_id;type:int unsigned;not null;comment:'朋友圈动态ID'"`
ImageURL string `gorm:"column:image_url;type:varchar(255);not null;comment:'图片URL'"`
}
// 朋友圈点赞表
type MomentLike struct {
gorm.Model
MomentID uint `gorm:"column:moment_id;type:int unsigned;not null;index:idx_moment_id;comment:'朋友圈动态ID'"`
MomentID uint `gorm:"column:moment_id;type:int unsigned;not null;comment:'朋友圈动态ID'"`
UserID string `gorm:"column:user_id;type:varchar(32);not null;comment:'点赞用户ID'"`
// 联合唯一索引,确保一个用户只能给一条动态点一次赞
gorm.Index `gorm:"uniqueIndex:idx_moment_user,comment:'动态ID和用户ID的联合索引'"`
}
// 朋友圈评论表
type MomentComment struct {
gorm.Model
MomentID uint `gorm:"column:moment_id;type:int unsigned;not null;index:idx_moment_id;comment:'朋友圈动态ID'"`
MomentID uint `gorm:"column:moment_id;type:int unsigned;not null;comment:'朋友圈动态ID'"`
UserID string `gorm:"column:user_id;type:varchar(32);not null;comment:'评论用户ID'"`
Content string `gorm:"column:content;type:text;not null;comment:'评论内容'"`
ParentID *uint `gorm:"column:parent_id;type:int unsigned;index:idx_parent_id;comment:'父评论ID用于回复功能'"`
ParentID uint `gorm:"column:parent_id;type:int unsigned;index:idx_parent_id;comment:'父评论ID用于回复功能'"`
Status uint8 `gorm:"column:status;type:tinyint unsigned;default:1;comment:'状态;0:删除,1:正常'"`
}

View File

@@ -5,9 +5,12 @@ import (
"acquaintances/biz/utils"
"encoding/json"
"gorm.io/gorm"
"sync"
"time"
)
var UserSync *sync.Mutex
type User struct {
gorm.Model
UserID string `gorm:"column:user_id;type:varchar(32);uniqueIndex:idx_user_id;not null;comment:'用户唯一标识'"`

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,6 @@ package user
import (
user "acquaintances/biz/handler/user"
"github.com/cloudwego/hertz/pkg/app/server"
"github.com/hertz-contrib/cors"
)
/*
@@ -20,20 +19,6 @@ func Register(r *server.Hertz) {
root := r.Group("/", rootMw()...)
{
_v1 := root.Group("/v1", _v1Mw()...)
_v1.Use(cors.New(cors.Config{
// 允许的源( origins * 表示允许所有源(生产环境建议指定具体域名)
AllowOrigins: []string{"*"},
// 允许的请求方法
AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"},
// 允许的请求头
AllowHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization"},
// 是否允许发送 Cookie
AllowCredentials: true,
// 预检请求的有效期(秒),在此期间不需要重复发送预检请求
MaxAge: 12 * 3600,
// 允许暴露的响应头(前端通过 XMLHttpRequest 可以访问的头信息)
ExposeHeaders: []string{"Content-Length"},
}))
{
_moments := _v1.Group("/Moments", _momentsMw()...)
_moments.DELETE("/", append(_deletemomentMw(), user.DeleteMoment)...)
@@ -51,10 +36,6 @@ func Register(r *server.Hertz) {
_dislike := _moments.Group("/dislike", _dislikeMw()...)
_dislike.POST("/", append(_unlikemomentMw(), user.UnlikeMoment)...)
}
{
_info := _moments.Group("/info", _infoMw()...)
_info.GET("/", append(_getmomentMw(), user.GetMoment)...)
}
{
_like := _moments.Group("/like", _likeMw()...)
_like.POST("/", append(_likemomentMw(), user.LikeMoment)...)