Add gitservers to backend
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"quay/app/models"
|
||||
"quay/app/repository"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type SQLiteGitServerRepository struct {
|
||||
db *sql.DB
|
||||
}
|
||||
|
||||
func NewSQLiteGitServerRepository(db *sql.DB) *SQLiteGitServerRepository {
|
||||
return &SQLiteGitServerRepository{db: db}
|
||||
}
|
||||
|
||||
var _ repository.GitServerRepository = (*SQLiteGitServerRepository)(nil)
|
||||
|
||||
func (r *SQLiteGitServerRepository) ListGitServers() ([]models.GitServer, error) {
|
||||
rows, err := r.db.Query(`SELECT id, name, protocol, base_url, type, created_at FROM gitservers`)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("list gitservers: %w", err)
|
||||
}
|
||||
|
||||
var out []models.GitServer
|
||||
for rows.Next() {
|
||||
gs, err := scanGitServer(rows)
|
||||
if err != nil {
|
||||
rows.Close()
|
||||
return nil, fmt.Errorf("list gitservers scan: %w", err)
|
||||
}
|
||||
out = append(out, *gs)
|
||||
}
|
||||
rows.Close()
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (r *SQLiteGitServerRepository) GetGitServer(id string) (*models.GitServer, error) {
|
||||
row := r.db.QueryRow(`SELECT id, name, protocol, base_url, type, created_at FROM gitservers WHERE id = ?`, id)
|
||||
return scanGitServer(row)
|
||||
}
|
||||
|
||||
func (r *SQLiteGitServerRepository) CreateGitServer(gs *models.GitServer) error {
|
||||
tx, err := r.db.Begin()
|
||||
if err != nil {
|
||||
return fmt.Errorf("create gitserver begin tx: %w", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
gs.ID = uuid.NewString()
|
||||
|
||||
_, err = tx.Exec(`INSERT INTO gitservers (id, name, protocol, base_url, type) VALUES (?, ?, ?, ?, ?)`,
|
||||
gs.ID, gs.Name, gs.Protocol, gs.BaseUrl, gs.Type)
|
||||
if err != nil {
|
||||
if isSQLiteUniqueConstraintError(err) {
|
||||
return fmt.Errorf("create gitserver insert: %w", repository.ErrGitServerAlreadyExists)
|
||||
}
|
||||
return fmt.Errorf("create gitserver insert: %w", err)
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
func (r *SQLiteGitServerRepository) UpdateGitServer(gs *models.GitServer) error {
|
||||
tx, err := r.db.Begin()
|
||||
if err != nil {
|
||||
return fmt.Errorf("update gitserver begin tx: %w", err)
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
_, err = tx.Exec(`UPDATE gitservers SET name = ?, protocol = ?, base_url = ?, type = ? WHERE id = ?`,
|
||||
gs.Name, gs.Protocol, gs.BaseUrl, gs.Type, gs.ID)
|
||||
if err != nil {
|
||||
if isSQLiteUniqueConstraintError(err) {
|
||||
return fmt.Errorf("update gitserver: %w", repository.ErrGitServerAlreadyExists)
|
||||
}
|
||||
return fmt.Errorf("update gitserver: %w", err)
|
||||
}
|
||||
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
func (r *SQLiteGitServerRepository) DeleteGitServer(id string) error {
|
||||
_, err := r.db.Exec(`DELETE FROM gitservers WHERE id = ?`, id)
|
||||
if err != nil {
|
||||
return fmt.Errorf("delete gitserver: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func scanGitServer(s scanner) (*models.GitServer, error) {
|
||||
g := new(models.GitServer)
|
||||
err := s.Scan(&g.ID, &g.Name, &g.Protocol, &g.BaseUrl, &g.Type, &g.CreatedAt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return g, nil
|
||||
}
|
||||
@@ -68,6 +68,16 @@ CREATE TABLE IF NOT EXISTS users (
|
||||
hashed_password TEXT NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS gitservers (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL UNIQUE,
|
||||
protocol TEXT NOT NULL,
|
||||
base_url TEXT NOT NULL,
|
||||
type TEXT NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
`)
|
||||
|
||||
if err == nil {
|
||||
|
||||
Reference in New Issue
Block a user