123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692 |
- package ent
- import (
- "context"
- "errors"
- "fmt"
- "log"
- "reflect"
- "wechat-api/ent/migrate"
- "wechat-api/ent/contact"
- "wechat-api/ent/server"
- "wechat-api/ent/wx"
- "entgo.io/ent"
- "entgo.io/ent/dialect"
- "entgo.io/ent/dialect/sql"
- "entgo.io/ent/dialect/sql/sqlgraph"
- stdsql "database/sql"
- )
- type Client struct {
- config
-
- Schema *migrate.Schema
-
- Contact *ContactClient
-
- Server *ServerClient
-
- Wx *WxClient
- }
- 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.Contact = NewContactClient(c.config)
- c.Server = NewServerClient(c.config)
- c.Wx = NewWxClient(c.config)
- }
- type (
-
- config struct {
-
- driver dialect.Driver
-
- debug bool
-
- log func(...any)
-
- hooks *hooks
-
- inters *inters
- }
-
- Option func(*config)
- )
- func newConfig(opts ...Option) config {
- cfg := config{log: log.Println, hooks: &hooks{}, inters: &inters{}}
- cfg.options(opts...)
- return cfg
- }
- func (c *config) options(opts ...Option) {
- for _, opt := range opts {
- opt(c)
- }
- if c.debug {
- c.driver = dialect.Debug(c.driver, c.log)
- }
- }
- func Debug() Option {
- return func(c *config) {
- c.debug = true
- }
- }
- func Log(fn func(...any)) Option {
- return func(c *config) {
- c.log = fn
- }
- }
- func Driver(driver dialect.Driver) Option {
- return func(c *config) {
- c.driver = driver
- }
- }
- 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)
- }
- }
- var ErrTxStarted = errors.New("ent: cannot start a transaction within a transaction")
- 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,
- Contact: NewContactClient(cfg),
- Server: NewServerClient(cfg),
- Wx: NewWxClient(cfg),
- }, nil
- }
- 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,
- Contact: NewContactClient(cfg),
- Server: NewServerClient(cfg),
- Wx: NewWxClient(cfg),
- }, nil
- }
- 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
- }
- func (c *Client) Close() error {
- return c.driver.Close()
- }
- func (c *Client) Use(hooks ...Hook) {
- c.Contact.Use(hooks...)
- c.Server.Use(hooks...)
- c.Wx.Use(hooks...)
- }
- func (c *Client) Intercept(interceptors ...Interceptor) {
- c.Contact.Intercept(interceptors...)
- c.Server.Intercept(interceptors...)
- c.Wx.Intercept(interceptors...)
- }
- func (c *Client) Mutate(ctx context.Context, m Mutation) (Value, error) {
- switch m := m.(type) {
- case *ContactMutation:
- return c.Contact.mutate(ctx, m)
- case *ServerMutation:
- return c.Server.mutate(ctx, m)
- case *WxMutation:
- return c.Wx.mutate(ctx, m)
- default:
- return nil, fmt.Errorf("ent: unknown mutation type %T", m)
- }
- }
- type ContactClient struct {
- config
- }
- func NewContactClient(c config) *ContactClient {
- return &ContactClient{config: c}
- }
- func (c *ContactClient) Use(hooks ...Hook) {
- c.hooks.Contact = append(c.hooks.Contact, hooks...)
- }
- func (c *ContactClient) Intercept(interceptors ...Interceptor) {
- c.inters.Contact = append(c.inters.Contact, interceptors...)
- }
- func (c *ContactClient) Create() *ContactCreate {
- mutation := newContactMutation(c.config, OpCreate)
- return &ContactCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *ContactClient) CreateBulk(builders ...*ContactCreate) *ContactCreateBulk {
- return &ContactCreateBulk{config: c.config, builders: builders}
- }
- 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}
- }
- func (c *ContactClient) Update() *ContactUpdate {
- mutation := newContactMutation(c.config, OpUpdate)
- return &ContactUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *ContactClient) UpdateOne(co *Contact) *ContactUpdateOne {
- mutation := newContactMutation(c.config, OpUpdateOne, withContact(co))
- return &ContactUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *ContactClient) UpdateOneID(id uint64) *ContactUpdateOne {
- mutation := newContactMutation(c.config, OpUpdateOne, withContactID(id))
- return &ContactUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *ContactClient) Delete() *ContactDelete {
- mutation := newContactMutation(c.config, OpDelete)
- return &ContactDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *ContactClient) DeleteOne(co *Contact) *ContactDeleteOne {
- return c.DeleteOneID(co.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}
- }
- func (c *ContactClient) Query() *ContactQuery {
- return &ContactQuery{
- config: c.config,
- ctx: &QueryContext{Type: TypeContact},
- inters: c.Interceptors(),
- }
- }
- func (c *ContactClient) Get(ctx context.Context, id uint64) (*Contact, error) {
- return c.Query().Where(contact.ID(id)).Only(ctx)
- }
- func (c *ContactClient) GetX(ctx context.Context, id uint64) *Contact {
- obj, err := c.Get(ctx, id)
- if err != nil {
- panic(err)
- }
- return obj
- }
- func (c *ContactClient) Hooks() []Hook {
- hooks := c.hooks.Contact
- return append(hooks[:len(hooks):len(hooks)], contact.Hooks[:]...)
- }
- 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())
- }
- }
- type ServerClient struct {
- config
- }
- func NewServerClient(c config) *ServerClient {
- return &ServerClient{config: c}
- }
- func (c *ServerClient) Use(hooks ...Hook) {
- c.hooks.Server = append(c.hooks.Server, hooks...)
- }
- func (c *ServerClient) Intercept(interceptors ...Interceptor) {
- c.inters.Server = append(c.inters.Server, interceptors...)
- }
- func (c *ServerClient) Create() *ServerCreate {
- mutation := newServerMutation(c.config, OpCreate)
- return &ServerCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *ServerClient) CreateBulk(builders ...*ServerCreate) *ServerCreateBulk {
- return &ServerCreateBulk{config: c.config, builders: builders}
- }
- 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}
- }
- func (c *ServerClient) Update() *ServerUpdate {
- mutation := newServerMutation(c.config, OpUpdate)
- return &ServerUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *ServerClient) UpdateOne(s *Server) *ServerUpdateOne {
- mutation := newServerMutation(c.config, OpUpdateOne, withServer(s))
- return &ServerUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *ServerClient) UpdateOneID(id uint64) *ServerUpdateOne {
- mutation := newServerMutation(c.config, OpUpdateOne, withServerID(id))
- return &ServerUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *ServerClient) Delete() *ServerDelete {
- mutation := newServerMutation(c.config, OpDelete)
- return &ServerDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *ServerClient) DeleteOne(s *Server) *ServerDeleteOne {
- return c.DeleteOneID(s.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}
- }
- func (c *ServerClient) Query() *ServerQuery {
- return &ServerQuery{
- config: c.config,
- ctx: &QueryContext{Type: TypeServer},
- inters: c.Interceptors(),
- }
- }
- func (c *ServerClient) Get(ctx context.Context, id uint64) (*Server, error) {
- return c.Query().Where(server.ID(id)).Only(ctx)
- }
- func (c *ServerClient) GetX(ctx context.Context, id uint64) *Server {
- obj, err := c.Get(ctx, id)
- if err != nil {
- panic(err)
- }
- return obj
- }
- 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
- }
- func (c *ServerClient) Hooks() []Hook {
- hooks := c.hooks.Server
- return append(hooks[:len(hooks):len(hooks)], server.Hooks[:]...)
- }
- 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())
- }
- }
- type WxClient struct {
- config
- }
- func NewWxClient(c config) *WxClient {
- return &WxClient{config: c}
- }
- func (c *WxClient) Use(hooks ...Hook) {
- c.hooks.Wx = append(c.hooks.Wx, hooks...)
- }
- func (c *WxClient) Intercept(interceptors ...Interceptor) {
- c.inters.Wx = append(c.inters.Wx, interceptors...)
- }
- func (c *WxClient) Create() *WxCreate {
- mutation := newWxMutation(c.config, OpCreate)
- return &WxCreate{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *WxClient) CreateBulk(builders ...*WxCreate) *WxCreateBulk {
- return &WxCreateBulk{config: c.config, builders: builders}
- }
- 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}
- }
- func (c *WxClient) Update() *WxUpdate {
- mutation := newWxMutation(c.config, OpUpdate)
- return &WxUpdate{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *WxClient) UpdateOne(w *Wx) *WxUpdateOne {
- mutation := newWxMutation(c.config, OpUpdateOne, withWx(w))
- return &WxUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *WxClient) UpdateOneID(id uint64) *WxUpdateOne {
- mutation := newWxMutation(c.config, OpUpdateOne, withWxID(id))
- return &WxUpdateOne{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *WxClient) Delete() *WxDelete {
- mutation := newWxMutation(c.config, OpDelete)
- return &WxDelete{config: c.config, hooks: c.Hooks(), mutation: mutation}
- }
- func (c *WxClient) DeleteOne(w *Wx) *WxDeleteOne {
- return c.DeleteOneID(w.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}
- }
- func (c *WxClient) Query() *WxQuery {
- return &WxQuery{
- config: c.config,
- ctx: &QueryContext{Type: TypeWx},
- inters: c.Interceptors(),
- }
- }
- func (c *WxClient) Get(ctx context.Context, id uint64) (*Wx, error) {
- return c.Query().Where(wx.ID(id)).Only(ctx)
- }
- func (c *WxClient) GetX(ctx context.Context, id uint64) *Wx {
- obj, err := c.Get(ctx, id)
- if err != nil {
- panic(err)
- }
- return obj
- }
- 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
- }
- func (c *WxClient) Hooks() []Hook {
- hooks := c.hooks.Wx
- return append(hooks[:len(hooks):len(hooks)], wx.Hooks[:]...)
- }
- 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())
- }
- }
- type (
- hooks struct {
- Contact, Server, Wx []ent.Hook
- }
- inters struct {
- Contact, Server, Wx []ent.Interceptor
- }
- )
- 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...)
- }
- 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...)
- }
|