99447bc8d4c2a8b384093553eb0bc8c460ff689d

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

fix(backend): error when repository doesn't exist

Diff

This diff is truncated to protect this page.

  1diff --git a/server/backend/sqlite/error.go b/server/backend/sqlite/error.go
  2index 72020de5be13e1a22bb5d4d836b026e0c963f940..1422697a9ba60dd105fb31af5ed2f0d68c047f04 100644
  3--- a/server/backend/sqlite/error.go
  4+++ b/server/backend/sqlite/error.go
  5@@ -1,6 +1,9 @@
  6 package sqlite
  7 
  8-import "errors"
  9+import (
 10+	"errors"
 11+	"fmt"
 12+)
 13 
 14 var (
 15 	// ErrDuplicateKey is returned when a unique constraint is violated.
 16@@ -8,4 +11,7 @@ var (
 17 
 18 	// ErrNoRecord is returned when a record is not found.
 19 	ErrNoRecord = errors.New("record not found")
 20+
 21+	// ErrRepoNotExist is returned when a repository does not exist.
 22+	ErrRepoNotExist = fmt.Errorf("repository does not exist")
 23 )
 24diff --git a/server/backend/sqlite/sqlite.go b/server/backend/sqlite/sqlite.go
 25index eb480cf24ee2f13324fd87060ebee6d729455e3f..bc69e2628cb5c90ade79b40a84e2a358d0a13bca 100644
 26--- a/server/backend/sqlite/sqlite.go
 27+++ b/server/backend/sqlite/sqlite.go
 28@@ -313,7 +313,7 @@ func (d *SqliteBackend) Repository(repo string) (backend.Repository, error) {
 29 
 30 	if count == 0 {
 31 		logger.Warn("repository exists but not found in database", "repo", repo)
 32-		return nil, fmt.Errorf("repository does not exist")
 33+		return nil, ErrRepoNotExist
 34 	}
 35 
 36 	return &Repo{
 37@@ -330,7 +330,8 @@ func (d *SqliteBackend) Description(repo string) (string, error) {
 38 	repo = utils.SanitizeRepo(repo)
 39 	var desc string
 40 	if err := wrapTx(d.db, d.ctx, func(tx *sqlx.Tx) error {
 41-		return tx.Get(&desc, "SELECT description FROM repo WHERE name = ?", repo)
 42+		row := tx.QueryRow("SELECT description FROM repo WHERE name = ?", repo)
 43+		return row.Scan(&desc)
 44 	}); err != nil {
 45 		return "", wrapDbErr(err)
 46 	}
 47@@ -360,7 +361,8 @@ func (d *SqliteBackend) IsPrivate(repo string) (bool, error) {
 48 	repo = utils.SanitizeRepo(repo)
 49 	var private bool
 50 	if err := wrapTx(d.db, d.ctx, func(tx *sqlx.Tx) error {
 51-		return tx.Get(&private, "SELECT private FROM repo WHERE name = ?", repo)
 52+		row := tx.QueryRow("SELECT private FROM repo WHERE name = ?", repo)
 53+		return row.Scan(&private)
 54 	}); err != nil {
 55 		return false, wrapDbErr(err)
 56 	}
 57@@ -375,7 +377,8 @@ func (d *SqliteBackend) IsHidden(repo string) (bool, error) {
 58 	repo = utils.SanitizeRepo(repo)
 59 	var hidden bool
 60 	if err := wrapTx(d.db, d.ctx, func(tx *sqlx.Tx) error {
 61-		return tx.Get(&hidden, "SELECT hidden FROM repo WHERE name = ?", repo)
 62+		row := tx.QueryRow("SELECT hidden FROM repo WHERE name = ?", repo)
 63+		return row.Scan(&hidden)
 64 	}); err != nil {
 65 		return false, wrapDbErr(err)
 66 	}
 67@@ -389,6 +392,13 @@ func (d *SqliteBackend) IsHidden(repo string) (bool, error) {
 68 func (d *SqliteBackend) SetHidden(repo string, hidden bool) error {
 69 	repo = utils.SanitizeRepo(repo)
 70 	return wrapDbErr(wrapTx(d.db, d.ctx, func(tx *sqlx.Tx) error {
 71+		var count int
 72+		if err := tx.Get(&count, "SELECT COUNT(*) FROM repo WHERE name = ?", repo); err != nil {
 73+			return err
 74+		}
 75+		if count == 0 {
 76+			return ErrRepoNotExist
 77+		}
 78 		_, err := tx.Exec("UPDATE repo SET hidden = ?, updated_at = CURRENT_TIMESTAMP WHERE name = ?;", hidden, repo)
 79 		return err
 80 	}))
 81@@ -401,7 +411,8 @@ func (d *SqliteBackend) ProjectName(repo string) (string, error) {
 82 	repo = utils.SanitizeRepo(repo)
 83 	var name string
 84 	if err := wrapTx(d.db, d.ctx, func(tx *sqlx.Tx) error {
 85-		return tx.Get(&name, "SELECT project_name FROM repo WHERE name = ?", repo)
 86+		row := tx.QueryRow("SELECT project_name FROM repo WHERE name = ?", repo)
 87+		return row.Scan(&name)
 88 	}); err != nil {
 89 		return "", wrapDbErr(err)
 90 	}
 91@@ -415,6 +426,13 @@ func (d *SqliteBackend) ProjectName(repo string) (string, error) {
 92 func (d *SqliteBackend) SetDescription(repo string, desc string) error {
 93 	repo = utils.SanitizeRepo(repo)
 94 	return wrapTx(d.db, d.ctx, func(tx *sqlx.Tx) error {
 95+		var count int
 96+		if err := tx.Get(&count, "SELECT COUNT(*) FROM repo WHERE name = ?", repo); err != nil {
 97+			return err
 98+		}
 99+		if count == 0 {
100+			return ErrRepoNotExist
101+		}
102 		_, err := tx.Exec("UPDATE repo SET description = ? WHERE name = ?", desc, repo)
103 		return err
104 	})
105@@ -427,6 +445,13 @@ func (d *SqliteBackend) SetPrivate(repo string, private bool) error {
106 	repo = utils.SanitizeRepo(repo)
107 	return wrapDbErr(
108 		wrapTx(d.db, d.ctx, func(tx *sqlx.Tx) error {
109+			var count int
110+			if err := tx.Get(&count, "SELECT COUNT(*) FROM repo WHERE name = ?", repo); err != nil {
111+				return err
112+			}
113+			if count == 0 {
114+				return ErrRepoNotExist
115+			}
116 			_, err := tx.Exec("UPDATE repo SET private = ? WHERE name = ?", private, repo)
117 			return err
118 		}),
119@@ -440,6 +465,13 @@ func (d *SqliteBackend) SetProjectName(repo string, name string) error {
120 	repo = utils.SanitizeRepo(repo)
121 	return wrapDbErr(
122 		wrapTx(d.db, d.ctx, func(tx *sqlx.Tx) error {
123+			var count int
124+			if err := tx.Get(&count, "SELECT COUNT(*) FROM repo WHERE name = ?", repo); err != nil {
125+				return err
126+			}
127+			if count == 0 {