build out cli and add size and gather functionality

This commit is contained in:
2024-06-05 00:03:05 -06:00
parent 6507518cd7
commit b3bbd2e5d1
11 changed files with 254 additions and 48 deletions

View File

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