在go語言中g(shù)in + gorm實現(xiàn)一個店鋪關(guān)注/取消關(guān)注的功能示例
Go  /  管理員 發(fā)布于 10個月前   460
介紹環(huán)境:本地windows10 + go 1.17 + gin;
實現(xiàn)功能:登錄用戶對店鋪的關(guān)注及取消關(guān)注功能開發(fā)實現(xiàn);
接口測試:接口測試用apifox;
本文主要是為了學(xué)習(xí)整個流程,為了快速完成這篇curd文章,所以偷懶一下,
有些server、model就沒有分那么開,其他的自行了解
用戶登錄、及其他就一筆帶過 主要是上面的實現(xiàn)功能
設(shè)計數(shù)據(jù)庫
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 '狀態(tài)0未關(guān)注1關(guān)注',
`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='店鋪對應(yīng)用戶關(guān)注表';
新建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:狀態(tài);default:0"` //1關(guān)注0未關(guān)注
}
新建server文件
package service
import (
"fmt"
"zongscan-go/model"
"gorm.io/gorm"
)
type StoreUserFollowersService struct {
Property
}
func NewStoreUserFollowersService() *StoreUserFollowersService {
return &StoreUserFollowersService{
Property: Property{
DB: SqlDB(),
},
}
}
// 創(chuàng)建及更新
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關(guān)注
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) {
{
//關(guān)注
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"
)
// 關(guān)注
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中評論 按理說只要你在國內(nèi),所有的流量進出都在監(jiān)控范圍內(nèi),不管你怎么隱藏也沒用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最簡單的方法中評論 好久好久都沒看友情鏈接申請了,今天剛看,已經(jīng)添加。..博主 在
佛跳墻vpn軟件不會用?上不了網(wǎng)?佛跳墻vpn常見問題以及解決辦法中評論 @1111老鐵這個不行了,可以看看近期評論的其他文章..1111 在
佛跳墻vpn軟件不會用?上不了網(wǎng)?佛跳墻vpn常見問題以及解決辦法中評論 網(wǎng)站不能打開,博主百忙中能否發(fā)個APP下載鏈接,佛跳墻或極光..路人 在
php中使用hyperf框架調(diào)用訊飛星火大模型實現(xiàn)國內(nèi)版chatgpt功能示例中評論 教程很詳細,如果加個前端chatgpt對話頁面就完美了..
Copyright·? 2019 侯體宗版權(quán)所有·
粵ICP備20027696號