// Code generated by ent, DO NOT EDIT.

package ent

import (
	"context"
	"errors"
	"fmt"
	"log"
	"reflect"

	"wechat-api/ent/migrate"

	"wechat-api/ent/agent"
	"wechat-api/ent/agentbase"
	"wechat-api/ent/batchmsg"
	"wechat-api/ent/category"
	"wechat-api/ent/chatrecords"
	"wechat-api/ent/chatsession"
	"wechat-api/ent/contact"
	"wechat-api/ent/employee"
	"wechat-api/ent/employeeconfig"
	"wechat-api/ent/label"
	"wechat-api/ent/labelrelationship"
	"wechat-api/ent/message"
	"wechat-api/ent/messagerecords"
	"wechat-api/ent/msg"
	"wechat-api/ent/server"
	"wechat-api/ent/sopnode"
	"wechat-api/ent/sopstage"
	"wechat-api/ent/soptask"
	"wechat-api/ent/token"
	"wechat-api/ent/tutorial"
	"wechat-api/ent/workexperience"
	"wechat-api/ent/wx"
	"wechat-api/ent/wxcard"
	"wechat-api/ent/wxcarduser"
	"wechat-api/ent/wxcardvisit"

	"entgo.io/ent"
	"entgo.io/ent/dialect"
	"entgo.io/ent/dialect/sql"
	"entgo.io/ent/dialect/sql/sqlgraph"

	stdsql "database/sql"
)

// Client is the client that holds all ent builders.
type Client struct {
	config
	// Schema is the client for creating, migrating and dropping schema.
	Schema *migrate.Schema
	// Agent is the client for interacting with the Agent builders.
	Agent *AgentClient
	// AgentBase is the client for interacting with the AgentBase builders.
	AgentBase *AgentBaseClient
	// BatchMsg is the client for interacting with the BatchMsg builders.
	BatchMsg *BatchMsgClient
	// Category is the client for interacting with the Category builders.
	Category *CategoryClient
	// ChatRecords is the client for interacting with the ChatRecords builders.
	ChatRecords *ChatRecordsClient
	// ChatSession is the client for interacting with the ChatSession builders.
	ChatSession *ChatSessionClient
	// Contact is the client for interacting with the Contact builders.
	Contact *ContactClient
	// Employee is the client for interacting with the Employee builders.
	Employee *EmployeeClient
	// EmployeeConfig is the client for interacting with the EmployeeConfig builders.
	EmployeeConfig *EmployeeConfigClient
	// Label is the client for interacting with the Label builders.
	Label *LabelClient
	// LabelRelationship is the client for interacting with the LabelRelationship builders.
	LabelRelationship *LabelRelationshipClient
	// Message is the client for interacting with the Message builders.
	Message *MessageClient
	// MessageRecords is the client for interacting with the MessageRecords builders.
	MessageRecords *MessageRecordsClient
	// Msg is the client for interacting with the Msg builders.
	Msg *MsgClient
	// Server is the client for interacting with the Server builders.
	Server *ServerClient
	// SopNode is the client for interacting with the SopNode builders.
	SopNode *SopNodeClient
	// SopStage is the client for interacting with the SopStage builders.
	SopStage *SopStageClient
	// SopTask is the client for interacting with the SopTask builders.
	SopTask *SopTaskClient
	// Token is the client for interacting with the Token builders.
	Token *TokenClient
	// Tutorial is the client for interacting with the Tutorial builders.
	Tutorial *TutorialClient
	// WorkExperience is the client for interacting with the WorkExperience builders.
	WorkExperience *WorkExperienceClient
	// Wx is the client for interacting with the Wx builders.
	Wx *WxClient
	// WxCard is the client for interacting with the WxCard builders.
	WxCard *WxCardClient
	// WxCardUser is the client for interacting with the WxCardUser builders.
	WxCardUser *WxCardUserClient
	// WxCardVisit is the client for interacting with the WxCardVisit builders.
	WxCardVisit *WxCardVisitClient
}

// NewClient creates a new client configured with the given options.
func NewClient(opts ...Option) *Client {
	client := &Client{config: newConfig(opts...)}
	client.init()
	return client
}

func (c *Client) init() {
	c.Schema = migrate.NewSchema(c.driver)
	c.Agent = NewAgentClient(c.config)
	c.AgentBase = NewAgentBaseClient(c.config)
	c.BatchMsg = NewBatchMsgClient(c.config)
	c.Category = NewCategoryClient(c.config)
	c.ChatRecords = NewChatRecordsClient(c.config)
	c.ChatSession = NewChatSessionClient(c.config)
	c.Contact = NewContactClient(c.config)
	c.Employee = NewEmployeeClient(c.config)
	c.EmployeeConfig = NewEmployeeConfigClient(c.config)
	c.Label = NewLabelClient(c.config)
	c.LabelRelationship = NewLabelRelationshipClient(c.config)
	c.Message = NewMessageClient(c.config)
	c.MessageRecords = NewMessageRecordsClient(c.config)
	c.Msg = NewMsgClient(c.config)
	c.Server = NewServerClient(c.config)
	c.SopNode = NewSopNodeClient(c.config)
	c.SopStage = NewSopStageClient(c.config)
	c.SopTask = NewSopTaskClient(c.config)
	c.Token = NewTokenClient(c.config)
	c.Tutorial = NewTutorialClient(c.config)
	c.WorkExperience = NewWorkExperienceClient(c.config)
	c.Wx = NewWxClient(c.config)
	c.WxCard = NewWxCardClient(c.config)
	c.WxCardUser = NewWxCardUserClient(c.config)
	c.WxCardVisit = NewWxCardVisitClient(c.config)
}

type (
	// config is the configuration for the client and its builder.
	config struct {
		// driver used for executing database requests.
		driver dialect.Driver
		// debug enable a debug logging.
		debug bool
		// log used for logging on debug mode.
		log func(...any)
		// hooks to execute on mutations.
		hooks *hooks
		// interceptors to execute on queries.
		inters *inters
	}
	// Option function to configure the client.
	Option func(*config)
)

// newConfig creates a new config for the client.
func newConfig(opts ...Option) config {
	cfg := config{log: log.Println, hooks: &hooks{}, inters: &inters{}}
	cfg.options(opts...)
	return cfg
}

// options applies the options on the config object.
func (c *config) options(opts ...Option) {
	for _, opt := range opts {
		opt(c)
	}
	if c.debug {
		c.driver = dialect.Debug(c.driver, c.log)
	}
}

// Debug enables debug logging on the ent.Driver.
func Debug() Option {
	return func(c *config) {
		c.debug = true
	}
}

// Log sets the logging function for debug mode.
func Log(fn func(...any)) Option {
	return func(c *config) {
		c.log = fn
	}
}

// Driver configures the client driver.
func Driver(driver dialect.Driver) Option {
	return func(c *config) {
		c.driver = driver
	}
}

// Open opens a database/sql.DB specified by the driver name and
// the data source name, and returns a new client attached to it.
// Optional parameters can be added for configuring the client.
func Open(driverName, dataSourceName string, options ...Option) (*Client, error) {
	switch driverName {
	case dialect.MySQL, dialect.Postgres, dialect.SQLite:
		drv, err := sql.Open(driverName, dataSourceName)
		if err != nil {
			return nil, err
		}
		return NewClient(append(options, Driver(drv))...), nil
	default:
		return nil, fmt.Errorf("unsupported driver: %q", driverName)
	}
}

// ErrTxStarted is returned when trying to start a new transaction from a transactional client.
var ErrTxStarted = errors.New("ent: cannot start a transaction within a transaction")

// Tx returns a new transactional client. The provided context
// is used until the transaction is committed or rolled back.
func (c *Client) Tx(ctx context.Context) (*Tx, error) {
	if _, ok := c.driver.(*txDriver); ok {
		return nil, ErrTxStarted
	}
	tx, err := newTx(ctx, c.driver)
	if err != nil {
		return nil, fmt.Errorf("ent: starting a transaction: %w", err)
	}
	cfg := c.config
	cfg.driver = tx
	return &Tx{
		ctx:               ctx,
		config:            cfg,
		Agent:             NewAgentClient(cfg),
		AgentBase:         NewAgentBaseClient(cfg),
		BatchMsg:          NewBatchMsgClient(cfg),
		Category:          NewCategoryClient(cfg),
		ChatRecords:       NewChatRecordsClient(cfg),
		ChatSession:       NewChatSessionClient(cfg),
		Contact:           NewContactClient(cfg),
		Employee:          NewEmployeeClient(cfg),
		EmployeeConfig:    NewEmployeeConfigClient(cfg),
		Label:             NewLabelClient(cfg),
		LabelRelationship: NewLabelRelationshipClient(cfg),
		Message:           NewMessageClient(cfg),
		MessageRecords:    NewMessageRecordsClient(cfg),
		Msg:               NewMsgClient(cfg),
		Server:            NewServerClient(cfg),
		SopNode:           NewSopNodeClient(cfg),
		SopStage:          NewSopStageClient(cfg),
		SopTask:           NewSopTaskClient(cfg),
		Token:             NewTokenClient(cfg),
		Tutorial:          NewTutorialClient(cfg),
		WorkExperience:    NewWorkExperienceClient(cfg),
		Wx:                NewWxClient(cfg),
		WxCard:            NewWxCardClient(cfg),
		WxCardUser:        NewWxCardUserClient(cfg),
		WxCardVisit:       NewWxCardVisitClient(cfg),
	}, nil
}

// BeginTx returns a transactional client with specified options.
func (c *Client) BeginTx(ctx context.Context, opts *sql.TxOptions) (*Tx, error) {
	if _, ok := c.driver.(*txDriver); ok {
		return nil, errors.New("ent: cannot start a transaction within a transaction")
	}
	tx, err := c.driver.(interface {
		BeginTx(context.Context, *sql.TxOptions) (dialect.Tx, error)
	}).BeginTx(ctx, opts)
	if err != nil {
		return nil, fmt.Errorf("ent: starting a transaction: %w", err)
	}
	cfg := c.config
	cfg.driver = &txDriver{tx: tx, drv: c.driver}
	return &Tx{
		ctx:               ctx,
		config:            cfg,
		Agent:             NewAgentClient(cfg),
		AgentBase:         NewAgentBaseClient(cfg),
		BatchMsg:          NewBatchMsgClient(cfg),
		Category:          NewCategoryClient(cfg),
		ChatRecords:       NewChatRecordsClient(cfg),
		ChatSession:       NewChatSessionClient(cfg),
		Contact:           NewContactClient(cfg),
		Employee:          NewEmployeeClient(cfg),
		EmployeeConfig:    NewEmployeeConfigClient(cfg),
		Label:             NewLabelClient(cfg),
		LabelRelationship: NewLabelRelationshipClient(cfg),
		Message:           NewMessageClient(cfg),
		MessageRecords:    NewMessageRecordsClient(cfg),
		Msg:               NewMsgClient(cfg),
		Server:            NewServerClient(cfg),
		SopNode:           NewSopNodeClient(cfg),
		SopStage:          NewSopStageClient(cfg),
		SopTask:           NewSopTaskClient(cfg),
		Token:             NewTokenClient(cfg),
		Tutorial:          NewTutorialClient(cfg),
		WorkExperience:    NewWorkExperienceClient(cfg),
		Wx:                NewWxClient(cfg),
		WxCard:            NewWxCardClient(cfg),
		WxCardUser:        NewWxCardUserClient(cfg),
		WxCardVisit:       NewWxCardVisitClient(cfg),
	}, nil
}

// Debug returns a new debug-client. It's used to get verbose logging on specific operations.
//
//	client.Debug().
//		Agent.
//		Query().
//		Count(ctx)
func (c *Client) Debug() *Client {
	if c.debug {
		return c
	}
	cfg := c.config
	cfg.driver = dialect.Debug(c.driver, c.log)
	client := &Client{config: cfg}
	client.init()
	return client
}

// Close closes the database connection and prevents new queries from starting.
func (c *Client) Close() error {
	return c.driver.Close()
}

// Use adds the mutation hooks to all the entity clients.
// In order to add hooks to a specific client, call: `client.Node.Use(...)`.
func (c *Client) Use(hooks ...Hook) {
	for _, n := range []interface{ Use(...Hook) }{
		c.Agent, c.AgentBase, c.BatchMsg, c.Category, c.ChatRecords, c.ChatSession,
		c.Contact, c.Employee, c.EmployeeConfig, c.Label, c.LabelRelationship,
		c.Message, c.MessageRecords, c.Msg, c.Server, c.SopNode, c.SopStage, c.SopTask,
		c.Token, c.Tutorial, c.WorkExperience, c.Wx, c.WxCard, c.WxCardUser,
		c.WxCardVisit,
	} {
		n.Use(hooks...)
	}
}

// Intercept adds the query interceptors to all the entity clients.
// In order to add interceptors to a specific client, call: `client.Node.Intercept(...)`.
func (c *Client) Intercept(interceptors ...Interceptor) {
	for _, n := range []interface{ Intercept(...Interceptor) }{
		c.Agent, c.AgentBase, c.BatchMsg, c.Category, c.ChatRecords, c.ChatSession,
		c.Contact, c.Employee, c.EmployeeConfig, c.Label, c.LabelRelationship,
		c.Message, c.MessageRecords, c.Msg, c.Server, c.SopNode, c.SopStage, c.SopTask,
		c.Token, c.Tutorial, c.WorkExperience, c.Wx, c.WxCard, c.WxCardUser,
		c.WxCardVisit,
	} {
		n.Intercept(interceptors...)
	}
}

