Squash the pre-production migration history into fresh core, fedwiki, and stripe baselines and reduce the canonical source list to those three streams. Update sqlc configs, generated queries, raw SQL, tests, and docs while keeping provider tables schema-qualified. BREAKING: existing local database volumes must be wiped because goose version history restarts from the new baselines.
255 lines
6.8 KiB
Go
255 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,
|
|
o.slug AS org_slug,
|
|
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"`
|
|
OrgSlug string `json:"org_slug"`
|
|
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.OrgSlug,
|
|
&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
|
|
}
|