gohorsejobs/backend/internal/infrastructure/persistence/postgres/company_repository.go
Tiago Yamamoto 1c7ef95c1a first commit
2025-12-09 19:04:48 -03:00

82 lines
1.9 KiB
Go

package postgres
import (
"context"
"database/sql"
"errors"
"time"
"github.com/google/uuid"
"github.com/rede5/gohorsejobs/backend/internal/core/domain/entity"
)
type CompanyRepository struct {
db *sql.DB
}
func NewCompanyRepository(db *sql.DB) *CompanyRepository {
return &CompanyRepository{db: db}
}
func (r *CompanyRepository) Save(ctx context.Context, company *entity.Company) (*entity.Company, error) {
if company.ID == "" {
company.ID = uuid.New().String()
}
query := `
INSERT INTO core_companies (id, name, document, contact, status, created_at, updated_at)
VALUES ($1, $2, $3, $4, $5, $6, $7)
RETURNING id
`
err := r.db.QueryRowContext(ctx, query,
company.ID,
company.Name,
company.Document,
company.Contact,
company.Status,
company.CreatedAt,
company.UpdatedAt,
).Scan(&company.ID)
if err != nil {
return nil, err
}
return company, nil
}
func (r *CompanyRepository) FindByID(ctx context.Context, id string) (*entity.Company, error) {
query := `SELECT id, name, document, contact, status, created_at, updated_at FROM core_companies WHERE id = $1`
row := r.db.QueryRowContext(ctx, query, id)
c := &entity.Company{}
err := row.Scan(&c.ID, &c.Name, &c.Document, &c.Contact, &c.Status, &c.CreatedAt, &c.UpdatedAt)
if err == sql.ErrNoRows {
return nil, errors.New("company not found")
}
return c, err
}
func (r *CompanyRepository) Update(ctx context.Context, company *entity.Company) (*entity.Company, error) {
company.UpdatedAt = time.Now()
query := `
UPDATE core_companies
SET name=$1, document=$2, contact=$3, status=$4, updated_at=$5
WHERE id=$6
`
_, err := r.db.ExecContext(ctx, query,
company.Name,
company.Document,
company.Contact,
company.Status,
company.UpdatedAt,
company.ID,
)
return company, err
}
func (r *CompanyRepository) Delete(ctx context.Context, id string) error {
query := `DELETE FROM core_companies WHERE id = $1`
_, err := r.db.ExecContext(ctx, query, id)
return err
}