WIP: Migrate from GORM to sqlc - partial migration, build broken

This commit is contained in:
Christoph Haas 2026-03-28 18:26:45 +01:00
parent 560b40503a
commit dad96978e0
20 changed files with 1241 additions and 709 deletions

View file

@ -1,115 +1,35 @@
// Package db provides database access for the IMC application.
// It uses GORM (Go ORM) for database operations.
package db
// =============================================================================
// VirtualAlias - Mail alias operations
// These functions interact with the ISPmail virtual_aliases table.
// =============================================================================
import (
"context"
// GetAllAliases retrieves all email aliases with their domain names.
// Returns a slice of AliasWithDomain (includes domain name) or an error.
func (d *DB) GetAllAliases() ([]AliasWithDomain, error) {
var aliases []VirtualAlias
err := d.Preload("Domain").Find(&aliases).Error
if err != nil {
return nil, err
}
imcdb "git.workaround.org/chaas/imc/backend/internal/db/sqlc"
)
result := make([]AliasWithDomain, len(aliases))
for i, a := range aliases {
result[i] = AliasWithDomain{
VirtualAlias: a,
DomainName: "",
}
if a.Domain != nil {
result[i].DomainName = a.Domain.Name
}
}
if result == nil {
result = []AliasWithDomain{}
}
return result, nil
func (d *DB) GetAllAliases(ctx context.Context) ([]imcdb.VirtualAlias, error) {
return d.Queries.GetAllAliases(ctx)
}
// GetAliasesByDomain retrieves all aliases belonging to a specific domain.
// domainID: the ID of the domain.
// Returns a slice of VirtualAlias or an error.
func (d *DB) GetAliasesByDomain(domainID uint) ([]VirtualAlias, error) {
var aliases []VirtualAlias
err := d.Where("domain_id = ?", domainID).Find(&aliases).Error
if err != nil {
return nil, err
}
if aliases == nil {
aliases = []VirtualAlias{}
}
return aliases, nil
func (d *DB) GetAliasesByDomain(ctx context.Context, domainID uint32) ([]imcdb.VirtualAlias, error) {
return d.Queries.GetAliasesByDomain(ctx, domainID)
}
// GetAliasByID retrieves a single alias by its ID.
// id: the alias's ID.
// Returns the VirtualAlias or an error (including "record not found").
func (d *DB) GetAliasByID(id uint) (*VirtualAlias, error) {
var alias VirtualAlias
err := d.Where("id = ?", id).Preload("Domain").First(&alias).Error
if err != nil {
return nil, err
}
return &alias, nil
func (d *DB) GetAliasByID(ctx context.Context, id uint32) (imcdb.VirtualAlias, error) {
return d.Queries.GetAliasByID(ctx, id)
}
// GetAliasBySource looks up an alias by its source address.
// source: the source email address (the alias).
// Returns the VirtualAlias or an error (including "record not found").
func (d *DB) GetAliasBySource(source string) (*VirtualAlias, error) {
var alias VirtualAlias
err := d.Where("source = ?", source).First(&alias).Error
if err != nil {
return nil, err
}
return &alias, nil
func (d *DB) GetAliasBySource(ctx context.Context, source string) (imcdb.VirtualAlias, error) {
return d.Queries.GetAliasBySource(ctx, source)
}
// CreateAlias creates a new email alias without a domain association.
// source: the source email address (the alias).
// destination: the destination email address (where mail is forwarded to).
// Returns the created VirtualAlias or an error.
func (d *DB) CreateAlias(source, destination string) (*VirtualAlias, error) {
alias := VirtualAlias{
Source: source,
Destination: destination,
}
err := d.Create(&alias).Error
if err != nil {
return nil, err
}
return &alias, nil
}
// CreateAliasInDomain creates a new email alias in a specific domain.
// source: the source email address (the alias).
// destination: the destination email address (where mail is forwarded to).
// domainID: the ID of the domain this alias belongs to.
// Returns the created VirtualAlias or an error.
func (d *DB) CreateAliasInDomain(source, destination string, domainID uint) (*VirtualAlias, error) {
alias := VirtualAlias{
func (d *DB) CreateAlias(ctx context.Context, domainID uint32, source, destination string) error {
return d.Queries.CreateAlias(ctx, imcdb.CreateAliasParams{
DomainID: domainID,
Source: source,
Destination: destination,
}
err := d.Create(&alias).Error
if err != nil {
return nil, err
}
return &alias, nil
})
}
// DeleteAlias permanently removes an alias from the database.
// id: the alias's ID to delete.
// Returns an error if the deletion fails.
func (d *DB) DeleteAlias(id uint) error {
return d.Delete(&VirtualAlias{}, id).Error
func (d *DB) DeleteAlias(ctx context.Context, id uint32) error {
return d.Queries.DeleteAlias(ctx, id)
}