Fix fulfill missing upload

Signed-off-by: gearnode <bryan@frimin.fr>
This commit is contained in:
gearnode
2025-04-02 11:54:48 +02:00
parent 1988d64787
commit fd9442f6a3
7 changed files with 110 additions and 7 deletions

View File

@@ -1,5 +1,5 @@
/** /**
* @generated SignedSource<<c12714c0dab6d31865a2b49936566f05>> * @generated SignedSource<<c502368227307b9e9780b67691ec45a1>>
* @lightSyntaxTransform * @lightSyntaxTransform
* @nogrep * @nogrep
*/ */
@@ -14,6 +14,7 @@ export type EvidenceType = "FILE" | "LINK";
export type FulfillEvidenceInput = { export type FulfillEvidenceInput = {
evidenceId: string; evidenceId: string;
file?: any | null | undefined; file?: any | null | undefined;
name?: string | null | undefined;
url?: string | null | undefined; url?: string | null | undefined;
}; };
export type MitigationViewFulfillEvidenceMutation$variables = { export type MitigationViewFulfillEvidenceMutation$variables = {

View File

@@ -210,6 +210,49 @@ WHERE
return nil return nil
} }
func (e Evidence) Update(
ctx context.Context,
conn pg.Conn,
scope Scoper,
) error {
q := `
UPDATE
evidences
SET
type = @type,
state = @state,
object_key = @object_key,
mime_type = @mime_type,
size = @size,
filename = @filename,
url = @url,
description = @description,
updated_at = @updated_at
WHERE
%s
AND id = @evidence_id
`
q = fmt.Sprintf(q, scope.SQLFragment())
args := pgx.StrictNamedArgs{
"evidence_id": e.ID,
"type": e.Type,
"state": e.State,
"object_key": e.ObjectKey,
"mime_type": e.MimeType,
"size": e.Size,
"filename": e.Filename,
"url": e.URL,
"description": e.Description,
"updated_at": e.UpdatedAt,
}
maps.Copy(args, scope.SQLArguments())
_, err := conn.Exec(ctx, q, args)
return err
}
func (e Evidence) Delete( func (e Evidence) Delete(
ctx context.Context, ctx context.Context,
conn pg.Conn, conn pg.Conn,

View File

@@ -47,7 +47,8 @@ type (
FulfilledEvidenceRequest struct { FulfilledEvidenceRequest struct {
EvidenceID gid.GID EvidenceID gid.GID
File io.Reader File io.Reader
URL string URL *string
Filename *string
} }
CreateEvidenceRequest struct { CreateEvidenceRequest struct {
@@ -131,10 +132,59 @@ func (s EvidenceService) Fulfill(
evidence.State = coredata.EvidenceStateFulfilled evidence.State = coredata.EvidenceStateFulfilled
if req.File != nil {
evidence.Type = coredata.EvidenceTypeFile
contentType := "application/octet-stream"
if req.Filename != nil {
evidence.Filename = *req.Filename
if detectedType := mime.TypeByExtension(filepath.Ext(*req.Filename)); detectedType != "" {
contentType = detectedType
}
}
objectKey, err := uuid.NewV7()
if err != nil {
return fmt.Errorf("cannot generate object key: %w", err)
}
_, err = s.svc.s3.PutObject(ctx, &s3.PutObjectInput{
Bucket: aws.String(s.svc.bucket),
Key: aws.String(objectKey.String()),
Body: req.File,
ContentType: aws.String(contentType),
})
if err != nil {
return fmt.Errorf("cannot upload file to S3: %w", err)
}
headOutput, err := s.svc.s3.HeadObject(ctx, &s3.HeadObjectInput{
Bucket: aws.String(s.svc.bucket),
Key: aws.String(objectKey.String()),
})
if err != nil {
return fmt.Errorf("cannot get object metadata: %w", err)
}
evidence.ObjectKey = objectKey.String()
evidence.MimeType = contentType
evidence.Size = uint64(*headOutput.ContentLength)
} else if req.URL != nil {
evidence.Type = coredata.EvidenceTypeLink
evidence.URL = *req.URL
}
evidence.UpdatedAt = time.Now()
return evidence.Update(ctx, conn, s.svc.scope) return evidence.Update(ctx, conn, s.svc.scope)
}, },
) )
if err != nil {
return nil, fmt.Errorf("cannot update evidence: %w", err)
}
return evidence, nil
} }
func (s EvidenceService) Create( func (s EvidenceService) Create(
@@ -172,7 +222,7 @@ func (s EvidenceService) Create(
return nil, fmt.Errorf("cannot generate object key: %w", err) return nil, fmt.Errorf("cannot generate object key: %w", err)
} }
putObjectOutput, err := s.svc.s3.PutObject(ctx, &s3.PutObjectInput{ _, err = s.svc.s3.PutObject(ctx, &s3.PutObjectInput{
Bucket: aws.String(s.svc.bucket), Bucket: aws.String(s.svc.bucket),
Key: aws.String(objectKey.String()), Key: aws.String(objectKey.String()),
Body: req.File, Body: req.File,
@@ -190,8 +240,6 @@ func (s EvidenceService) Create(
return nil, fmt.Errorf("cannot get object metadata: %w", err) return nil, fmt.Errorf("cannot get object metadata: %w", err)
} }
fmt.Println("putObjectOutput", putObjectOutput)
evidence.ObjectKey = objectKey.String() evidence.ObjectKey = objectKey.String()
evidence.MimeType = contentType evidence.MimeType = contentType
evidence.Size = uint64(*headOutput.ContentLength) evidence.Size = uint64(*headOutput.ContentLength)

View File

@@ -948,6 +948,7 @@ input RequestEvidenceInput {
input FulfillEvidenceInput { input FulfillEvidenceInput {
evidenceId: ID! evidenceId: ID!
name: String
file: Upload file: Upload
url: String url: String
} }

View File

@@ -3579,6 +3579,7 @@ input RequestEvidenceInput {
input FulfillEvidenceInput { input FulfillEvidenceInput {
evidenceId: ID! evidenceId: ID!
name: String
file: Upload file: Upload
url: String url: String
} }
@@ -20868,7 +20869,7 @@ func (ec *executionContext) unmarshalInputFulfillEvidenceInput(ctx context.Conte
asMap[k] = v asMap[k] = v
} }
fieldsInOrder := [...]string{"evidenceId", "file", "url"} fieldsInOrder := [...]string{"evidenceId", "name", "file", "url"}
for _, k := range fieldsInOrder { for _, k := range fieldsInOrder {
v, ok := asMap[k] v, ok := asMap[k]
if !ok { if !ok {
@@ -20882,6 +20883,13 @@ func (ec *executionContext) unmarshalInputFulfillEvidenceInput(ctx context.Conte
return it, err return it, err
} }
it.EvidenceID = data it.EvidenceID = data
case "name":
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("name"))
data, err := ec.unmarshalOString2ᚖstring(ctx, v)
if err != nil {
return it, err
}
it.Name = data
case "file": case "file":
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("file")) ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("file"))
data, err := ec.unmarshalOUpload2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚐUpload(ctx, v) data, err := ec.unmarshalOUpload2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚐUpload(ctx, v)

View File

@@ -321,6 +321,7 @@ type FrameworkEdge struct {
type FulfillEvidenceInput struct { type FulfillEvidenceInput struct {
EvidenceID gid.GID `json:"evidenceId"` EvidenceID gid.GID `json:"evidenceId"`
Name *string `json:"name,omitempty"`
File *graphql.Upload `json:"file,omitempty"` File *graphql.Upload `json:"file,omitempty"`
URL *string `json:"url,omitempty"` URL *string `json:"url,omitempty"`
} }

View File

@@ -750,10 +750,11 @@ func (r *mutationResolver) FulfillEvidence(ctx context.Context, input types.Fulf
if input.File != nil { if input.File != nil {
req.File = input.File.File req.File = input.File.File
req.Filename = &input.File.Filename
} }
if input.URL != nil { if input.URL != nil {
req.URL = *input.URL req.URL = input.URL
} }
evidence, err := svc.Evidences.Fulfill(ctx, req) evidence, err := svc.Evidences.Fulfill(ctx, req)