package sql import ( "context" "tercul/internal/domain" "tercul/internal/platform/config" "github.com/google/uuid" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/trace" "gorm.io/gorm" ) type commentRepository struct { domain.BaseRepository[domain.Comment] db *gorm.DB tracer trace.Tracer } // NewCommentRepository creates a new CommentRepository. func NewCommentRepository(db *gorm.DB, cfg *config.Config) domain.CommentRepository { return &commentRepository{ BaseRepository: NewBaseRepositoryImpl[domain.Comment](db, cfg), db: db, tracer: otel.Tracer("comment.repository"), } } // ListByUserID finds comments by user ID func (r *commentRepository) ListByUserID(ctx context.Context, userID uuid.UUID) ([]domain.Comment, error) { ctx, span := r.tracer.Start(ctx, "ListByUserID") defer span.End() var comments []domain.Comment if err := r.db.WithContext(ctx).Where("user_id = ?", userID).Find(&comments).Error; err != nil { return nil, err } return comments, nil } // ListByWorkID finds comments by work ID func (r *commentRepository) ListByWorkID(ctx context.Context, workID uuid.UUID) ([]domain.Comment, error) { ctx, span := r.tracer.Start(ctx, "ListByWorkID") defer span.End() var comments []domain.Comment if err := r.db.WithContext(ctx).Where("work_id = ?", workID).Find(&comments).Error; err != nil { return nil, err } return comments, nil } // ListByTranslationID finds comments by translation ID func (r *commentRepository) ListByTranslationID(ctx context.Context, translationID uuid.UUID) ([]domain.Comment, error) { ctx, span := r.tracer.Start(ctx, "ListByTranslationID") defer span.End() var comments []domain.Comment if err := r.db.WithContext(ctx).Where("translation_id = ?", translationID).Find(&comments).Error; err != nil { return nil, err } return comments, nil } // ListByParentID finds comments by parent ID func (r *commentRepository) ListByParentID(ctx context.Context, parentID uuid.UUID) ([]domain.Comment, error) { ctx, span := r.tracer.Start(ctx, "ListByParentID") defer span.End() var comments []domain.Comment if err := r.db.WithContext(ctx).Where("parent_id = ?", parentID).Find(&comments).Error; err != nil { return nil, err } return comments, nil }