mirror of
https://github.com/pocketbase/pocketbase.git
synced 2025-01-10 00:43:36 +02:00
40 lines
858 B
Go
40 lines
858 B
Go
package validators
|
|
|
|
import (
|
|
"database/sql"
|
|
"errors"
|
|
|
|
validation "github.com/go-ozzo/ozzo-validation/v4"
|
|
"github.com/pocketbase/dbx"
|
|
"github.com/pocketbase/pocketbase/daos"
|
|
)
|
|
|
|
// Compare checks whether the provided model id exists.
|
|
//
|
|
// Example:
|
|
//
|
|
// validation.Field(&form.Id, validation.By(validators.UniqueId(form.dao, tableName)))
|
|
func UniqueId(dao *daos.Dao, tableName string) validation.RuleFunc {
|
|
return func(value any) error {
|
|
v, _ := value.(string)
|
|
if v == "" {
|
|
return nil // nothing to check
|
|
}
|
|
|
|
var foundId string
|
|
|
|
err := dao.DB().
|
|
Select("id").
|
|
From(tableName).
|
|
Where(dbx.HashExp{"id": v}).
|
|
Limit(1).
|
|
Row(&foundId)
|
|
|
|
if (err != nil && !errors.Is(err, sql.ErrNoRows)) || foundId != "" {
|
|
return validation.NewError("validation_invalid_id", "The model id is invalid or already exists.")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|