Add gitservers to backend

This commit is contained in:
2026-05-02 17:37:36 +02:00
parent 38d2083d06
commit 76e3454c4c
6 changed files with 311 additions and 0 deletions
@@ -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
}