[server] Clean up

This commit is contained in:
Neeraj Gupta
2024-09-04 14:39:36 +05:30
parent 8c3c401efb
commit c2e53c6ec9
5 changed files with 11 additions and 41 deletions

View File

@@ -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 {

View File

@@ -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))
}

View File

@@ -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)

View File

@@ -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,

View File

@@ -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 {