Skip to content

ss-keel-mongo

ss-keel-mongo provides a generic Repository[T, ID] implementation backed by mongo-driver. Works with any BSON-serializable struct.

Implements: Repository[T, ID]

Terminal window
go get github.com/slice-soft/ss-keel-mongo
import "github.com/slice-soft/ss-keel-mongo"
// Connect
client, err := ssmongo.Connect(ssmongo.Config{
URI: os.Getenv("MONGO_URI"),
Database: "mydb",
})
// Generic repository
userRepo := ssmongo.NewRepository[User, string](client, "users")
// userRepo implements core.Repository[User, string]
userRepo.FindByID(ctx, "abc-123")
userRepo.FindAll(ctx, core.PageQuery{Page: 1, Limit: 20})
userRepo.Create(ctx, &user)
userRepo.Update(ctx, "abc-123", &user)
userRepo.Delete(ctx, "abc-123")
type User struct {
ID string `bson:"_id"`
Name string `bson:"name"`
Email string `bson:"email"`
}
app.RegisterHealthChecker(ssmongo.NewHealthChecker(client))
// → "mongodb": "UP" in GET /health
type UserRepository struct {
*ssmongo.Repository[User, string]
coll *mongo.Collection
}
func (r *UserRepository) FindByEmail(ctx context.Context, email string) (*User, error) {
var user User
return &user, r.coll.FindOne(ctx, bson.M{"email": email}).Decode(&user)
}