stor

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 20, 2025 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrNotImplemented = fmt.Errorf("not implemented")

Functions

func IsRecordNotFound

func IsRecordNotFound(err error) bool

func WithTxRetry

func WithTxRetry(db *gorm.DB, fn func(tx *gorm.DB) error) error

Types

type ClientTransferStor added in v1.0.1

type ClientTransferStor interface {
	CreateClientTransfer(ct *mcmodel.ClientTransfer) (*mcmodel.ClientTransfer, error)
	GetOrCreateClientTransferByPath(clientUUID string, projectID, ownerID int, filePath string) (*mcmodel.ClientTransfer, *mcmodel.TransferRequestFile, error)
	UpdateClientTransfer(ct *mcmodel.ClientTransfer) (*mcmodel.ClientTransfer, error)
	CloseClientTransfer(clientTransferID int) error
	AbortClientTransfer(clientTransferID int) error
}

type ConversionStor

type ConversionStor interface {
	AddFileToConvert(file *mcmodel.File) (*mcmodel.Conversion, error)
}

type FileStor

type FileStor interface {
	GetFileByID(fileID int) (*mcmodel.File, error)
	GetFileByUUID(fileUUID string) (*mcmodel.File, error)
	UpdateMetadataForFileAndProject(file *mcmodel.File, checksum string, totalBytes int64) error
	UpdateFile(file, updates *mcmodel.File) (*mcmodel.File, error)
	SetUsesToNull(file *mcmodel.File) (*mcmodel.File, error)
	SetFileAsCurrent(file *mcmodel.File) (*mcmodel.File, error)
	CreateFile(name string, projectID, directoryID, ownerID int, mimeType string) (*mcmodel.File, error)
	GetDirByPath(projectID int, path string) (*mcmodel.File, error)
	CreateDirectory(parentDirID, projectID, ownerID int, path, name string) (*mcmodel.File, error)
	CreateDirIfNotExists(parentDirID int, path, name string, projectID, ownerID int) (*mcmodel.File, error)
	ListDirectoryByPath(projectID int, path string) ([]mcmodel.File, error)
	GetOrCreateDirPath(projectID, ownerID int, path string) (*mcmodel.File, error)
	GetFileByPath(projectID int, path string) (*mcmodel.File, error)
	UpdateFileUses(file *mcmodel.File, uuid string, fileID int) error
	PointAtExistingIfExists(file *mcmodel.File) (bool, error)
	DoneWritingToFile(file *mcmodel.File, checksum string, size int64, conversionStore ConversionStor) (bool, error)
	Root() string
}

type GlobusTransferStor

type GlobusTransferStor interface {
	CreateGlobusTransfer(globusTransfer *mcmodel.GlobusTransfer) (*mcmodel.GlobusTransfer, error)
	GetGlobusTransferByGlobusIdentityID(globusIdentityID string) (*mcmodel.GlobusTransfer, error)
}

type GormClientTransferStor added in v1.0.1

type GormClientTransferStor struct {
	// contains filtered or unexported fields
}

func NewGormClientTransferStor added in v1.0.1

func NewGormClientTransferStor(db *gorm.DB) *GormClientTransferStor

func (*GormClientTransferStor) AbortClientTransfer added in v1.0.1

func (s *GormClientTransferStor) AbortClientTransfer(clientTransferID int) error

func (*GormClientTransferStor) CloseClientTransfer added in v1.0.1

func (s *GormClientTransferStor) CloseClientTransfer(clientTransferID int) error

func (*GormClientTransferStor) CreateClientTransfer added in v1.0.1

func (s *GormClientTransferStor) CreateClientTransfer(ct *mcmodel.ClientTransfer) (*mcmodel.ClientTransfer, error)

func (*GormClientTransferStor) GetOrCreateClientTransferByPath added in v1.0.1

