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 }