vet/pkg/code/writerRepository.go
Omkar Phansopkar 08b5f612ac
Implemented code scan command for building sqlite storage with code analysis data (#326)
* Implemented code scan command for building sqlite storage with code analysis data

Signed-off-by: Omkar Phansopkar <omkarphansopkar@gmail.com>

* Added E2E test for code scan command

Signed-off-by: Omkar Phansopkar <omkarphansopkar@gmail.com>

* refactor: Migrate pkg/command to internal/command since we use pkg as a independent concern

---------

Signed-off-by: Omkar Phansopkar <omkarphansopkar@gmail.com>
Co-authored-by: abhisek <abhisek.datta@gmail.com>
2025-02-03 11:23:51 +05:30

62 lines
1.6 KiB
Go

package code
import (
"context"
"fmt"
"github.com/safedep/code/plugin/depsusage"
"github.com/safedep/vet/ent"
"github.com/safedep/vet/ent/codesourcefile"
)
type writerRepositoryImpl struct {
client *ent.Client
}
var _ writerRepository = (*writerRepositoryImpl)(nil)
func newWriterRepository(client *ent.Client) (writerRepository, error) {
return &writerRepositoryImpl{
client: client,
}, nil
}
func (r *writerRepositoryImpl) SaveDependencyUsage(ctx context.Context, evidence *depsusage.UsageEvidence) (*ent.DepsUsageEvidence, error) {
// Get CodeSourceFile consisting this evidence, create new if it doesn't exist
cf, err := r.client.CodeSourceFile.
Query().
Where(codesourcefile.Path(evidence.FilePath)).
Only(ctx)
if err != nil {
if ent.IsNotFound(err) {
cf, err = r.client.CodeSourceFile.
Create().
SetPath(evidence.FilePath).
Save(ctx)
if err != nil {
return nil, fmt.Errorf("failed to create CodeSourceFile: %w", err)
}
} else {
return nil, fmt.Errorf("failed to query CodeSourceFile: %w", err)
}
}
savedDepsUsageEvidence, err := r.client.DepsUsageEvidence.
Create().
SetPackageHint(evidence.PackageHint).
SetModuleName(evidence.ModuleName).
SetModuleItem(evidence.ModuleItem).
SetModuleAlias(evidence.ModuleAlias).
SetIsWildCardUsage(evidence.IsWildCardUsage).
SetIdentifier(evidence.Identifier).
SetUsageFilePath(evidence.FilePath).
SetLine(evidence.Line).
SetUsedIn(cf).
Save(ctx)
if err != nil {
return nil, fmt.Errorf("failed to create UsageEvidence: %w", err)
}
return savedDepsUsageEvidence, nil
}