func (s *GormClientTransferStor) GetOrCreateClientTransferByPath(clientUUID string, projectID, ownerID int, filePath string) (*mcmodel.ClientTransfer, error)

func (*GormClientTransferStor) UpdateClientTransfer added in v1.0.1

func (s *GormClientTransferStor) UpdateClientTransfer(ct *mcmodel.ClientTransfer) (*mcmodel.ClientTransfer, error)

type GormConversionStor

type GormConversionStor struct {
	// contains filtered or unexported fields
}

func NewGormConversionStor

func NewGormConversionStor(db *gorm.DB) *GormConversionStor

func (*GormConversionStor) AddFileToConvert

func (s *GormConversionStor) AddFileToConvert(file *mcmodel.File) (*mcmodel.Conversion, error)

type GormFileStor

type GormFileStor struct {
	// contains filtered or unexported fields
}

func NewGormFileStor

func NewGormFileStor(db *gorm.DB, mcfsRoot string) *GormFileStor

func (*GormFileStor) CreateDirIfNotExists

func (s *GormFileStor) CreateDirIfNotExists(parentDirID int, path, name string, projectID, ownerID int) (*mcmodel.File, error)

func (*GormFileStor) CreateDirectory

func (s *GormFileStor) CreateDirectory(parentDirID, projectID, ownerID int, path, name string) (*mcmodel.File, error)

func (*GormFileStor) CreateFile

func (s *GormFileStor) CreateFile(name string, projectID, directoryID, ownerID int, mimeType string) (*mcmodel.File, error)

func (*GormFileStor) DoneWritingToFile

func (s *GormFileStor) DoneWritingToFile(file *mcmodel.File, checksum string, size int64, conversionStore ConversionStor) (bool, error)

DoneWritingToFile is called when a file has been opened for writing and the caller is finished writing to it. It consolidates common steps such as updating metadata, switching to point to a file that already exists with the same checksum, and queuing the file for conversion (if needed).

func (*GormFileStor) GetDirByPath

func (s *GormFileStor) GetDirByPath(projectID int, path string) (*mcmodel.File, error)

func (*GormFileStor) GetFileByID

func (s *GormFileStor) GetFileByID(fileID int) (*mcmodel.File, error)

func (*GormFileStor) GetFileByPath

func (s *GormFileStor) GetFileByPath(projectID int, path string) (*mcmodel.File, error)

func (*GormFileStor) GetFileByUUID

func (s *GormFileStor) GetFileByUUID(fileUUID string) (*mcmodel.File, error)

func (*GormFileStor) GetOrCreateDirPath

func (s *GormFileStor) GetOrCreateDirPath(projectID, ownerID int, path string) (*mcmodel.File, error)

GetOrCreateDirPath will create all entries in the directory path if the path doesn't exist

func (*GormFileStor) ListDirectoryByPath

func (s *GormFileStor) ListDirectoryByPath(projectID int, path string) ([]mcmodel.File, error)

func (*GormFileStor) PointAtExistingIfExists

func (s *GormFileStor) PointAtExistingIfExists(file *mcmodel.File) (bool, error)

func (*GormFileStor) Root added in v1.0.1

func (s *GormFileStor) Root() string

func (*GormFileStor) SetFileAsCurrent

func (s *GormFileStor) SetFileAsCurrent(file *mcmodel.File) (*mcmodel.File, error)

func (*GormFileStor) SetUsesToNull

func (s *GormFileStor) SetUsesToNull(file *mcmodel.File) (*mcmodel.File, error)

func (*GormFileStor) UpdateFile

func (s *GormFileStor) UpdateFile(file, updates *mcmodel.File) (*mcmodel.File, error)

func (*GormFileStor) UpdateFileUses

func (s *GormFileStor) UpdateFileUses(file *mcmodel.File, uuid string, fileID int) error

func (*GormFileStor) UpdateMetadataForFileAndProject

func (s *GormFileStor) UpdateMetadataForFileAndProject(file *mcmodel.File, checksum string, totalBytes int64) error

