@@ -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 = {
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -948,6 +948,7 @@ input RequestEvidenceInput {
|
|||||||
|
|
||||||
input FulfillEvidenceInput {
|
input FulfillEvidenceInput {
|
||||||
evidenceId: ID!
|
evidenceId: ID!
|
||||||
|
name: String
|
||||||
file: Upload
|
file: Upload
|
||||||
url: String
|
url: String
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user