package helper

import (
	"git.fsdpf.net/go/contracts"
	"git.fsdpf.net/go/db"
)

// @title 创建关联模型
// @param t              关联类型
// @param m              关联模型
// @param rResource      链接父模型
// @param rField         连接父模型字段, 如 xx_id
// @param rForeignKey    关联外键, 如 id
type NewOrmRelation func(t contracts.RelationType, m contracts.Model, rResource, rField, rForeignKey string) contracts.Model

type NewOrmJoin func(t contracts.RelationType, res contracts.Resource, alias, rResource, rField, rForeignKey string) contracts.Join

type NewOrmCondition func(typ contracts.ConditionType, describe string) contracts.Condition

type NewOrmConditionExpr func(rResource, rField, token string, operator contracts.ConditionOperator, tType contracts.ConditionTokenType, ignoreEmptyParma bool) contracts.ConditionExpr

type NewOrmConditionFuncExpr func(rResource, rField, token string, operator contracts.ConditionOperator, tType contracts.ConditionTokenType, ignoreEmptyParma bool, fn, fnParam string) contracts.ConditionExpr

type NewOrmQueryWithRecursive func(pField, cField string, root any, isWithoutCondition bool, depth int) contracts.QueryWithRecursive

type NewOrmOrderBy func(sql string, direction contracts.OrderByDirection) contracts.OrderBy

type NewOrmGroupBy func(sql string) contracts.GroupBy

type NewOrmModel func(res contracts.Resource, code, name string) contracts.Model

type NewOrm func(res contracts.Resource, tx *db.Transaction) contracts.Orm