UpdateMetadataForFileAndProject updates the metadata and project meta data for a file

type GormGlobusTransferStor

type GormGlobusTransferStor struct {
	// contains filtered or unexported fields
}

func NewGormGlobusTransferStor

func NewGormGlobusTransferStor(db *gorm.DB) *GormGlobusTransferStor

func (*GormGlobusTransferStor) CreateGlobusTransfer

func (s *GormGlobusTransferStor) CreateGlobusTransfer(globusTransfer *mcmodel.GlobusTransfer) (*mcmodel.GlobusTransfer, error)

CreateGlobusTransfer creates a new GlobusTransfer, filling in the ID and UUID for the globus transfer passed in.

func (*GormGlobusTransferStor) GetGlobusTransferByGlobusIdentityID

func (s *GormGlobusTransferStor) GetGlobusTransferByGlobusIdentityID(globusIdentityID string) (*mcmodel.GlobusTransfer, error)

type GormProjectStor

type GormProjectStor struct {
	// contains filtered or unexported fields
}

func NewGormProjectStor

func NewGormProjectStor(db *gorm.DB) *GormProjectStor

func (*GormProjectStor) AddAdminToProject

func (s *GormProjectStor) AddAdminToProject(project *mcmodel.Project, user *mcmodel.User) error

func (*GormProjectStor) AddMemberToProject

func (s *GormProjectStor) AddMemberToProject(project *mcmodel.Project, user *mcmodel.User) error

func (*GormProjectStor) CreateProject

func (s *GormProjectStor) CreateProject(project *mcmodel.Project) (*mcmodel.Project, error)

func (*GormProjectStor) GetProjectByID

func (s *GormProjectStor) GetProjectByID(projectID int) (*mcmodel.Project, error)

func (*GormProjectStor) GetProjectBySlug

func (s *GormProjectStor) GetProjectBySlug(slug string) (*mcmodel.Project, error)

func (*GormProjectStor) GetProjectsForUser

func (s *GormProjectStor) GetProjectsForUser(userID int) ([]mcmodel.Project, error)

func (*GormProjectStor) UpdateProjectDirectoryCount

func (s *GormProjectStor) UpdateProjectDirectoryCount(projectID int, directoryCount int) error

func (*GormProjectStor) UpdateProjectSizeAndFileCount

func (s *GormProjectStor) UpdateProjectSizeAndFileCount(projectID int, size int64, fileCount int) error

func (*GormProjectStor) UserCanAccessProject

func (s *GormProjectStor) UserCanAccessProject(userID, projectID int) bool

type GormTransferRequestFileStor

type GormTransferRequestFileStor struct {
	// contains filtered or unexported fields
}

func NewGormTransferRequestFileStor

func NewGormTransferRequestFileStor(db *gorm.DB) *GormTransferRequestFileStor

func (*GormTransferRequestFileStor) DeleteTransferFileRequestByPath

func (s *GormTransferRequestFileStor) DeleteTransferFileRequestByPath(ownerID, projectID int, path string) error

func (*GormTransferRequestFileStor) DeleteTransferRequestFile

func (s *GormTransferRequestFileStor) DeleteTransferRequestFile(transferRequestFile *mcmodel.TransferRequestFile) error

func (*GormTransferRequestFileStor) GetTransferFileRequestByPath

func (s *GormTransferRequestFileStor) GetTransferFileRequestByPath(ownerID, projectID int, path string) (*mcmodel.TransferRequestFile, error)

func (*GormTransferRequestFileStor) GetTransferRequestFileByPathForTransferRequest

func (s *GormTransferRequestFileStor) GetTransferRequestFileByPathForTransferRequest(path string, transferRequest *mcmodel.TransferRequest) (*mcmodel.TransferRequestFile, error)

type GormTransferRequestStor

type GormTransferRequestStor struct {
	// contains filtered or unexported fields
}

