github.com/code-to-go/safepool.lib@v0.0.0-20221205180519-ee25e63c226e/sql/files.go2 (about)

     1  package sql
     2  
     3  import (
     4  	"database/sql"
     5  	"github.com/code-to-go/safepool.lib/core"
     6  	"github.com/code-to-go/safepool.lib/model"
     7  
     8  	"github.com/sirupsen/logrus"
     9  )
    10  
    11  func getFiles(rows *sql.Rows) []model.File {
    12  	var files []model.File
    13  	for rows.Next() {
    14  		var file model.File
    15  
    16  		var author string
    17  		var hash string
    18  		var modTime int64
    19  		err := rows.Scan(&file.Domain, &file.Name, &file.Id, &author, &modTime, &file.State, &hash)
    20  		if !core.IsErr(err, "cannot read file row from db: %v") {
    21  			file.ModTime = DecodeTime(modTime)
    22  			//			file.Author, _ = security.IdentityFromBase64(author)
    23  			file.Hash = DecodeBase64(hash)
    24  			files = append(files, file)
    25  		}
    26  	}
    27  	return files
    28  }
    29  
    30  func GetFiles(domain string) ([]model.File, error) {
    31  	// -- GET_FILES
    32  	// SELECT domain, name, id, firstId, author, modTime, state, hash FROM files " +
    33  	// 	"WHERE domain=:domain
    34  
    35  	rows, err := Query("GET_FILES", Args{"domain": domain})
    36  	if core.IsErr(err, "cannot read file rows from db: %v") {
    37  		return nil, err
    38  	}
    39  
    40  	return getFiles(rows), nil
    41  }
    42  
    43  func GetFilesWithUpdates(domain string) ([]model.File, error) {
    44  	// -- GET_FILES_WITH_UPDATES
    45  	// SELECT domain,name, id, firstId, author, modTime, state, hash FROM files " +
    46  	// 	"WHERE domain=:domain AND state != 0
    47  
    48  	rows, err := Query("GET_FILES_WITH_UPDATES", Args{"domain": domain})
    49  	if core.IsErr(err, "cannot read file rows from db: %v") {
    50  		return nil, err
    51  	}
    52  
    53  	return getFiles(rows), nil
    54  }
    55  
    56  func GetFilesByFirstId(domain string, firstId uint64) ([]model.File, error) {
    57  	// -- GET_FILES_BY_FIRSTID
    58  	// SELECT domain,name, id, firstId, author, modTime, state, hash FROM files " +
    59  	// 	"WHERE domain=:domain AND firstId=:firstId
    60  
    61  	rows, err := Query("GET_FILES_BY_FIRSTID", Args{"domain": domain})
    62  	if core.IsErr(err, "cannot read file rows from db: %v") {
    63  		return nil, err
    64  	}
    65  
    66  	return getFiles(rows), nil
    67  }
    68  
    69  func GetFileByName(domain string, name string) (model.File, error) {
    70  	rows, err := Query("GET_FILE_BY_NAME", Args{"domain": domain, "name": name})
    71  	if core.IsErr(err, "cannot read file rows from db: %v") {
    72  		return model.File{}, err
    73  	}
    74  
    75  	files := getFiles(rows)
    76  	if len(files) == 0 {
    77  		return model.File{}, sql.ErrNoRows
    78  	}
    79  	return files[0], nil
    80  }
    81  
    82  func GetFilesByName(domain string, name string) ([]model.File, error) {
    83  	rows, err := Query("GET_FILES_BY_NAME", Args{"domain": domain, "name": name})
    84  	if core.IsErr(err, "cannot read file rows from db: %v") {
    85  		return nil, err
    86  	}
    87  	return getFiles(rows), nil
    88  }
    89  
    90  func GetFilesByHash(hash []byte) ([]model.File, error) {
    91  	//SELECT domain, name, author, modTime, state FROM files WHERE hash=:hash
    92  	rows, err := Query("GET_FILE_BY_HASH", Args{"hash": EncodeBase64(hash)})
    93  	if err != nil {
    94  		return nil, err
    95  	}
    96  
    97  	return getFiles(rows), nil
    98  }
    99  
   100  func SetFile(file model.File) error {
   101  	author := ""
   102  	_, err := Exec("SET_FILE", Args{"domain": file.Domain, "name": file.Name,
   103  		"firstId": file.FirstId, "lastId": file.Id,
   104  		"author": author, "hash": EncodeBase64(file.Hash),
   105  		"modtime": EncodeTime(file.ModTime), "state": file.State})
   106  	return err
   107  }
   108  
   109  func GetMerkleTree(domain string, name string, author string) (tree []byte, err error) {
   110  	err = QueryRow("GET_MERKLE_TREE", Args{"domain": domain, "name": name, "author": author}, &tree)
   111  	if err != nil {
   112  		logrus.Errorf("get merkle")
   113  	}
   114  	return tree, err
   115  }
   116  
   117  func SetMerkleTree(domain string, name string, author string, tree []byte) error {
   118  	_, err := Exec("SET_MERKLE_TREE", Args{"name": name, "author": author, "tree": tree})
   119  	return err
   120  }