mirror of
https://github.com/emo2007/block-accounting.git
synced 2025-04-12 08:56:28 +00:00
81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
package organizations
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log/slog"
|
|
"time"
|
|
|
|
"github.com/emochka2007/block-accounting/internal/pkg/ctxmeta"
|
|
"github.com/emochka2007/block-accounting/internal/pkg/hdwallet"
|
|
"github.com/emochka2007/block-accounting/internal/pkg/models"
|
|
"github.com/emochka2007/block-accounting/internal/usecase/repository/organizations"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type CreateParams struct {
|
|
Name string
|
|
Address string
|
|
WalletMnemonic string
|
|
}
|
|
|
|
type OrganizationsInteractor interface {
|
|
Create(
|
|
ctx context.Context,
|
|
params CreateParams,
|
|
) (*models.Organization, error)
|
|
}
|
|
|
|
type organizationsInteractor struct {
|
|
log *slog.Logger
|
|
orgRepository organizations.Repository
|
|
}
|
|
|
|
func NewOrganizationsInteractor(
|
|
log *slog.Logger,
|
|
orgRepository organizations.Repository,
|
|
) OrganizationsInteractor {
|
|
return &organizationsInteractor{
|
|
log: log,
|
|
orgRepository: orgRepository,
|
|
}
|
|
}
|
|
|
|
func (i *organizationsInteractor) Create(
|
|
ctx context.Context,
|
|
params CreateParams,
|
|
) (*models.Organization, error) {
|
|
var walletSeed []byte
|
|
|
|
user, err := ctxmeta.User(ctx)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error fetch user from context. %w", err)
|
|
}
|
|
|
|
if params.WalletMnemonic == "" {
|
|
walletSeed = user.Seed()
|
|
} else {
|
|
seed, err := hdwallet.NewSeedFromMnemonic(params.WalletMnemonic)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error convert organization wallet mnemonic into a seed. %w", err)
|
|
}
|
|
|
|
walletSeed = seed
|
|
}
|
|
|
|
org := models.Organization{
|
|
ID: uuid.New(),
|
|
Name: params.Name,
|
|
Address: params.Address,
|
|
WalletSeed: walletSeed,
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
}
|
|
|
|
if err := i.orgRepository.CreateAndAdd(ctx, org, user); err != nil {
|
|
return nil, fmt.Errorf("error create new organization. %w", err)
|
|
}
|
|
|
|
return &org, nil
|
|
}
|