// Mutate implements the ent.Mutator interface.
func (c *Client) Mutate(ctx context.Context, m Mutation) (Value, error) {
	switch m := m.(type) {
	case *AgentMutation:
		return c.Agent.mutate(ctx, m)
	case *AgentBaseMutation:
		return c.AgentBase.mutate(ctx, m)
	case *BatchMsgMutation:
		return c.BatchMsg.mutate(ctx, m)
	case *CategoryMutation:
		return c.Category.mutate(ctx, m)
	case *ChatRecordsMutation:
		return c.ChatRecords.mutate(ctx, m)
	case *ChatSessionMutation:
		return c.ChatSession.mutate(ctx, m)
	case *ContactMutation:
		return c.Contact.mutate(ctx, m)
	case *EmployeeMutation:
		return c.Employee.mutate(ctx, m)
	case *EmployeeConfigMutation:
		return c.EmployeeConfig.mutate(ctx, m)
	case *LabelMutation:
		return c.Label.mutate(ctx, m)
	case *LabelRelationshipMutation:
		return c.LabelRelationship.mutate(ctx, m)
	case *MessageMutation:
		return c.Message.mutate(ctx, m)
	case *MessageRecordsMutation:
		return c.MessageRecords.mutate(ctx, m)
	case *MsgMutation:
		return c.Msg.mutate(ctx, m)
	case *ServerMutation:
		return c.Server.mutate(ctx, m)
	case *SopNodeMutation:
		return c.SopNode.mutate(ctx, m)
	case *SopStageMutation:
		return c.SopStage.mutate(ctx, m)
	case *SopTaskMutation:
		return c.SopTask.mutate(ctx, m)
	case *TokenMutation:
		return c.Token.mutate(ctx, m)
	case *TutorialMutation:
		return c.Tutorial.mutate(ctx, m)
	case *WorkExperienceMutation:
		return c.WorkExperience.mutate(ctx, m)
	case *WxMutation:
		return c.Wx.mutate(ctx, m)
	case *WxCardMutation:
		return c.WxCard.mutate(ctx, m)
	case *WxCardUserMutation:
		return c.WxCardUser.mutate(ctx, m)
	case *WxCardVisitMutation:
		return c.WxCardVisit.mutate(ctx, m)
	default:
		return nil, fmt.Errorf("ent: unknown mutation type %T", m)
	}
}

// AgentClient is a client for the Agent schema.
type AgentClient struct {
	config
}

