mirror of
https://github.com/get-drexa/drive.git
synced 2026-02-02 17:11:17 +00:00
81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
package account
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"errors"
|
|
|
|
"github.com/get-drexa/drexa/internal/database"
|
|
"github.com/google/uuid"
|
|
"github.com/uptrace/bun"
|
|
)
|
|
|
|
type Service struct{}
|
|
|
|
func NewService() *Service {
|
|
return &Service{}
|
|
}
|
|
|
|
func (s *Service) CreateAccount(ctx context.Context, db bun.IDB, orgID uuid.UUID, userID uuid.UUID, role Role, status Status) (*Account, error) {
|
|
id, err := newAccountID()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
acc := &Account{
|
|
ID: id,
|
|
OrgID: orgID,
|
|
UserID: userID,
|
|
Role: role,
|
|
Status: status,
|
|
}
|
|
|
|
_, err = db.NewInsert().Model(acc).Returning("*").Exec(ctx)
|
|
if err != nil {
|
|
if database.IsUniqueViolation(err) {
|
|
return nil, ErrAccountAlreadyExists
|
|
}
|
|
return nil, err
|
|
}
|
|
return acc, nil
|
|
}
|
|
|
|
func (s *Service) ListAccounts(ctx context.Context, db bun.IDB, userID uuid.UUID) ([]*Account, error) {
|
|
var accounts []*Account
|
|
err := db.NewSelect().Model(&accounts).Where("user_id = ?", userID).Scan(ctx)
|
|
if err != nil {
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
return make([]*Account, 0), nil
|
|
}
|
|
return nil, err
|
|
}
|
|
return accounts, nil
|
|
}
|
|
|
|
func (s *Service) AccountByID(ctx context.Context, db bun.IDB, userID uuid.UUID, id uuid.UUID) (*Account, error) {
|
|
var acc Account
|
|
err := db.NewSelect().Model(&acc).Where("user_id = ?", userID).Where("id = ?", id).Scan(ctx)
|
|
if err != nil {
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
return nil, ErrAccountNotFound
|
|
}
|
|
return nil, err
|
|
}
|
|
return &acc, nil
|
|
}
|
|
|
|
func (s *Service) FindUserAccountInOrg(ctx context.Context, db bun.IDB, orgID uuid.UUID, userID uuid.UUID) (*Account, error) {
|
|
var acc Account
|
|
err := db.NewSelect().Model(&acc).
|
|
Where("org_id = ?", orgID).
|
|
Where("user_id = ?", userID).
|
|
Scan(ctx)
|
|
if err != nil {
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
return nil, ErrAccountNotFound
|
|
}
|
|
return nil, err
|
|
}
|
|
return &acc, nil
|
|
}
|