add service

This commit is contained in:
vallyenfail
2026-01-17 17:39:33 +03:00
parent 1376ff9188
commit d959dcca96
82 changed files with 25041 additions and 1 deletions

View File

@@ -0,0 +1,97 @@
package repository
import (
"context"
"smart-search-back/internal/model"
errs "smart-search-back/pkg/errors"
sq "github.com/Masterminds/squirrel"
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgxpool"
)
type supplierRepository struct {
pool *pgxpool.Pool
qb sq.StatementBuilderType
}
func NewSupplierRepository(pool *pgxpool.Pool) SupplierRepository {
return &supplierRepository{
pool: pool,
qb: sq.StatementBuilder.PlaceholderFormat(sq.Dollar),
}
}
func (r *supplierRepository) BulkInsert(ctx context.Context, requestID uuid.UUID, suppliers []*model.Supplier) error {
if len(suppliers) == 0 {
return nil
}
query := r.qb.Insert("suppliers").Columns(
"request_id", "name", "email", "phone", "adress", "url",
)
for _, s := range suppliers {
query = query.Values(requestID, s.Name, s.Email, s.Phone, s.Address, s.URL)
}
sqlQuery, args, err := query.ToSql()
if err != nil {
return errs.NewInternalError(errs.DatabaseError, "failed to build query", err)
}
_, err = r.pool.Exec(ctx, sqlQuery, args...)
if err != nil {
return errs.NewInternalError(errs.DatabaseError, "failed to bulk insert suppliers", err)
}
return nil
}
func (r *supplierRepository) GetByRequestID(ctx context.Context, requestID uuid.UUID) ([]*model.Supplier, error) {
query := r.qb.Select(
"id", "request_id", "name", "email", "phone", "adress", "url", "created_at",
).From("suppliers").Where(sq.Eq{"request_id": requestID}).OrderBy("id")
sqlQuery, args, err := query.ToSql()
if err != nil {
return nil, errs.NewInternalError(errs.DatabaseError, "failed to build query", err)
}
rows, err := r.pool.Query(ctx, sqlQuery, args...)
if err != nil {
return nil, errs.NewInternalError(errs.DatabaseError, "failed to get suppliers", err)
}
defer rows.Close()
var suppliers []*model.Supplier
for rows.Next() {
s := &model.Supplier{}
err := rows.Scan(
&s.ID, &s.RequestID, &s.Name, &s.Email, &s.Phone, &s.Address, &s.URL, &s.CreatedAt,
)
if err != nil {
return nil, errs.NewInternalError(errs.DatabaseError, "failed to scan supplier", err)
}
suppliers = append(suppliers, s)
}
return suppliers, nil
}
func (r *supplierRepository) DeleteByRequestID(ctx context.Context, requestID uuid.UUID) error {
query := r.qb.Delete("suppliers").Where(sq.Eq{"request_id": requestID})
sqlQuery, args, err := query.ToSql()
if err != nil {
return errs.NewInternalError(errs.DatabaseError, "failed to build query", err)
}
_, err = r.pool.Exec(ctx, sqlQuery, args...)
if err != nil {
return errs.NewInternalError(errs.DatabaseError, "failed to delete suppliers", err)
}
return nil
}