feat: add tenant and user management with migrations, handlers, and tests
- Implemented tenant and user management features including: - Tenant creation and management with associated migrations. - User creation and management with associated migrations. - Tenant membership management with associated migrations. - Platform user roles management with associated migrations. - Quota management with associated migrations. - Article and template management with associated migrations. - Added HTTP handlers for templates and workspaces. - Created tests for protected and public routes. - Introduced a script to check tenant scope in SQL queries. - Documented task plan for backend completion and frontend foundation.
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/geo-platform/tenant-api/internal/tenant/repository/generated"
|
||||
)
|
||||
|
||||
type TemplateRecord struct {
|
||||
ID int64
|
||||
Scope string
|
||||
TenantID *int64
|
||||
OriginType string
|
||||
TemplateKey string
|
||||
TemplateName string
|
||||
SchemaJSON []byte
|
||||
PromptTemplate *string
|
||||
PromptVisibility string
|
||||
ProtectedPromptAssetKey *string
|
||||
CardConfigJSON []byte
|
||||
Status string
|
||||
VersionNo int
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
type TemplateSchemaRecord struct {
|
||||
ID int64
|
||||
TemplateName string
|
||||
SchemaJSON []byte
|
||||
}
|
||||
|
||||
type TemplateRepository interface {
|
||||
ListTemplates(ctx context.Context, tenantID int64) ([]TemplateRecord, error)
|
||||
GetTemplateByID(ctx context.Context, id, tenantID int64) (*TemplateRecord, error)
|
||||
GetTemplateSchema(ctx context.Context, id int64) (*TemplateSchemaRecord, error)
|
||||
}
|
||||
|
||||
type templateRepository struct {
|
||||
q generated.Querier
|
||||
}
|
||||
|
||||
func NewTemplateRepository(db generated.DBTX) TemplateRepository {
|
||||
return &templateRepository{q: newQuerier(db)}
|
||||
}
|
||||
|
||||
func (r *templateRepository) ListTemplates(ctx context.Context, tenantID int64) ([]TemplateRecord, error) {
|
||||
rows, err := r.q.ListTemplates(ctx, tenantID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
templates := make([]TemplateRecord, 0, len(rows))
|
||||
for _, row := range rows {
|
||||
templates = append(templates, TemplateRecord{
|
||||
ID: row.ID,
|
||||
Scope: row.Scope,
|
||||
TenantID: nullableInt64(row.TenantID),
|
||||
OriginType: row.OriginType,
|
||||
TemplateKey: row.TemplateKey,
|
||||
TemplateName: row.TemplateName,
|
||||
SchemaJSON: row.SchemaJson,
|
||||
PromptTemplate: nullableText(row.PromptTemplate),
|
||||
PromptVisibility: row.PromptVisibility,
|
||||
CardConfigJSON: row.CardConfigJson,
|
||||
Status: row.Status,
|
||||
VersionNo: int(row.VersionNo),
|
||||
CreatedAt: timeFromTimestamp(row.CreatedAt),
|
||||
UpdatedAt: timeFromTimestamp(row.UpdatedAt),
|
||||
})
|
||||
}
|
||||
|
||||
return templates, nil
|
||||
}
|
||||
|
||||
func (r *templateRepository) GetTemplateByID(ctx context.Context, id, tenantID int64) (*TemplateRecord, error) {
|
||||
row, err := r.q.GetTemplateByID(ctx, generated.GetTemplateByIDParams{
|
||||
ID: id,
|
||||
TenantID: tenantID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &TemplateRecord{
|
||||
ID: row.ID,
|
||||
Scope: row.Scope,
|
||||
TenantID: nullableInt64(row.TenantID),
|
||||
OriginType: row.OriginType,
|
||||
TemplateKey: row.TemplateKey,
|
||||
TemplateName: row.TemplateName,
|
||||
SchemaJSON: row.SchemaJson,
|
||||
PromptTemplate: nullableText(row.PromptTemplate),
|
||||
PromptVisibility: row.PromptVisibility,
|
||||
ProtectedPromptAssetKey: nullableText(row.ProtectedPromptAssetKey),
|
||||
CardConfigJSON: row.CardConfigJson,
|
||||
Status: row.Status,
|
||||
VersionNo: int(row.VersionNo),
|
||||
CreatedAt: timeFromTimestamp(row.CreatedAt),
|
||||
UpdatedAt: timeFromTimestamp(row.UpdatedAt),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (r *templateRepository) GetTemplateSchema(ctx context.Context, id int64) (*TemplateSchemaRecord, error) {
|
||||
row, err := r.q.GetTemplateSchema(ctx, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &TemplateSchemaRecord{
|
||||
ID: row.ID,
|
||||
TemplateName: row.TemplateName,
|
||||
SchemaJSON: row.SchemaJson,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user