e64f6f8569
enforces user admin role requirement for - creating / deleting / setting role for organization users - creating / deleting / setting role for project users - updating project name - deleting project hides action elements based on role for - admin console - team settings if team is only visible through project membership - add project tile if not team admin - project name text editor if not team / project admin - add redirect from team page if settings only visible through project membership - add redirect from admin console if not org admin role enforcement is handled on the api side through a custom GraphQL directive `hasRole`. on the client side, role information is fetched in the TopNavbar's `me` query and stored in the `UserContext`. there is a custom hook, `useCurrentUser`, that provides a user object with two functions, `isVisibile` & `isAdmin` which is used to check roles in order to render/hide relevant UI elements.
236 lines
5.7 KiB
Go
236 lines
5.7 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// source: team.sql
|
|
|
|
package db
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
const createTeam = `-- name: CreateTeam :one
|
|
INSERT INTO team (organization_id, created_at, name) VALUES ($1, $2, $3) RETURNING team_id, created_at, name, organization_id
|
|
`
|
|
|
|
type CreateTeamParams struct {
|
|
OrganizationID uuid.UUID `json:"organization_id"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
func (q *Queries) CreateTeam(ctx context.Context, arg CreateTeamParams) (Team, error) {
|
|
row := q.db.QueryRowContext(ctx, createTeam, arg.OrganizationID, arg.CreatedAt, arg.Name)
|
|
var i Team
|
|
err := row.Scan(
|
|
&i.TeamID,
|
|
&i.CreatedAt,
|
|
&i.Name,
|
|
&i.OrganizationID,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const deleteTeamByID = `-- name: DeleteTeamByID :exec
|
|
DELETE FROM team WHERE team_id = $1
|
|
`
|
|
|
|
func (q *Queries) DeleteTeamByID(ctx context.Context, teamID uuid.UUID) error {
|
|
_, err := q.db.ExecContext(ctx, deleteTeamByID, teamID)
|
|
return err
|
|
}
|
|
|
|
const getAllTeams = `-- name: GetAllTeams :many
|
|
SELECT team_id, created_at, name, organization_id FROM team
|
|
`
|
|
|
|
func (q *Queries) GetAllTeams(ctx context.Context) ([]Team, error) {
|
|
rows, err := q.db.QueryContext(ctx, getAllTeams)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []Team
|
|
for rows.Next() {
|
|
var i Team
|
|
if err := rows.Scan(
|
|
&i.TeamID,
|
|
&i.CreatedAt,
|
|
&i.Name,
|
|
&i.OrganizationID,
|
|
); 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 getMemberTeamIDsForUserID = `-- name: GetMemberTeamIDsForUserID :many
|
|
SELECT team_id FROM team_member WHERE user_id = $1
|
|
`
|
|
|
|
func (q *Queries) GetMemberTeamIDsForUserID(ctx context.Context, userID uuid.UUID) ([]uuid.UUID, error) {
|
|
rows, err := q.db.QueryContext(ctx, getMemberTeamIDsForUserID, userID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []uuid.UUID
|
|
for rows.Next() {
|
|
var team_id uuid.UUID
|
|
if err := rows.Scan(&team_id); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, team_id)
|
|
}
|
|
if err := rows.Close(); err != nil {
|
|
return nil, err
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const getTeamByID = `-- name: GetTeamByID :one
|
|
SELECT team_id, created_at, name, organization_id FROM team WHERE team_id = $1
|
|
`
|
|
|
|
func (q *Queries) GetTeamByID(ctx context.Context, teamID uuid.UUID) (Team, error) {
|
|
row := q.db.QueryRowContext(ctx, getTeamByID, teamID)
|
|
var i Team
|
|
err := row.Scan(
|
|
&i.TeamID,
|
|
&i.CreatedAt,
|
|
&i.Name,
|
|
&i.OrganizationID,
|
|
)
|
|
return i, err
|
|
}
|
|
|
|
const getTeamRoleForUserID = `-- name: GetTeamRoleForUserID :one
|
|
SELECT team_id, role_code FROM team_member WHERE user_id = $1 AND team_id = $2
|
|
`
|
|
|
|
type GetTeamRoleForUserIDParams struct {
|
|
UserID uuid.UUID `json:"user_id"`
|
|
TeamID uuid.UUID `json:"team_id"`
|
|
}
|
|
|
|
type GetTeamRoleForUserIDRow struct {
|
|
TeamID uuid.UUID `json:"team_id"`
|
|
RoleCode string `json:"role_code"`
|
|
}
|
|
|
|
func (q *Queries) GetTeamRoleForUserID(ctx context.Context, arg GetTeamRoleForUserIDParams) (GetTeamRoleForUserIDRow, error) {
|
|
row := q.db.QueryRowContext(ctx, getTeamRoleForUserID, arg.UserID, arg.TeamID)
|
|
var i GetTeamRoleForUserIDRow
|
|
err := row.Scan(&i.TeamID, &i.RoleCode)
|
|
return i, err
|
|
}
|
|
|
|
const getTeamRolesForUserID = `-- name: GetTeamRolesForUserID :many
|
|
SELECT team_id, role_code FROM team_member WHERE user_id = $1
|
|
`
|
|
|
|
type GetTeamRolesForUserIDRow struct {
|
|
TeamID uuid.UUID `json:"team_id"`
|
|
RoleCode string `json:"role_code"`
|
|
}
|
|
|
|
func (q *Queries) GetTeamRolesForUserID(ctx context.Context, userID uuid.UUID) ([]GetTeamRolesForUserIDRow, error) {
|
|
rows, err := q.db.QueryContext(ctx, getTeamRolesForUserID, userID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []GetTeamRolesForUserIDRow
|
|
for rows.Next() {
|
|
var i GetTeamRolesForUserIDRow
|
|
if err := rows.Scan(&i.TeamID, &i.RoleCode); 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 getTeamsForOrganization = `-- name: GetTeamsForOrganization :many
|
|
SELECT team_id, created_at, name, organization_id FROM team WHERE organization_id = $1
|
|
`
|
|
|
|
func (q *Queries) GetTeamsForOrganization(ctx context.Context, organizationID uuid.UUID) ([]Team, error) {
|
|
rows, err := q.db.QueryContext(ctx, getTeamsForOrganization, organizationID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []Team
|
|
for rows.Next() {
|
|
var i Team
|
|
if err := rows.Scan(
|
|
&i.TeamID,
|
|
&i.CreatedAt,
|
|
&i.Name,
|
|
&i.OrganizationID,
|
|
); 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 getTeamsForUserIDWhereAdmin = `-- name: GetTeamsForUserIDWhereAdmin :many
|
|
SELECT team.team_id, team.created_at, team.name, team.organization_id FROM team_member INNER JOIN team
|
|
ON team.team_id = team_member.team_id WHERE (role_code = 'admin' OR role_code = 'member') AND user_id = $1
|
|
`
|
|
|
|
func (q *Queries) GetTeamsForUserIDWhereAdmin(ctx context.Context, userID uuid.UUID) ([]Team, error) {
|
|
rows, err := q.db.QueryContext(ctx, getTeamsForUserIDWhereAdmin, userID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []Team
|
|
for rows.Next() {
|
|
var i Team
|
|
if err := rows.Scan(
|
|
&i.TeamID,
|
|
&i.CreatedAt,
|
|
&i.Name,
|
|
&i.OrganizationID,
|
|
); 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
|
|
}
|