Files
member-console/internal/organization/members.sql.go
T
cgalo5758 dd3962990b Adopt entity keys and add invoice numbers
Replace the entity slugs on organizations, workspaces, resource pools,
and
plan ladders with nullable `key` columns and add keys to products,
prices,
and entitlement sets. Rename `providers.slug` to `provider` and add
partial
unique indexes for system and org role names.

Assign invoice numbers per billing account from a gapless transactional
counter; Stripe's number moves to the invoice mapping as an external
reference.

Seeds, fixtures, and the operator lookup address rows by key, and the
returning-login resync no longer blanks a display name when the IdP
sends
no `name` claim.
2026-08-29 20:12:04 -05:00

252 lines
6.8 KiB
Go

// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.29.0
// source: members.sql
package organization
import (
"context"
"database/sql"
"time"
)
const createOrgMember = `-- name: CreateOrgMember :one
INSERT INTO core.org_members (org_id, person_id, role_id)
VALUES ($1, $2, $3)
RETURNING org_member_id, org_id, person_id, role_id, status, joined_at, removed_at, created_at, updated_at
`
type CreateOrgMemberParams struct {
OrgID string `json:"org_id"`
PersonID string `json:"person_id"`
RoleID string `json:"role_id"`
}
func (q *Queries) CreateOrgMember(ctx context.Context, arg CreateOrgMemberParams) (OrgMember, error) {
row := q.db.QueryRowContext(ctx, createOrgMember, arg.OrgID, arg.PersonID, arg.RoleID)
var i OrgMember
err := row.Scan(
&i.OrgMemberID,
&i.OrgID,
&i.PersonID,
&i.RoleID,
&i.Status,
&i.JoinedAt,
&i.RemovedAt,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
const getOrgMemberByPersonAndOrg = `-- name: GetOrgMemberByPersonAndOrg :one
SELECT org_member_id, org_id, person_id, role_id, status, joined_at, removed_at, created_at, updated_at FROM core.org_members
WHERE person_id = $1 AND org_id = $2
`
type GetOrgMemberByPersonAndOrgParams struct {
PersonID string `json:"person_id"`
OrgID string `json:"org_id"`
}
func (q *Queries) GetOrgMemberByPersonAndOrg(ctx context.Context, arg GetOrgMemberByPersonAndOrgParams) (OrgMember, error) {
row := q.db.QueryRowContext(ctx, getOrgMemberByPersonAndOrg, arg.PersonID, arg.OrgID)
var i OrgMember
err := row.Scan(
&i.OrgMemberID,
&i.OrgID,
&i.PersonID,
&i.RoleID,
&i.Status,
&i.JoinedAt,
&i.RemovedAt,
&i.CreatedAt,
&i.UpdatedAt,
)
return i, err
}
const getOrgMembersByOrgID = `-- name: GetOrgMembersByOrgID :many
SELECT om.org_member_id, om.org_id, om.person_id, om.role_id, om.status, om.joined_at, om.removed_at, om.created_at, om.updated_at, p.display_name, p.primary_email, r.role_name
FROM core.org_members om
JOIN core.persons p ON p.person_id = om.person_id
JOIN core.roles r ON r.role_id = om.role_id
WHERE om.org_id = $1
ORDER BY p.display_name
`
type GetOrgMembersByOrgIDRow struct {
OrgMemberID string `json:"org_member_id"`
OrgID string `json:"org_id"`
PersonID string `json:"person_id"`
RoleID string `json:"role_id"`
Status string `json:"status"`
JoinedAt time.Time `json:"joined_at"`
RemovedAt sql.NullTime `json:"removed_at"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DisplayName string `json:"display_name"`
PrimaryEmail string `json:"primary_email"`
RoleName string `json:"role_name"`
}
func (q *Queries) GetOrgMembersByOrgID(ctx context.Context, orgID string) ([]GetOrgMembersByOrgIDRow, error) {
rows, err := q.db.QueryContext(ctx, getOrgMembersByOrgID, orgID)
if err != nil {
return nil, err
}
defer rows.Close()
items := []GetOrgMembersByOrgIDRow{}
for rows.Next() {
var i GetOrgMembersByOrgIDRow
if err := rows.Scan(
&i.OrgMemberID,
&i.OrgID,
&i.PersonID,
&i.RoleID,
&i.Status,
&i.JoinedAt,
&i.RemovedAt,
&i.CreatedAt,
&i.UpdatedAt,
&i.DisplayName,
&i.PrimaryEmail,
&i.RoleName,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const listActiveMembersByOrgID = `-- name: ListActiveMembersByOrgID :many
SELECT
om.org_member_id,
om.person_id,
om.role_id,
om.joined_at,
p.display_name,
p.primary_email,
r.role_name
FROM core.org_members om
JOIN core.persons p ON p.person_id = om.person_id
JOIN core.roles r ON r.role_id = om.role_id
WHERE om.org_id = $1
AND om.status = 'active'
ORDER BY p.display_name ASC
LIMIT 200
`
type ListActiveMembersByOrgIDRow struct {
OrgMemberID string `json:"org_member_id"`
PersonID string `json:"person_id"`
RoleID string `json:"role_id"`
JoinedAt time.Time `json:"joined_at"`
DisplayName string `json:"display_name"`
PrimaryEmail string `json:"primary_email"`
RoleName string `json:"role_name"`
}
// Operator composite's Members section. Active members only (status='active',
// excluding removed/historical rows). Defensive LIMIT 200 per design D5;
// pagination is YAGNI until a real org pushes 50+ members.
func (q *Queries) ListActiveMembersByOrgID(ctx context.Context, orgID string) ([]ListActiveMembersByOrgIDRow, error) {
rows, err := q.db.QueryContext(ctx, listActiveMembersByOrgID, orgID)
if err != nil {
return nil, err
}
defer rows.Close()
items := []ListActiveMembersByOrgIDRow{}
for rows.Next() {
var i ListActiveMembersByOrgIDRow
if err := rows.Scan(
&i.OrgMemberID,
&i.PersonID,
&i.RoleID,
&i.JoinedAt,
&i.DisplayName,
&i.PrimaryEmail,
&i.RoleName,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const listActiveMembershipsByPersonID = `-- name: ListActiveMembershipsByPersonID :many
SELECT
om.org_member_id,
om.org_id,
om.role_id,
om.joined_at,
o.name AS org_name,
r.role_name
FROM core.org_members om
JOIN core.organizations o ON o.org_id = om.org_id
JOIN core.roles r ON r.role_id = om.role_id
WHERE om.person_id = $1
AND om.status = 'active'
ORDER BY om.joined_at DESC
LIMIT 200
`
type ListActiveMembershipsByPersonIDRow struct {
OrgMemberID string `json:"org_member_id"`
OrgID string `json:"org_id"`
RoleID string `json:"role_id"`
JoinedAt time.Time `json:"joined_at"`
OrgName string `json:"org_name"`
RoleName string `json:"role_name"`
}
// Person-detail "Org memberships" section. Returns each org the person
// belongs to (active memberships only) with the org's display fields and
// the person's role at that org. Sorted by joined_at DESC so the most
// recent membership appears first — operators usually want "what's the
// person doing now" rather than "where did they start."
func (q *Queries) ListActiveMembershipsByPersonID(ctx context.Context, personID string) ([]ListActiveMembershipsByPersonIDRow, error) {
rows, err := q.db.QueryContext(ctx, listActiveMembershipsByPersonID, personID)
if err != nil {
return nil, err
}
defer rows.Close()
items := []ListActiveMembershipsByPersonIDRow{}
for rows.Next() {
var i ListActiveMembershipsByPersonIDRow
if err := rows.Scan(
&i.OrgMemberID,
&i.OrgID,
&i.RoleID,
&i.JoinedAt,
&i.OrgName,
&i.RoleName,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}