Organize backend into product executable and shared Go modules

This commit is contained in:
Stephan D committed 2026-09-12 14:14:08 +02:00
1 parent 981e84a4b4
commit f0720ec66b
382 files changed
+1944 -6989

No files matched your search

@@ -0,0 +1,21 @@
package template
import (
"context"
"git.sendico.io/tech/sxchnge/shared/database/record"
"git.sendico.io/tech/sxchnge/shared/database/repository/builder"
"go.mongodb.org/mongo-driver/v2/bson"
)
type DB[T storable.Storable] interface {
Create(ctx context.Context, object T) error
InsertMany(ctx context.Context, objects []T) error
Get(ctx context.Context, objectRef bson.ObjectID, result T) error
Update(ctx context.Context, object T) error
Patch(ctx context.Context, objectRef bson.ObjectID, patch builder.Patch) error
Delete(ctx context.Context, objectRef bson.ObjectID) error
DeleteMany(ctx context.Context, query builder.Query) error
DeleteCascade(ctx context.Context, objectRef bson.ObjectID) error
FindOne(ctx context.Context, query builder.Query, result T) error
}
@@ -0,0 +1,99 @@
package template
import (
"context"
"git.sendico.io/tech/sxchnge/shared/database/record"
"git.sendico.io/tech/sxchnge/shared/database/repository"
"git.sendico.io/tech/sxchnge/shared/database/repository/builder"
"git.sendico.io/tech/sxchnge/shared/errors"
"git.sendico.io/tech/sxchnge/shared/logging"
"git.sendico.io/tech/sxchnge/shared/logging/fields"
"git.sendico.io/tech/sxchnge/shared/service"
"go.mongodb.org/mongo-driver/v2/bson"
"go.mongodb.org/mongo-driver/v2/mongo"
)
type CascadeDeleterT = func(ctx context.Context, objectRef bson.ObjectID) error
type DBImp[T storable.Storable] struct {
Logger mlogger.Logger
Repository repository.Repository
cdeleter CascadeDeleterT
}
func (db *DBImp[T]) Create(ctx context.Context, object T) error {
return db.Repository.Insert(ctx, object, nil)
}
func (db *DBImp[T]) InsertMany(ctx context.Context, objects []T) error {
if len(objects) == 0 {
return nil
}
storables := make([]storable.Storable, len(objects))
for i, obj := range objects {
storables[i] = obj
}
return db.Repository.InsertMany(ctx, storables)
}
func (db *DBImp[T]) Get(ctx context.Context, objectRef bson.ObjectID, result T) error {
return db.Repository.Get(ctx, objectRef, result)
}
func (db *DBImp[T]) Update(ctx context.Context, object T) error {
return db.Repository.Update(ctx, object)
}
func (db *DBImp[T]) Patch(ctx context.Context, objectRef bson.ObjectID, patch builder.Patch) error {
return db.Repository.Patch(ctx, objectRef, patch)
}
func (db *DBImp[T]) PatchMany(ctx context.Context, query builder.Query, patch builder.Patch) (int, error) {
return db.Repository.PatchMany(ctx, query, patch)
}
func (db *DBImp[T]) Delete(ctx context.Context, objectRef bson.ObjectID) error {
return db.Repository.Delete(ctx, objectRef)
}
func (db *DBImp[T]) DeleteMany(ctx context.Context, query builder.Query) error {
return db.Repository.DeleteMany(ctx, query)
}
func (db *DBImp[T]) FindOne(ctx context.Context, query builder.Query, result T) error {
return db.Repository.FindOneByFilter(ctx, query, result)
}
func (db *DBImp[T]) ListIDs(ctx context.Context, query builder.Query) ([]bson.ObjectID, error) {
return db.Repository.ListIDs(ctx, query)
}
func (db *DBImp[T]) SetDeleter(deleter CascadeDeleterT) {
db.Logger.Debug("Custom cascade deletion method installed")
db.cdeleter = deleter
}
func (db *DBImp[T]) deleteCascadeStub(_ context.Context, objectRef bson.ObjectID) error {
db.Logger.Warn("Unimplemented cascade delete call", mzap.ObjRef("object_ref", objectRef))
return merrors.NotImplemented("custom implementation required")
}
func (db *DBImp[T]) DeleteCascade(ctx context.Context, objectRef bson.ObjectID) error {
return db.cdeleter(ctx, objectRef)
}
func Create[T storable.Storable](
logger mlogger.Logger,
collection mservice.Type,
db *mongo.Database,
) *DBImp[T] {
res := &DBImp[T]{
Logger: logger.Named(collection),
Repository: repository.CreateMongoRepository(db, collection),
}
res.cdeleter = res.deleteCascadeStub
return res
}