refactor: update interface contract and applies some fixes

This commit is contained in:
2025-11-02 17:51:55 -03:00
parent af511203a4
commit 4a28259dc8
4 changed files with 121 additions and 44 deletions

View File

@@ -10,7 +10,7 @@ type baseRepository[T any] struct {
tableName string
}
func NewBaseRepository[T any](db *sql.DB, tableName string) Repository[T] {
func NewBaseRepository[T any](db *sql.DB, tableName string) *baseRepository[T] {
return &baseRepository[T]{
db: db,
tableName: tableName,
@@ -25,14 +25,34 @@ func (r *baseRepository[T]) GetDB() *sql.DB {
return r.db
}
func (r *baseRepository[T]) GetAll() ([]T, error) {
query := r.BuildQuery("SELECT * FROM %s ORDER BY id DESC")
rows, err := r.db.Query(query)
if err != nil {
return nil, err
}
defer rows.Close()
entities := make([]T, 0)
rowsErr := ScanRows(rows, &entities)
if rowsErr != nil {
return nil, err
}
return entities, nil
}
func (r *baseRepository[T]) GetByID(id int) (*T, error) {
var entity T
query := r.BuildQuery("SELECT * FROM %s WHERE id = ?")
err := r.db.QueryRow(
row := r.db.QueryRow(
query,
id,
).Scan(entity)
)
err := scanRow(row, &entity)
if err != nil {
if err == sql.ErrNoRows {
@@ -44,33 +64,8 @@ func (r *baseRepository[T]) GetByID(id int) (*T, error) {
return &entity, nil
}
func (r *baseRepository[T]) GetAll() ([]T, error) {
query := r.BuildQuery("SELECT * FROM %s ORDER BY id DESC")
rows, err := r.db.Query(query)
if err != nil {
return nil, err
}
defer rows.Close()
entities := make([]T, 0)
for rows.Next() {
var entity T
if err := rows.Scan(entity); err != nil {
return nil, err
}
entities = append(entities, entity)
}
if err = rows.Err(); err != nil {
return nil, err
}
return entities, nil
}
func (r *baseRepository[T]) Delete(id int) (int64, error) {
query := r.BuildQuery("DELETE %s WHERE id = ? LIMIT 1")
query := r.BuildQuery("DELETE FROM %s WHERE id = ?")
res, err := r.db.Exec(query, id)
if err != nil {
return 0, err