func NewGormTransferRequestStor

func NewGormTransferRequestStor(db *gorm.DB, mcfsRoot string) *GormTransferRequestStor

func (*GormTransferRequestStor) CloseTransferRequestByUUID

func (s *GormTransferRequestStor) CloseTransferRequestByUUID(transferUUID string) error

func (*GormTransferRequestStor) CreateNewFile

func (s *GormTransferRequestStor) CreateNewFile(file, dir *mcmodel.File, transferRequest *mcmodel.TransferRequest) (*mcmodel.File, *mcmodel.TransferRequestFile, error)

func (*GormTransferRequestStor) CreateNewFileVersion

func (s *GormTransferRequestStor) CreateNewFileVersion(file, dir *mcmodel.File, transferRequest *mcmodel.TransferRequest) (*mcmodel.File, error)

func (*GormTransferRequestStor) CreateTransferRequest

func (s *GormTransferRequestStor) CreateTransferRequest(tr *mcmodel.TransferRequest) (*mcmodel.TransferRequest, error)

CreateTransferRequest creates a new TransferRequest, filling in the ID and UUID for the transfer request passed in.

func (*GormTransferRequestStor) GetFileByPath

func (s *GormTransferRequestStor) GetFileByPath(path string, transferRequest *mcmodel.TransferRequest) (*mcmodel.File, error)

func (*GormTransferRequestStor) GetTransferRequestByUUID

func (s *GormTransferRequestStor) GetTransferRequestByUUID(transferUUID string) (*mcmodel.TransferRequest, error)

func (*GormTransferRequestStor) GetTransferRequestForProjectAndUser

func (s *GormTransferRequestStor) GetTransferRequestForProjectAndUser(projectID, userID int) (*mcmodel.TransferRequest, error)

func (*GormTransferRequestStor) GetTransferRequestsForProject

func (s *GormTransferRequestStor) GetTransferRequestsForProject(projectID int) ([]mcmodel.TransferRequest, error)

func (*GormTransferRequestStor) ListDirectory

func (s *GormTransferRequestStor) ListDirectory(dir *mcmodel.File, transferRequest *mcmodel.TransferRequest) ([]mcmodel.File, error)

func (*GormTransferRequestStor) ListTransferRequests

func (s *GormTransferRequestStor) ListTransferRequests() ([]mcmodel.TransferRequest, error)

ListTransferRequests returns the list of all active transfer requests. An active transfer request has its state set to "open".

func (*GormTransferRequestStor) MarkFileAsOpen

func (s *GormTransferRequestStor) MarkFileAsOpen(file *mcmodel.File) error

func (*GormTransferRequestStor) MarkFileReleased

func (s *GormTransferRequestStor) MarkFileReleased(file *mcmodel.File, checksum string, projectID int, totalBytes int64) error

MarkFileReleased should only be called for files that were created or opened with the Write flag set.

type GormUserStor

type GormUserStor struct {
	// contains filtered or unexported fields
}

func NewGormUserStor

func NewGormUserStor(db *gorm.DB) *GormUserStor

func (*GormUserStor) CreateUser

func (s *GormUserStor) CreateUser(user *mcmodel.User) (*mcmodel.User, error)

CreateUser creates a new user.

func (*GormUserStor) GetUserByAPIToken

func (s *GormUserStor) GetUserByAPIToken(apitoken string) (*mcmodel.User, error)

func (*GormUserStor) GetUserByEmail

func (s *GormUserStor) GetUserByEmail(email string) (*mcmodel.User, error)

func (*GormUserStor) GetUserBySlug

func (s *GormUserStor) GetUserBySlug(slug string) (*mcmodel.User, error)

func (*GormUserStor) GetUsersWithGlobusAccount

func (s *GormUserStor) GetUsersWithGlobusAccount() ([]mcmodel.User, error)

type MockFileStor added in v1.0.1

type MockFileStor struct {
	// contains filtered or unexported fields
}