// NewAgentClient returns a client for the Agent from the given config.
func NewAgentClient(c config) *AgentClient {
	return &AgentClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `agent.Hooks(f(g(h())))`.
func (c *AgentClient) Use(hooks ...Hook) {
	c.hooks.Agent = append(c.hooks.Agent, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `agent.Intercept(f(g(h())))`.
func (c *AgentClient) Intercept(interceptors ...Interceptor) {
	c.inters.Agent = append(c.inters.Agent, interceptors...)
}

// Create returns a builder for creating a Agent entity.
func (c *AgentClient) Create() *AgentCreate {
	mutation := newAgentMutation(c.config, OpCreate)
	return &AgentCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of Agent entities.
func (c *AgentClient) CreateBulk(builders ...*AgentCreate) *AgentCreateBulk {
	return &AgentCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *AgentClient) MapCreateBulk(slice any, setFunc func(*AgentCreate, int)) *AgentCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &AgentCreateBulk{err: fmt.Errorf("calling to AgentClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*AgentCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &AgentCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for Agent.
func (c *AgentClient) Update() *AgentUpdate {
	mutation := newAgentMutation(c.config, OpUpdate)
	return &AgentUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *AgentClient) UpdateOne(a *Agent) *AgentUpdateOne {
	mutation := newAgentMutation(c.config, OpUpdateOne, withAgent(a))
	return &AgentUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *AgentClient) UpdateOneID(id uint64) *AgentUpdateOne {
	mutation := newAgentMutation(c.config, OpUpdateOne, withAgentID(id))
	return &AgentUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for Agent.
func (c *AgentClient) Delete() *AgentDelete {
	mutation := newAgentMutation(c.config, OpDelete)
	return &AgentDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *AgentClient) DeleteOne(a *Agent) *AgentDeleteOne {
	return c.DeleteOneID(a.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *AgentClient) DeleteOneID(id uint64) *AgentDeleteOne {
	builder := c.Delete().Where(agent.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &AgentDeleteOne{builder}
}

// Query returns a query builder for Agent.
func (c *AgentClient) Query() *AgentQuery {
	return &AgentQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeAgent},
		inters: c.Interceptors(),
	}
}

// Get returns a Agent entity by its id.
func (c *AgentClient) Get(ctx context.Context, id uint64) (*Agent, error) {
	return c.Query().Where(agent.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *AgentClient) GetX(ctx context.Context, id uint64) *Agent {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QueryWxAgent queries the wx_agent edge of a Agent.
func (c *AgentClient) QueryWxAgent(a *Agent) *WxQuery {
	query := (&WxClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := a.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(agent.Table, agent.FieldID, id),
			sqlgraph.To(wx.Table, wx.FieldID),
			sqlgraph.Edge(sqlgraph.O2M, false, agent.WxAgentTable, agent.WxAgentColumn),
		)
		fromV = sqlgraph.Neighbors(a.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *AgentClient) Hooks() []Hook {
	hooks := c.hooks.Agent
	return append(hooks[:len(hooks):len(hooks)], agent.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *AgentClient) Interceptors() []Interceptor {
	inters := c.inters.Agent
	return append(inters[:len(inters):len(inters)], agent.Interceptors[:]...)
}

func (c *AgentClient) mutate(ctx context.Context, m *AgentMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&AgentCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&AgentUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&AgentUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&AgentDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown Agent mutation op: %q", m.Op())
	}
}

// AgentBaseClient is a client for the AgentBase schema.
type AgentBaseClient struct {
	config
}

// NewAgentBaseClient returns a client for the AgentBase from the given config.
func NewAgentBaseClient(c config) *AgentBaseClient {
	return &AgentBaseClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `agentbase.Hooks(f(g(h())))`.
func (c *AgentBaseClient) Use(hooks ...Hook) {
	c.hooks.AgentBase = append(c.hooks.AgentBase, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `agentbase.Intercept(f(g(h())))`.
func (c *AgentBaseClient) Intercept(interceptors ...Interceptor) {
	c.inters.AgentBase = append(c.inters.AgentBase, interceptors...)
}

// Create returns a builder for creating a AgentBase entity.
func (c *AgentBaseClient) Create() *AgentBaseCreate {
	mutation := newAgentBaseMutation(c.config, OpCreate)
	return &AgentBaseCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of AgentBase entities.
func (c *AgentBaseClient) CreateBulk(builders ...*AgentBaseCreate) *AgentBaseCreateBulk {
	return &AgentBaseCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *AgentBaseClient) MapCreateBulk(slice any, setFunc func(*AgentBaseCreate, int)) *AgentBaseCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &AgentBaseCreateBulk{err: fmt.Errorf("calling to AgentBaseClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*AgentBaseCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &AgentBaseCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for AgentBase.
func (c *AgentBaseClient) Update() *AgentBaseUpdate {
	mutation := newAgentBaseMutation(c.config, OpUpdate)
	return &AgentBaseUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *AgentBaseClient) UpdateOne(ab *AgentBase) *AgentBaseUpdateOne {
	mutation := newAgentBaseMutation(c.config, OpUpdateOne, withAgentBase(ab))
	return &AgentBaseUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *AgentBaseClient) UpdateOneID(id string) *AgentBaseUpdateOne {
	mutation := newAgentBaseMutation(c.config, OpUpdateOne, withAgentBaseID(id))
	return &AgentBaseUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for AgentBase.
func (c *AgentBaseClient) Delete() *AgentBaseDelete {
	mutation := newAgentBaseMutation(c.config, OpDelete)
	return &AgentBaseDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *AgentBaseClient) DeleteOne(ab *AgentBase) *AgentBaseDeleteOne {
	return c.DeleteOneID(ab.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *AgentBaseClient) DeleteOneID(id string) *AgentBaseDeleteOne {
	builder := c.Delete().Where(agentbase.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &AgentBaseDeleteOne{builder}
}

// Query returns a query builder for AgentBase.
func (c *AgentBaseClient) Query() *AgentBaseQuery {
	return &AgentBaseQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeAgentBase},
		inters: c.Interceptors(),
	}
}

// Get returns a AgentBase entity by its id.
func (c *AgentBaseClient) Get(ctx context.Context, id string) (*AgentBase, error) {
	return c.Query().Where(agentbase.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *AgentBaseClient) GetX(ctx context.Context, id string) *AgentBase {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QueryWxAgent queries the wx_agent edge of a AgentBase.
func (c *AgentBaseClient) QueryWxAgent(ab *AgentBase) *WxQuery {
	query := (&WxClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := ab.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(agentbase.Table, agentbase.FieldID, id),
			sqlgraph.To(wx.Table, wx.FieldID),
			sqlgraph.Edge(sqlgraph.O2M, false, agentbase.WxAgentTable, agentbase.WxAgentColumn),
		)
		fromV = sqlgraph.Neighbors(ab.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *AgentBaseClient) Hooks() []Hook {
	return c.hooks.AgentBase
}

// Interceptors returns the client interceptors.
func (c *AgentBaseClient) Interceptors() []Interceptor {
	return c.inters.AgentBase
}

func (c *AgentBaseClient) mutate(ctx context.Context, m *AgentBaseMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&AgentBaseCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&AgentBaseUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&AgentBaseUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&AgentBaseDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown AgentBase mutation op: %q", m.Op())
	}
}

// BatchMsgClient is a client for the BatchMsg schema.
type BatchMsgClient struct {
	config
}

// NewBatchMsgClient returns a client for the BatchMsg from the given config.
func NewBatchMsgClient(c config) *BatchMsgClient {
	return &BatchMsgClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `batchmsg.Hooks(f(g(h())))`.
func (c *BatchMsgClient) Use(hooks ...Hook) {
	c.hooks.BatchMsg = append(c.hooks.BatchMsg, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `batchmsg.Intercept(f(g(h())))`.
func (c *BatchMsgClient) Intercept(interceptors ...Interceptor) {
	c.inters.BatchMsg = append(c.inters.BatchMsg, interceptors...)
}

// Create returns a builder for creating a BatchMsg entity.
func (c *BatchMsgClient) Create() *BatchMsgCreate {
	mutation := newBatchMsgMutation(c.config, OpCreate)
	return &BatchMsgCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of BatchMsg entities.
func (c *BatchMsgClient) CreateBulk(builders ...*BatchMsgCreate) *BatchMsgCreateBulk {
	return &BatchMsgCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *BatchMsgClient) MapCreateBulk(slice any, setFunc func(*BatchMsgCreate, int)) *BatchMsgCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &BatchMsgCreateBulk{err: fmt.Errorf("calling to BatchMsgClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*BatchMsgCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &BatchMsgCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for BatchMsg.
func (c *BatchMsgClient) Update() *BatchMsgUpdate {
	mutation := newBatchMsgMutation(c.config, OpUpdate)
	return &BatchMsgUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *BatchMsgClient) UpdateOne(bm *BatchMsg) *BatchMsgUpdateOne {
	mutation := newBatchMsgMutation(c.config, OpUpdateOne, withBatchMsg(bm))
	return &BatchMsgUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *BatchMsgClient) UpdateOneID(id uint64) *BatchMsgUpdateOne {
	mutation := newBatchMsgMutation(c.config, OpUpdateOne, withBatchMsgID(id))
	return &BatchMsgUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for BatchMsg.
func (c *BatchMsgClient) Delete() *BatchMsgDelete {
	mutation := newBatchMsgMutation(c.config, OpDelete)
	return &BatchMsgDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *BatchMsgClient) DeleteOne(bm *BatchMsg) *BatchMsgDeleteOne {
	return c.DeleteOneID(bm.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *BatchMsgClient) DeleteOneID(id uint64) *BatchMsgDeleteOne {
	builder := c.Delete().Where(batchmsg.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &BatchMsgDeleteOne{builder}
}

// Query returns a query builder for BatchMsg.
func (c *BatchMsgClient) Query() *BatchMsgQuery {
	return &BatchMsgQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeBatchMsg},
		inters: c.Interceptors(),
	}
}

// Get returns a BatchMsg entity by its id.
func (c *BatchMsgClient) Get(ctx context.Context, id uint64) (*BatchMsg, error) {
	return c.Query().Where(batchmsg.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *BatchMsgClient) GetX(ctx context.Context, id uint64) *BatchMsg {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// Hooks returns the client hooks.
func (c *BatchMsgClient) Hooks() []Hook {
	hooks := c.hooks.BatchMsg
	return append(hooks[:len(hooks):len(hooks)], batchmsg.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *BatchMsgClient) Interceptors() []Interceptor {
	inters := c.inters.BatchMsg
	return append(inters[:len(inters):len(inters)], batchmsg.Interceptors[:]...)
}

func (c *BatchMsgClient) mutate(ctx context.Context, m *BatchMsgMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&BatchMsgCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&BatchMsgUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&BatchMsgUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&BatchMsgDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown BatchMsg mutation op: %q", m.Op())
	}
}

// CategoryClient is a client for the Category schema.
type CategoryClient struct {
	config
}

// NewCategoryClient returns a client for the Category from the given config.
func NewCategoryClient(c config) *CategoryClient {
	return &CategoryClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `category.Hooks(f(g(h())))`.
func (c *CategoryClient) Use(hooks ...Hook) {
	c.hooks.Category = append(c.hooks.Category, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `category.Intercept(f(g(h())))`.
func (c *CategoryClient) Intercept(interceptors ...Interceptor) {
	c.inters.Category = append(c.inters.Category, interceptors...)
}

// Create returns a builder for creating a Category entity.
func (c *CategoryClient) Create() *CategoryCreate {
	mutation := newCategoryMutation(c.config, OpCreate)
	return &CategoryCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of Category entities.
func (c *CategoryClient) CreateBulk(builders ...*CategoryCreate) *CategoryCreateBulk {
	return &CategoryCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *CategoryClient) MapCreateBulk(slice any, setFunc func(*CategoryCreate, int)) *CategoryCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &CategoryCreateBulk{err: fmt.Errorf("calling to CategoryClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*CategoryCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &CategoryCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for Category.
func (c *CategoryClient) Update() *CategoryUpdate {
	mutation := newCategoryMutation(c.config, OpUpdate)
	return &CategoryUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *CategoryClient) UpdateOne(ca *Category) *CategoryUpdateOne {
	mutation := newCategoryMutation(c.config, OpUpdateOne, withCategory(ca))
	return &CategoryUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *CategoryClient) UpdateOneID(id uint64) *CategoryUpdateOne {
	mutation := newCategoryMutation(c.config, OpUpdateOne, withCategoryID(id))
	return &CategoryUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for Category.
func (c *CategoryClient) Delete() *CategoryDelete {
	mutation := newCategoryMutation(c.config, OpDelete)
	return &CategoryDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *CategoryClient) DeleteOne(ca *Category) *CategoryDeleteOne {
	return c.DeleteOneID(ca.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *CategoryClient) DeleteOneID(id uint64) *CategoryDeleteOne {
	builder := c.Delete().Where(category.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &CategoryDeleteOne{builder}
}

// Query returns a query builder for Category.
func (c *CategoryClient) Query() *CategoryQuery {
	return &CategoryQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeCategory},
		inters: c.Interceptors(),
	}
}

// Get returns a Category entity by its id.
func (c *CategoryClient) Get(ctx context.Context, id uint64) (*Category, error) {
	return c.Query().Where(category.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *CategoryClient) GetX(ctx context.Context, id uint64) *Category {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// Hooks returns the client hooks.
func (c *CategoryClient) Hooks() []Hook {
	hooks := c.hooks.Category
	return append(hooks[:len(hooks):len(hooks)], category.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *CategoryClient) Interceptors() []Interceptor {
	inters := c.inters.Category
	return append(inters[:len(inters):len(inters)], category.Interceptors[:]...)
}

func (c *CategoryClient) mutate(ctx context.Context, m *CategoryMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&CategoryCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&CategoryUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&CategoryUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&CategoryDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown Category mutation op: %q", m.Op())
	}
}

// ChatRecordsClient is a client for the ChatRecords schema.
type ChatRecordsClient struct {
	config
}

// NewChatRecordsClient returns a client for the ChatRecords from the given config.
func NewChatRecordsClient(c config) *ChatRecordsClient {
	return &ChatRecordsClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `chatrecords.Hooks(f(g(h())))`.
func (c *ChatRecordsClient) Use(hooks ...Hook) {
	c.hooks.ChatRecords = append(c.hooks.ChatRecords, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `chatrecords.Intercept(f(g(h())))`.
func (c *ChatRecordsClient) Intercept(interceptors ...Interceptor) {
	c.inters.ChatRecords = append(c.inters.ChatRecords, interceptors...)
}

// Create returns a builder for creating a ChatRecords entity.
func (c *ChatRecordsClient) Create() *ChatRecordsCreate {
	mutation := newChatRecordsMutation(c.config, OpCreate)
	return &ChatRecordsCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of ChatRecords entities.
func (c *ChatRecordsClient) CreateBulk(builders ...*ChatRecordsCreate) *ChatRecordsCreateBulk {
	return &ChatRecordsCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *ChatRecordsClient) MapCreateBulk(slice any, setFunc func(*ChatRecordsCreate, int)) *ChatRecordsCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &ChatRecordsCreateBulk{err: fmt.Errorf("calling to ChatRecordsClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*ChatRecordsCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &ChatRecordsCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for ChatRecords.
func (c *ChatRecordsClient) Update() *ChatRecordsUpdate {
	mutation := newChatRecordsMutation(c.config, OpUpdate)
	return &ChatRecordsUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *ChatRecordsClient) UpdateOne(cr *ChatRecords) *ChatRecordsUpdateOne {
	mutation := newChatRecordsMutation(c.config, OpUpdateOne, withChatRecords(cr))
	return &ChatRecordsUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *ChatRecordsClient) UpdateOneID(id uint64) *ChatRecordsUpdateOne {
	mutation := newChatRecordsMutation(c.config, OpUpdateOne, withChatRecordsID(id))
	return &ChatRecordsUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for ChatRecords.
func (c *ChatRecordsClient) Delete() *ChatRecordsDelete {
	mutation := newChatRecordsMutation(c.config, OpDelete)
	return &ChatRecordsDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *ChatRecordsClient) DeleteOne(cr *ChatRecords) *ChatRecordsDeleteOne {
	return c.DeleteOneID(cr.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *ChatRecordsClient) DeleteOneID(id uint64) *ChatRecordsDeleteOne {
	builder := c.Delete().Where(chatrecords.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &ChatRecordsDeleteOne{builder}
}

// Query returns a query builder for ChatRecords.
func (c *ChatRecordsClient) Query() *ChatRecordsQuery {
	return &ChatRecordsQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeChatRecords},
		inters: c.Interceptors(),
	}
}

// Get returns a ChatRecords entity by its id.
func (c *ChatRecordsClient) Get(ctx context.Context, id uint64) (*ChatRecords, error) {
	return c.Query().Where(chatrecords.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *ChatRecordsClient) GetX(ctx context.Context, id uint64) *ChatRecords {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// Hooks returns the client hooks.
func (c *ChatRecordsClient) Hooks() []Hook {
	hooks := c.hooks.ChatRecords
	return append(hooks[:len(hooks):len(hooks)], chatrecords.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *ChatRecordsClient) Interceptors() []Interceptor {
	inters := c.inters.ChatRecords
	return append(inters[:len(inters):len(inters)], chatrecords.Interceptors[:]...)
}

func (c *ChatRecordsClient) mutate(ctx context.Context, m *ChatRecordsMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&ChatRecordsCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&ChatRecordsUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&ChatRecordsUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&ChatRecordsDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown ChatRecords mutation op: %q", m.Op())
	}
}

// ChatSessionClient is a client for the ChatSession schema.
type ChatSessionClient struct {
	config
}

// NewChatSessionClient returns a client for the ChatSession from the given config.
func NewChatSessionClient(c config) *ChatSessionClient {
	return &ChatSessionClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `chatsession.Hooks(f(g(h())))`.
func (c *ChatSessionClient) Use(hooks ...Hook) {
	c.hooks.ChatSession = append(c.hooks.ChatSession, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `chatsession.Intercept(f(g(h())))`.
func (c *ChatSessionClient) Intercept(interceptors ...Interceptor) {
	c.inters.ChatSession = append(c.inters.ChatSession, interceptors...)
}

// Create returns a builder for creating a ChatSession entity.
func (c *ChatSessionClient) Create() *ChatSessionCreate {
	mutation := newChatSessionMutation(c.config, OpCreate)
	return &ChatSessionCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of ChatSession entities.
func (c *ChatSessionClient) CreateBulk(builders ...*ChatSessionCreate) *ChatSessionCreateBulk {
	return &ChatSessionCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *ChatSessionClient) MapCreateBulk(slice any, setFunc func(*ChatSessionCreate, int)) *ChatSessionCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &ChatSessionCreateBulk{err: fmt.Errorf("calling to ChatSessionClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*ChatSessionCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &ChatSessionCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for ChatSession.
func (c *ChatSessionClient) Update() *ChatSessionUpdate {
	mutation := newChatSessionMutation(c.config, OpUpdate)
	return &ChatSessionUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *ChatSessionClient) UpdateOne(cs *ChatSession) *ChatSessionUpdateOne {
	mutation := newChatSessionMutation(c.config, OpUpdateOne, withChatSession(cs))
	return &ChatSessionUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *ChatSessionClient) UpdateOneID(id uint64) *ChatSessionUpdateOne {
	mutation := newChatSessionMutation(c.config, OpUpdateOne, withChatSessionID(id))
	return &ChatSessionUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for ChatSession.
func (c *ChatSessionClient) Delete() *ChatSessionDelete {
	mutation := newChatSessionMutation(c.config, OpDelete)
	return &ChatSessionDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *ChatSessionClient) DeleteOne(cs *ChatSession) *ChatSessionDeleteOne {
	return c.DeleteOneID(cs.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *ChatSessionClient) DeleteOneID(id uint64) *ChatSessionDeleteOne {
	builder := c.Delete().Where(chatsession.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &ChatSessionDeleteOne{builder}
}

// Query returns a query builder for ChatSession.
func (c *ChatSessionClient) Query() *ChatSessionQuery {
	return &ChatSessionQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeChatSession},
		inters: c.Interceptors(),
	}
}

// Get returns a ChatSession entity by its id.
func (c *ChatSessionClient) Get(ctx context.Context, id uint64) (*ChatSession, error) {
	return c.Query().Where(chatsession.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *ChatSessionClient) GetX(ctx context.Context, id uint64) *ChatSession {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// Hooks returns the client hooks.
func (c *ChatSessionClient) Hooks() []Hook {
	hooks := c.hooks.ChatSession
	return append(hooks[:len(hooks):len(hooks)], chatsession.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *ChatSessionClient) Interceptors() []Interceptor {
	inters := c.inters.ChatSession
	return append(inters[:len(inters):len(inters)], chatsession.Interceptors[:]...)
}

func (c *ChatSessionClient) mutate(ctx context.Context, m *ChatSessionMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&ChatSessionCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&ChatSessionUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&ChatSessionUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&ChatSessionDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown ChatSession mutation op: %q", m.Op())
	}
}

// ContactClient is a client for the Contact schema.
type ContactClient struct {
	config
}

// NewContactClient returns a client for the Contact from the given config.
func NewContactClient(c config) *ContactClient {
	return &ContactClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `contact.Hooks(f(g(h())))`.
func (c *ContactClient) Use(hooks ...Hook) {
	c.hooks.Contact = append(c.hooks.Contact, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `contact.Intercept(f(g(h())))`.
func (c *ContactClient) Intercept(interceptors ...Interceptor) {
	c.inters.Contact = append(c.inters.Contact, interceptors...)
}

// Create returns a builder for creating a Contact entity.
func (c *ContactClient) Create() *ContactCreate {
	mutation := newContactMutation(c.config, OpCreate)
	return &ContactCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of Contact entities.
func (c *ContactClient) CreateBulk(builders ...*ContactCreate) *ContactCreateBulk {
	return &ContactCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *ContactClient) MapCreateBulk(slice any, setFunc func(*ContactCreate, int)) *ContactCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &ContactCreateBulk{err: fmt.Errorf("calling to ContactClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*ContactCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &ContactCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for Contact.
func (c *ContactClient) Update() *ContactUpdate {
	mutation := newContactMutation(c.config, OpUpdate)
	return &ContactUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *ContactClient) UpdateOne(co *Contact) *ContactUpdateOne {
	mutation := newContactMutation(c.config, OpUpdateOne, withContact(co))
	return &ContactUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *ContactClient) UpdateOneID(id uint64) *ContactUpdateOne {
	mutation := newContactMutation(c.config, OpUpdateOne, withContactID(id))
	return &ContactUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for Contact.
func (c *ContactClient) Delete() *ContactDelete {
	mutation := newContactMutation(c.config, OpDelete)
	return &ContactDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *ContactClient) DeleteOne(co *Contact) *ContactDeleteOne {
	return c.DeleteOneID(co.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *ContactClient) DeleteOneID(id uint64) *ContactDeleteOne {
	builder := c.Delete().Where(contact.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &ContactDeleteOne{builder}
}

// Query returns a query builder for Contact.
func (c *ContactClient) Query() *ContactQuery {
	return &ContactQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeContact},
		inters: c.Interceptors(),
	}
}

// Get returns a Contact entity by its id.
func (c *ContactClient) Get(ctx context.Context, id uint64) (*Contact, error) {
	return c.Query().Where(contact.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *ContactClient) GetX(ctx context.Context, id uint64) *Contact {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QueryContactRelationships queries the contact_relationships edge of a Contact.
func (c *ContactClient) QueryContactRelationships(co *Contact) *LabelRelationshipQuery {
	query := (&LabelRelationshipClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := co.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(contact.Table, contact.FieldID, id),
			sqlgraph.To(labelrelationship.Table, labelrelationship.FieldID),
			sqlgraph.Edge(sqlgraph.O2M, false, contact.ContactRelationshipsTable, contact.ContactRelationshipsColumn),
		)
		fromV = sqlgraph.Neighbors(co.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// QueryContactMessages queries the contact_messages edge of a Contact.
func (c *ContactClient) QueryContactMessages(co *Contact) *MessageRecordsQuery {
	query := (&MessageRecordsClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := co.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(contact.Table, contact.FieldID, id),
			sqlgraph.To(messagerecords.Table, messagerecords.FieldID),
			sqlgraph.Edge(sqlgraph.O2M, false, contact.ContactMessagesTable, contact.ContactMessagesColumn),
		)
		fromV = sqlgraph.Neighbors(co.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *ContactClient) Hooks() []Hook {
	hooks := c.hooks.Contact
	return append(hooks[:len(hooks):len(hooks)], contact.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *ContactClient) Interceptors() []Interceptor {
	inters := c.inters.Contact
	return append(inters[:len(inters):len(inters)], contact.Interceptors[:]...)
}

func (c *ContactClient) mutate(ctx context.Context, m *ContactMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&ContactCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&ContactUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&ContactUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&ContactDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown Contact mutation op: %q", m.Op())
	}
}

// EmployeeClient is a client for the Employee schema.
type EmployeeClient struct {
	config
}

// NewEmployeeClient returns a client for the Employee from the given config.
func NewEmployeeClient(c config) *EmployeeClient {
	return &EmployeeClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `employee.Hooks(f(g(h())))`.
func (c *EmployeeClient) Use(hooks ...Hook) {
	c.hooks.Employee = append(c.hooks.Employee, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `employee.Intercept(f(g(h())))`.
func (c *EmployeeClient) Intercept(interceptors ...Interceptor) {
	c.inters.Employee = append(c.inters.Employee, interceptors...)
}

// Create returns a builder for creating a Employee entity.
func (c *EmployeeClient) Create() *EmployeeCreate {
	mutation := newEmployeeMutation(c.config, OpCreate)
	return &EmployeeCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of Employee entities.
func (c *EmployeeClient) CreateBulk(builders ...*EmployeeCreate) *EmployeeCreateBulk {
	return &EmployeeCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *EmployeeClient) MapCreateBulk(slice any, setFunc func(*EmployeeCreate, int)) *EmployeeCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &EmployeeCreateBulk{err: fmt.Errorf("calling to EmployeeClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*EmployeeCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &EmployeeCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for Employee.
func (c *EmployeeClient) Update() *EmployeeUpdate {
	mutation := newEmployeeMutation(c.config, OpUpdate)
	return &EmployeeUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *EmployeeClient) UpdateOne(e *Employee) *EmployeeUpdateOne {
	mutation := newEmployeeMutation(c.config, OpUpdateOne, withEmployee(e))
	return &EmployeeUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *EmployeeClient) UpdateOneID(id uint64) *EmployeeUpdateOne {
	mutation := newEmployeeMutation(c.config, OpUpdateOne, withEmployeeID(id))
	return &EmployeeUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for Employee.
func (c *EmployeeClient) Delete() *EmployeeDelete {
	mutation := newEmployeeMutation(c.config, OpDelete)
	return &EmployeeDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *EmployeeClient) DeleteOne(e *Employee) *EmployeeDeleteOne {
	return c.DeleteOneID(e.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *EmployeeClient) DeleteOneID(id uint64) *EmployeeDeleteOne {
	builder := c.Delete().Where(employee.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &EmployeeDeleteOne{builder}
}

// Query returns a query builder for Employee.
func (c *EmployeeClient) Query() *EmployeeQuery {
	return &EmployeeQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeEmployee},
		inters: c.Interceptors(),
	}
}

// Get returns a Employee entity by its id.
func (c *EmployeeClient) Get(ctx context.Context, id uint64) (*Employee, error) {
	return c.Query().Where(employee.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *EmployeeClient) GetX(ctx context.Context, id uint64) *Employee {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QueryEmWorkExperiences queries the em_work_experiences edge of a Employee.
func (c *EmployeeClient) QueryEmWorkExperiences(e *Employee) *WorkExperienceQuery {
	query := (&WorkExperienceClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := e.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(employee.Table, employee.FieldID, id),
			sqlgraph.To(workexperience.Table, workexperience.FieldID),
			sqlgraph.Edge(sqlgraph.O2M, false, employee.EmWorkExperiencesTable, employee.EmWorkExperiencesColumn),
		)
		fromV = sqlgraph.Neighbors(e.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// QueryEmTutorial queries the em_tutorial edge of a Employee.
func (c *EmployeeClient) QueryEmTutorial(e *Employee) *TutorialQuery {
	query := (&TutorialClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := e.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(employee.Table, employee.FieldID, id),
			sqlgraph.To(tutorial.Table, tutorial.FieldID),
			sqlgraph.Edge(sqlgraph.O2M, false, employee.EmTutorialTable, employee.EmTutorialColumn),
		)
		fromV = sqlgraph.Neighbors(e.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *EmployeeClient) Hooks() []Hook {
	hooks := c.hooks.Employee
	return append(hooks[:len(hooks):len(hooks)], employee.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *EmployeeClient) Interceptors() []Interceptor {
	inters := c.inters.Employee
	return append(inters[:len(inters):len(inters)], employee.Interceptors[:]...)
}

func (c *EmployeeClient) mutate(ctx context.Context, m *EmployeeMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&EmployeeCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&EmployeeUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&EmployeeUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&EmployeeDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown Employee mutation op: %q", m.Op())
	}
}

// EmployeeConfigClient is a client for the EmployeeConfig schema.
type EmployeeConfigClient struct {
	config
}

// NewEmployeeConfigClient returns a client for the EmployeeConfig from the given config.
func NewEmployeeConfigClient(c config) *EmployeeConfigClient {
	return &EmployeeConfigClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `employeeconfig.Hooks(f(g(h())))`.
func (c *EmployeeConfigClient) Use(hooks ...Hook) {
	c.hooks.EmployeeConfig = append(c.hooks.EmployeeConfig, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `employeeconfig.Intercept(f(g(h())))`.
func (c *EmployeeConfigClient) Intercept(interceptors ...Interceptor) {
	c.inters.EmployeeConfig = append(c.inters.EmployeeConfig, interceptors...)
}

// Create returns a builder for creating a EmployeeConfig entity.
func (c *EmployeeConfigClient) Create() *EmployeeConfigCreate {
	mutation := newEmployeeConfigMutation(c.config, OpCreate)
	return &EmployeeConfigCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of EmployeeConfig entities.
func (c *EmployeeConfigClient) CreateBulk(builders ...*EmployeeConfigCreate) *EmployeeConfigCreateBulk {
	return &EmployeeConfigCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *EmployeeConfigClient) MapCreateBulk(slice any, setFunc func(*EmployeeConfigCreate, int)) *EmployeeConfigCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &EmployeeConfigCreateBulk{err: fmt.Errorf("calling to EmployeeConfigClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*EmployeeConfigCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &EmployeeConfigCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for EmployeeConfig.
func (c *EmployeeConfigClient) Update() *EmployeeConfigUpdate {
	mutation := newEmployeeConfigMutation(c.config, OpUpdate)
	return &EmployeeConfigUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *EmployeeConfigClient) UpdateOne(ec *EmployeeConfig) *EmployeeConfigUpdateOne {
	mutation := newEmployeeConfigMutation(c.config, OpUpdateOne, withEmployeeConfig(ec))
	return &EmployeeConfigUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *EmployeeConfigClient) UpdateOneID(id uint64) *EmployeeConfigUpdateOne {
	mutation := newEmployeeConfigMutation(c.config, OpUpdateOne, withEmployeeConfigID(id))
	return &EmployeeConfigUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for EmployeeConfig.
func (c *EmployeeConfigClient) Delete() *EmployeeConfigDelete {
	mutation := newEmployeeConfigMutation(c.config, OpDelete)
	return &EmployeeConfigDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *EmployeeConfigClient) DeleteOne(ec *EmployeeConfig) *EmployeeConfigDeleteOne {
	return c.DeleteOneID(ec.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *EmployeeConfigClient) DeleteOneID(id uint64) *EmployeeConfigDeleteOne {
	builder := c.Delete().Where(employeeconfig.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &EmployeeConfigDeleteOne{builder}
}

// Query returns a query builder for EmployeeConfig.
func (c *EmployeeConfigClient) Query() *EmployeeConfigQuery {
	return &EmployeeConfigQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeEmployeeConfig},
		inters: c.Interceptors(),
	}
}

// Get returns a EmployeeConfig entity by its id.
func (c *EmployeeConfigClient) Get(ctx context.Context, id uint64) (*EmployeeConfig, error) {
	return c.Query().Where(employeeconfig.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *EmployeeConfigClient) GetX(ctx context.Context, id uint64) *EmployeeConfig {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// Hooks returns the client hooks.
func (c *EmployeeConfigClient) Hooks() []Hook {
	hooks := c.hooks.EmployeeConfig
	return append(hooks[:len(hooks):len(hooks)], employeeconfig.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *EmployeeConfigClient) Interceptors() []Interceptor {
	inters := c.inters.EmployeeConfig
	return append(inters[:len(inters):len(inters)], employeeconfig.Interceptors[:]...)
}

func (c *EmployeeConfigClient) mutate(ctx context.Context, m *EmployeeConfigMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&EmployeeConfigCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&EmployeeConfigUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&EmployeeConfigUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&EmployeeConfigDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown EmployeeConfig mutation op: %q", m.Op())
	}
}

// LabelClient is a client for the Label schema.
type LabelClient struct {
	config
}

// NewLabelClient returns a client for the Label from the given config.
func NewLabelClient(c config) *LabelClient {
	return &LabelClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `label.Hooks(f(g(h())))`.
func (c *LabelClient) Use(hooks ...Hook) {
	c.hooks.Label = append(c.hooks.Label, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `label.Intercept(f(g(h())))`.
func (c *LabelClient) Intercept(interceptors ...Interceptor) {
	c.inters.Label = append(c.inters.Label, interceptors...)
}

// Create returns a builder for creating a Label entity.
func (c *LabelClient) Create() *LabelCreate {
	mutation := newLabelMutation(c.config, OpCreate)
	return &LabelCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of Label entities.
func (c *LabelClient) CreateBulk(builders ...*LabelCreate) *LabelCreateBulk {
	return &LabelCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *LabelClient) MapCreateBulk(slice any, setFunc func(*LabelCreate, int)) *LabelCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &LabelCreateBulk{err: fmt.Errorf("calling to LabelClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*LabelCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &LabelCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for Label.
func (c *LabelClient) Update() *LabelUpdate {
	mutation := newLabelMutation(c.config, OpUpdate)
	return &LabelUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *LabelClient) UpdateOne(l *Label) *LabelUpdateOne {
	mutation := newLabelMutation(c.config, OpUpdateOne, withLabel(l))
	return &LabelUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *LabelClient) UpdateOneID(id uint64) *LabelUpdateOne {
	mutation := newLabelMutation(c.config, OpUpdateOne, withLabelID(id))
	return &LabelUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for Label.
func (c *LabelClient) Delete() *LabelDelete {
	mutation := newLabelMutation(c.config, OpDelete)
	return &LabelDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *LabelClient) DeleteOne(l *Label) *LabelDeleteOne {
	return c.DeleteOneID(l.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *LabelClient) DeleteOneID(id uint64) *LabelDeleteOne {
	builder := c.Delete().Where(label.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &LabelDeleteOne{builder}
}

// Query returns a query builder for Label.
func (c *LabelClient) Query() *LabelQuery {
	return &LabelQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeLabel},
		inters: c.Interceptors(),
	}
}

// Get returns a Label entity by its id.
func (c *LabelClient) Get(ctx context.Context, id uint64) (*Label, error) {
	return c.Query().Where(label.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *LabelClient) GetX(ctx context.Context, id uint64) *Label {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QueryLabelRelationships queries the label_relationships edge of a Label.
func (c *LabelClient) QueryLabelRelationships(l *Label) *LabelRelationshipQuery {
	query := (&LabelRelationshipClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := l.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(label.Table, label.FieldID, id),
			sqlgraph.To(labelrelationship.Table, labelrelationship.FieldID),
			sqlgraph.Edge(sqlgraph.O2M, false, label.LabelRelationshipsTable, label.LabelRelationshipsColumn),
		)
		fromV = sqlgraph.Neighbors(l.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *LabelClient) Hooks() []Hook {
	return c.hooks.Label
}

// Interceptors returns the client interceptors.
func (c *LabelClient) Interceptors() []Interceptor {
	return c.inters.Label
}

func (c *LabelClient) mutate(ctx context.Context, m *LabelMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&LabelCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&LabelUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&LabelUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&LabelDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown Label mutation op: %q", m.Op())
	}
}

// LabelRelationshipClient is a client for the LabelRelationship schema.
type LabelRelationshipClient struct {
	config
}

// NewLabelRelationshipClient returns a client for the LabelRelationship from the given config.
func NewLabelRelationshipClient(c config) *LabelRelationshipClient {
	return &LabelRelationshipClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `labelrelationship.Hooks(f(g(h())))`.
func (c *LabelRelationshipClient) Use(hooks ...Hook) {
	c.hooks.LabelRelationship = append(c.hooks.LabelRelationship, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `labelrelationship.Intercept(f(g(h())))`.
func (c *LabelRelationshipClient) Intercept(interceptors ...Interceptor) {
	c.inters.LabelRelationship = append(c.inters.LabelRelationship, interceptors...)
}

// Create returns a builder for creating a LabelRelationship entity.
func (c *LabelRelationshipClient) Create() *LabelRelationshipCreate {
	mutation := newLabelRelationshipMutation(c.config, OpCreate)
	return &LabelRelationshipCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of LabelRelationship entities.
func (c *LabelRelationshipClient) CreateBulk(builders ...*LabelRelationshipCreate) *LabelRelationshipCreateBulk {
	return &LabelRelationshipCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *LabelRelationshipClient) MapCreateBulk(slice any, setFunc func(*LabelRelationshipCreate, int)) *LabelRelationshipCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &LabelRelationshipCreateBulk{err: fmt.Errorf("calling to LabelRelationshipClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*LabelRelationshipCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &LabelRelationshipCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for LabelRelationship.
func (c *LabelRelationshipClient) Update() *LabelRelationshipUpdate {
	mutation := newLabelRelationshipMutation(c.config, OpUpdate)
	return &LabelRelationshipUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *LabelRelationshipClient) UpdateOne(lr *LabelRelationship) *LabelRelationshipUpdateOne {
	mutation := newLabelRelationshipMutation(c.config, OpUpdateOne, withLabelRelationship(lr))
	return &LabelRelationshipUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *LabelRelationshipClient) UpdateOneID(id uint64) *LabelRelationshipUpdateOne {
	mutation := newLabelRelationshipMutation(c.config, OpUpdateOne, withLabelRelationshipID(id))
	return &LabelRelationshipUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for LabelRelationship.
func (c *LabelRelationshipClient) Delete() *LabelRelationshipDelete {
	mutation := newLabelRelationshipMutation(c.config, OpDelete)
	return &LabelRelationshipDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *LabelRelationshipClient) DeleteOne(lr *LabelRelationship) *LabelRelationshipDeleteOne {
	return c.DeleteOneID(lr.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *LabelRelationshipClient) DeleteOneID(id uint64) *LabelRelationshipDeleteOne {
	builder := c.Delete().Where(labelrelationship.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &LabelRelationshipDeleteOne{builder}
}

// Query returns a query builder for LabelRelationship.
func (c *LabelRelationshipClient) Query() *LabelRelationshipQuery {
	return &LabelRelationshipQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeLabelRelationship},
		inters: c.Interceptors(),
	}
}

// Get returns a LabelRelationship entity by its id.
func (c *LabelRelationshipClient) Get(ctx context.Context, id uint64) (*LabelRelationship, error) {
	return c.Query().Where(labelrelationship.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *LabelRelationshipClient) GetX(ctx context.Context, id uint64) *LabelRelationship {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QueryContacts queries the contacts edge of a LabelRelationship.
func (c *LabelRelationshipClient) QueryContacts(lr *LabelRelationship) *ContactQuery {
	query := (&ContactClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := lr.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(labelrelationship.Table, labelrelationship.FieldID, id),
			sqlgraph.To(contact.Table, contact.FieldID),
			sqlgraph.Edge(sqlgraph.M2O, true, labelrelationship.ContactsTable, labelrelationship.ContactsColumn),
		)
		fromV = sqlgraph.Neighbors(lr.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// QueryLabels queries the labels edge of a LabelRelationship.
func (c *LabelRelationshipClient) QueryLabels(lr *LabelRelationship) *LabelQuery {
	query := (&LabelClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := lr.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(labelrelationship.Table, labelrelationship.FieldID, id),
			sqlgraph.To(label.Table, label.FieldID),
			sqlgraph.Edge(sqlgraph.M2O, true, labelrelationship.LabelsTable, labelrelationship.LabelsColumn),
		)
		fromV = sqlgraph.Neighbors(lr.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *LabelRelationshipClient) Hooks() []Hook {
	hooks := c.hooks.LabelRelationship
	return append(hooks[:len(hooks):len(hooks)], labelrelationship.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *LabelRelationshipClient) Interceptors() []Interceptor {
	inters := c.inters.LabelRelationship
	return append(inters[:len(inters):len(inters)], labelrelationship.Interceptors[:]...)
}

func (c *LabelRelationshipClient) mutate(ctx context.Context, m *LabelRelationshipMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&LabelRelationshipCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&LabelRelationshipUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&LabelRelationshipUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&LabelRelationshipDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown LabelRelationship mutation op: %q", m.Op())
	}
}

// MessageClient is a client for the Message schema.
type MessageClient struct {
	config
}

// NewMessageClient returns a client for the Message from the given config.
func NewMessageClient(c config) *MessageClient {
	return &MessageClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `message.Hooks(f(g(h())))`.
func (c *MessageClient) Use(hooks ...Hook) {
	c.hooks.Message = append(c.hooks.Message, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `message.Intercept(f(g(h())))`.
func (c *MessageClient) Intercept(interceptors ...Interceptor) {
	c.inters.Message = append(c.inters.Message, interceptors...)
}

// Create returns a builder for creating a Message entity.
func (c *MessageClient) Create() *MessageCreate {
	mutation := newMessageMutation(c.config, OpCreate)
	return &MessageCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of Message entities.
func (c *MessageClient) CreateBulk(builders ...*MessageCreate) *MessageCreateBulk {
	return &MessageCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *MessageClient) MapCreateBulk(slice any, setFunc func(*MessageCreate, int)) *MessageCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &MessageCreateBulk{err: fmt.Errorf("calling to MessageClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*MessageCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &MessageCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for Message.
func (c *MessageClient) Update() *MessageUpdate {
	mutation := newMessageMutation(c.config, OpUpdate)
	return &MessageUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *MessageClient) UpdateOne(m *Message) *MessageUpdateOne {
	mutation := newMessageMutation(c.config, OpUpdateOne, withMessage(m))
	return &MessageUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *MessageClient) UpdateOneID(id int) *MessageUpdateOne {
	mutation := newMessageMutation(c.config, OpUpdateOne, withMessageID(id))
	return &MessageUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for Message.
func (c *MessageClient) Delete() *MessageDelete {
	mutation := newMessageMutation(c.config, OpDelete)
	return &MessageDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *MessageClient) DeleteOne(m *Message) *MessageDeleteOne {
	return c.DeleteOneID(m.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *MessageClient) DeleteOneID(id int) *MessageDeleteOne {
	builder := c.Delete().Where(message.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &MessageDeleteOne{builder}
}

// Query returns a query builder for Message.
func (c *MessageClient) Query() *MessageQuery {
	return &MessageQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeMessage},
		inters: c.Interceptors(),
	}
}

// Get returns a Message entity by its id.
func (c *MessageClient) Get(ctx context.Context, id int) (*Message, error) {
	return c.Query().Where(message.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *MessageClient) GetX(ctx context.Context, id int) *Message {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// Hooks returns the client hooks.
func (c *MessageClient) Hooks() []Hook {
	return c.hooks.Message
}

// Interceptors returns the client interceptors.
func (c *MessageClient) Interceptors() []Interceptor {
	return c.inters.Message
}

func (c *MessageClient) mutate(ctx context.Context, m *MessageMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&MessageCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&MessageUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&MessageUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&MessageDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown Message mutation op: %q", m.Op())
	}
}

// MessageRecordsClient is a client for the MessageRecords schema.
type MessageRecordsClient struct {
	config
}

// NewMessageRecordsClient returns a client for the MessageRecords from the given config.
func NewMessageRecordsClient(c config) *MessageRecordsClient {
	return &MessageRecordsClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `messagerecords.Hooks(f(g(h())))`.
func (c *MessageRecordsClient) Use(hooks ...Hook) {
	c.hooks.MessageRecords = append(c.hooks.MessageRecords, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `messagerecords.Intercept(f(g(h())))`.
func (c *MessageRecordsClient) Intercept(interceptors ...Interceptor) {
	c.inters.MessageRecords = append(c.inters.MessageRecords, interceptors...)
}

// Create returns a builder for creating a MessageRecords entity.
func (c *MessageRecordsClient) Create() *MessageRecordsCreate {
	mutation := newMessageRecordsMutation(c.config, OpCreate)
	return &MessageRecordsCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of MessageRecords entities.
func (c *MessageRecordsClient) CreateBulk(builders ...*MessageRecordsCreate) *MessageRecordsCreateBulk {
	return &MessageRecordsCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *MessageRecordsClient) MapCreateBulk(slice any, setFunc func(*MessageRecordsCreate, int)) *MessageRecordsCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &MessageRecordsCreateBulk{err: fmt.Errorf("calling to MessageRecordsClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*MessageRecordsCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &MessageRecordsCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for MessageRecords.
func (c *MessageRecordsClient) Update() *MessageRecordsUpdate {
	mutation := newMessageRecordsMutation(c.config, OpUpdate)
	return &MessageRecordsUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *MessageRecordsClient) UpdateOne(mr *MessageRecords) *MessageRecordsUpdateOne {
	mutation := newMessageRecordsMutation(c.config, OpUpdateOne, withMessageRecords(mr))
	return &MessageRecordsUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *MessageRecordsClient) UpdateOneID(id uint64) *MessageRecordsUpdateOne {
	mutation := newMessageRecordsMutation(c.config, OpUpdateOne, withMessageRecordsID(id))
	return &MessageRecordsUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for MessageRecords.
func (c *MessageRecordsClient) Delete() *MessageRecordsDelete {
	mutation := newMessageRecordsMutation(c.config, OpDelete)
	return &MessageRecordsDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *MessageRecordsClient) DeleteOne(mr *MessageRecords) *MessageRecordsDeleteOne {
	return c.DeleteOneID(mr.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *MessageRecordsClient) DeleteOneID(id uint64) *MessageRecordsDeleteOne {
	builder := c.Delete().Where(messagerecords.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &MessageRecordsDeleteOne{builder}
}

// Query returns a query builder for MessageRecords.
func (c *MessageRecordsClient) Query() *MessageRecordsQuery {
	return &MessageRecordsQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeMessageRecords},
		inters: c.Interceptors(),
	}
}

// Get returns a MessageRecords entity by its id.
func (c *MessageRecordsClient) Get(ctx context.Context, id uint64) (*MessageRecords, error) {
	return c.Query().Where(messagerecords.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *MessageRecordsClient) GetX(ctx context.Context, id uint64) *MessageRecords {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QuerySopStage queries the sop_stage edge of a MessageRecords.
func (c *MessageRecordsClient) QuerySopStage(mr *MessageRecords) *SopStageQuery {
	query := (&SopStageClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := mr.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(messagerecords.Table, messagerecords.FieldID, id),
			sqlgraph.To(sopstage.Table, sopstage.FieldID),
			sqlgraph.Edge(sqlgraph.M2O, true, messagerecords.SopStageTable, messagerecords.SopStageColumn),
		)
		fromV = sqlgraph.Neighbors(mr.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// QuerySopNode queries the sop_node edge of a MessageRecords.
func (c *MessageRecordsClient) QuerySopNode(mr *MessageRecords) *SopNodeQuery {
	query := (&SopNodeClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := mr.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(messagerecords.Table, messagerecords.FieldID, id),
			sqlgraph.To(sopnode.Table, sopnode.FieldID),
			sqlgraph.Edge(sqlgraph.M2O, true, messagerecords.SopNodeTable, messagerecords.SopNodeColumn),
		)
		fromV = sqlgraph.Neighbors(mr.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// QueryMessageContact queries the message_contact edge of a MessageRecords.
func (c *MessageRecordsClient) QueryMessageContact(mr *MessageRecords) *ContactQuery {
	query := (&ContactClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := mr.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(messagerecords.Table, messagerecords.FieldID, id),
			sqlgraph.To(contact.Table, contact.FieldID),
			sqlgraph.Edge(sqlgraph.M2O, true, messagerecords.MessageContactTable, messagerecords.MessageContactColumn),
		)
		fromV = sqlgraph.Neighbors(mr.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *MessageRecordsClient) Hooks() []Hook {
	return c.hooks.MessageRecords
}

// Interceptors returns the client interceptors.
func (c *MessageRecordsClient) Interceptors() []Interceptor {
	return c.inters.MessageRecords
}

func (c *MessageRecordsClient) mutate(ctx context.Context, m *MessageRecordsMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&MessageRecordsCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&MessageRecordsUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&MessageRecordsUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&MessageRecordsDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown MessageRecords mutation op: %q", m.Op())
	}
}

// MsgClient is a client for the Msg schema.
type MsgClient struct {
	config
}

// NewMsgClient returns a client for the Msg from the given config.
func NewMsgClient(c config) *MsgClient {
	return &MsgClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `msg.Hooks(f(g(h())))`.
func (c *MsgClient) Use(hooks ...Hook) {
	c.hooks.Msg = append(c.hooks.Msg, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `msg.Intercept(f(g(h())))`.
func (c *MsgClient) Intercept(interceptors ...Interceptor) {
	c.inters.Msg = append(c.inters.Msg, interceptors...)
}

// Create returns a builder for creating a Msg entity.
func (c *MsgClient) Create() *MsgCreate {
	mutation := newMsgMutation(c.config, OpCreate)
	return &MsgCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of Msg entities.
func (c *MsgClient) CreateBulk(builders ...*MsgCreate) *MsgCreateBulk {
	return &MsgCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *MsgClient) MapCreateBulk(slice any, setFunc func(*MsgCreate, int)) *MsgCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &MsgCreateBulk{err: fmt.Errorf("calling to MsgClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*MsgCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &MsgCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for Msg.
func (c *MsgClient) Update() *MsgUpdate {
	mutation := newMsgMutation(c.config, OpUpdate)
	return &MsgUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *MsgClient) UpdateOne(m *Msg) *MsgUpdateOne {
	mutation := newMsgMutation(c.config, OpUpdateOne, withMsg(m))
	return &MsgUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *MsgClient) UpdateOneID(id uint64) *MsgUpdateOne {
	mutation := newMsgMutation(c.config, OpUpdateOne, withMsgID(id))
	return &MsgUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for Msg.
func (c *MsgClient) Delete() *MsgDelete {
	mutation := newMsgMutation(c.config, OpDelete)
	return &MsgDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *MsgClient) DeleteOne(m *Msg) *MsgDeleteOne {
	return c.DeleteOneID(m.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *MsgClient) DeleteOneID(id uint64) *MsgDeleteOne {
	builder := c.Delete().Where(msg.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &MsgDeleteOne{builder}
}

// Query returns a query builder for Msg.
func (c *MsgClient) Query() *MsgQuery {
	return &MsgQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeMsg},
		inters: c.Interceptors(),
	}
}

// Get returns a Msg entity by its id.
func (c *MsgClient) Get(ctx context.Context, id uint64) (*Msg, error) {
	return c.Query().Where(msg.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *MsgClient) GetX(ctx context.Context, id uint64) *Msg {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// Hooks returns the client hooks.
func (c *MsgClient) Hooks() []Hook {
	hooks := c.hooks.Msg
	return append(hooks[:len(hooks):len(hooks)], msg.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *MsgClient) Interceptors() []Interceptor {
	inters := c.inters.Msg
	return append(inters[:len(inters):len(inters)], msg.Interceptors[:]...)
}

func (c *MsgClient) mutate(ctx context.Context, m *MsgMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&MsgCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&MsgUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&MsgUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&MsgDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown Msg mutation op: %q", m.Op())
	}
}

// ServerClient is a client for the Server schema.
type ServerClient struct {
	config
}

// NewServerClient returns a client for the Server from the given config.
func NewServerClient(c config) *ServerClient {
	return &ServerClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `server.Hooks(f(g(h())))`.
func (c *ServerClient) Use(hooks ...Hook) {
	c.hooks.Server = append(c.hooks.Server, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `server.Intercept(f(g(h())))`.
func (c *ServerClient) Intercept(interceptors ...Interceptor) {
	c.inters.Server = append(c.inters.Server, interceptors...)
}

// Create returns a builder for creating a Server entity.
func (c *ServerClient) Create() *ServerCreate {
	mutation := newServerMutation(c.config, OpCreate)
	return &ServerCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of Server entities.
func (c *ServerClient) CreateBulk(builders ...*ServerCreate) *ServerCreateBulk {
	return &ServerCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *ServerClient) MapCreateBulk(slice any, setFunc func(*ServerCreate, int)) *ServerCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &ServerCreateBulk{err: fmt.Errorf("calling to ServerClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*ServerCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &ServerCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for Server.
func (c *ServerClient) Update() *ServerUpdate {
	mutation := newServerMutation(c.config, OpUpdate)
	return &ServerUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *ServerClient) UpdateOne(s *Server) *ServerUpdateOne {
	mutation := newServerMutation(c.config, OpUpdateOne, withServer(s))
	return &ServerUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *ServerClient) UpdateOneID(id uint64) *ServerUpdateOne {
	mutation := newServerMutation(c.config, OpUpdateOne, withServerID(id))
	return &ServerUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for Server.
func (c *ServerClient) Delete() *ServerDelete {
	mutation := newServerMutation(c.config, OpDelete)
	return &ServerDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *ServerClient) DeleteOne(s *Server) *ServerDeleteOne {
	return c.DeleteOneID(s.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *ServerClient) DeleteOneID(id uint64) *ServerDeleteOne {
	builder := c.Delete().Where(server.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &ServerDeleteOne{builder}
}

// Query returns a query builder for Server.
func (c *ServerClient) Query() *ServerQuery {
	return &ServerQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeServer},
		inters: c.Interceptors(),
	}
}

// Get returns a Server entity by its id.
func (c *ServerClient) Get(ctx context.Context, id uint64) (*Server, error) {
	return c.Query().Where(server.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *ServerClient) GetX(ctx context.Context, id uint64) *Server {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QueryWxs queries the wxs edge of a Server.
func (c *ServerClient) QueryWxs(s *Server) *WxQuery {
	query := (&WxClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := s.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(server.Table, server.FieldID, id),
			sqlgraph.To(wx.Table, wx.FieldID),
			sqlgraph.Edge(sqlgraph.O2M, false, server.WxsTable, server.WxsColumn),
		)
		fromV = sqlgraph.Neighbors(s.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *ServerClient) Hooks() []Hook {
	hooks := c.hooks.Server
	return append(hooks[:len(hooks):len(hooks)], server.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *ServerClient) Interceptors() []Interceptor {
	inters := c.inters.Server
	return append(inters[:len(inters):len(inters)], server.Interceptors[:]...)
}

func (c *ServerClient) mutate(ctx context.Context, m *ServerMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&ServerCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&ServerUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&ServerUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&ServerDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown Server mutation op: %q", m.Op())
	}
}

// SopNodeClient is a client for the SopNode schema.
type SopNodeClient struct {
	config
}

// NewSopNodeClient returns a client for the SopNode from the given config.
func NewSopNodeClient(c config) *SopNodeClient {
	return &SopNodeClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `sopnode.Hooks(f(g(h())))`.
func (c *SopNodeClient) Use(hooks ...Hook) {
	c.hooks.SopNode = append(c.hooks.SopNode, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `sopnode.Intercept(f(g(h())))`.
func (c *SopNodeClient) Intercept(interceptors ...Interceptor) {
	c.inters.SopNode = append(c.inters.SopNode, interceptors...)
}

// Create returns a builder for creating a SopNode entity.
func (c *SopNodeClient) Create() *SopNodeCreate {
	mutation := newSopNodeMutation(c.config, OpCreate)
	return &SopNodeCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of SopNode entities.
func (c *SopNodeClient) CreateBulk(builders ...*SopNodeCreate) *SopNodeCreateBulk {
	return &SopNodeCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *SopNodeClient) MapCreateBulk(slice any, setFunc func(*SopNodeCreate, int)) *SopNodeCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &SopNodeCreateBulk{err: fmt.Errorf("calling to SopNodeClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*SopNodeCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &SopNodeCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for SopNode.
func (c *SopNodeClient) Update() *SopNodeUpdate {
	mutation := newSopNodeMutation(c.config, OpUpdate)
	return &SopNodeUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *SopNodeClient) UpdateOne(sn *SopNode) *SopNodeUpdateOne {
	mutation := newSopNodeMutation(c.config, OpUpdateOne, withSopNode(sn))
	return &SopNodeUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *SopNodeClient) UpdateOneID(id uint64) *SopNodeUpdateOne {
	mutation := newSopNodeMutation(c.config, OpUpdateOne, withSopNodeID(id))
	return &SopNodeUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for SopNode.
func (c *SopNodeClient) Delete() *SopNodeDelete {
	mutation := newSopNodeMutation(c.config, OpDelete)
	return &SopNodeDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *SopNodeClient) DeleteOne(sn *SopNode) *SopNodeDeleteOne {
	return c.DeleteOneID(sn.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *SopNodeClient) DeleteOneID(id uint64) *SopNodeDeleteOne {
	builder := c.Delete().Where(sopnode.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &SopNodeDeleteOne{builder}
}

// Query returns a query builder for SopNode.
func (c *SopNodeClient) Query() *SopNodeQuery {
	return &SopNodeQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeSopNode},
		inters: c.Interceptors(),
	}
}

// Get returns a SopNode entity by its id.
func (c *SopNodeClient) Get(ctx context.Context, id uint64) (*SopNode, error) {
	return c.Query().Where(sopnode.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *SopNodeClient) GetX(ctx context.Context, id uint64) *SopNode {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QuerySopStage queries the sop_stage edge of a SopNode.
func (c *SopNodeClient) QuerySopStage(sn *SopNode) *SopStageQuery {
	query := (&SopStageClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := sn.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(sopnode.Table, sopnode.FieldID, id),
			sqlgraph.To(sopstage.Table, sopstage.FieldID),
			sqlgraph.Edge(sqlgraph.M2O, true, sopnode.SopStageTable, sopnode.SopStageColumn),
		)
		fromV = sqlgraph.Neighbors(sn.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// QueryNodeMessages queries the node_messages edge of a SopNode.
func (c *SopNodeClient) QueryNodeMessages(sn *SopNode) *MessageRecordsQuery {
	query := (&MessageRecordsClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := sn.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(sopnode.Table, sopnode.FieldID, id),
			sqlgraph.To(messagerecords.Table, messagerecords.FieldID),
			sqlgraph.Edge(sqlgraph.O2M, false, sopnode.NodeMessagesTable, sopnode.NodeMessagesColumn),
		)
		fromV = sqlgraph.Neighbors(sn.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *SopNodeClient) Hooks() []Hook {
	hooks := c.hooks.SopNode
	return append(hooks[:len(hooks):len(hooks)], sopnode.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *SopNodeClient) Interceptors() []Interceptor {
	inters := c.inters.SopNode
	return append(inters[:len(inters):len(inters)], sopnode.Interceptors[:]...)
}

func (c *SopNodeClient) mutate(ctx context.Context, m *SopNodeMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&SopNodeCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&SopNodeUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&SopNodeUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&SopNodeDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown SopNode mutation op: %q", m.Op())
	}
}

// SopStageClient is a client for the SopStage schema.
type SopStageClient struct {
	config
}

// NewSopStageClient returns a client for the SopStage from the given config.
func NewSopStageClient(c config) *SopStageClient {
	return &SopStageClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `sopstage.Hooks(f(g(h())))`.
func (c *SopStageClient) Use(hooks ...Hook) {
	c.hooks.SopStage = append(c.hooks.SopStage, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `sopstage.Intercept(f(g(h())))`.
func (c *SopStageClient) Intercept(interceptors ...Interceptor) {
	c.inters.SopStage = append(c.inters.SopStage, interceptors...)
}

// Create returns a builder for creating a SopStage entity.
func (c *SopStageClient) Create() *SopStageCreate {
	mutation := newSopStageMutation(c.config, OpCreate)
	return &SopStageCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of SopStage entities.
func (c *SopStageClient) CreateBulk(builders ...*SopStageCreate) *SopStageCreateBulk {
	return &SopStageCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *SopStageClient) MapCreateBulk(slice any, setFunc func(*SopStageCreate, int)) *SopStageCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &SopStageCreateBulk{err: fmt.Errorf("calling to SopStageClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*SopStageCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &SopStageCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for SopStage.
func (c *SopStageClient) Update() *SopStageUpdate {
	mutation := newSopStageMutation(c.config, OpUpdate)
	return &SopStageUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *SopStageClient) UpdateOne(ss *SopStage) *SopStageUpdateOne {
	mutation := newSopStageMutation(c.config, OpUpdateOne, withSopStage(ss))
	return &SopStageUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *SopStageClient) UpdateOneID(id uint64) *SopStageUpdateOne {
	mutation := newSopStageMutation(c.config, OpUpdateOne, withSopStageID(id))
	return &SopStageUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for SopStage.
func (c *SopStageClient) Delete() *SopStageDelete {
	mutation := newSopStageMutation(c.config, OpDelete)
	return &SopStageDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *SopStageClient) DeleteOne(ss *SopStage) *SopStageDeleteOne {
	return c.DeleteOneID(ss.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *SopStageClient) DeleteOneID(id uint64) *SopStageDeleteOne {
	builder := c.Delete().Where(sopstage.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &SopStageDeleteOne{builder}
}

// Query returns a query builder for SopStage.
func (c *SopStageClient) Query() *SopStageQuery {
	return &SopStageQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeSopStage},
		inters: c.Interceptors(),
	}
}

// Get returns a SopStage entity by its id.
func (c *SopStageClient) Get(ctx context.Context, id uint64) (*SopStage, error) {
	return c.Query().Where(sopstage.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *SopStageClient) GetX(ctx context.Context, id uint64) *SopStage {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QuerySopTask queries the sop_task edge of a SopStage.
func (c *SopStageClient) QuerySopTask(ss *SopStage) *SopTaskQuery {
	query := (&SopTaskClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := ss.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(sopstage.Table, sopstage.FieldID, id),
			sqlgraph.To(soptask.Table, soptask.FieldID),
			sqlgraph.Edge(sqlgraph.M2O, true, sopstage.SopTaskTable, sopstage.SopTaskColumn),
		)
		fromV = sqlgraph.Neighbors(ss.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// QueryStageNodes queries the stage_nodes edge of a SopStage.
func (c *SopStageClient) QueryStageNodes(ss *SopStage) *SopNodeQuery {
	query := (&SopNodeClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := ss.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(sopstage.Table, sopstage.FieldID, id),
			sqlgraph.To(sopnode.Table, sopnode.FieldID),
			sqlgraph.Edge(sqlgraph.O2M, false, sopstage.StageNodesTable, sopstage.StageNodesColumn),
		)
		fromV = sqlgraph.Neighbors(ss.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// QueryStageMessages queries the stage_messages edge of a SopStage.
func (c *SopStageClient) QueryStageMessages(ss *SopStage) *MessageRecordsQuery {
	query := (&MessageRecordsClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := ss.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(sopstage.Table, sopstage.FieldID, id),
			sqlgraph.To(messagerecords.Table, messagerecords.FieldID),
			sqlgraph.Edge(sqlgraph.O2M, false, sopstage.StageMessagesTable, sopstage.StageMessagesColumn),
		)
		fromV = sqlgraph.Neighbors(ss.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *SopStageClient) Hooks() []Hook {
	hooks := c.hooks.SopStage
	return append(hooks[:len(hooks):len(hooks)], sopstage.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *SopStageClient) Interceptors() []Interceptor {
	inters := c.inters.SopStage
	return append(inters[:len(inters):len(inters)], sopstage.Interceptors[:]...)
}

func (c *SopStageClient) mutate(ctx context.Context, m *SopStageMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&SopStageCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&SopStageUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&SopStageUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&SopStageDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown SopStage mutation op: %q", m.Op())
	}
}

// SopTaskClient is a client for the SopTask schema.
type SopTaskClient struct {
	config
}

// NewSopTaskClient returns a client for the SopTask from the given config.
func NewSopTaskClient(c config) *SopTaskClient {
	return &SopTaskClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `soptask.Hooks(f(g(h())))`.
func (c *SopTaskClient) Use(hooks ...Hook) {
	c.hooks.SopTask = append(c.hooks.SopTask, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `soptask.Intercept(f(g(h())))`.
func (c *SopTaskClient) Intercept(interceptors ...Interceptor) {
	c.inters.SopTask = append(c.inters.SopTask, interceptors...)
}

// Create returns a builder for creating a SopTask entity.
func (c *SopTaskClient) Create() *SopTaskCreate {
	mutation := newSopTaskMutation(c.config, OpCreate)
	return &SopTaskCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of SopTask entities.
func (c *SopTaskClient) CreateBulk(builders ...*SopTaskCreate) *SopTaskCreateBulk {
	return &SopTaskCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *SopTaskClient) MapCreateBulk(slice any, setFunc func(*SopTaskCreate, int)) *SopTaskCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &SopTaskCreateBulk{err: fmt.Errorf("calling to SopTaskClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*SopTaskCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &SopTaskCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for SopTask.
func (c *SopTaskClient) Update() *SopTaskUpdate {
	mutation := newSopTaskMutation(c.config, OpUpdate)
	return &SopTaskUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *SopTaskClient) UpdateOne(st *SopTask) *SopTaskUpdateOne {
	mutation := newSopTaskMutation(c.config, OpUpdateOne, withSopTask(st))
	return &SopTaskUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *SopTaskClient) UpdateOneID(id uint64) *SopTaskUpdateOne {
	mutation := newSopTaskMutation(c.config, OpUpdateOne, withSopTaskID(id))
	return &SopTaskUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for SopTask.
func (c *SopTaskClient) Delete() *SopTaskDelete {
	mutation := newSopTaskMutation(c.config, OpDelete)
	return &SopTaskDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *SopTaskClient) DeleteOne(st *SopTask) *SopTaskDeleteOne {
	return c.DeleteOneID(st.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *SopTaskClient) DeleteOneID(id uint64) *SopTaskDeleteOne {
	builder := c.Delete().Where(soptask.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &SopTaskDeleteOne{builder}
}

// Query returns a query builder for SopTask.
func (c *SopTaskClient) Query() *SopTaskQuery {
	return &SopTaskQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeSopTask},
		inters: c.Interceptors(),
	}
}

// Get returns a SopTask entity by its id.
func (c *SopTaskClient) Get(ctx context.Context, id uint64) (*SopTask, error) {
	return c.Query().Where(soptask.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *SopTaskClient) GetX(ctx context.Context, id uint64) *SopTask {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QueryTaskStages queries the task_stages edge of a SopTask.
func (c *SopTaskClient) QueryTaskStages(st *SopTask) *SopStageQuery {
	query := (&SopStageClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := st.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(soptask.Table, soptask.FieldID, id),
			sqlgraph.To(sopstage.Table, sopstage.FieldID),
			sqlgraph.Edge(sqlgraph.O2M, false, soptask.TaskStagesTable, soptask.TaskStagesColumn),
		)
		fromV = sqlgraph.Neighbors(st.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *SopTaskClient) Hooks() []Hook {
	hooks := c.hooks.SopTask
	return append(hooks[:len(hooks):len(hooks)], soptask.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *SopTaskClient) Interceptors() []Interceptor {
	inters := c.inters.SopTask
	return append(inters[:len(inters):len(inters)], soptask.Interceptors[:]...)
}

func (c *SopTaskClient) mutate(ctx context.Context, m *SopTaskMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&SopTaskCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&SopTaskUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&SopTaskUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&SopTaskDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown SopTask mutation op: %q", m.Op())
	}
}

// TokenClient is a client for the Token schema.
type TokenClient struct {
	config
}

// NewTokenClient returns a client for the Token from the given config.
func NewTokenClient(c config) *TokenClient {
	return &TokenClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `token.Hooks(f(g(h())))`.
func (c *TokenClient) Use(hooks ...Hook) {
	c.hooks.Token = append(c.hooks.Token, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `token.Intercept(f(g(h())))`.
func (c *TokenClient) Intercept(interceptors ...Interceptor) {
	c.inters.Token = append(c.inters.Token, interceptors...)
}

// Create returns a builder for creating a Token entity.
func (c *TokenClient) Create() *TokenCreate {
	mutation := newTokenMutation(c.config, OpCreate)
	return &TokenCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of Token entities.
func (c *TokenClient) CreateBulk(builders ...*TokenCreate) *TokenCreateBulk {
	return &TokenCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *TokenClient) MapCreateBulk(slice any, setFunc func(*TokenCreate, int)) *TokenCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &TokenCreateBulk{err: fmt.Errorf("calling to TokenClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*TokenCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &TokenCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for Token.
func (c *TokenClient) Update() *TokenUpdate {
	mutation := newTokenMutation(c.config, OpUpdate)
	return &TokenUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *TokenClient) UpdateOne(t *Token) *TokenUpdateOne {
	mutation := newTokenMutation(c.config, OpUpdateOne, withToken(t))
	return &TokenUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *TokenClient) UpdateOneID(id uint64) *TokenUpdateOne {
	mutation := newTokenMutation(c.config, OpUpdateOne, withTokenID(id))
	return &TokenUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for Token.
func (c *TokenClient) Delete() *TokenDelete {
	mutation := newTokenMutation(c.config, OpDelete)
	return &TokenDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *TokenClient) DeleteOne(t *Token) *TokenDeleteOne {
	return c.DeleteOneID(t.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *TokenClient) DeleteOneID(id uint64) *TokenDeleteOne {
	builder := c.Delete().Where(token.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &TokenDeleteOne{builder}
}

// Query returns a query builder for Token.
func (c *TokenClient) Query() *TokenQuery {
	return &TokenQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeToken},
		inters: c.Interceptors(),
	}
}

// Get returns a Token entity by its id.
func (c *TokenClient) Get(ctx context.Context, id uint64) (*Token, error) {
	return c.Query().Where(token.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *TokenClient) GetX(ctx context.Context, id uint64) *Token {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// Hooks returns the client hooks.
func (c *TokenClient) Hooks() []Hook {
	hooks := c.hooks.Token
	return append(hooks[:len(hooks):len(hooks)], token.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *TokenClient) Interceptors() []Interceptor {
	inters := c.inters.Token
	return append(inters[:len(inters):len(inters)], token.Interceptors[:]...)
}

func (c *TokenClient) mutate(ctx context.Context, m *TokenMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&TokenCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&TokenUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&TokenUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&TokenDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown Token mutation op: %q", m.Op())
	}
}

// TutorialClient is a client for the Tutorial schema.
type TutorialClient struct {
	config
}

// NewTutorialClient returns a client for the Tutorial from the given config.
func NewTutorialClient(c config) *TutorialClient {
	return &TutorialClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `tutorial.Hooks(f(g(h())))`.
func (c *TutorialClient) Use(hooks ...Hook) {
	c.hooks.Tutorial = append(c.hooks.Tutorial, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `tutorial.Intercept(f(g(h())))`.
func (c *TutorialClient) Intercept(interceptors ...Interceptor) {
	c.inters.Tutorial = append(c.inters.Tutorial, interceptors...)
}

// Create returns a builder for creating a Tutorial entity.
func (c *TutorialClient) Create() *TutorialCreate {
	mutation := newTutorialMutation(c.config, OpCreate)
	return &TutorialCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of Tutorial entities.
func (c *TutorialClient) CreateBulk(builders ...*TutorialCreate) *TutorialCreateBulk {
	return &TutorialCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *TutorialClient) MapCreateBulk(slice any, setFunc func(*TutorialCreate, int)) *TutorialCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &TutorialCreateBulk{err: fmt.Errorf("calling to TutorialClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*TutorialCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &TutorialCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for Tutorial.
func (c *TutorialClient) Update() *TutorialUpdate {
	mutation := newTutorialMutation(c.config, OpUpdate)
	return &TutorialUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *TutorialClient) UpdateOne(t *Tutorial) *TutorialUpdateOne {
	mutation := newTutorialMutation(c.config, OpUpdateOne, withTutorial(t))
	return &TutorialUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *TutorialClient) UpdateOneID(id uint64) *TutorialUpdateOne {
	mutation := newTutorialMutation(c.config, OpUpdateOne, withTutorialID(id))
	return &TutorialUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for Tutorial.
func (c *TutorialClient) Delete() *TutorialDelete {
	mutation := newTutorialMutation(c.config, OpDelete)
	return &TutorialDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *TutorialClient) DeleteOne(t *Tutorial) *TutorialDeleteOne {
	return c.DeleteOneID(t.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *TutorialClient) DeleteOneID(id uint64) *TutorialDeleteOne {
	builder := c.Delete().Where(tutorial.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &TutorialDeleteOne{builder}
}

// Query returns a query builder for Tutorial.
func (c *TutorialClient) Query() *TutorialQuery {
	return &TutorialQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeTutorial},
		inters: c.Interceptors(),
	}
}

// Get returns a Tutorial entity by its id.
func (c *TutorialClient) Get(ctx context.Context, id uint64) (*Tutorial, error) {
	return c.Query().Where(tutorial.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *TutorialClient) GetX(ctx context.Context, id uint64) *Tutorial {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QueryEmployee queries the employee edge of a Tutorial.
func (c *TutorialClient) QueryEmployee(t *Tutorial) *EmployeeQuery {
	query := (&EmployeeClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := t.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(tutorial.Table, tutorial.FieldID, id),
			sqlgraph.To(employee.Table, employee.FieldID),
			sqlgraph.Edge(sqlgraph.M2O, true, tutorial.EmployeeTable, tutorial.EmployeeColumn),
		)
		fromV = sqlgraph.Neighbors(t.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *TutorialClient) Hooks() []Hook {
	hooks := c.hooks.Tutorial
	return append(hooks[:len(hooks):len(hooks)], tutorial.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *TutorialClient) Interceptors() []Interceptor {
	inters := c.inters.Tutorial
	return append(inters[:len(inters):len(inters)], tutorial.Interceptors[:]...)
}

func (c *TutorialClient) mutate(ctx context.Context, m *TutorialMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&TutorialCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&TutorialUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&TutorialUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&TutorialDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown Tutorial mutation op: %q", m.Op())
	}
}

// WorkExperienceClient is a client for the WorkExperience schema.
type WorkExperienceClient struct {
	config
}

// NewWorkExperienceClient returns a client for the WorkExperience from the given config.
func NewWorkExperienceClient(c config) *WorkExperienceClient {
	return &WorkExperienceClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `workexperience.Hooks(f(g(h())))`.
func (c *WorkExperienceClient) Use(hooks ...Hook) {
	c.hooks.WorkExperience = append(c.hooks.WorkExperience, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `workexperience.Intercept(f(g(h())))`.
func (c *WorkExperienceClient) Intercept(interceptors ...Interceptor) {
	c.inters.WorkExperience = append(c.inters.WorkExperience, interceptors...)
}

// Create returns a builder for creating a WorkExperience entity.
func (c *WorkExperienceClient) Create() *WorkExperienceCreate {
	mutation := newWorkExperienceMutation(c.config, OpCreate)
	return &WorkExperienceCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of WorkExperience entities.
func (c *WorkExperienceClient) CreateBulk(builders ...*WorkExperienceCreate) *WorkExperienceCreateBulk {
	return &WorkExperienceCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *WorkExperienceClient) MapCreateBulk(slice any, setFunc func(*WorkExperienceCreate, int)) *WorkExperienceCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &WorkExperienceCreateBulk{err: fmt.Errorf("calling to WorkExperienceClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*WorkExperienceCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &WorkExperienceCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for WorkExperience.
func (c *WorkExperienceClient) Update() *WorkExperienceUpdate {
	mutation := newWorkExperienceMutation(c.config, OpUpdate)
	return &WorkExperienceUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *WorkExperienceClient) UpdateOne(we *WorkExperience) *WorkExperienceUpdateOne {
	mutation := newWorkExperienceMutation(c.config, OpUpdateOne, withWorkExperience(we))
	return &WorkExperienceUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *WorkExperienceClient) UpdateOneID(id uint64) *WorkExperienceUpdateOne {
	mutation := newWorkExperienceMutation(c.config, OpUpdateOne, withWorkExperienceID(id))
	return &WorkExperienceUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for WorkExperience.
func (c *WorkExperienceClient) Delete() *WorkExperienceDelete {
	mutation := newWorkExperienceMutation(c.config, OpDelete)
	return &WorkExperienceDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *WorkExperienceClient) DeleteOne(we *WorkExperience) *WorkExperienceDeleteOne {
	return c.DeleteOneID(we.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *WorkExperienceClient) DeleteOneID(id uint64) *WorkExperienceDeleteOne {
	builder := c.Delete().Where(workexperience.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &WorkExperienceDeleteOne{builder}
}

// Query returns a query builder for WorkExperience.
func (c *WorkExperienceClient) Query() *WorkExperienceQuery {
	return &WorkExperienceQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeWorkExperience},
		inters: c.Interceptors(),
	}
}

// Get returns a WorkExperience entity by its id.
func (c *WorkExperienceClient) Get(ctx context.Context, id uint64) (*WorkExperience, error) {
	return c.Query().Where(workexperience.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *WorkExperienceClient) GetX(ctx context.Context, id uint64) *WorkExperience {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QueryEmployee queries the employee edge of a WorkExperience.
func (c *WorkExperienceClient) QueryEmployee(we *WorkExperience) *EmployeeQuery {
	query := (&EmployeeClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := we.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(workexperience.Table, workexperience.FieldID, id),
			sqlgraph.To(employee.Table, employee.FieldID),
			sqlgraph.Edge(sqlgraph.M2O, true, workexperience.EmployeeTable, workexperience.EmployeeColumn),
		)
		fromV = sqlgraph.Neighbors(we.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *WorkExperienceClient) Hooks() []Hook {
	hooks := c.hooks.WorkExperience
	return append(hooks[:len(hooks):len(hooks)], workexperience.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *WorkExperienceClient) Interceptors() []Interceptor {
	inters := c.inters.WorkExperience
	return append(inters[:len(inters):len(inters)], workexperience.Interceptors[:]...)
}

func (c *WorkExperienceClient) mutate(ctx context.Context, m *WorkExperienceMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&WorkExperienceCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&WorkExperienceUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&WorkExperienceUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&WorkExperienceDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown WorkExperience mutation op: %q", m.Op())
	}
}

// WxClient is a client for the Wx schema.
type WxClient struct {
	config
}

// NewWxClient returns a client for the Wx from the given config.
func NewWxClient(c config) *WxClient {
	return &WxClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `wx.Hooks(f(g(h())))`.
func (c *WxClient) Use(hooks ...Hook) {
	c.hooks.Wx = append(c.hooks.Wx, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `wx.Intercept(f(g(h())))`.
func (c *WxClient) Intercept(interceptors ...Interceptor) {
	c.inters.Wx = append(c.inters.Wx, interceptors...)
}

// Create returns a builder for creating a Wx entity.
func (c *WxClient) Create() *WxCreate {
	mutation := newWxMutation(c.config, OpCreate)
	return &WxCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of Wx entities.
func (c *WxClient) CreateBulk(builders ...*WxCreate) *WxCreateBulk {
	return &WxCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *WxClient) MapCreateBulk(slice any, setFunc func(*WxCreate, int)) *WxCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &WxCreateBulk{err: fmt.Errorf("calling to WxClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*WxCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &WxCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for Wx.
func (c *WxClient) Update() *WxUpdate {
	mutation := newWxMutation(c.config, OpUpdate)
	return &WxUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *WxClient) UpdateOne(w *Wx) *WxUpdateOne {
	mutation := newWxMutation(c.config, OpUpdateOne, withWx(w))
	return &WxUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *WxClient) UpdateOneID(id uint64) *WxUpdateOne {
	mutation := newWxMutation(c.config, OpUpdateOne, withWxID(id))
	return &WxUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for Wx.
func (c *WxClient) Delete() *WxDelete {
	mutation := newWxMutation(c.config, OpDelete)
	return &WxDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *WxClient) DeleteOne(w *Wx) *WxDeleteOne {
	return c.DeleteOneID(w.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *WxClient) DeleteOneID(id uint64) *WxDeleteOne {
	builder := c.Delete().Where(wx.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &WxDeleteOne{builder}
}

// Query returns a query builder for Wx.
func (c *WxClient) Query() *WxQuery {
	return &WxQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeWx},
		inters: c.Interceptors(),
	}
}

// Get returns a Wx entity by its id.
func (c *WxClient) Get(ctx context.Context, id uint64) (*Wx, error) {
	return c.Query().Where(wx.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *WxClient) GetX(ctx context.Context, id uint64) *Wx {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// QueryServer queries the server edge of a Wx.
func (c *WxClient) QueryServer(w *Wx) *ServerQuery {
	query := (&ServerClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := w.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(wx.Table, wx.FieldID, id),
			sqlgraph.To(server.Table, server.FieldID),
			sqlgraph.Edge(sqlgraph.M2O, true, wx.ServerTable, wx.ServerColumn),
		)
		fromV = sqlgraph.Neighbors(w.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// QueryAgent queries the agent edge of a Wx.
func (c *WxClient) QueryAgent(w *Wx) *AgentQuery {
	query := (&AgentClient{config: c.config}).Query()
	query.path = func(context.Context) (fromV *sql.Selector, _ error) {
		id := w.ID
		step := sqlgraph.NewStep(
			sqlgraph.From(wx.Table, wx.FieldID, id),
			sqlgraph.To(agent.Table, agent.FieldID),
			sqlgraph.Edge(sqlgraph.M2O, true, wx.AgentTable, wx.AgentColumn),
		)
		fromV = sqlgraph.Neighbors(w.driver.Dialect(), step)
		return fromV, nil
	}
	return query
}

// Hooks returns the client hooks.
func (c *WxClient) Hooks() []Hook {
	hooks := c.hooks.Wx
	return append(hooks[:len(hooks):len(hooks)], wx.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *WxClient) Interceptors() []Interceptor {
	inters := c.inters.Wx
	return append(inters[:len(inters):len(inters)], wx.Interceptors[:]...)
}

func (c *WxClient) mutate(ctx context.Context, m *WxMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&WxCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&WxUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&WxUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&WxDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown Wx mutation op: %q", m.Op())
	}
}

// WxCardClient is a client for the WxCard schema.
type WxCardClient struct {
	config
}

// NewWxCardClient returns a client for the WxCard from the given config.
func NewWxCardClient(c config) *WxCardClient {
	return &WxCardClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `wxcard.Hooks(f(g(h())))`.
func (c *WxCardClient) Use(hooks ...Hook) {
	c.hooks.WxCard = append(c.hooks.WxCard, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `wxcard.Intercept(f(g(h())))`.
func (c *WxCardClient) Intercept(interceptors ...Interceptor) {
	c.inters.WxCard = append(c.inters.WxCard, interceptors...)
}

// Create returns a builder for creating a WxCard entity.
func (c *WxCardClient) Create() *WxCardCreate {
	mutation := newWxCardMutation(c.config, OpCreate)
	return &WxCardCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of WxCard entities.
func (c *WxCardClient) CreateBulk(builders ...*WxCardCreate) *WxCardCreateBulk {
	return &WxCardCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *WxCardClient) MapCreateBulk(slice any, setFunc func(*WxCardCreate, int)) *WxCardCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &WxCardCreateBulk{err: fmt.Errorf("calling to WxCardClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*WxCardCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &WxCardCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for WxCard.
func (c *WxCardClient) Update() *WxCardUpdate {
	mutation := newWxCardMutation(c.config, OpUpdate)
	return &WxCardUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *WxCardClient) UpdateOne(wc *WxCard) *WxCardUpdateOne {
	mutation := newWxCardMutation(c.config, OpUpdateOne, withWxCard(wc))
	return &WxCardUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *WxCardClient) UpdateOneID(id uint64) *WxCardUpdateOne {
	mutation := newWxCardMutation(c.config, OpUpdateOne, withWxCardID(id))
	return &WxCardUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for WxCard.
func (c *WxCardClient) Delete() *WxCardDelete {
	mutation := newWxCardMutation(c.config, OpDelete)
	return &WxCardDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *WxCardClient) DeleteOne(wc *WxCard) *WxCardDeleteOne {
	return c.DeleteOneID(wc.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *WxCardClient) DeleteOneID(id uint64) *WxCardDeleteOne {
	builder := c.Delete().Where(wxcard.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &WxCardDeleteOne{builder}
}

// Query returns a query builder for WxCard.
func (c *WxCardClient) Query() *WxCardQuery {
	return &WxCardQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeWxCard},
		inters: c.Interceptors(),
	}
}

// Get returns a WxCard entity by its id.
func (c *WxCardClient) Get(ctx context.Context, id uint64) (*WxCard, error) {
	return c.Query().Where(wxcard.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *WxCardClient) GetX(ctx context.Context, id uint64) *WxCard {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// Hooks returns the client hooks.
func (c *WxCardClient) Hooks() []Hook {
	hooks := c.hooks.WxCard
	return append(hooks[:len(hooks):len(hooks)], wxcard.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *WxCardClient) Interceptors() []Interceptor {
	inters := c.inters.WxCard
	return append(inters[:len(inters):len(inters)], wxcard.Interceptors[:]...)
}

func (c *WxCardClient) mutate(ctx context.Context, m *WxCardMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&WxCardCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&WxCardUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&WxCardUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&WxCardDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown WxCard mutation op: %q", m.Op())
	}
}

// WxCardUserClient is a client for the WxCardUser schema.
type WxCardUserClient struct {
	config
}

// NewWxCardUserClient returns a client for the WxCardUser from the given config.
func NewWxCardUserClient(c config) *WxCardUserClient {
	return &WxCardUserClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `wxcarduser.Hooks(f(g(h())))`.
func (c *WxCardUserClient) Use(hooks ...Hook) {
	c.hooks.WxCardUser = append(c.hooks.WxCardUser, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `wxcarduser.Intercept(f(g(h())))`.
func (c *WxCardUserClient) Intercept(interceptors ...Interceptor) {
	c.inters.WxCardUser = append(c.inters.WxCardUser, interceptors...)
}

// Create returns a builder for creating a WxCardUser entity.
func (c *WxCardUserClient) Create() *WxCardUserCreate {
	mutation := newWxCardUserMutation(c.config, OpCreate)
	return &WxCardUserCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of WxCardUser entities.
func (c *WxCardUserClient) CreateBulk(builders ...*WxCardUserCreate) *WxCardUserCreateBulk {
	return &WxCardUserCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *WxCardUserClient) MapCreateBulk(slice any, setFunc func(*WxCardUserCreate, int)) *WxCardUserCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &WxCardUserCreateBulk{err: fmt.Errorf("calling to WxCardUserClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*WxCardUserCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &WxCardUserCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for WxCardUser.
func (c *WxCardUserClient) Update() *WxCardUserUpdate {
	mutation := newWxCardUserMutation(c.config, OpUpdate)
	return &WxCardUserUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *WxCardUserClient) UpdateOne(wcu *WxCardUser) *WxCardUserUpdateOne {
	mutation := newWxCardUserMutation(c.config, OpUpdateOne, withWxCardUser(wcu))
	return &WxCardUserUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *WxCardUserClient) UpdateOneID(id uint64) *WxCardUserUpdateOne {
	mutation := newWxCardUserMutation(c.config, OpUpdateOne, withWxCardUserID(id))
	return &WxCardUserUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for WxCardUser.
func (c *WxCardUserClient) Delete() *WxCardUserDelete {
	mutation := newWxCardUserMutation(c.config, OpDelete)
	return &WxCardUserDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *WxCardUserClient) DeleteOne(wcu *WxCardUser) *WxCardUserDeleteOne {
	return c.DeleteOneID(wcu.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *WxCardUserClient) DeleteOneID(id uint64) *WxCardUserDeleteOne {
	builder := c.Delete().Where(wxcarduser.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &WxCardUserDeleteOne{builder}
}

// Query returns a query builder for WxCardUser.
func (c *WxCardUserClient) Query() *WxCardUserQuery {
	return &WxCardUserQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeWxCardUser},
		inters: c.Interceptors(),
	}
}

// Get returns a WxCardUser entity by its id.
func (c *WxCardUserClient) Get(ctx context.Context, id uint64) (*WxCardUser, error) {
	return c.Query().Where(wxcarduser.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *WxCardUserClient) GetX(ctx context.Context, id uint64) *WxCardUser {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// Hooks returns the client hooks.
func (c *WxCardUserClient) Hooks() []Hook {
	hooks := c.hooks.WxCardUser
	return append(hooks[:len(hooks):len(hooks)], wxcarduser.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *WxCardUserClient) Interceptors() []Interceptor {
	inters := c.inters.WxCardUser
	return append(inters[:len(inters):len(inters)], wxcarduser.Interceptors[:]...)
}

func (c *WxCardUserClient) mutate(ctx context.Context, m *WxCardUserMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&WxCardUserCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&WxCardUserUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&WxCardUserUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&WxCardUserDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown WxCardUser mutation op: %q", m.Op())
	}
}

// WxCardVisitClient is a client for the WxCardVisit schema.
type WxCardVisitClient struct {
	config
}

// NewWxCardVisitClient returns a client for the WxCardVisit from the given config.
func NewWxCardVisitClient(c config) *WxCardVisitClient {
	return &WxCardVisitClient{config: c}
}

// Use adds a list of mutation hooks to the hooks stack.
// A call to `Use(f, g, h)` equals to `wxcardvisit.Hooks(f(g(h())))`.
func (c *WxCardVisitClient) Use(hooks ...Hook) {
	c.hooks.WxCardVisit = append(c.hooks.WxCardVisit, hooks...)
}

// Intercept adds a list of query interceptors to the interceptors stack.
// A call to `Intercept(f, g, h)` equals to `wxcardvisit.Intercept(f(g(h())))`.
func (c *WxCardVisitClient) Intercept(interceptors ...Interceptor) {
	c.inters.WxCardVisit = append(c.inters.WxCardVisit, interceptors...)
}

// Create returns a builder for creating a WxCardVisit entity.
func (c *WxCardVisitClient) Create() *WxCardVisitCreate {
	mutation := newWxCardVisitMutation(c.config, OpCreate)
	return &WxCardVisitCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// CreateBulk returns a builder for creating a bulk of WxCardVisit entities.
func (c *WxCardVisitClient) CreateBulk(builders ...*WxCardVisitCreate) *WxCardVisitCreateBulk {
	return &WxCardVisitCreateBulk{config: c.config, builders: builders}
}

// MapCreateBulk creates a bulk creation builder from the given slice. For each item in the slice, the function creates
// a builder and applies setFunc on it.
func (c *WxCardVisitClient) MapCreateBulk(slice any, setFunc func(*WxCardVisitCreate, int)) *WxCardVisitCreateBulk {
	rv := reflect.ValueOf(slice)
	if rv.Kind() != reflect.Slice {
		return &WxCardVisitCreateBulk{err: fmt.Errorf("calling to WxCardVisitClient.MapCreateBulk with wrong type %T, need slice", slice)}
	}
	builders := make([]*WxCardVisitCreate, rv.Len())
	for i := 0; i < rv.Len(); i++ {
		builders[i] = c.Create()
		setFunc(builders[i], i)
	}
	return &WxCardVisitCreateBulk{config: c.config, builders: builders}
}

// Update returns an update builder for WxCardVisit.
func (c *WxCardVisitClient) Update() *WxCardVisitUpdate {
	mutation := newWxCardVisitMutation(c.config, OpUpdate)
	return &WxCardVisitUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOne returns an update builder for the given entity.
func (c *WxCardVisitClient) UpdateOne(wcv *WxCardVisit) *WxCardVisitUpdateOne {
	mutation := newWxCardVisitMutation(c.config, OpUpdateOne, withWxCardVisit(wcv))
	return &WxCardVisitUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// UpdateOneID returns an update builder for the given id.
func (c *WxCardVisitClient) UpdateOneID(id uint64) *WxCardVisitUpdateOne {
	mutation := newWxCardVisitMutation(c.config, OpUpdateOne, withWxCardVisitID(id))
	return &WxCardVisitUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// Delete returns a delete builder for WxCardVisit.
func (c *WxCardVisitClient) Delete() *WxCardVisitDelete {
	mutation := newWxCardVisitMutation(c.config, OpDelete)
	return &WxCardVisitDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
}

// DeleteOne returns a builder for deleting the given entity.
func (c *WxCardVisitClient) DeleteOne(wcv *WxCardVisit) *WxCardVisitDeleteOne {
	return c.DeleteOneID(wcv.ID)
}

// DeleteOneID returns a builder for deleting the given entity by its id.
func (c *WxCardVisitClient) DeleteOneID(id uint64) *WxCardVisitDeleteOne {
	builder := c.Delete().Where(wxcardvisit.ID(id))
	builder.mutation.id = &id
	builder.mutation.op = OpDeleteOne
	return &WxCardVisitDeleteOne{builder}
}

// Query returns a query builder for WxCardVisit.
func (c *WxCardVisitClient) Query() *WxCardVisitQuery {
	return &WxCardVisitQuery{
		config: c.config,
		ctx:    &QueryContext{Type: TypeWxCardVisit},
		inters: c.Interceptors(),
	}
}

// Get returns a WxCardVisit entity by its id.
func (c *WxCardVisitClient) Get(ctx context.Context, id uint64) (*WxCardVisit, error) {
	return c.Query().Where(wxcardvisit.ID(id)).Only(ctx)
}

// GetX is like Get, but panics if an error occurs.
func (c *WxCardVisitClient) GetX(ctx context.Context, id uint64) *WxCardVisit {
	obj, err := c.Get(ctx, id)
	if err != nil {
		panic(err)
	}
	return obj
}

// Hooks returns the client hooks.
func (c *WxCardVisitClient) Hooks() []Hook {
	hooks := c.hooks.WxCardVisit
	return append(hooks[:len(hooks):len(hooks)], wxcardvisit.Hooks[:]...)
}

// Interceptors returns the client interceptors.
func (c *WxCardVisitClient) Interceptors() []Interceptor {
	inters := c.inters.WxCardVisit
	return append(inters[:len(inters):len(inters)], wxcardvisit.Interceptors[:]...)
}

func (c *WxCardVisitClient) mutate(ctx context.Context, m *WxCardVisitMutation) (Value, error) {
	switch m.Op() {
	case OpCreate:
		return (&WxCardVisitCreate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdate:
		return (&WxCardVisitUpdate{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpUpdateOne:
		return (&WxCardVisitUpdateOne{config: c.config, hooks: c.Hooks(), mutation: m}).Save(ctx)
	case OpDelete, OpDeleteOne:
		return (&WxCardVisitDelete{config: c.config, hooks: c.Hooks(), mutation: m}).Exec(ctx)
	default:
		return nil, fmt.Errorf("ent: unknown WxCardVisit mutation op: %q", m.Op())
	}
}

// hooks and interceptors per client, for fast access.
type (
	hooks struct {
		Agent, AgentBase, BatchMsg, Category, ChatRecords, ChatSession, Contact,
		Employee, EmployeeConfig, Label, LabelRelationship, Message, MessageRecords,
		Msg, Server, SopNode, SopStage, SopTask, Token, Tutorial, WorkExperience, Wx,
		WxCard, WxCardUser, WxCardVisit []ent.Hook
	}
	inters struct {
		Agent, AgentBase, BatchMsg, Category, ChatRecords, ChatSession, Contact,
		Employee, EmployeeConfig, Label, LabelRelationship, Message, MessageRecords,
		Msg, Server, SopNode, SopStage, SopTask, Token, Tutorial, WorkExperience, Wx,
		WxCard, WxCardUser, WxCardVisit []ent.Interceptor
	}
)

// ExecContext allows calling the underlying ExecContext method of the driver if it is supported by it.
// See, database/sql#DB.ExecContext for more information.
func (c *config) ExecContext(ctx context.Context, query string, args ...any) (stdsql.Result, error) {
	ex, ok := c.driver.(interface {
		ExecContext(context.Context, string, ...any) (stdsql.Result, error)
	})
	if !ok {
		return nil, fmt.Errorf("Driver.ExecContext is not supported")
	}
	return ex.ExecContext(ctx, query, args...)
}

// QueryContext allows calling the underlying QueryContext method of the driver if it is supported by it.
// See, database/sql#DB.QueryContext for more information.
func (c *config) QueryContext(ctx context.Context, query string, args ...any) (*stdsql.Rows, error) {
	q, ok := c.driver.(interface {
		QueryContext(context.Context, string, ...any) (*stdsql.Rows, error)
	})
	if !ok {
		return nil, fmt.Errorf("Driver.QueryContext is not supported")
	}
	return q.QueryContext(ctx, query, args...)
}