在go语言中gin + gorm实现一个店铺关注/取消关注的功能示例
Go  /  管理员 发布于 6个月前   314
介绍环境:本地windows10 + go 1.17 + gin;
实现功能:登录用户对店铺的关注及取消关注功能开发实现;
接口测试:接口测试用apifox;
本文主要是为了学习整个流程,为了快速完成这篇curd文章,所以偷懒一下,
有些server、model就没有分那么开,其他的自行了解
用户登录、及其他就一笔带过 主要是上面的实现功能
设计数据库
CREATE TABLE `store_user_followers` (
`id` bigint NOT NULL AUTO_INCREMENT,
`store_id` varchar(191) DEFAULT NULL COMMENT '店铺id',
`user_id` varchar(191) DEFAULT NULL COMMENT '用户id',
`status` tinyint unsigned DEFAULT '0' COMMENT '状态0未关注1关注',
`created_at` bigint DEFAULT NULL,
`updated_at` bigint DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='店铺对应用户关注表';
新建model文件
package model
var (
StoreUserFollowersAll = []string{"id", "store_id", "user_id", "status", "created_at", "updated_at"}
)
type StoreUserFollowers struct {
Model
StoreId string `json:"storeId,omitempty" gorm:"comment:店铺id;default:''"` //店铺id
UserId string `json:"userId,omitempty" gorm:"comment:用户id;not null"` // 用户id
Status uint8 `json:"status,omitempty" gorm:"comment:状态;default:0"` //1关注0未关注
}
新建server文件
package service
import (
"fmt"
"sokogate-go/model"
"gorm.io/gorm"
)
type StoreUserFollowersService struct {
Property
}
func NewStoreUserFollowersService() *StoreUserFollowersService {
return &StoreUserFollowersService{
Property: Property{
DB: SqlDB(),
},
}
}
// 创建及更新
func (s *StoreUserFollowersService) Create(m *model.StoreUserFollowers) (err error) {
err = s.DB.Where("store_id = ? and user_id = ?", m.StoreId, m.UserId).First(m).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
err = s.DB.Create(m).Error
if err != nil {
return
}
err = nil
}
} else {
//更新 0取消及1关注
if m.Status == 1 {
s.DB.Model(m).UpdateColumn("status", 0)
} else {
s.DB.Model(m).UpdateColumn("status", 1)
}
}
fmt.Println("m:", m, "mid:", m.ID)
return
}
新加路由
func InitStoreRouter(r *gin.RouterGroup) {
{
//关注
r.POST("addStoreUserFollowers", v1.CreateStoreUserFollowers)
}
}
新建api控制器
package v1
import (
"sokogate-go/api"
"sokogate-go/model"
"sokogate-go/model/req"
"sokogate-go/model/resp"
"sokogate-go/service"
"github.com/gin-gonic/gin"
)
// 关注
func CreateStoreUserFollowers(c *gin.Context) {
param := req.GetById{}
err := c.ShouldBindJSON(¶m)
if err != nil {
resp.ERRWithMsg(c, resp.SPUCOLLECTION_PARAM_ERR, err.Error())
return
}
//检查店铺id是否存在
store := model.Store{}
store.ID = param.ID
storeservice := service.NewStoreService()
err = storeservice.Get(&store)
if err != nil {
resp.OkWithMessage("Store ID error", c)
return
}
user := api.ClaimsToUser(c)
storeuf := model.StoreUserFollowers{}
storeuf.StoreId = param.ID
storeuf.UserId = user.UserId
err = service.NewStoreUserFollowersService().Create(&storeuf)
if err != nil {
resp.ERRWithMsg(c, resp.SPUCOLLECTION_INSERT_ERR, err.Error())
return
}
//resp.OkWithMessage("ok", c)
resp.Ok(c)
}
接口测试用apifox
完成
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号