package repository import ( req "sghgogs.com/micro/shopping-service/domain/model/request" pb "sghgogs.com/micro/shopping-service/proto" ) func (u *Repository) CreateAddress(address *req.Address) error { // 开始事务 tx := u.db.Begin() // 错误处理 defer func() { if r := recover(); r != nil { tx.Rollback() } }() if err := tx.Create(&address).Error; err != nil { tx.Rollback() return err } return tx.Commit().Error } func (u *Repository) GetAddressList(query *pb.GetAddressListRequest) ([]req.Address, int64, error) { tx := u.db.Model(&req.Address{}). Select("id, country, province, city, district, street, remark, is_default, created_at, updated_at"). Order("id desc") var totalCount int64 if query.Keyword != "" { tx.Where("country = ? OR province = ? OR city = ?", query.Keyword, query.Keyword) } tx.Count(&totalCount) addresses := make([]req.Address, 0) return addresses, totalCount, tx.Limit(int(query.PageSize)).Offset(int((query.Page - 1) * query.PageSize)).Find(&addresses).Error } func (u *Repository) GetAddress(addressID int64) (req.Address, error) { var address req.Address return address, u.db. Where("id = ?", addressID). Preload("Location"). Find(&address).Error } func (u *Repository) UpdateAddress(addressID int64, address *req.Address) error { return u.db.Model(&req.Address{}).Where("id = ?", addressID).Updates(address).Error } func (u *Repository) DeleteAddress(addressID int64) error { return u.db.Model(&req.Address{}).Delete(&req.Address{ID: addressID}).Error }