Skip to content

Commit

Permalink
购物车接口完成
Browse files Browse the repository at this point in the history
  • Loading branch information
luminescenceJ committed Feb 21, 2025
1 parent 1601201 commit afc6f39
Show file tree
Hide file tree
Showing 21 changed files with 684 additions and 68 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ require (
github.com/subosito/gotenv v1.6.0 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.12 // indirect
github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6 // indirect
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.9.0 // indirect
golang.org/x/arch v0.12.0 // indirect
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6 h1:TtyC78WMafNW8QFfv3TeP3yWNDG+uxNkk9vOrnDu6JA=
github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6/go.mod h1:h8272+G2omSmi30fBXiZDMkmHuOgonplfKIKjQWzlfs=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
Expand Down
2 changes: 1 addition & 1 deletion initialize/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ func routerInit() *gin.Engine {
allRouter.DishRouter.InitApiRouter(admin) // 注册菜品路由
allRouter.CommonRouter.InitApiRouter(admin) // 注册文件上传路由
allRouter.SetMealRouter.InitApiRouter(admin) // 注册套餐路由

//allRouter.ShopRouter.InitApiRouter(admin) // 注册商店路由

//allRouter.orderRouter.InitApiRouter(admin)// 注册订单路由
Expand All @@ -40,6 +39,7 @@ func routerInit() *gin.Engine {
allRouter.UserDish.InitApiRouter(user)
allRouter.UserSetmeal.InitApiRouter(user)
allRouter.UserAddressBook.InitApiRouter(user)

allRouter.UserShoppingCart.InitApiRouter(user)
allRouter.UserOrder.InitApiRouter(user)
}
Expand Down
17 changes: 11 additions & 6 deletions internal/api/user/controller/addressBook_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ func (ac *AddressBookController) GetById(ctx *gin.Context) {
func (ac *AddressBookController) GetCurAddress(ctx *gin.Context) {
var (
code = e.SUCCESS
addressList model.AddressBook
addressList []model.AddressBook
err error
)

Expand Down Expand Up @@ -245,18 +245,23 @@ func (ac *AddressBookController) GetDefaultAddress(ctx *gin.Context) {
// @Failure 500 {object} common.Result "Internal Server Faliure"
// @Router /user/addressBook/default [put]
func (ac *AddressBookController) SetDefaultAddress(ctx *gin.Context) {
type Request struct {
ID uint64 `json:"id"`
}

var (
code = e.SUCCESS
id uint64
err error
code = e.SUCCESS
requestId Request
err error
)
if id, err = strconv.ParseUint(ctx.Param("id"), 10, 64); err != nil {

if err = ctx.ShouldBindJSON(&requestId); err != nil {
global.Log.Debug("C端-地址簿接口 SetDefaultAddress param error:", err.Error())
ctx.JSON(http.StatusBadRequest, common.Result{})
return
}

if err = ac.service.SetDefaultAddressBook(ctx, id); err != nil {
if err = ac.service.SetDefaultAddressBook(ctx, requestId.ID); err != nil {
code = e.ERROR
global.Log.Debug("SetDefaultAddressBook error:", err.Error())
ctx.JSON(http.StatusInternalServerError, common.Result{
Expand Down
165 changes: 165 additions & 0 deletions internal/api/user/controller/shopcart_controller.go
Original file line number Diff line number Diff line change
@@ -1 +1,166 @@
package controller

import (
"github.com/gin-gonic/gin"
"net/http"
"takeout/common"
"takeout/common/e"
"takeout/global"
"takeout/internal/api/user/request"
"takeout/internal/model"
"takeout/internal/service"
)

type ShoppingCartController struct {
service service.IShoppingCartService
}

func NewShoppingController(service service.IShoppingCartService) *ShoppingCartController {
return &ShoppingCartController{service: service}
}

// AddShoppingCart @AddShoppingCart 添加购物车
// @Tags ShoppingCart
// @Security JWTAuth
// @Produce json
// @Param model body model.ShoppingCartDTO true "菜品属性"
// @Success 200 {object} common.Result{} "success"
// @Failure 400 {object} common.Result "Invalid request payload"
// @Failure 500 {object} common.Result "Internal Server Faliure"
// @Router /user/shoppingCart/add [post]
func (s *ShoppingCartController) AddShoppingCart(ctx *gin.Context) {
var (
code = e.SUCCESS
dto request.ShoppingCartDTO
err error
)

if err = ctx.ShouldBindJSON(&dto); err != nil {
global.Log.Debug("C端-购物车接口 AddShoppingCart param error:", err.Error())
ctx.JSON(http.StatusBadRequest, common.Result{})
return
}

if err = s.service.AddShoppingCart(ctx, dto); err != nil {
code = e.ERROR
global.Log.Debug("AddShoppingCart error:", err.Error())
ctx.JSON(http.StatusInternalServerError, common.Result{
Code: code,
Msg: err.Error(),
})
return
}

ctx.JSON(http.StatusOK, common.Result{
Code: code,
Msg: e.GetMsg(code),
})

}

// QueryShoppingCart @QueryShoppingCart 查看购物车
// @Tags ShoppingCart
// @Security JWTAuth
// @Produce json
// @Success 200 {object} common.Result{Data=[]model.ShoppingCart} "success"
// @Failure 400 {object} common.Result "Invalid request payload"
// @Failure 500 {object} common.Result "Internal Server Faliure"
// @Router /user/shoppingCart/list [get]
func (s *ShoppingCartController) QueryShoppingCart(ctx *gin.Context) {
var (
code = e.SUCCESS
data []model.ShoppingCart
err error
)

if data, err = s.service.QueryShoppingCart(ctx); err != nil {
code = e.ERROR
global.Log.Debug("AddShoppingCart error:", err.Error())
ctx.JSON(http.StatusInternalServerError, common.Result{
Code: code,
Msg: err.Error(),
})
return
}

ctx.JSON(http.StatusOK, common.Result{
Code: code,
Data: data,
Msg: e.GetMsg(code),
})
}

// CleanShoppingCart @CleanShoppingCart 添加购物车
// @Tags ShoppingCart
// @Security JWTAuth
// @Produce json
// @Success 200 {object} common.Result{} "success"
// @Failure 400 {object} common.Result "Invalid request payload"
// @Failure 500 {object} common.Result "Internal Server Faliure"
// @Router /user/shoppingCart/clean [delete]
func (s *ShoppingCartController) CleanShoppingCart(ctx *gin.Context) {
var (
code = e.SUCCESS
dto request.ShoppingCartDTO
err error
)

if err = ctx.ShouldBindJSON(&dto); err != nil {
global.Log.Debug("C端-购物车接口 AddShoppingCart param error:", err.Error())
ctx.JSON(http.StatusBadRequest, common.Result{})
return
}

if err = s.service.CleanShoppingCart(ctx); err != nil {
code = e.ERROR
global.Log.Debug("AddShoppingCart error:", err.Error())
ctx.JSON(http.StatusInternalServerError, common.Result{
Code: code,
Msg: err.Error(),
})
return
}

ctx.JSON(http.StatusOK, common.Result{
Code: code,
Msg: e.GetMsg(code),
})
}

// SubShoppingCart @SubShoppingCart 删除购物车中一个商品
// @Tags ShoppingCart
// @Security JWTAuth
// @Produce json
// @Param dto body request.ShoppingCartDTO true "菜品属性"
// @Success 200 {object} common.Result{Data=response.DishListVo} "success"
// @Failure 400 {object} common.Result "Invalid request payload"
// @Failure 500 {object} common.Result "Internal Server Faliure"
// @Router /user/shoppingCart/sub [post]
func (s *ShoppingCartController) SubShoppingCart(ctx *gin.Context) {
var (
code = e.SUCCESS
dto request.ShoppingCartDTO
err error
)

if err = ctx.ShouldBindJSON(&dto); err != nil {
global.Log.Debug("C端-购物车接口 AddShoppingCart param error:", err.Error())
ctx.JSON(http.StatusBadRequest, common.Result{})
return
}

if err = s.service.SubShoppingCart(ctx, dto); err != nil {
code = e.ERROR
global.Log.Debug("AddShoppingCart error:", err.Error())
ctx.JSON(http.StatusInternalServerError, common.Result{
Code: code,
Msg: err.Error(),
})
return
}

ctx.JSON(http.StatusOK, common.Result{
Code: code,
Msg: e.GetMsg(code),
})
}
8 changes: 8 additions & 0 deletions internal/api/user/request/shoppingcart.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package request

// ShoppingCartDTO 添加购物车传输数据模型
type ShoppingCartDTO struct {
DishId int `json:"dishId"`
SetmealId int `json:"setmealId"`
DishFlavor string `json:"dishFlavor"`
}
22 changes: 22 additions & 0 deletions internal/model/shopping_cart.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package model

import "time"

// ShoppingCart 购物车数据模型
type ShoppingCart struct {
Id int `json:"id" gorm:"primary_key;AUTO_INCREMENT"`
Name string `json:"name"`
Image string `json:"image"`
UserId int `json:"userId"`
DishId int `json:"dishId"`
SetmealId int `json:"setmealId"`
DishFlavor string `json:"dishFlavor"`
Number int `json:"number"`
Amount float64 `json:"amount"`
CreateTime time.Time `json:"createTime" gorm:"autoCreateTime"`
}

// TableName 指定表名
func (ShoppingCart) TableName() string {
return "shopping_cart"
}
21 changes: 18 additions & 3 deletions internal/router/user/shoppingCart.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ package user

import (
"github.com/gin-gonic/gin"
"takeout/global"
"takeout/internal/api/user/controller"
"takeout/internal/service"
"takeout/middle"
"takeout/repository/dao"
)

type ShoppingCartRouter struct{}
Expand All @@ -12,10 +16,21 @@ func (dr *ShoppingCartRouter) InitApiRouter(parent *gin.RouterGroup) {
// 私有路由使用jwt验证
privateRouter.Use(middle.VerifiyJWTUser())
// 依赖注入
//dishCtrl := controller.NewDishController(
// service.NewDishService(dao.NewDishRepo(global.DB), dao.NewDishFlavorDao()),
//)

shoppingCartCtrl := controller.NewShoppingController(
service.NewShoppingCartService(dao.NewShoppingCartDao(global.DB)),
)

{
//privateRouter.GET("/list", dishCtrl.List)

// 添加购物车
privateRouter.POST("add", shoppingCartCtrl.AddShoppingCart)
// 查看购物车
privateRouter.GET("list", shoppingCartCtrl.QueryShoppingCart)
// 清空购物车
privateRouter.DELETE("clean", shoppingCartCtrl.CleanShoppingCart)
// 减少购物车某项
privateRouter.POST("sub", shoppingCartCtrl.SubShoppingCart)
}
}
17 changes: 10 additions & 7 deletions internal/service/addressBook_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ type IAddressBookService interface {
UpdateAddressBook(ctx *gin.Context, address model.AddressBook) error
DeleteAddressBook(ctx *gin.Context, id uint64) error
GetAddressBook(ctx *gin.Context, id uint64) (model.AddressBook, error)
GetCurAddressBook(ctx *gin.Context) (model.AddressBook, error)
GetCurAddressBook(ctx *gin.Context) ([]model.AddressBook, error)
GetDefaultAddressBook(ctx *gin.Context) (model.AddressBook, error)
SetDefaultAddressBook(ctx *gin.Context, id uint64) error
}
Expand All @@ -40,20 +40,19 @@ func (as *AddressBookService) DeleteAddressBook(ctx *gin.Context, id uint64) err
func (as *AddressBookService) GetAddressBook(ctx *gin.Context, id uint64) (model.AddressBook, error) {
return as.repo.GetAddressById(ctx, id)
}

func (as *AddressBookService) GetCurAddressBook(ctx *gin.Context) (model.AddressBook, error) {
func (as *AddressBookService) GetCurAddressBook(ctx *gin.Context) ([]model.AddressBook, error) {
var (
id uint64
address model.AddressBook
address []model.AddressBook
err error
)
if CurrentId, ok := ctx.Get(enum.CurrentId); ok {
id = CurrentId.(uint64)
} else {
return model.AddressBook{}, errors.New("current id book not found")
return []model.AddressBook{}, errors.New("current id book not found")
}
if address, err = as.repo.GetCurAddressBook(ctx, id); err != nil {
return model.AddressBook{}, err
return []model.AddressBook{}, err
}
return address, nil
}
Expand All @@ -74,5 +73,9 @@ func (as *AddressBookService) GetDefaultAddressBook(ctx *gin.Context) (model.Add
return address, nil
}
func (as *AddressBookService) SetDefaultAddressBook(ctx *gin.Context, id uint64) error {
return as.repo.SetDefaultAddressBook(ctx, id)
userId := uint64(0)
if CurrentId, ok := ctx.Get(enum.CurrentId); ok {
userId = CurrentId.(uint64)
}
return as.repo.SetDefaultAddressBook(ctx, userId, id)
}
Loading

0 comments on commit afc6f39

Please sign in to comment.