feat(db): set repository name

Ayman Bagabas created

Change summary

server/db/db.go            |  1 +
server/db/fakedb/db.go     |  5 +++++
server/db/sqlite/sql.go    |  1 +
server/db/sqlite/sqlite.go | 10 ++++++++++
4 files changed, 17 insertions(+)

Detailed changes

server/db/db.go 🔗

@@ -35,6 +35,7 @@ type RepoStore interface {
 	AddRepo(name, projectName, description string, isPrivate bool) error
 	DeleteRepo(string) error
 	GetRepo(string) (*types.Repo, error)
+	SetRepoName(string, string) error
 	SetRepoProjectName(string, string) error
 	SetRepoDescription(string, string) error
 	SetRepoPrivate(string, bool) error

server/db/fakedb/db.go 🔗

@@ -130,6 +130,11 @@ func (*FakeDB) GetRepo(string) (*types.Repo, error) {
 	return nil, nil
 }
 
+// SetRepoName implements db.Store.
+func (*FakeDB) SetRepoName(string, string) error {
+	return nil
+}
+
 // SetRepoDescription implements db.Store.
 func (*FakeDB) SetRepoDescription(string, string) error {
 	return nil

server/db/sqlite/sql.go 🔗

@@ -76,6 +76,7 @@ var (
 	sqlDeleteRepo                  = `DELETE FROM repo WHERE id = ?;`
 	sqlDeleteRepoWithName          = `DELETE FROM repo WHERE name = ?;`
 	sqlSelectRepoByName            = `SELECT id, name, project_name, description, private, created_at, updated_at FROM repo WHERE name = ?;`
+	sqlUpdateRepoNameByName        = `UPDATE repo SET name = ?, updated_at = CURRENT_TIMESTAMP WHERE name = ?;`
 	sqlUpdateRepoProjectNameByName = `UPDATE repo SET project_name = ?, updated_at = CURRENT_TIMESTAMP WHERE name = ?;`
 	sqlUpdateRepoDescriptionByName = `UPDATE repo SET description = ?, updated_at = CURRENT_TIMESTAMP WHERE name = ?;`
 	sqlUpdateRepoPrivateByName     = `UPDATE repo SET private = ?, updated_at = CURRENT_TIMESTAMP WHERE name = ?;`

server/db/sqlite/sqlite.go 🔗

@@ -308,6 +308,16 @@ func (d *Sqlite) GetRepo(name string) (*types.Repo, error) {
 	return &r, nil
 }
 
+// SetRepoName sets the repo name.
+func (d *Sqlite) SetRepoName(name string, newName string) error {
+	name = strings.ToLower(name)
+	newName = strings.ToLower(newName)
+	return d.wrapTransaction(func(tx *sql.Tx) error {
+		_, err := tx.Exec(sqlUpdateRepoNameByName, newName, name)
+		return err
+	})
+}
+
 // SetRepoProjectName sets the repo project name.
 func (d *Sqlite) SetRepoProjectName(name string, projectName string) error {
 	name = strings.ToLower(name)