List returns a list of organizations filtered by options.
(ctx context.Context, opts ListOrgsOptions)
| 27 | |
| 28 | // List returns a list of organizations filtered by options. |
| 29 | func (s *OrganizationsStore) List(ctx context.Context, opts ListOrgsOptions) ([]*Organization, error) { |
| 30 | if opts.MemberID <= 0 { |
| 31 | return nil, errors.New("MemberID must be greater than 0") |
| 32 | } |
| 33 | |
| 34 | /* |
| 35 | Equivalent SQL for PostgreSQL: |
| 36 | |
| 37 | SELECT * FROM "org" |
| 38 | JOIN org_user ON org_user.org_id = org.id |
| 39 | WHERE |
| 40 | org_user.uid = @memberID |
| 41 | [AND org_user.is_public = @includePrivateMembers] |
| 42 | ORDER BY org.id ASC |
| 43 | */ |
| 44 | tx := s.db.WithContext(ctx). |
| 45 | Joins(dbutil.Quote("JOIN org_user ON org_user.org_id = %s.id", "user")). |
| 46 | Where("org_user.uid = ?", opts.MemberID). |
| 47 | Order(dbutil.Quote("%s.id ASC", "user")) |
| 48 | if !opts.IncludePrivateMembers { |
| 49 | tx = tx.Where("org_user.is_public = ?", true) |
| 50 | } |
| 51 | |
| 52 | var orgs []*Organization |
| 53 | return orgs, tx.Find(&orgs).Error |
| 54 | } |
| 55 | |
| 56 | // SearchByName returns a list of organizations whose username or full name |
| 57 | // matches the given keyword case-insensitively. Results are paginated by given |