feat: implement gas and delivery admin systems
This commit is contained in:
71
backend/api/internal/logic/gas/account_password.go
Normal file
71
backend/api/internal/logic/gas/account_password.go
Normal file
@@ -0,0 +1,71 @@
|
||||
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
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user