All checks were successful
Build and Push Docker Image / Build-And-Push-Docker-Image (push) Successful in 1m25s
98 lines
2.6 KiB
Go
98 lines
2.6 KiB
Go
package budget
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"spend-sparrow/internal/core"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/jmoiron/sqlx"
|
|
)
|
|
|
|
type Db interface {
|
|
Insert(ctx context.Context, budget Budget) (*Budget, error)
|
|
Update(ctx context.Context, budget Budget) (*Budget, error)
|
|
Delete(ctx context.Context, userId uuid.UUID, budgetId uuid.UUID) error
|
|
Get(ctx context.Context, userId uuid.UUID, budgetId uuid.UUID) (*Budget, error)
|
|
GetAll(ctx context.Context, userId uuid.UUID) ([]Budget, error)
|
|
}
|
|
|
|
type DbSqlite struct {
|
|
db *sqlx.DB
|
|
}
|
|
|
|
func NewDbSqlite(db *sqlx.DB) *DbSqlite {
|
|
return &DbSqlite{db: db}
|
|
}
|
|
|
|
func (db DbSqlite) Insert(ctx context.Context, budget Budget) (*Budget, error) {
|
|
r, err := db.db.ExecContext(ctx, `
|
|
INSERT INTO budget (id, user_id, name, value, created_at, created_by, updated_at, updated_by)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
budget.Id, budget.UserId, budget.Name, budget.Value, budget.CreatedAt, budget.CreatedBy, budget.UpdatedAt, budget.UpdatedBy,
|
|
)
|
|
err = core.TransformAndLogDbError(ctx, "budget", r, err)
|
|
if err != nil {
|
|
return nil, core.ErrInternal
|
|
}
|
|
|
|
return db.Get(ctx, budget.UserId, budget.Id)
|
|
}
|
|
|
|
func (db DbSqlite) Update(ctx context.Context, budget Budget) (*Budget, error) {
|
|
_, err := db.db.ExecContext(ctx, `
|
|
UPDATE budget
|
|
SET name = ?,
|
|
value = ?,
|
|
updated_at = ?,
|
|
updated_by = ?
|
|
WHERE user_id = ?
|
|
AND id = ?`,
|
|
budget.Name, budget.Value, budget.UpdatedAt, budget.UpdatedBy, budget.UserId, budget.Id)
|
|
|
|
if err != nil {
|
|
slog.ErrorContext(ctx, "SQL error UpdateUser", "err", err)
|
|
return nil, core.ErrInternal
|
|
}
|
|
|
|
return db.Get(ctx, budget.UserId, budget.Id)
|
|
}
|
|
|
|
func (db DbSqlite) Delete(ctx context.Context, userId uuid.UUID, budgetId uuid.UUID) error {
|
|
r, err := db.db.ExecContext(
|
|
ctx,
|
|
"DELETE FROM budget WHERE user_id = ? AND id = ?",
|
|
userId,
|
|
budgetId)
|
|
err = core.TransformAndLogDbError(ctx, "budget", r, err)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (db DbSqlite) Get(ctx context.Context, userId uuid.UUID, budgetId uuid.UUID) (*Budget, error) {
|
|
var budget Budget
|
|
err := db.db.Get(&budget, "SELECT * FROM budget WHERE id = ? AND user_id = ?", budgetId, userId)
|
|
|
|
if err != nil {
|
|
slog.ErrorContext(ctx, "Could not get budget", "err", err)
|
|
return nil, core.ErrInternal
|
|
}
|
|
|
|
return &budget, nil
|
|
}
|
|
|
|
func (db DbSqlite) GetAll(ctx context.Context, userId uuid.UUID) ([]Budget, error) {
|
|
var budgets []Budget
|
|
err := db.db.Select(&budgets, "SELECT * FROM budget WHERE user_id = ?", userId)
|
|
|
|
if err != nil {
|
|
slog.ErrorContext(ctx, "Could not GetAll budget", "err", err)
|
|
return nil, core.ErrInternal
|
|
}
|
|
|
|
return budgets, nil
|
|
}
|