Go · 5140 bytes Raw Blame History
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