邹方成 16e2ede037 feat: 新增订单列表筛选条件与活动信息展示
refactor(orders): 重构订单列表查询逻辑,支持按消耗状态筛选
feat(orders): 订单列表返回新增活动分类与玩法类型信息
fix(orders): 修复订单支付时间空指针问题
docs(swagger): 更新订单相关接口文档
test(matching): 添加对对碰奖励匹配测试用例
chore: 清理无用脚本文件
2025-12-22 15:15:18 +08:00

80 lines
5.9 KiB
Go

package user
import (
"bindbox-game/internal/pkg/logger"
"bindbox-game/internal/repository/mysql"
"bindbox-game/internal/repository/mysql/dao"
"bindbox-game/internal/repository/mysql/model"
"context"
"time"
)
type Service interface {
UpdateProfile(ctx context.Context, userID int64, nickname *string, avatar *string) (*model.Users, error)
ListOrders(ctx context.Context, userID int64, page, pageSize int) (items []*model.Orders, total int64, err error)
ListOrdersWithItems(ctx context.Context, userID int64, status int32, isConsumed *int32, page, pageSize int) (items []*OrderWithItems, total int64, err error)
ListInventoryWithProduct(ctx context.Context, userID int64, page, pageSize int) (items []*InventoryWithProduct, total int64, err error)
ListInventoryWithProductActive(ctx context.Context, userID int64, page, pageSize int) (items []*InventoryWithProduct, total int64, err error)
ListCoupons(ctx context.Context, userID int64, page, pageSize int) (items []*model.UserCoupons, total int64, err error)
ListCouponsByStatus(ctx context.Context, userID int64, status int32, page, pageSize int) (items []*model.UserCoupons, total int64, err error)
ListPointsLedger(ctx context.Context, userID int64, page, pageSize int) (items []*model.UserPointsLedger, total int64, err error)
GetPointsBalance(ctx context.Context, userID int64) (int64, error)
LoginWeixin(ctx context.Context, in LoginWeixinInput) (*model.Users, error)
ListInvites(ctx context.Context, userID int64, page, pageSize int) (items []*model.Users, total int64, err error)
AddPoints(ctx context.Context, userID int64, points int64, kind string, remark string, validStart *time.Time, validEnd *time.Time) error
AddPointsWithAction(ctx context.Context, userID int64, points int64, kind string, remark string, action string, validStart *time.Time, validEnd *time.Time) error
AddCoupon(ctx context.Context, userID int64, couponID int64) error
VoidUserCoupon(ctx context.Context, adminID int64, userID int64, userCouponID int64) error
GrantReward(ctx context.Context, userID int64, req GrantRewardRequest) (*GrantRewardResponse, error)
GrantRewardToOrder(ctx context.Context, userID int64, req GrantRewardToOrderRequest) (*GrantRewardToOrderResponse, error)
AddItemCard(ctx context.Context, userID int64, cardID int64, quantity int) error
VoidUserItemCard(ctx context.Context, adminID int64, userID int64, userItemCardID int64) error
RedeemItemCard(ctx context.Context, userID int64, cardID int64, quantity int) (ledgerID int64, err error)
ListUserItemCards(ctx context.Context, userID int64, page, pageSize int) (items []*model.UserItemCards, total int64, err error)
ListUserItemCardsWithTemplate(ctx context.Context, userID int64, page, pageSize int) (items []*ItemCardWithTemplate, total int64, err error)
ListUserItemCardsWithTemplateUsable(ctx context.Context, userID int64, page, pageSize int) (items []*ItemCardWithTemplate, total int64, err error)
ListUserItemCardsWithTemplateByStatus(ctx context.Context, userID int64, status int32, page, pageSize int) (items []*ItemCardWithTemplate, total int64, err error)
ListUserItemCardUses(ctx context.Context, userID int64, page, pageSize int) (items []*model.ActivityDrawEffects, total int64, err error)
GetUserStats(ctx context.Context, userID int64) (*UserStats, error)
AddAddress(ctx context.Context, userID int64, in AddAddressInput) (*model.UserAddresses, error)
ListAddresses(ctx context.Context, userID int64, page, pageSize int) (items []*model.UserAddresses, total int64, err error)
SetDefaultAddress(ctx context.Context, userID int64, addressID int64) error
DeleteAddress(ctx context.Context, userID int64, addressID int64) error
CreateUser(ctx context.Context, in CreateUserInput) (*model.Users, error)
DeleteUser(ctx context.Context, userID int64) error
ConsumePoints(ctx context.Context, userID int64, points int64, orderNo string) (int64, error)
ConsumePointsFor(ctx context.Context, userID int64, points int64, refTable string, refID string, remark string, action string) (int64, error)
RefundPoints(ctx context.Context, userID int64, points int64, orderNo string, reason string) (int64, error)
CreateAddressShare(ctx context.Context, userID int64, inventoryID int64, expiresAt time.Time) (string, time.Time, error)
RevokeAddressShare(ctx context.Context, userID int64, inventoryID int64) error
SubmitAddressShare(ctx context.Context, shareToken string, name string, mobile string, province string, city string, district string, address string, submittedByUserID *int64, submittedIP *string) (int64, error)
RequestShipping(ctx context.Context, userID int64, inventoryID int64) (int64, error)
RequestShippings(ctx context.Context, userID int64, inventoryIDs []int64, addressID *int64) (int64, []int64, []struct {
ID int64
Reason string
}, []struct {
ID int64
Reason string
}, error)
VoidUserInventory(ctx context.Context, adminID int64, userID int64, inventoryID int64) error
RedeemInventoryToPoints(ctx context.Context, userID int64, inventoryID int64) (int64, error)
RedeemInventoriesToPoints(ctx context.Context, userID int64, inventoryIDs []int64) (int64, error)
RecordOrderCouponUsage(ctx context.Context, orderID int64, userCouponID int64, appliedAmount int64) error
DeductCouponsForPaidOrder(ctx context.Context, userID int64, orderID int64, paidAt time.Time) error
GetOrderWithItems(ctx context.Context, userID, orderID int64) (*OrderWithItems, error)
CancelOrder(ctx context.Context, userID, orderID int64, reason string) (*model.Orders, error)
CentsToPoints(ctx context.Context, cents int64) (int64, error)
ListUserShipmentGroups(ctx context.Context, userID int64, page, pageSize int) (items []*ShipmentGroup, total int64, err error)
}
type service struct {
logger logger.CustomLogger
readDB *dao.Query
writeDB *dao.Query
repo mysql.Repo
}
func New(l logger.CustomLogger, db mysql.Repo) Service {
return &service{logger: l, readDB: dao.Use(db.GetDbR()), writeDB: dao.Use(db.GetDbW()), repo: db}
}