package gas import ( "git.apinb.com/bsm-sdk/core/errcode" "git.apinb.com/bsm-sdk/core/infra" "git.apinb.com/heqiapp/platforms/backend/api/internal/impl" "git.apinb.com/heqiapp/platforms/backend/api/internal/logic/common" "git.apinb.com/heqiapp/platforms/backend/api/internal/models" "github.com/gin-gonic/gin" ) func resetScopedPassword(ctx *gin.Context, model any, scopeQuery func(models.GasBasic) bool) { station, ok := currentGas(ctx) if !ok { return } if !scopeQuery(station) { infra.Response.Error(ctx, errcode.ErrInvalidArgument) return } var request struct { Password string `json:"password" binding:"required"` } if err := ctx.ShouldBindJSON(&request); err != nil || !common.IsValidAccountPassword(request.Password) { infra.Response.Error(ctx, errcode.ErrInvalidArgument) return } hash, err := common.PasswordHash(request.Password) if err != nil { infra.Response.Error(ctx, err) return } if err := impl.DBService.Model(model).Where("identity = ?", ctx.Param("identity")).Update("password_hash", hash).Error; err != nil { infra.Response.Error(ctx, err) return } infra.Response.Success(ctx, gin.H{"changed": true}) } func ResetDeliveryAccountPassword(ctx *gin.Context) { resetScopedPassword(ctx, &models.DeliveryAccount{}, func(station models.GasBasic) bool { var count int64 err := impl.DBService.Model(&models.DeliveryAccount{}). Joins("JOIN delivery_basic ON delivery_basic.id = delivery_account.delivery_basic_id"). Where("delivery_account.identity = ? AND delivery_account.status <> ? AND delivery_basic.gas_basic_id = ?", ctx.Param("identity"), common.StatusArchived, station.ID).Count(&count).Error return err == nil && count == 1 }) } func ResetStaffPassword(ctx *gin.Context) { resetScopedPassword(ctx, &models.StaffAccount{}, func(station models.GasBasic) bool { var count int64 err := impl.DBService.Model(&models.StaffAccount{}). Where("identity = ? AND status <> ? AND gas_basic_id = ?", ctx.Param("identity"), common.StatusArchived, station.ID). Count(&count).Error return err == nil && count == 1 }) } func ResetUserPassword(ctx *gin.Context) { resetScopedPassword(ctx, &models.UserAccount{}, func(station models.GasBasic) bool { var count int64 err := impl.DBService.Model(&models.UserAccount{}). Joins("JOIN user_service_relation ON user_service_relation.user_account_id = user_account.id AND user_service_relation.status <> ?", common.StatusArchived). Where("user_account.identity = ? AND user_account.status <> ? AND user_service_relation.gas_basic_id = ?", ctx.Param("identity"), common.StatusArchived, station.ID).Count(&count).Error return err == nil && count == 1 }) }