github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/sys/blobber/provide.go (about)

     1  /*
     2   * Copyright (c) 2022-present unTill Pro, Ltd.
     3   */
     4  
     5  package blobber
     6  
     7  import (
     8  	"github.com/voedger/voedger/pkg/appdef"
     9  	"github.com/voedger/voedger/pkg/iblobstorage"
    10  	"github.com/voedger/voedger/pkg/istructs"
    11  	"github.com/voedger/voedger/pkg/istructsmem"
    12  	"github.com/voedger/voedger/pkg/state"
    13  )
    14  
    15  func ProvideBlobberCmds(cfg *istructsmem.AppConfigType) {
    16  	provideUploadBLOBHelperCmd(cfg)
    17  	provideDownloadBLOBHelperCmd(cfg)
    18  }
    19  
    20  func provideDownloadBLOBHelperCmd(cfg *istructsmem.AppConfigType) {
    21  	dbhQName := appdef.NewQName(appdef.SysPackage, "DownloadBLOBHelper")
    22  
    23  	// this command does nothing. It is called to check Authorization token provided in header only
    24  	downloadBLOBHelperCmd := istructsmem.NewCommandFunction(dbhQName, istructsmem.NullCommandExec)
    25  	cfg.Resources.Add(downloadBLOBHelperCmd)
    26  }
    27  
    28  func provideUploadBLOBHelperCmd(cfg *istructsmem.AppConfigType) {
    29  	uploadBLOBHelperCmd := istructsmem.NewCommandFunction(QNameCommandUploadBLOBHelper, ubhExec)
    30  	cfg.Resources.Add(uploadBLOBHelperCmd)
    31  }
    32  
    33  func ubhExec(args istructs.ExecCommandArgs) (err error) {
    34  	// write a dummy WDoc<BLOB> to book an ID and then use it as a new BLOB ID
    35  	kb, err := args.State.KeyBuilder(state.Record, QNameWDocBLOB)
    36  	if err != nil {
    37  		return
    38  	}
    39  	vb, err := args.Intents.NewValue(kb)
    40  	if err != nil {
    41  		return
    42  	}
    43  	vb.PutRecordID(appdef.SystemField_ID, 1)
    44  	vb.PutInt32(fldStatus, int32(iblobstorage.BLOBStatus_Unknown))
    45  	return nil
    46  }