github.com/code-to-go/safepool.lib@v0.0.0-20221205180519-ee25e63c226e/api/library/db.go (about)

     1  package library
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/code-to-go/safepool.lib/core"
     7  	"github.com/code-to-go/safepool.lib/security"
     8  	"github.com/code-to-go/safepool.lib/sql"
     9  )
    10  
    11  func sqlSetDocument(pool string, d Document) error {
    12  	author, _ := d.Author.Public().Base64()
    13  
    14  	_, err := sql.Exec("SET_DOCUMENT", sql.Args{"pool": pool, "id": d.Id, "name": d.Name,
    15  		"size": d.Size, "modTime": sql.EncodeTime(d.ModTime), "author": author,
    16  		"contentType": d.ContentType,
    17  		"hash":        sql.EncodeBase64(d.Hash), "localPath": d.LocalPath, "hasChanged": d.HasChanged,
    18  		"ts": sql.EncodeTime(time.Now()),
    19  	})
    20  	core.IsErr(err, "cannot set document %d on db: %v", d.Name)
    21  	return err
    22  }
    23  
    24  func sqlDocumentByName(pool string, name string) (Document, error) {
    25  	d := Document{Name: name}
    26  
    27  	var modTime int64
    28  	var author string
    29  	var hash string
    30  	err := sql.QueryRow("GET_LOCAL_DOCUMENT", sql.Args{"pool": pool, "name": name}, &d.Id, &d.Size, &modTime, &author,
    31  		&d.ContentType, &hash, &d.LocalPath, &d.HasChanged)
    32  	if err == nil {
    33  		d.Author, _ = security.IdentityFromBase64(author)
    34  		d.Hash = sql.DecodeBase64(hash)
    35  	}
    36  	return d, err
    37  }
    38  
    39  func sqlGetDocuments(pool string, beforeId uint64, limit int) ([]Document, error) {
    40  	rows, err := sql.Query("GET_DOCUMENTS", sql.Args{"pool": pool, "beforeId": beforeId, "limit": limit})
    41  	if core.IsErr(err, "cannot query documents from db: %v") {
    42  		return nil, err
    43  	}
    44  	var documents []Document
    45  	for rows.Next() {
    46  		var d Document
    47  		var modTime int64
    48  		var hash string
    49  		err = rows.Scan(&d.Id, &d.Name, &d.Size, &modTime, &d.Author, &d.ContentType, &hash, &d.LocalPath, &d.HasChanged)
    50  		if !core.IsErr(err, "cannot scan row in Documents: %v", err) {
    51  			d.ModTime = sql.DecodeTime(modTime)
    52  			d.Hash = sql.DecodeBase64(hash)
    53  			documents = append(documents, d)
    54  		}
    55  	}
    56  	return documents, nil
    57  }
    58  
    59  func sqlGetOffset(pool string) time.Time {
    60  	var ts int64
    61  	err := sql.QueryRow("GET_DOCUMENTS_OFFSET", sql.Args{"pool": pool}, &ts)
    62  	if err == nil {
    63  		return sql.DecodeTime(ts)
    64  	} else {
    65  		return time.Time{}
    66  	}
    67  }