https://github.com/aklinkert/go-gorm-repository
A straightforward repository pattern implementation for GORM. Easy to use and easy to test with gomock.
https://github.com/aklinkert/go-gorm-repository
golang golang-library golang-package gorm gorm-orm repository repository-pattern
Last synced: 10 months ago
JSON representation
A straightforward repository pattern implementation for GORM. Easy to use and easy to test with gomock.
- Host: GitHub
- URL: https://github.com/aklinkert/go-gorm-repository
- Owner: aklinkert
- License: apache-2.0
- Created: 2020-12-29T09:48:14.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-01-13T13:53:06.000Z (over 4 years ago)
- Last Synced: 2025-09-07T06:33:46.415Z (10 months ago)
- Topics: golang, golang-library, golang-package, gorm, gorm-orm, repository, repository-pattern
- Language: Go
- Homepage:
- Size: 13.7 KB
- Stars: 27
- Watchers: 2
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# go-gorm-repository
This is a simple repository implementation for [GORM](https://gorm.io/) providing basic functions to CRUD and query
entities as well as transactions and common error handling.
## Example
For a complete list of supported methods, please see [types.go](types.go).
```go
package main
import (
"github.com/sirupsen/logrus"
"github.com/aklinkert/go-gorm-repository"
"gorm.io/gorm"
)
func main() {
logger := logrus.New()
db, _ := gorm.Open(_, _)
// third parameter is a list of related entities that should always preload
repo := gormrepository.NewGormRepository(db, logger, "CreatorUser", "Organization")
instance := &exampleModel{}
if err := repo.Create(instance); err != nil {
logger.Fatalf("failed to create cache instance: %v", err)
}
}
```
If you want to extend the repository with your own base or model repository just embed the interface into your implementation like so:
```go
package base
import "github.com/aklinkert/go-gorm-repository"
type BaseRepository interface {
gormrepository.TransactionRepository
GetOneByName(target interface{}, name string, preloads ...string) error
}
type repository struct {
gormrepository.TransactionRepository
}
func NewRepository(db *gorm.DB, logger logging.Logger) BaseRepository {
return &repository{
TransactionRepository: gormrepository.NewGormRepository(db, logger, "Creator"),
}
}
func (r *repository) GetOneByName(target interface{}, name string, preloads ...string) error {
return r.TransactionRepository.GetOneByField(target, "name", name, preloads...)
}
```
## License
Apache 2.0 License