build multi tenant
This commit is contained in:
72
repository/postgres/tenant.go
Normal file
72
repository/postgres/tenant.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package postgres
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
"github.com/ajaxray/geek-life/model"
|
||||
)
|
||||
|
||||
// TenantRepository implements the tenant repository interface for PostgreSQL
|
||||
type TenantRepository struct {
|
||||
db *sqlx.DB
|
||||
}
|
||||
|
||||
// NewTenantRepository creates a new tenant repository
|
||||
func NewTenantRepository(db *sqlx.DB) *TenantRepository {
|
||||
return &TenantRepository{db: db}
|
||||
}
|
||||
|
||||
// GetByID retrieves a tenant by ID
|
||||
func (r *TenantRepository) GetByID(id int64) (*model.Tenant, error) {
|
||||
var tenant model.Tenant
|
||||
query := `SELECT id, name, created_at, updated_at FROM tenants WHERE id = $1`
|
||||
err := r.db.Get(&tenant, query, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &tenant, nil
|
||||
}
|
||||
|
||||
// GetByName retrieves a tenant by name
|
||||
func (r *TenantRepository) GetByName(name string) (*model.Tenant, error) {
|
||||
var tenant model.Tenant
|
||||
query := `SELECT id, name, created_at, updated_at FROM tenants WHERE name = $1`
|
||||
err := r.db.Get(&tenant, query, name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &tenant, nil
|
||||
}
|
||||
|
||||
// Create creates a new tenant
|
||||
func (r *TenantRepository) Create(name string) (*model.Tenant, error) {
|
||||
tenant := &model.Tenant{
|
||||
Name: name,
|
||||
CreatedAt: time.Now(),
|
||||
UpdatedAt: time.Now(),
|
||||
}
|
||||
|
||||
query := `INSERT INTO tenants (name, created_at, updated_at) VALUES ($1, $2, $3) RETURNING id`
|
||||
err := r.db.QueryRow(query, tenant.Name, tenant.CreatedAt, tenant.UpdatedAt).Scan(&tenant.ID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return tenant, nil
|
||||
}
|
||||
|
||||
// Update updates an existing tenant
|
||||
func (r *TenantRepository) Update(tenant *model.Tenant) error {
|
||||
tenant.UpdatedAt = time.Now()
|
||||
query := `UPDATE tenants SET name = $1, updated_at = $2 WHERE id = $3`
|
||||
_, err := r.db.Exec(query, tenant.Name, tenant.UpdatedAt, tenant.ID)
|
||||
return err
|
||||
}
|
||||
|
||||
// Delete deletes a tenant
|
||||
func (r *TenantRepository) Delete(tenant *model.Tenant) error {
|
||||
query := `DELETE FROM tenants WHERE id = $1`
|
||||
_, err := r.db.Exec(query, tenant.ID)
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user