Files
query-orchestration/internal/document/upload/get.go
T
Michael McGuinness cc2278086f Merged in feature/import (pull request #157)
Feature/import

* importstart

* pp

* tests

* importtests

* 100GB

* lint

* passtests

* utc

* awsprofile

* doublequotes

* host
2025-05-27 15:28:46 +00:00

74 lines
1.5 KiB
Go

package documentupload
import (
"context"
"io"
"time"
"queryorchestration/internal/database/repository"
"queryorchestration/internal/serviceconfig/objectstore"
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgtype"
)
type File struct {
ClientID string
Content io.Reader
}
func (s *Service) Upload(ctx context.Context, file File) error {
return s.cfg.ExecuteDBTransaction(ctx, func(ctx context.Context, q *repository.Queries) error {
now := time.Now().UTC()
part, err := s.cfg.GetDBQueries().GetDocumentUploadCurrentPart(ctx, &repository.GetDocumentUploadCurrentPartParams{
Clientid: &file.ClientID,
Querydate: pgtype.Timestamptz{
Valid: true,
Time: now,
},
})
if err != nil {
return err
}
uploadId := uuid.New()
newPart := s.cfg.GetDirectoryPart(part.Part, part.Count)
key := objectstore.BucketKey{
ClientID: file.ClientID,
Location: objectstore.Import,
CreatedAt: now,
EntityID: uploadId,
Part: &newPart,
}
keyStr := key.String()
bucket := s.cfg.GetBucket()
err = q.AddDocumentUpload(ctx, &repository.AddDocumentUploadParams{
ID: uploadId,
Clientid: file.ClientID,
Bucket: bucket,
Key: keyStr,
Part: newPart,
Createdat: pgtype.Timestamp{
Valid: true,
Time: now,
},
})
if err != nil {
return err
}
_, err = s.cfg.GetStoreClient().PutObject(ctx, &s3.PutObjectInput{
Bucket: &bucket,
Key: &keyStr,
Body: file.Content,
})
if err != nil {
return err
}
return nil
})
}