org 模块: - tenants 表 (UUID PK, name, slug, status, settings) - 完整 CRUD API: /api/v1/org/tenants - 多租户隔离 audit 模块: - audit_logs 表 (actor, action, resource, IP, 时间) - 查询 API: /api/v1/audit/logs (支持分页+筛选) - 按 tenant_id/user_id/action/resource 过滤
48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
package infrastructure
|
|
|
|
import (
|
|
"context"
|
|
|
|
"mengstack/internal/modules/org/domain"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type tenantRepo struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewTenantRepository(db *gorm.DB) domain.TenantRepository {
|
|
return &tenantRepo{db: db}
|
|
}
|
|
|
|
func (r *tenantRepo) Create(ctx context.Context, tenant *domain.Tenant) error {
|
|
return r.db.WithContext(ctx).Create(tenant).Error
|
|
}
|
|
|
|
func (r *tenantRepo) FindByID(ctx context.Context, id string) (*domain.Tenant, error) {
|
|
var tenant domain.Tenant
|
|
err := r.db.WithContext(ctx).Where("id = ?", id).First(&tenant).Error
|
|
return &tenant, err
|
|
}
|
|
|
|
func (r *tenantRepo) FindBySlug(ctx context.Context, slug string) (*domain.Tenant, error) {
|
|
var tenant domain.Tenant
|
|
err := r.db.WithContext(ctx).Where("slug = ?", slug).First(&tenant).Error
|
|
return &tenant, err
|
|
}
|
|
|
|
func (r *tenantRepo) FindAll(ctx context.Context) ([]domain.Tenant, error) {
|
|
var tenants []domain.Tenant
|
|
err := r.db.WithContext(ctx).Order("created_at DESC").Find(&tenants).Error
|
|
return tenants, err
|
|
}
|
|
|
|
func (r *tenantRepo) Update(ctx context.Context, tenant *domain.Tenant) error {
|
|
return r.db.WithContext(ctx).Save(tenant).Error
|
|
}
|
|
|
|
func (r *tenantRepo) Delete(ctx context.Context, id string) error {
|
|
return r.db.WithContext(ctx).Where("id = ?", id).Delete(&domain.Tenant{}).Error
|
|
}
|