| 1 | // Code generated by sqlc. DO NOT EDIT. |
| 2 | // versions: |
| 3 | // sqlc v1.31.1 |
| 4 | // source: members.sql |
| 5 | |
| 6 | package orgsdb |
| 7 | |
| 8 | import ( |
| 9 | "context" |
| 10 | |
| 11 | "github.com/jackc/pgx/v5/pgtype" |
| 12 | ) |
| 13 | |
| 14 | const addOrgMember = `-- name: AddOrgMember :exec |
| 15 | |
| 16 | |
| 17 | INSERT INTO org_members (org_id, user_id, role, invited_by_user_id) |
| 18 | VALUES ($1, $2, $3, $4::bigint) |
| 19 | ON CONFLICT (org_id, user_id) DO NOTHING |
| 20 | ` |
| 21 | |
| 22 | type AddOrgMemberParams struct { |
| 23 | OrgID int64 |
| 24 | UserID int64 |
| 25 | Role OrgRole |
| 26 | InvitedByUserID pgtype.Int8 |
| 27 | } |
| 28 | |
| 29 | // SPDX-License-Identifier: AGPL-3.0-or-later |
| 30 | // ─── org_members ─────────────────────────────────────────────────── |
| 31 | // Idempotent on (org_id, user_id): re-adding a member is a no-op |
| 32 | // rather than an error. The role is taken from the supplied row when |
| 33 | // the member is new; existing rows keep their current role (use |
| 34 | // ChangeOrgMemberRole to update). |
| 35 | func (q *Queries) AddOrgMember(ctx context.Context, db DBTX, arg AddOrgMemberParams) error { |
| 36 | _, err := db.Exec(ctx, addOrgMember, |
| 37 | arg.OrgID, |
| 38 | arg.UserID, |
| 39 | arg.Role, |
| 40 | arg.InvitedByUserID, |
| 41 | ) |
| 42 | return err |
| 43 | } |
| 44 | |
| 45 | const changeOrgMemberRole = `-- name: ChangeOrgMemberRole :exec |
| 46 | UPDATE org_members SET role = $3 WHERE org_id = $1 AND user_id = $2 |
| 47 | ` |
| 48 | |
| 49 | type ChangeOrgMemberRoleParams struct { |
| 50 | OrgID int64 |
| 51 | UserID int64 |
| 52 | Role OrgRole |
| 53 | } |
| 54 | |
| 55 | func (q *Queries) ChangeOrgMemberRole(ctx context.Context, db DBTX, arg ChangeOrgMemberRoleParams) error { |
| 56 | _, err := db.Exec(ctx, changeOrgMemberRole, arg.OrgID, arg.UserID, arg.Role) |
| 57 | return err |
| 58 | } |
| 59 | |
| 60 | const countOrgOwners = `-- name: CountOrgOwners :one |
| 61 | SELECT count(*) FROM org_members WHERE org_id = $1 AND role = 'owner' |
| 62 | ` |
| 63 | |
| 64 | // Used by the last-owner protection: refuses to remove or demote the |
| 65 | // only owner. Caller compares `count = 1` before allowing the change. |
| 66 | func (q *Queries) CountOrgOwners(ctx context.Context, db DBTX, orgID int64) (int64, error) { |
| 67 | row := db.QueryRow(ctx, countOrgOwners, orgID) |
| 68 | var count int64 |
| 69 | err := row.Scan(&count) |
| 70 | return count, err |
| 71 | } |
| 72 | |
| 73 | const getOrgMember = `-- name: GetOrgMember :one |
| 74 | SELECT org_id, user_id, role, invited_by_user_id, joined_at FROM org_members WHERE org_id = $1 AND user_id = $2 |
| 75 | ` |
| 76 | |
| 77 | type GetOrgMemberParams struct { |
| 78 | OrgID int64 |
| 79 | UserID int64 |
| 80 | } |
| 81 | |
| 82 | func (q *Queries) GetOrgMember(ctx context.Context, db DBTX, arg GetOrgMemberParams) (OrgMember, error) { |
| 83 | row := db.QueryRow(ctx, getOrgMember, arg.OrgID, arg.UserID) |
| 84 | var i OrgMember |
| 85 | err := row.Scan( |
| 86 | &i.OrgID, |
| 87 | &i.UserID, |
| 88 | &i.Role, |
| 89 | &i.InvitedByUserID, |
| 90 | &i.JoinedAt, |
| 91 | ) |
| 92 | return i, err |
| 93 | } |
| 94 | |
| 95 | const listOrgMembers = `-- name: ListOrgMembers :many |
| 96 | SELECT m.org_id, m.user_id, m.role, m.invited_by_user_id, m.joined_at, |
| 97 | u.username, u.display_name |
| 98 | FROM org_members m |
| 99 | JOIN users u ON u.id = m.user_id |
| 100 | WHERE m.org_id = $1 |
| 101 | AND u.deleted_at IS NULL |
| 102 | ORDER BY m.role ASC, u.username ASC |
| 103 | ` |
| 104 | |
| 105 | type ListOrgMembersRow struct { |
| 106 | OrgID int64 |
| 107 | UserID int64 |
| 108 | Role OrgRole |
| 109 | InvitedByUserID pgtype.Int8 |
| 110 | JoinedAt pgtype.Timestamptz |
| 111 | Username string |
| 112 | DisplayName string |
| 113 | } |
| 114 | |
| 115 | // Members of an org with usernames + roles for the people page. |
| 116 | func (q *Queries) ListOrgMembers(ctx context.Context, db DBTX, orgID int64) ([]ListOrgMembersRow, error) { |
| 117 | rows, err := db.Query(ctx, listOrgMembers, orgID) |
| 118 | if err != nil { |
| 119 | return nil, err |
| 120 | } |
| 121 | defer rows.Close() |
| 122 | items := []ListOrgMembersRow{} |
| 123 | for rows.Next() { |
| 124 | var i ListOrgMembersRow |
| 125 | if err := rows.Scan( |
| 126 | &i.OrgID, |
| 127 | &i.UserID, |
| 128 | &i.Role, |
| 129 | &i.InvitedByUserID, |
| 130 | &i.JoinedAt, |
| 131 | &i.Username, |
| 132 | &i.DisplayName, |
| 133 | ); err != nil { |
| 134 | return nil, err |
| 135 | } |
| 136 | items = append(items, i) |
| 137 | } |
| 138 | if err := rows.Err(); err != nil { |
| 139 | return nil, err |
| 140 | } |
| 141 | return items, nil |
| 142 | } |
| 143 | |
| 144 | const listOrgsForUser = `-- name: ListOrgsForUser :many |
| 145 | SELECT m.org_id, m.role, o.slug, o.display_name, o.avatar_object_key |
| 146 | FROM org_members m |
| 147 | JOIN orgs o ON o.id = m.org_id |
| 148 | WHERE m.user_id = $1 |
| 149 | AND o.deleted_at IS NULL |
| 150 | ORDER BY o.slug ASC |
| 151 | ` |
| 152 | |
| 153 | type ListOrgsForUserRow struct { |
| 154 | OrgID int64 |
| 155 | Role OrgRole |
| 156 | Slug string |
| 157 | DisplayName string |
| 158 | AvatarObjectKey pgtype.Text |
| 159 | } |
| 160 | |
| 161 | // Profile-page input: every org a user is a member of, with role. |
| 162 | func (q *Queries) ListOrgsForUser(ctx context.Context, db DBTX, userID int64) ([]ListOrgsForUserRow, error) { |
| 163 | rows, err := db.Query(ctx, listOrgsForUser, userID) |
| 164 | if err != nil { |
| 165 | return nil, err |
| 166 | } |
| 167 | defer rows.Close() |
| 168 | items := []ListOrgsForUserRow{} |
| 169 | for rows.Next() { |
| 170 | var i ListOrgsForUserRow |
| 171 | if err := rows.Scan( |
| 172 | &i.OrgID, |
| 173 | &i.Role, |
| 174 | &i.Slug, |
| 175 | &i.DisplayName, |
| 176 | &i.AvatarObjectKey, |
| 177 | ); err != nil { |
| 178 | return nil, err |
| 179 | } |
| 180 | items = append(items, i) |
| 181 | } |
| 182 | if err := rows.Err(); err != nil { |
| 183 | return nil, err |
| 184 | } |
| 185 | return items, nil |
| 186 | } |
| 187 | |
| 188 | const removeOrgMember = `-- name: RemoveOrgMember :exec |
| 189 | DELETE FROM org_members WHERE org_id = $1 AND user_id = $2 |
| 190 | ` |
| 191 | |
| 192 | type RemoveOrgMemberParams struct { |
| 193 | OrgID int64 |
| 194 | UserID int64 |
| 195 | } |
| 196 | |
| 197 | func (q *Queries) RemoveOrgMember(ctx context.Context, db DBTX, arg RemoveOrgMemberParams) error { |
| 198 | _, err := db.Exec(ctx, removeOrgMember, arg.OrgID, arg.UserID) |
| 199 | return err |
| 200 | } |
| 201 |