Files
platforms/backend/api/internal/logic/gas/account_password.go

72 lines
2.6 KiB
Go

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
})
}