Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
d017530444
|
|||
8de83cc290
|
|||
603ec82b83
|
|||
93c4cf31a8
|
|||
dc2d8a9103
|
|||
6589e8d5cd
|
|||
0006c6859d
|
@@ -11,6 +11,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@@ -24,6 +25,7 @@ type EnumDefVal struct {
|
|||||||
|
|
||||||
type EnumDef struct {
|
type EnumDef struct {
|
||||||
File string
|
File string
|
||||||
|
FileRelative string
|
||||||
EnumTypeName string
|
EnumTypeName string
|
||||||
Type string
|
Type string
|
||||||
Values []EnumDefVal
|
Values []EnumDefVal
|
||||||
@@ -83,7 +85,7 @@ func GenerateEnumSpecs(sourceDir string, destFile string) error {
|
|||||||
|
|
||||||
for _, f := range files {
|
for _, f := range files {
|
||||||
fmt.Printf("========= %s =========\n\n", f.Name())
|
fmt.Printf("========= %s =========\n\n", f.Name())
|
||||||
fileEnums, pn, err := processFile(path.Join(sourceDir, f.Name()))
|
fileEnums, pn, err := processFile(sourceDir, path.Join(sourceDir, f.Name()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -123,7 +125,7 @@ func GenerateEnumSpecs(sourceDir string, destFile string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func processFile(fn string) ([]EnumDef, string, error) {
|
func processFile(basedir string, fn string) ([]EnumDef, string, error) {
|
||||||
file, err := os.Open(fn)
|
file, err := os.Open(fn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", err
|
return nil, "", err
|
||||||
@@ -153,8 +155,15 @@ func processFile(fn string) ([]EnumDef, string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if match, ok := rexEnumDef.MatchFirst(line); ok {
|
if match, ok := rexEnumDef.MatchFirst(line); ok {
|
||||||
|
|
||||||
|
rfp, err := filepath.Rel(basedir, fn)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "", err
|
||||||
|
}
|
||||||
|
|
||||||
def := EnumDef{
|
def := EnumDef{
|
||||||
File: fn,
|
File: fn,
|
||||||
|
FileRelative: rfp,
|
||||||
EnumTypeName: match.GroupByName("name").Value(),
|
EnumTypeName: match.GroupByName("name").Value(),
|
||||||
Type: match.GroupByName("type").Value(),
|
Type: match.GroupByName("type").Value(),
|
||||||
Values: make([]EnumDefVal, 0),
|
Values: make([]EnumDefVal, 0),
|
||||||
@@ -239,7 +248,7 @@ func fmtOutput(cs string, enums []EnumDef, pkgname string) string {
|
|||||||
|
|
||||||
str += "// ================================ " + enumdef.EnumTypeName + " ================================" + "\n"
|
str += "// ================================ " + enumdef.EnumTypeName + " ================================" + "\n"
|
||||||
str += "//" + "\n"
|
str += "//" + "\n"
|
||||||
str += "// File: " + enumdef.File + "\n"
|
str += "// File: " + enumdef.FileRelative + "\n"
|
||||||
str += "// StringEnum: " + langext.Conditional(hasStr, "true", "false") + "\n"
|
str += "// StringEnum: " + langext.Conditional(hasStr, "true", "false") + "\n"
|
||||||
str += "// DescrEnum: " + langext.Conditional(hasDescr, "true", "false") + "\n"
|
str += "// DescrEnum: " + langext.Conditional(hasDescr, "true", "false") + "\n"
|
||||||
str += "//" + "\n"
|
str += "//" + "\n"
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
package goext
|
package goext
|
||||||
|
|
||||||
const GoextVersion = "0.0.149"
|
const GoextVersion = "0.0.156"
|
||||||
|
|
||||||
const GoextVersionTimestamp = "2023-06-07T17:45:45+0200"
|
const GoextVersionTimestamp = "2023-06-10T00:19:17+0200"
|
||||||
|
@@ -2,13 +2,17 @@ package wmo
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"go.mongodb.org/mongo-driver/bson/bsontype"
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
ct "gogs.mikescher.com/BlackForestBytes/goext/cursortoken"
|
ct "gogs.mikescher.com/BlackForestBytes/goext/cursortoken"
|
||||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
"reflect"
|
"reflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
type EntityID = any
|
type EntityID interface {
|
||||||
|
MarshalBSONValue() (bsontype.Type, []byte, error)
|
||||||
|
String() string
|
||||||
|
}
|
||||||
|
|
||||||
type fullTypeRef[TData any] struct {
|
type fullTypeRef[TData any] struct {
|
||||||
IsPointer bool
|
IsPointer bool
|
||||||
|
@@ -69,7 +69,7 @@ func CreatePagination[TData any](coll *Coll[TData], token ct.CursorToken, fieldP
|
|||||||
} else if token.Mode == ct.CTMEnd {
|
} else if token.Mode == ct.CTMEnd {
|
||||||
|
|
||||||
// false
|
// false
|
||||||
pipeline = append(pipeline, bson.D{{Key: "$match", Value: bson.M{"$eq": bson.A{"1", "0"}}}})
|
pipeline = append(pipeline, bson.D{{Key: "$match", Value: bson.M{"$expr": bson.M{"$eq": bson.A{"1", "0"}}}}})
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
@@ -6,7 +6,7 @@ import (
|
|||||||
"go.mongodb.org/mongo-driver/mongo"
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *Coll[TData]) DeleteOne(ctx context.Context, id EntityID) error {
|
func (c *Coll[TData]) DeleteOneByID(ctx context.Context, id EntityID) error {
|
||||||
_, err := c.coll.DeleteOne(ctx, bson.M{"_id": id})
|
_, err := c.coll.DeleteOne(ctx, bson.M{"_id": id})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -15,6 +15,15 @@ func (c *Coll[TData]) DeleteOne(ctx context.Context, id EntityID) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Coll[TData]) DeleteOne(ctx context.Context, filterQuery bson.M) error {
|
||||||
|
_, err := c.coll.DeleteOne(ctx, filterQuery)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Coll[TData]) DeleteMany(ctx context.Context, filterQuery bson.M) (*mongo.DeleteResult, error) {
|
func (c *Coll[TData]) DeleteMany(ctx context.Context, filterQuery bson.M) (*mongo.DeleteResult, error) {
|
||||||
res, err := c.coll.DeleteMany(ctx, filterQuery)
|
res, err := c.coll.DeleteMany(ctx, filterQuery)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@@ -37,7 +37,7 @@ func (c *Coll[TData]) List(ctx context.Context, filter ct.Filter, pageSize *int,
|
|||||||
return nil, ct.CursorToken{}, err
|
return nil, ct.CursorToken{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
entities := make([]TData, 0, cursor.RemainingBatchLength()+1)
|
entities := make([]TData, 0, cursor.RemainingBatchLength())
|
||||||
for (pageSize == nil || len(entities) != *pageSize) && cursor.Next(ctx) {
|
for (pageSize == nil || len(entities) != *pageSize) && cursor.Next(ctx) {
|
||||||
var entry TData
|
var entry TData
|
||||||
err = cursor.Decode(&entry)
|
err = cursor.Decode(&entry)
|
||||||
@@ -47,13 +47,16 @@ func (c *Coll[TData]) List(ctx context.Context, filter ct.Filter, pageSize *int,
|
|||||||
entities = append(entities, entry)
|
entities = append(entities, entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
if pageSize == nil || len(entities) <= *pageSize || !cursor.TryNext(ctx) {
|
if pageSize == nil || len(entities) < *pageSize || !cursor.TryNext(ctx) {
|
||||||
return entities, ct.End(), nil
|
return entities, ct.End(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
last := entities[len(entities)-1]
|
last := entities[len(entities)-1]
|
||||||
|
|
||||||
nextToken, _ := c.createToken(sortPrimary, sortDirPrimary, sortSecondary, sortDirSecondary, last, pageSize)
|
nextToken, err := c.createToken(sortPrimary, sortDirPrimary, sortSecondary, sortDirSecondary, last, pageSize)
|
||||||
|
if err != nil {
|
||||||
|
return nil, ct.CursorToken{}, err
|
||||||
|
}
|
||||||
|
|
||||||
return entities, nextToken, nil
|
return entities, nextToken, nil
|
||||||
}
|
}
|
||||||
|
@@ -45,8 +45,8 @@ func (c *Coll[TData]) UpdateMany(ctx context.Context, filterQuery bson.M, update
|
|||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Coll[TData]) ReplaceOne(ctx context.Context, id EntityID, value TData) error {
|
func (c *Coll[TData]) ReplaceOne(ctx context.Context, filterQuery bson.M, value TData) error {
|
||||||
_, err := c.coll.UpdateOne(ctx, bson.M{"_id": id}, value)
|
_, err := c.coll.UpdateOne(ctx, filterQuery, bson.M{"$set": value})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -54,10 +54,10 @@ func (c *Coll[TData]) ReplaceOne(ctx context.Context, id EntityID, value TData)
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Coll[TData]) FindOneAndReplace(ctx context.Context, id EntityID, value TData) (TData, error) {
|
func (c *Coll[TData]) FindOneAndReplace(ctx context.Context, filterQuery bson.M, value TData) (TData, error) {
|
||||||
var res TData
|
var res TData
|
||||||
|
|
||||||
err := c.coll.FindOneAndUpdate(ctx, bson.M{"_id": id}, value, options.FindOneAndUpdate().SetReturnDocument(options.After)).Decode(&res)
|
err := c.coll.FindOneAndUpdate(ctx, filterQuery, bson.M{"$set": value}, options.FindOneAndUpdate().SetReturnDocument(options.After)).Decode(&res)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return *new(TData), err
|
return *new(TData), err
|
||||||
}
|
}
|
||||||
|
@@ -4,6 +4,7 @@ import (
|
|||||||
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
"gogs.mikescher.com/BlackForestBytes/goext/langext"
|
||||||
"gogs.mikescher.com/BlackForestBytes/goext/reflectext"
|
"gogs.mikescher.com/BlackForestBytes/goext/reflectext"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *Coll[TData]) init() {
|
func (c *Coll[TData]) init() {
|
||||||
@@ -32,7 +33,13 @@ func (c *Coll[TData]) initFields(prefix string, rval reflect.Value, idxarr []int
|
|||||||
}
|
}
|
||||||
|
|
||||||
bsonkey, found := rsfield.Tag.Lookup("bson")
|
bsonkey, found := rsfield.Tag.Lookup("bson")
|
||||||
if !found || bsonkey == "-" {
|
if !found {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if strings.Contains(bsonkey, ",") {
|
||||||
|
bsonkey = bsonkey[:strings.Index(bsonkey, ",")]
|
||||||
|
}
|
||||||
|
if bsonkey == "-" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user