mirror of
https://github.com/get-drexa/drive.git
synced 2026-02-02 13:21:17 +00:00
feat(backend): return list of orgs in login resp
This commit is contained in:
@@ -27,7 +27,7 @@ func NewMiddleware(orgService *Service, accountService *account.Service, db *bun
|
||||
var org *Organization
|
||||
var err error
|
||||
|
||||
if slug == reservedSlug {
|
||||
if slug == ReservedSlug {
|
||||
org, err = orgService.PersonalOrganizationForUser(c.Context(), db, u.ID)
|
||||
} else {
|
||||
org, err = orgService.OrganizationBySlug(c.Context(), db, slug)
|
||||
|
||||
@@ -76,3 +76,21 @@ func (s *Service) PersonalOrganizationForUser(ctx context.Context, db bun.IDB, u
|
||||
}
|
||||
return &org, nil
|
||||
}
|
||||
|
||||
func (s *Service) ListOrganizationsForUser(ctx context.Context, db bun.IDB, userID uuid.UUID) ([]Organization, error) {
|
||||
orgs := make([]Organization, 0)
|
||||
err := db.NewSelect().
|
||||
Model(&orgs).
|
||||
Join("JOIN accounts ON accounts.org_id = organization.id").
|
||||
Where("accounts.user_id = ?", userID).
|
||||
Where("accounts.status = ?", account.StatusActive).
|
||||
Order("organization.kind ASC", "organization.name ASC").
|
||||
Scan(ctx)
|
||||
if err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return orgs, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
return orgs, nil
|
||||
}
|
||||
|
||||
@@ -11,9 +11,12 @@ const (
|
||||
slugMaxLength = 63
|
||||
)
|
||||
|
||||
// ReservedSlug is the special organization slug used to address the authenticated
|
||||
// user's personal organization in API routes (e.g. /api/my/...).
|
||||
const ReservedSlug = "my"
|
||||
|
||||
var (
|
||||
slugPattern = regexp.MustCompile(`^[a-z0-9]+(?:-[a-z0-9]+)*$`)
|
||||
reservedSlug = "my"
|
||||
slugPattern = regexp.MustCompile(`^[a-z0-9]+(?:-[a-z0-9]+)*$`)
|
||||
)
|
||||
|
||||
var ErrInvalidSlug = errors.New("invalid organization slug")
|
||||
@@ -24,7 +27,7 @@ func NormalizeSlug(input string) (string, error) {
|
||||
if len(slug) < slugMinLength || len(slug) > slugMaxLength {
|
||||
return "", ErrInvalidSlug
|
||||
}
|
||||
if slug == reservedSlug {
|
||||
if slug == ReservedSlug {
|
||||
return "", ErrInvalidSlug
|
||||
}
|
||||
if !slugPattern.MatchString(slug) {
|
||||
|
||||
Reference in New Issue
Block a user