package models import ( "context" "github.com/uptrace/bun" ) type Group struct { bun.BaseModel `bun:"table:groups"` UserID int64 GroupID int64 `bun:",pk,autoincrement"` Name string `bun:"name,type:text" json:"name" yaml:"name"` TelegramChatID int64 `bun:"telegram_chat_id,type:bigint" json:"telegram_chat_id" yaml:"telegram_chat_id"` Users Users `bun:"m2m:group_to_users,join:Group=User"` } type GroupToUser struct { GroupID int64 `bun:",pk"` Group *Group `bun:"rel:belongs-to,join:group_id=user_id"` UserID int64 `bun:",pk"` User *User `bun:"rel:belongs-to,join:user_id=group_id"` } func NewGroup(j []byte) (*Group, error) { g := &Group{} return g, nil } // Add . func (g *Group) Add(db *bun.DB, ctx context.Context) error { _, err := db.NewInsert().Model(g).Exec(ctx) if err != nil { return err } return nil } // Update . func (g *Group) Update(db *bun.DB, ctx context.Context) error { _, err := db.NewUpdate().Model(g).WherePK().Exec(ctx) if err != nil { return err } return nil } // Remove . func (g *Group) Remove(db *bun.DB, ctx context.Context) error { _, err := db.NewDelete().Model(g).WherePK().Exec(ctx) if err != nil { return err } return nil } // UserAdd . func (g *Group) UserAdd(db *bun.DB, ctx context.Context, u int64) error { _, err := db.NewInsert().Model(g).Exec(ctx) if err != nil { return err } return nil } // UserList . func (g *Group) UserList(db *bun.DB, ctx context.Context) (Users, error) { var users Users _, err := db.NewSelect().Model(&users).ScanAndCount(ctx) if err != nil { return nil, err } return users, nil } // UserRemove . func (g *Group) UserRemove(db *bun.DB, ctx context.Context, u int) error { _, err := db.NewInsert().Model(g).Exec(ctx) if err != nil { return err } return nil } func GroupExists(db *bun.DB, ctx context.Context, tid int64) bool { exists, err := db.NewSelect().Model((*Group)(nil)).Where("telegram_chat_id = ?", tid).Exists(ctx) if err != nil { panic(err) } return exists }