MockFileStor implements the FileStor interface for testing

func NewMockFileStor added in v1.0.1

func NewMockFileStor() *MockFileStor

NewMockFileStor creates a new MockFileStor with a temporary directory for testing

func (*MockFileStor) Cleanup added in v1.0.1

func (m *MockFileStor) Cleanup()

Cleanup removes the temporary directory created for testing

func (*MockFileStor) CreateDirIfNotExists added in v1.0.1

func (m *MockFileStor) CreateDirIfNotExists(parentDirID int, path, name string, projectID, ownerID int) (*mcmodel.File, error)

CreateDirIfNotExists creates a directory if it doesn't exist

func (*MockFileStor) CreateDirectory added in v1.0.1

func (m *MockFileStor) CreateDirectory(parentDirID, projectID, ownerID int, path, name string) (*mcmodel.File, error)

CreateDirectory creates a new directory

func (*MockFileStor) CreateFile added in v1.0.1

func (m *MockFileStor) CreateFile(name string, projectID, directoryID, ownerID int, mimeType string) (*mcmodel.File, error)

CreateFile creates a new file in the specified directory

func (*MockFileStor) DoneWritingToFile added in v1.0.1

func (m *MockFileStor) DoneWritingToFile(file *mcmodel.File, checksum string, size int64, conversionStore ConversionStor) (bool, error)

DoneWritingToFile marks a file as done writing

func (*MockFileStor) GetDirByPath added in v1.0.1

func (m *MockFileStor) GetDirByPath(projectID int, path string) (*mcmodel.File, error)

GetDirByPath retrieves a directory by its path

func (*MockFileStor) GetFileByID added in v1.0.1

func (m *MockFileStor) GetFileByID(fileID int) (*mcmodel.File, error)

GetFileByID retrieves a file by its ID

func (*MockFileStor) GetFileByPath added in v1.0.1

func (m *MockFileStor) GetFileByPath(projectID int, path string) (*mcmodel.File, error)

GetFileByPath retrieves a file by its path and project ID

func (*MockFileStor) GetFileByUUID added in v1.0.1

func (m *MockFileStor) GetFileByUUID(fileUUID string) (*mcmodel.File, error)

GetFileByUUID retrieves a file by its UUID

func (*MockFileStor) GetOrCreateDirPath added in v1.0.1

func (m *MockFileStor) GetOrCreateDirPath(projectID, ownerID int, path string) (*mcmodel.File, error)

GetOrCreateDirPath gets an existing directory or creates a new one if it doesn't exist

func (*MockFileStor) ListDirectoryByPath added in v1.0.1

func (m *MockFileStor) ListDirectoryByPath(projectID int, path string) ([]mcmodel.File, error)

ListDirectoryByPath lists files in a directory

func (*MockFileStor) PointAtExistingIfExists added in v1.0.1

func (m *MockFileStor) PointAtExistingIfExists(file *mcmodel.File) (bool, error)

PointAtExistingIfExists points at an existing file if it exists

func (*MockFileStor) Root added in v1.0.1

func (m *MockFileStor) Root() string

Root returns the root directory for the mock file system

func (*MockFileStor) SetFileAsCurrent added in v1.0.1

func (m *MockFileStor) SetFileAsCurrent(file *mcmodel.File) (*mcmodel.File, error)

SetFileAsCurrent marks a file as current

func (*MockFileStor) SetUsesToNull added in v1.0.1

func (m *MockFileStor) SetUsesToNull(file *mcmodel.File) (*mcmodel.File, error)

SetUsesToNull sets the uses fields to null

func (*MockFileStor) UpdateFile added in v1.0.1

func (m *MockFileStor) UpdateFile(file, updates *mcmodel.File) (*mcmodel.File, error)

UpdateFile updates a file with the provided updates

func (*MockFileStor) UpdateFileUses added in v1.0.1

