build out cli and add size and gather functionality
This commit is contained in:
37
db/db.go
37
db/db.go
@ -17,6 +17,7 @@ type DB interface {
|
||||
Migrate() error
|
||||
StoreFile(fileMetadata types.FileMetadata) error
|
||||
RemoveFile(fileMetadata types.FileMetadata) error
|
||||
StoreFilePartition(fileMetadata types.FileMetadata) error
|
||||
GetTotalSize() (int64, error)
|
||||
GetFileCount() (int64, error)
|
||||
GetFiles() ([]types.FileMetadata, error)
|
||||
@ -41,7 +42,8 @@ var migrations = []Migrations{
|
||||
size INTEGER NOT NULL,
|
||||
hash TEXT NOT NULL,
|
||||
modifiedDate TIMESTAMP NOT NULL,
|
||||
backedUp BOOLEAN NOT NULL
|
||||
backedUp BOOLEAN NOT NULL,
|
||||
partitionId TEXT DEFAULT ''
|
||||
)`,
|
||||
},
|
||||
{
|
||||
@ -64,6 +66,16 @@ func NewDB(appName string) (DB, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func DeleteDB(appName string) error {
|
||||
configPath := configdir.LocalConfig(appName)
|
||||
dbPath := path.Join(configPath, "db", fmt.Sprintf("%v.db", appName))
|
||||
err := os.Remove(dbPath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error deleting db | %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *store) StoreFile(fileMetadata types.FileMetadata) error {
|
||||
query := `INSERT INTO files (name, path, size, hash, modifiedDate, backedUp) VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT (name, path, hash) DO UPDATE SET size = ?, modifiedDate = ?, backedUp = ?`
|
||||
_, err := d.db.Exec(
|
||||
@ -93,6 +105,21 @@ func (d *store) RemoveFile(fileMetadata types.FileMetadata) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *store) StoreFilePartition(fileMetadata types.FileMetadata) error {
|
||||
query := `UPDATE files SET partitionId = ? WHERE name = ? AND path = ? AND hash = ?`
|
||||
_, err := d.db.Exec(
|
||||
query,
|
||||
fileMetadata.PartitionId,
|
||||
fileMetadata.Name,
|
||||
fileMetadata.Path,
|
||||
fileMetadata.Hash,
|
||||
)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error storing file's partiition | %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (d *store) GetTotalSize() (int64, error) {
|
||||
var size int64
|
||||
query := `SELECT SUM(size) FROM files`
|
||||
@ -115,7 +142,7 @@ func (d *store) GetFileCount() (int64, error) {
|
||||
|
||||
func (d *store) GetFiles() ([]types.FileMetadata, error) {
|
||||
var files []types.FileMetadata
|
||||
query := `SELECT name, path, size, hash, modifiedDate, backedUp FROM files order by path, name`
|
||||
query := `SELECT name, path, size, hash, modifiedDate, backedUp, partitionId FROM files order by path, name`
|
||||
rows, err := d.db.Query(query)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error getting files | %w", err)
|
||||
@ -123,7 +150,7 @@ func (d *store) GetFiles() ([]types.FileMetadata, error) {
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var file types.FileMetadata
|
||||
err := rows.Scan(&file.Name, &file.Path, &file.Size, &file.Hash, &file.ModifiedDate, &file.BackedUp)
|
||||
err := rows.Scan(&file.Name, &file.Path, &file.Size, &file.Hash, &file.ModifiedDate, &file.BackedUp, &file.PartitionId)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error scanning file | %w", err)
|
||||
}
|
||||
@ -179,7 +206,7 @@ func createDBFileIfNotExist(appName string) (string, error) {
|
||||
// set up the config directory
|
||||
err := configdir.MakePath(configPath)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return "", fmt.Errorf("error creating config directory: %w", err)
|
||||
}
|
||||
|
||||
dbDirectoryPath := path.Join(configPath, "db")
|
||||
@ -187,7 +214,7 @@ func createDBFileIfNotExist(appName string) (string, error) {
|
||||
// Set up the database
|
||||
err = configdir.MakePath(dbDirectoryPath)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return "", fmt.Errorf("error creating db directory: %w", err)
|
||||
}
|
||||
|
||||
// If the file doesn't exist, create it, or append to the file
|
||||
|
Reference in New Issue
Block a user