侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

在go语言中gin + gorm实现一个店铺关注/取消关注的功能示例

Go  /  管理员 发布于 1年前   586

介绍环境:本地windows10 + go 1.17 + gin;

实现功能:登录用户对店铺的关注及取消关注功能开发实现;

接口测试:接口测试用apifox;


本文主要是为了学习整个流程,为了快速完成这篇curd文章,所以偷懒一下,

有些server、model就没有分那么开,其他的自行了解


用户登录、及其他就一笔带过 主要是上面的实现功能

1.png


设计数据库

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"
   "zongscan-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 (
"zongscan-go/api"
"zongscan-go/model"
"zongscan-go/model/req"
"zongscan-go/model/resp"
"zongscan-go/service"
"github.com/gin-gonic/gin"
)

// 关注
func CreateStoreUserFollowers(c *gin.Context) {
   param := req.GetById{}
   err := c.ShouldBindJSON(&param)
   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

2.png

3.png

完成


  • 上一条:
    2024年五一假期安排和今年的重要事件回顾
    下一条:
    在go语言中gin + gorm多表关联实现一个店铺商品搜索功能示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-09
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-12
    • 2021-01
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-08
    • 2024-11
    • 2025-02
    • 2025-04
    • 2025-05
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客