monorepo/cloud/maplepress-backend/internal/repository/tenant/get.go

62 lines
2.1 KiB
Go

package tenant
import (
"context"
"github.com/gocql/gocql"
domaintenant "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/domain/tenant"
"codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/repository/tenant/models"
)
// GetByID retrieves a tenant by ID
func (r *repository) GetByID(ctx context.Context, id string) (*domaintenant.Tenant, error) {
var tenantByID models.TenantByID
query := `SELECT id, name, slug, status, created_at, updated_at,
created_from_ip_address, created_from_ip_timestamp, modified_from_ip_address, modified_from_ip_timestamp
FROM tenants_by_id
WHERE id = ?`
err := r.session.Query(query, id).
Consistency(gocql.Quorum).
Scan(&tenantByID.ID, &tenantByID.Name, &tenantByID.Slug, &tenantByID.Status,
&tenantByID.CreatedAt, &tenantByID.UpdatedAt,
&tenantByID.CreatedFromIPAddress, &tenantByID.CreatedFromIPTimestamp,
&tenantByID.ModifiedFromIPAddress, &tenantByID.ModifiedFromIPTimestamp)
if err != nil {
if err == gocql.ErrNotFound {
return nil, domaintenant.ErrTenantNotFound
}
return nil, err
}
return tenantByID.ToTenant(), nil
}
// GetBySlug retrieves a tenant by slug
func (r *repository) GetBySlug(ctx context.Context, slug string) (*domaintenant.Tenant, error) {
var tenantBySlug models.TenantBySlug
query := `SELECT slug, id, name, status, created_at, updated_at,
created_from_ip_address, created_from_ip_timestamp, modified_from_ip_address, modified_from_ip_timestamp
FROM tenants_by_slug
WHERE slug = ?`
err := r.session.Query(query, slug).
Consistency(gocql.Quorum).
Scan(&tenantBySlug.Slug, &tenantBySlug.ID, &tenantBySlug.Name, &tenantBySlug.Status,
&tenantBySlug.CreatedAt, &tenantBySlug.UpdatedAt,
&tenantBySlug.CreatedFromIPAddress, &tenantBySlug.CreatedFromIPTimestamp,
&tenantBySlug.ModifiedFromIPAddress, &tenantBySlug.ModifiedFromIPTimestamp)
if err != nil {
if err == gocql.ErrNotFound {
return nil, domaintenant.ErrTenantNotFound
}
return nil, err
}
return tenantBySlug.ToTenant(), nil
}