[server] Clean up
This commit is contained in:
@@ -61,6 +61,7 @@ type S3FileMetadata struct {
|
||||
type GetPreviewURLRequest struct {
|
||||
FileID int64 `form:"fileID" binding:"required"`
|
||||
Type ente.ObjectType `form:"type" binding:"required"`
|
||||
Suffix *string `form:"suffix"`
|
||||
}
|
||||
|
||||
func (g *GetPreviewURLRequest) Validate() error {
|
||||
|
||||
@@ -10,33 +10,17 @@ type PutFileDataRequest struct {
|
||||
Type ente.ObjectType `json:"type" binding:"required"`
|
||||
EncryptedData *string `json:"encryptedData,omitempty"`
|
||||
DecryptionHeader *string `json:"decryptionHeader,omitempty"`
|
||||
// ObjectKey is the key of the object in the S3 bucket. This is needed while putting the object in the S3 bucket.
|
||||
ObjectKey *string `json:"objectKey,omitempty"`
|
||||
// size of the object that is being uploaded. This helps in checking the size of the object that is being uploaded.
|
||||
ObjectSize *int64 `json:"objectSize,omitempty"`
|
||||
Version *int `json:"version,omitempty"`
|
||||
Version *int `json:"version,omitempty"`
|
||||
}
|
||||
|
||||
func (r PutFileDataRequest) isEncDataPresent() bool {
|
||||
return r.EncryptedData != nil && r.DecryptionHeader != nil && *r.EncryptedData != "" && *r.DecryptionHeader != ""
|
||||
}
|
||||
|
||||
func (r PutFileDataRequest) isObjectDataPresent() bool {
|
||||
return r.ObjectKey != nil && *r.ObjectKey != "" && r.ObjectSize != nil && *r.ObjectSize > 0
|
||||
}
|
||||
|
||||
func (r PutFileDataRequest) Validate() error {
|
||||
switch r.Type {
|
||||
case ente.PreviewVideo:
|
||||
if !r.isEncDataPresent() || !r.isObjectDataPresent() {
|
||||
return ente.NewBadRequestWithMessage("object and metadata are required")
|
||||
}
|
||||
case ente.PreviewImage:
|
||||
if !r.isObjectDataPresent() || r.isEncDataPresent() {
|
||||
return ente.NewBadRequestWithMessage("object (only) data is required for preview image")
|
||||
}
|
||||
case ente.MlData:
|
||||
if !r.isEncDataPresent() || r.isObjectDataPresent() {
|
||||
if !r.isEncDataPresent() {
|
||||
return ente.NewBadRequestWithMessage("encryptedData and decryptionHeader (only) are required for derived meta")
|
||||
}
|
||||
default:
|
||||
@@ -49,18 +33,10 @@ func (r PutFileDataRequest) S3FileMetadataObjectKey(ownerID int64) string {
|
||||
if r.Type == ente.MlData {
|
||||
return derivedMetaPath(r.FileID, ownerID)
|
||||
}
|
||||
if r.Type == ente.PreviewVideo {
|
||||
return previewVideoPlaylist(r.FileID, ownerID)
|
||||
}
|
||||
|
||||
panic(fmt.Sprintf("S3FileMetadata should not be written for %s type", r.Type))
|
||||
}
|
||||
|
||||
func (r PutFileDataRequest) S3FileObjectKey(ownerID int64) string {
|
||||
if r.Type == ente.PreviewVideo {
|
||||
return previewVideoPath(r.FileID, ownerID)
|
||||
}
|
||||
if r.Type == ente.PreviewImage {
|
||||
return previewImagePath(r.FileID, ownerID)
|
||||
}
|
||||
panic(fmt.Sprintf("S3FileObjectKey should not be written for %s type", r.Type))
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ func (h *FileHandler) PutFileData(ctx *gin.Context) {
|
||||
version := 1
|
||||
reqInt.Version = &version
|
||||
}
|
||||
err := h.FileDataCtrl.InsertOrUpdate(ctx, &req)
|
||||
err := h.FileDataCtrl.InsertOrUpdateMetadata(ctx, &req)
|
||||
if err != nil {
|
||||
handler.Error(ctx, err)
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import (
|
||||
"github.com/ente-io/stacktrace"
|
||||
"github.com/gin-gonic/gin"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"strings"
|
||||
"sync"
|
||||
gTime "time"
|
||||
)
|
||||
@@ -75,7 +74,7 @@ func New(repo *fileDataRepo.Repository,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Controller) InsertOrUpdate(ctx *gin.Context, req *fileData.PutFileDataRequest) error {
|
||||
func (c *Controller) InsertOrUpdateMetadata(ctx *gin.Context, req *fileData.PutFileDataRequest) error {
|
||||
if err := req.Validate(); err != nil {
|
||||
return stacktrace.Propagate(err, "validation failed")
|
||||
}
|
||||
@@ -84,21 +83,11 @@ func (c *Controller) InsertOrUpdate(ctx *gin.Context, req *fileData.PutFileDataR
|
||||
if err != nil {
|
||||
return stacktrace.Propagate(err, "")
|
||||
}
|
||||
if req.Type != ente.MlData && req.Type != ente.PreviewVideo {
|
||||
if req.Type != ente.MlData {
|
||||
return stacktrace.Propagate(ente.NewBadRequestWithMessage("unsupported object type "+string(req.Type)), "")
|
||||
}
|
||||
fileOwnerID := userID
|
||||
bucketID := c.S3Config.GetBucketID(req.Type)
|
||||
if req.Type == ente.PreviewVideo {
|
||||
fileObjectKey := req.S3FileObjectKey(fileOwnerID)
|
||||
if !strings.Contains(*req.ObjectKey, fileObjectKey) {
|
||||
return stacktrace.Propagate(ente.NewBadRequestWithMessage("objectKey should contain the file object key"), "")
|
||||
}
|
||||
err = c.copyObject(*req.ObjectKey, fileObjectKey, bucketID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
objectKey := req.S3FileMetadataObjectKey(fileOwnerID)
|
||||
obj := fileData.S3FileMetadata{
|
||||
Version: *req.Version,
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/ente-io/museum/ente"
|
||||
"github.com/ente-io/museum/ente/filedata"
|
||||
fileDataRepo "github.com/ente-io/museum/pkg/repo/filedata"
|
||||
enteTime "github.com/ente-io/museum/pkg/utils/time"
|
||||
@@ -79,6 +80,9 @@ func (c *Controller) deleteFileRow(fileDataRow filedata.Row) error {
|
||||
panic(fmt.Sprintf("file %d does not belong to user %d", fileID, ownerID))
|
||||
}
|
||||
ctxLogger := log.WithField("file_id", fileDataRow.DeleteFromBuckets).WithField("type", fileDataRow.Type).WithField("user_id", fileDataRow.UserID)
|
||||
if fileDataRow.Type != ente.MlData {
|
||||
panic(fmt.Sprintf("unsupported object type for filedata deletion %s", fileDataRow.Type))
|
||||
}
|
||||
objectKeys := filedata.AllObjects(fileID, ownerID, fileDataRow.Type)
|
||||
bucketColumnMap, err := getMapOfBucketItToColumn(fileDataRow)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user