Files
DeviceBookingAPI/databases/cow.go
T
2023-09-28 21:42:58 -07:00

66 lines
1.8 KiB
Go

package databases
// go generate: mockery --name CowDatabase
import (
"context"
"github.com/SowinskiBraeden/DeviceBookingAPI/models"
)
const cowDBO = "cows"
// CowDatabase contains the methods to use with the cow database
type CowDatabase interface {
FindOne(ctx context.Context, filter interface{}) (*models.Cow, error)
Find(ctx context.Context, filter interface{}) ([]models.Cow, error)
InsertOne(ctx context.Context, document interface{}) (*mongoInsertOneResult, error)
UpdateOne(ctx context.Context, filter, document interface{}) (*mongoUpdateResult, error)
}
type cowDatabase struct {
db DatabaseHelper
}
// NewCowDatabase initialized a new instance of a cow database with the provided db conntection
func NewCowDatabase(db DatabaseHelper) CowDatabase {
return &cowDatabase{
db: db,
}
}
func (c *cowDatabase) FindOne(ctx context.Context, filter interface{}) (*models.Cow, error) {
cow := &models.Cow{}
err := c.db.Collection(cowDBO).FindOne(ctx, filter).Decode(&cow)
if err != nil {
return nil, err
}
return cow, nil
}
func (c *cowDatabase) Find(ctx context.Context, filter interface{}) ([]models.Cow, error) {
var cows []models.Cow
err := c.db.Collection(cowDBO).Find(ctx, filter).Decode(&cows)
if err != nil {
return nil, err
}
return cows, nil
}
// Returns the result (document id) and error
func (c *cowDatabase) InsertOne(ctx context.Context, document interface{}) (*mongoInsertOneResult, error) {
result, err := c.db.Collection(cowDBO).InsertOne(ctx, document)
if err != nil {
return nil, err
}
return &result, nil
}
func (c *cowDatabase) UpdateOne(ctx context.Context, filter, update interface{}) (*mongoUpdateResult, error) {
result, err := c.db.Collection(cowDBO).UpdateOne(ctx, filter, update)
if err != nil {
return nil, err
}
return &result, nil
}