72 lines
2.6 KiB
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
|
|
})
|
|
}
|