func (m *MockFileStor) UpdateFileUses(file *mcmodel.File, uuid string, fileID int) error

UpdateFileUses updates the uses fields of a file

func (*MockFileStor) UpdateMetadataForFileAndProject added in v1.0.1

func (m *MockFileStor) UpdateMetadataForFileAndProject(file *mcmodel.File, checksum string, totalBytes int64) error

UpdateMetadataForFileAndProject updates file metadata

type ProjectStor

type ProjectStor interface {
	CreateProject(project *mcmodel.Project) (*mcmodel.Project, error)
	GetProjectByID(projectID int) (*mcmodel.Project, error)
	GetProjectBySlug(slug string) (*mcmodel.Project, error)
	GetProjectsForUser(userID int) ([]mcmodel.Project, error)
	UpdateProjectSizeAndFileCount(projectID int, size int64, fileCount int) error
	UpdateProjectDirectoryCount(projectID int, directoryCount int) error
	UserCanAccessProject(userID, projectID int) bool
	AddMemberToProject(project *mcmodel.Project, user *mcmodel.User) error
	AddAdminToProject(project *mcmodel.Project, user *mcmodel.User) error
}

type Stors

type Stors struct {
	ConversionStor          ConversionStor
	FileStor                FileStor
	ProjectStor             ProjectStor
	TransferRequestFileStor TransferRequestFileStor
	TransferRequestStor     TransferRequestStor
	GlobusTransferStor      GlobusTransferStor
	UserStor                UserStor
	ClientTransferStor      ClientTransferStor
}

func NewGormStors

func NewGormStors(db *gorm.DB, mcfsRoot string) *Stors

type TransferRequestFileStor

type TransferRequestFileStor interface {
	DeleteTransferFileRequestByPath(ownerID, projectID int, path string) error
	GetTransferFileRequestByPath(ownerID, projectID int, path string) (*mcmodel.TransferRequestFile, error)
	GetTransferRequestFileByPathForTransferRequest(path string, transferRequest *mcmodel.TransferRequest) (*mcmodel.TransferRequestFile, error)
	DeleteTransferRequestFile(transferRequestFile *mcmodel.TransferRequestFile) error
}

type TransferRequestStor

type TransferRequestStor interface {
	CreateTransferRequest(tr *mcmodel.TransferRequest) (*mcmodel.TransferRequest, error)
	ListTransferRequests() ([]mcmodel.TransferRequest, error)
	MarkFileReleased(file *mcmodel.File, checksum string, projectID int, totalBytes int64) error
	MarkFileAsOpen(file *mcmodel.File) error
	CreateNewFile(file, dir *mcmodel.File, transferRequest *mcmodel.TransferRequest) (*mcmodel.File, *mcmodel.TransferRequestFile, error)
	CreateNewFileVersion(file, dir *mcmodel.File, transferRequest *mcmodel.TransferRequest) (*mcmodel.File, error)
	ListDirectory(dir *mcmodel.File, transferRequest *mcmodel.TransferRequest) ([]mcmodel.File, error)
	GetFileByPath(path string, transferRequest *mcmodel.TransferRequest) (*mcmodel.File, error)
	GetTransferRequestForProjectAndUser(projectID, userID int) (*mcmodel.TransferRequest, error)
	GetTransferRequestsForProject(projectID int) ([]mcmodel.TransferRequest, error)
	GetTransferRequestByUUID(transferUUID string) (*mcmodel.TransferRequest, error)
	CloseTransferRequestByUUID(transferUUID string) error
}

type UserStor

type UserStor interface {
	CreateUser(user *mcmodel.User) (*mcmodel.User, error)
	GetUsersWithGlobusAccount() ([]mcmodel.User, error)
	GetUserBySlug(slug string) (*mcmodel.User, error)
	GetUserByEmail(email string) (*mcmodel.User, error)
	GetUserByAPIToken(apitoken string) (*mcmodel.User, error)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL