my shit
This commit is contained in:
@@ -1 +1,79 @@
|
||||
package mysql
|
||||
|
||||
import (
|
||||
"context"
|
||||
"git.aiterp.net/lucifer/new-server/models"
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
type BridgeRepo struct {
|
||||
DBX *sqlx.DB
|
||||
}
|
||||
|
||||
func (b *BridgeRepo) Find(ctx context.Context, id int) (models.Bridge, error) {
|
||||
var bridge models.Bridge
|
||||
err := b.DBX.GetContext(ctx, &bridge, "SELECT * FROM bridge WHERE id = ?", id)
|
||||
if err != nil {
|
||||
return models.Bridge{}, dbErr(err)
|
||||
}
|
||||
|
||||
return bridge, nil
|
||||
}
|
||||
|
||||
func (b *BridgeRepo) FetchAll(ctx context.Context) ([]models.Bridge, error) {
|
||||
bridges := make([]models.Bridge, 0, 8)
|
||||
err := b.DBX.GetContext(ctx, bridges, "SELECT * FROM bridge")
|
||||
if err != nil {
|
||||
return nil, dbErr(err)
|
||||
}
|
||||
|
||||
return bridges, nil
|
||||
}
|
||||
|
||||
func (b *BridgeRepo) Save(ctx context.Context, bridge *models.Bridge) error {
|
||||
if bridge.ID > 0 {
|
||||
_, err := b.DBX.ExecContext(
|
||||
ctx,
|
||||
"UPDATE bridge SET name = ?, address = ?, token = ? WHERE id = ?",
|
||||
bridge.Name, bridge.Address, bridge.Token, bridge.ID,
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
return dbErr(err)
|
||||
}
|
||||
} else {
|
||||
rs, err := b.DBX.ExecContext(
|
||||
ctx,
|
||||
"INSERT INTO bridge (name, driver, address, token) VALUES (?, ?, ?, ?)",
|
||||
bridge.Name, bridge.Driver, bridge.Address, bridge.Token,
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
return dbErr(err)
|
||||
}
|
||||
|
||||
id, err := rs.LastInsertId()
|
||||
if err != nil {
|
||||
return dbErr(err)
|
||||
}
|
||||
|
||||
bridge.ID = int(id)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *BridgeRepo) Delete(ctx context.Context, bridge *models.Bridge) error {
|
||||
_, err := b.DBX.ExecContext(ctx, "DELETE FROM bridge WHERE id = ?", bridge.ID)
|
||||
if err != nil {
|
||||
return dbErr(err)
|
||||
}
|
||||
|
||||
_, err = b.DBX.ExecContext(ctx, "DELETE FROM device WHERE bridge_id = ?", bridge.ID)
|
||||
if err != nil {
|
||||
return dbErr(err)
|
||||
}
|
||||
|
||||
bridge.ID = 0
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1 +1,18 @@
|
||||
package mysql
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"git.aiterp.net/lucifer/new-server/models"
|
||||
"log"
|
||||
)
|
||||
|
||||
func dbErr(err error) error {
|
||||
if err == sql.ErrNoRows {
|
||||
return models.ErrNotFound
|
||||
} else if err != nil {
|
||||
log.Printf("Internal error: %s", err.Error())
|
||||
return models.ErrInternal
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user