Files
athens/pkg/storage/mongo/saver.go

46 lines
1023 B
Go

package mongo
import (
"context"
"io"
"github.com/gomods/athens/pkg/errors"
"github.com/gomods/athens/pkg/observ"
"github.com/gomods/athens/pkg/storage"
)
// Save stores a module in mongo storage.
func (s *ModuleStore) Save(ctx context.Context, module, version string, mod []byte, zip io.Reader, info []byte) error {
const op errors.Op = "mongo.Save"
ctx, span := observ.StartSpan(ctx, op.String())
defer span.End()
zipName := s.gridFileName(module, version)
fs := s.s.DB(s.d).GridFS("fs")
f, err := fs.Create(zipName)
if err != nil {
return errors.E(op, err, errors.M(module), errors.V(version))
}
defer f.Close()
_, err = io.Copy(f, zip) // check number of bytes written?
if err != nil {
return errors.E(op, err, errors.M(module), errors.V(version))
}
m := &storage.Module{
Module: module,
Version: version,
Mod: mod,
Info: info,
}
c := s.s.DB(s.d).C(s.c)
err = c.Insert(m)
if err != nil {
return errors.E(op, err, errors.M(module), errors.V(version))
}
return nil
}