mirror of
https://github.com/notherealmarco/WASAPhoto.git
synced 2025-05-05 12:22:35 +02:00
Improve comments and code readability
This commit is contained in:
parent
f6ad6db2f7
commit
3de158e5a5
19 changed files with 84 additions and 43 deletions
|
@ -79,8 +79,11 @@ type AppDatabase interface {
|
|||
Ping() error
|
||||
}
|
||||
|
||||
// DBTransaction is the interface for a generic database transaction
|
||||
type DBTransaction interface {
|
||||
// Commit commits the transaction
|
||||
Commit() error
|
||||
// Rollback rolls back the transaction
|
||||
Rollback() error
|
||||
}
|
||||
|
||||
|
@ -95,16 +98,17 @@ func New(db *sql.DB) (AppDatabase, error) {
|
|||
return nil, errors.New("database is required when building a AppDatabase")
|
||||
}
|
||||
|
||||
// Check if tables exist. If not, the database is empty, and we need to create the structure
|
||||
// Check if some table exists. If not, the database is empty, and we need to create the structure
|
||||
var tableName string
|
||||
//todo: check for all the tables, not just users
|
||||
|
||||
err := db.QueryRow(`SELECT name FROM sqlite_master WHERE type='table' AND name='users';`).Scan(&tableName)
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
// Database is empty, let's create the structure
|
||||
sqlStmt := `CREATE TABLE "users" (
|
||||
"uid" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL UNIQUE,
|
||||
PRIMARY KEY("uid")
|
||||
)` // todo: one query is enough! We are we doing a query per table?
|
||||
)`
|
||||
_, err = db.Exec(sqlStmt)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error creating database structure: %w", err)
|
||||
|
|
|
@ -96,6 +96,7 @@ func (db *appdbimpl) UnlikePhoto(uid string, photo int64, liker_uid string) (Que
|
|||
// But our DB implementation only requires the photo id.
|
||||
exists, err := db.photoExists(uid, photo)
|
||||
if err != nil || !exists {
|
||||
// The photo does not exist, or the user has been banned
|
||||
return ERR_NOT_FOUND, err
|
||||
}
|
||||
|
||||
|
@ -111,6 +112,7 @@ func (db *appdbimpl) UnlikePhoto(uid string, photo int64, liker_uid string) (Que
|
|||
return ERR_INTERNAL, err
|
||||
}
|
||||
|
||||
// The user was not liking the photo
|
||||
if rows == 0 {
|
||||
return ERR_NOT_FOUND, nil
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@ func (db *appdbimpl) PostPhoto(uid string) (DBTransaction, int64, error) {
|
|||
err_rb := tx.Rollback()
|
||||
// If rollback fails, we return the original error plus the rollback error
|
||||
if err_rb != nil {
|
||||
// todo: we are losing track of err_rb here
|
||||
err = fmt.Errorf("Rollback error. Rollback cause: %w", err)
|
||||
}
|
||||
|
||||
|
@ -30,7 +29,6 @@ func (db *appdbimpl) PostPhoto(uid string) (DBTransaction, int64, error) {
|
|||
err_rb := tx.Rollback()
|
||||
// If rollback fails, we return the original error plus the rollback error
|
||||
if err_rb != nil {
|
||||
// todo: we are losing track of err_rb here
|
||||
err = fmt.Errorf("Rollback error. Rollback cause: %w", err)
|
||||
}
|
||||
|
||||
|
@ -66,6 +64,7 @@ func (db *appdbimpl) photoExists(uid string, photo int64) (bool, error) {
|
|||
return cnt > 0, nil
|
||||
}
|
||||
|
||||
// Check if a given photo owned by a given user exists, and the requesting user is not banned by the author
|
||||
func (db *appdbimpl) PhotoExists(uid string, photo int64, requesting_uid string) (bool, error) {
|
||||
|
||||
var cnt int64
|
||||
|
|
|
@ -2,14 +2,17 @@ package database
|
|||
|
||||
import "database/sql"
|
||||
|
||||
// dbtransaction is a struct to represent an SQL transaction, it implements the DBTransaction interface
|
||||
type dbtransaction struct {
|
||||
c *sql.Tx
|
||||
}
|
||||
|
||||
func (tx *dbtransaction) Commit() error {
|
||||
// Commit the SQL transaction
|
||||
return tx.c.Commit()
|
||||
}
|
||||
|
||||
func (tx *dbtransaction) Rollback() error {
|
||||
// Rollback the SQL transaction
|
||||
return tx.c.Rollback()
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package db_errors
|
|||
|
||||
import "strings"
|
||||
|
||||
// Returns true if the query result has no rows
|
||||
// Returns true if the error is a "no rows in result set" error
|
||||
func EmptySet(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
|
@ -10,6 +10,7 @@ func EmptySet(err error) bool {
|
|||
return strings.Contains(err.Error(), "no rows in result set")
|
||||
}
|
||||
|
||||
// Returns true if the error is a Unique constraint violation error
|
||||
func UniqueViolation(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
|
@ -17,6 +18,7 @@ func UniqueViolation(err error) bool {
|
|||
return strings.Contains(err.Error(), "UNIQUE constraint failed")
|
||||
}
|
||||
|
||||
// Returns true if the error is a Foreign Key constraint violation error
|
||||
func ForeignKeyViolation(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
package database
|
||||
|
||||
// SetName is an example that shows you how to execute insert/update
|
||||
func (db *appdbimpl) SetName(name string) error {
|
||||
_, err := db.c.Exec("INSERT INTO example_table (id, name) VALUES (1, ?)", name)
|
||||
return err
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue