diff --git a/databases/cow.go b/databases/cow.go index 3f55a68..685819d 100644 --- a/databases/cow.go +++ b/databases/cow.go @@ -14,8 +14,8 @@ const cowName = "cows" 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, filter interface{}) (mongoInsertOneResult, error) - UpdateOne(ctx context.Context, filter, document interface{}) (mongoUpdateResult, error) + InsertOne(ctx context.Context, document interface{}) (*mongoInsertOneResult, error) + UpdateOne(ctx context.Context, filter, document interface{}) (*mongoUpdateResult, error) } type cowDatabase struct { @@ -48,18 +48,18 @@ func (c *cowDatabase) Find(ctx context.Context, filter interface{}) ([]models.Co } // Returns the result (document id) and error -func (c *cowDatabase) InsertOne(ctx context.Context, document interface{}) (mongoInsertOneResult, error) { +func (c *cowDatabase) InsertOne(ctx context.Context, document interface{}) (*mongoInsertOneResult, error) { result, err := c.db.Collection(cowName).InsertOne(ctx, document) if err != nil { - return mongoInsertOneResult{}, err + return nil, err } - return result, nil + return &result, nil } -func (c *cowDatabase) UpdateOne(ctx context.Context, filter, update interface{}) (mongoUpdateResult, error) { +func (c *cowDatabase) UpdateOne(ctx context.Context, filter, update interface{}) (*mongoUpdateResult, error) { result, err := c.db.Collection(cowName).UpdateOne(ctx, filter, update) if err != nil { - return mongoUpdateResult{}, err + return nil, err } - return result, nil + return &result, nil } diff --git a/databases/device.go b/databases/device.go new file mode 100644 index 0000000..6ae7491 --- /dev/null +++ b/databases/device.go @@ -0,0 +1,64 @@ +package databases + +// go generate: mockery --name DeviceDatabase + +import ( + "context" + + "github.com/SowinskiBraeden/SulliCartShare/models" +) + +const deviceName = "devices" + +// DeviceDatabase contains the methods to use with the cow database +type DeviceDatabase interface { + FindOne(ctx context.Context, filter interface{}) (*models.Device, error) + Find(ctx context.Context, filter interface{}) ([]models.Device, error) + InsertOne(ctx context.Context, document interface{}) (*mongoInsertOneResult, error) + UpdateOne(ctx context.Context, filter, document interface{}) (*mongoUpdateResult, error) +} + +type deviceDatabase struct { + db DatabaseHelper +} + +// NewDeviceDatabase initializes a new instance of a device database with the provided db connection +func NewDeviceDatabase(db DatabaseHelper) DeviceDatabase { + return &deviceDatabase{ + db: db, + } +} + +func (d *deviceDatabase) FindOne(ctx context.Context, filter interface{}) (*models.Device, error) { + device := &models.Device{} + err := d.db.Collection(deviceName).FindOne(ctx, filter).Decode(&device) + if err != nil { + return nil, err + } + return device, nil +} + +func (d *deviceDatabase) Find(ctx context.Context, filter interface{}) ([]models.Device, error) { + var devices []models.Device + err := d.db.Collection(deviceName).FindOne(ctx, filter).Decode(&devices) + if err != nil { + return nil, err + } + return devices, nil +} + +func (d *deviceDatabase) InsertOne(ctx context.Context, document interface{}) (*mongoInsertOneResult, error) { + result, err := d.db.Collection(deviceName).InsertOne(ctx, document) + if err != nil { + return nil, err + } + return &result, nil +} + +func (d *deviceDatabase) UpdateOne(ctx context.Context, filter, update interface{}) (*mongoUpdateResult, error) { + result, err := d.db.Collection(deviceName).UpdateOne(ctx, filter, update) + if err != nil { + return nil, err + } + return &result, nil +}