fix: 复合主键表改为单字段 id 以支持 ent 完整生成
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
|
||||
"juwan-backend/app/shop/rpc/internal/svc"
|
||||
"juwan-backend/app/shop/rpc/pb"
|
||||
"juwan-backend/app/snowflake/rpc/snowflake"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
@@ -26,14 +27,21 @@ func NewAddShopPlayersLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Ad
|
||||
|
||||
// -----------------------shopPlayers-----------------------
|
||||
func (l *AddShopPlayersLogic) AddShopPlayers(in *pb.AddShopPlayersReq) (*pb.AddShopPlayersResp, error) {
|
||||
_, err := l.svcCtx.ShopModelRW.ShopPlayers.Create().
|
||||
idResp, err := l.svcCtx.Snowflake.NextId(l.ctx, &snowflake.NextIdReq{})
|
||||
if err != nil {
|
||||
logx.Errorf("addShopPlayers snowflake err:%v", err)
|
||||
return nil, errors.New("create shop player id failed")
|
||||
}
|
||||
|
||||
_, err = l.svcCtx.ShopModelRW.ShopPlayers.Create().
|
||||
SetID(idResp.Id).
|
||||
SetShopID(in.ShopId).
|
||||
SetPlayerID(in.PlayerId).
|
||||
SetIsPrimary(in.IsPrimary).
|
||||
Save(l.ctx)
|
||||
if err != nil {
|
||||
logx.Errorf("addPlayerServices err:%v", err)
|
||||
return nil, errors.New("add player service failed")
|
||||
logx.Errorf("addShopPlayers err:%v", err)
|
||||
return nil, errors.New("add shop player failed")
|
||||
}
|
||||
|
||||
return &pb.AddShopPlayersResp{}, nil
|
||||
|
||||
@@ -3,6 +3,7 @@ package logic
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"juwan-backend/app/shop/rpc/internal/models/shopplayers"
|
||||
"time"
|
||||
|
||||
"juwan-backend/app/shop/rpc/internal/svc"
|
||||
@@ -30,28 +31,23 @@ func (l *UpdateShopPlayersLogic) UpdateShopPlayers(in *pb.UpdateShopPlayersReq)
|
||||
return nil, errors.New("invalid shop_id or player_id")
|
||||
}
|
||||
|
||||
// ent 的 Update().Where() 不支持复合主键表(shop_players 的主键是 (shop_id, player_id)),
|
||||
// 会报 "sql/sqlgraph: invalid composite id for update table"。
|
||||
// Create/Delete/Query 不受影响,仅 Update 需要走原生 SQL。
|
||||
query := `UPDATE shop_players SET is_primary = $1, left_at = $2 WHERE shop_id = $3 AND player_id = $4`
|
||||
updater := l.svcCtx.ShopModelRW.ShopPlayers.Update().
|
||||
Where(
|
||||
shopplayers.ShopIDEQ(in.ShopId),
|
||||
shopplayers.PlayerIDEQ(in.PlayerId),
|
||||
).
|
||||
SetIsPrimary(in.IsPrimary)
|
||||
|
||||
var leftAt *time.Time
|
||||
if in.LeftAt > 0 {
|
||||
t := time.Unix(in.LeftAt, 0)
|
||||
leftAt = &t
|
||||
updater = updater.SetLeftAt(t)
|
||||
}
|
||||
|
||||
result, err := l.svcCtx.DBRW.ExecContext(l.ctx, query, in.IsPrimary, leftAt, in.ShopId, in.PlayerId)
|
||||
affected, err := updater.Save(l.ctx)
|
||||
if err != nil {
|
||||
logx.Errorf("update shop players failed, %s", err.Error())
|
||||
return nil, errors.New("update shop players failed")
|
||||
}
|
||||
|
||||
affected, err := result.RowsAffected()
|
||||
if err != nil {
|
||||
logx.Errorf("get rows affected failed, %s", err.Error())
|
||||
return nil, errors.New("update shop players failed")
|
||||
}
|
||||
if affected == 0 {
|
||||
return nil, errors.New("shop player not found")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user