feature: fix user admin related bugs
This commit is contained in:
@ -384,3 +384,35 @@ func (q *Queries) UpdateProjectNameByID(ctx context.Context, arg UpdateProjectNa
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
|
||||
const updateProjectOwnerByOwnerID = `-- name: UpdateProjectOwnerByOwnerID :many
|
||||
UPDATE project SET owner = $2 WHERE owner = $1 RETURNING project_id
|
||||
`
|
||||
|
||||
type UpdateProjectOwnerByOwnerIDParams struct {
|
||||
Owner uuid.UUID `json:"owner"`
|
||||
Owner_2 uuid.UUID `json:"owner_2"`
|
||||
}
|
||||
|
||||
func (q *Queries) UpdateProjectOwnerByOwnerID(ctx context.Context, arg UpdateProjectOwnerByOwnerIDParams) ([]uuid.UUID, error) {
|
||||
rows, err := q.db.QueryContext(ctx, updateProjectOwnerByOwnerID, arg.Owner, arg.Owner_2)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []uuid.UUID
|
||||
for rows.Next() {
|
||||
var project_id uuid.UUID
|
||||
if err := rows.Scan(&project_id); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, project_id)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
@ -95,6 +95,7 @@ type Querier interface {
|
||||
UpdateProjectLabelName(ctx context.Context, arg UpdateProjectLabelNameParams) (ProjectLabel, error)
|
||||
UpdateProjectMemberRole(ctx context.Context, arg UpdateProjectMemberRoleParams) (ProjectMember, error)
|
||||
UpdateProjectNameByID(ctx context.Context, arg UpdateProjectNameByIDParams) (Project, error)
|
||||
UpdateProjectOwnerByOwnerID(ctx context.Context, arg UpdateProjectOwnerByOwnerIDParams) ([]uuid.UUID, error)
|
||||
UpdateTaskChecklistItemLocation(ctx context.Context, arg UpdateTaskChecklistItemLocationParams) (TaskChecklistItem, error)
|
||||
UpdateTaskChecklistItemName(ctx context.Context, arg UpdateTaskChecklistItemNameParams) (TaskChecklistItem, error)
|
||||
UpdateTaskChecklistName(ctx context.Context, arg UpdateTaskChecklistNameParams) (TaskChecklist, error)
|
||||
@ -105,6 +106,7 @@ type Querier interface {
|
||||
UpdateTaskLocation(ctx context.Context, arg UpdateTaskLocationParams) (Task, error)
|
||||
UpdateTaskName(ctx context.Context, arg UpdateTaskNameParams) (Task, error)
|
||||
UpdateTeamMemberRole(ctx context.Context, arg UpdateTeamMemberRoleParams) (TeamMember, error)
|
||||
UpdateTeamOwnerByOwnerID(ctx context.Context, arg UpdateTeamOwnerByOwnerIDParams) ([]uuid.UUID, error)
|
||||
UpdateUserAccountProfileAvatarURL(ctx context.Context, arg UpdateUserAccountProfileAvatarURLParams) (UserAccount, error)
|
||||
UpdateUserRole(ctx context.Context, arg UpdateUserRoleParams) (UserAccount, error)
|
||||
}
|
||||
|
@ -45,3 +45,6 @@ SELECT * FROM project WHERE owner = $1;
|
||||
|
||||
-- name: GetMemberProjectIDsForUserID :many
|
||||
SELECT project_id FROM project_member WHERE user_id = $1;
|
||||
|
||||
-- name: UpdateProjectOwnerByOwnerID :many
|
||||
UPDATE project SET owner = $2 WHERE owner = $1 RETURNING project_id;
|
||||
|
@ -21,3 +21,6 @@ SELECT * FROM team WHERE owner = $1;
|
||||
|
||||
-- name: GetMemberTeamIDsForUserID :many
|
||||
SELECT team_id FROM team_member WHERE user_id = $1;
|
||||
|
||||
-- name: UpdateTeamOwnerByOwnerID :many
|
||||
UPDATE team SET owner = $2 WHERE owner = $1 RETURNING team_id;
|
||||
|
@ -212,3 +212,35 @@ func (q *Queries) SetTeamOwner(ctx context.Context, arg SetTeamOwnerParams) (Tea
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
|
||||
const updateTeamOwnerByOwnerID = `-- name: UpdateTeamOwnerByOwnerID :many
|
||||
UPDATE team SET owner = $2 WHERE owner = $1 RETURNING team_id
|
||||
`
|
||||
|
||||
type UpdateTeamOwnerByOwnerIDParams struct {
|
||||
Owner uuid.UUID `json:"owner"`
|
||||
Owner_2 uuid.UUID `json:"owner_2"`
|
||||
}
|
||||
|
||||
func (q *Queries) UpdateTeamOwnerByOwnerID(ctx context.Context, arg UpdateTeamOwnerByOwnerIDParams) ([]uuid.UUID, error) {
|
||||
rows, err := q.db.QueryContext(ctx, updateTeamOwnerByOwnerID, arg.Owner, arg.Owner_2)
|
||||
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
|
||||
}
|
||||
|
@ -2859,6 +2859,7 @@ input LogoutUser {
|
||||
|
||||
input DeleteUserAccount {
|
||||
userID: UUID!
|
||||
newOwnerID: UUID
|
||||
}
|
||||
|
||||
type DeleteUserAccountPayload {
|
||||
@ -12139,6 +12140,12 @@ func (ec *executionContext) unmarshalInputDeleteUserAccount(ctx context.Context,
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
case "newOwnerID":
|
||||
var err error
|
||||
it.NewOwnerID, err = ec.unmarshalOUUID2ᚖgithubᚗcomᚋgoogleᚋuuidᚐUUID(ctx, v)
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -142,7 +142,8 @@ type DeleteTeamPayload struct {
|
||||
}
|
||||
|
||||
type DeleteUserAccount struct {
|
||||
UserID uuid.UUID `json:"userID"`
|
||||
UserID uuid.UUID `json:"userID"`
|
||||
NewOwnerID *uuid.UUID `json:"newOwnerID"`
|
||||
}
|
||||
|
||||
type DeleteUserAccountPayload struct {
|
||||
|
@ -625,6 +625,7 @@ input LogoutUser {
|
||||
|
||||
input DeleteUserAccount {
|
||||
userID: UUID!
|
||||
newOwnerID: UUID
|
||||
}
|
||||
|
||||
type DeleteUserAccountPayload {
|
||||
|
@ -756,6 +756,30 @@ func (r *mutationResolver) DeleteUserAccount(ctx context.Context, input DeleteUs
|
||||
return &DeleteUserAccountPayload{Ok: false}, err
|
||||
}
|
||||
|
||||
var newOwnerID uuid.UUID
|
||||
if input.NewOwnerID == nil {
|
||||
sysUser, err := r.Repository.GetUserAccountByUsername(ctx, "system")
|
||||
if err != nil {
|
||||
return &DeleteUserAccountPayload{Ok: false}, err
|
||||
}
|
||||
newOwnerID = sysUser.UserID
|
||||
} else {
|
||||
newOwnerID = *input.NewOwnerID
|
||||
}
|
||||
projectIDs, err := r.Repository.UpdateProjectOwnerByOwnerID(ctx, db.UpdateProjectOwnerByOwnerIDParams{Owner: user.UserID, Owner_2: newOwnerID})
|
||||
if err != sql.ErrNoRows && err != nil {
|
||||
return &DeleteUserAccountPayload{Ok: false}, err
|
||||
}
|
||||
for _, projectID := range projectIDs {
|
||||
r.Repository.DeleteProjectMember(ctx, db.DeleteProjectMemberParams{UserID: newOwnerID, ProjectID: projectID})
|
||||
}
|
||||
teamIDs, err := r.Repository.UpdateTeamOwnerByOwnerID(ctx, db.UpdateTeamOwnerByOwnerIDParams{Owner: user.UserID, Owner_2: newOwnerID})
|
||||
if err != sql.ErrNoRows && err != nil {
|
||||
return &DeleteUserAccountPayload{Ok: false}, err
|
||||
}
|
||||
for _, teamID := range teamIDs {
|
||||
r.Repository.DeleteTeamMember(ctx, db.DeleteTeamMemberParams{UserID: newOwnerID, TeamID: teamID})
|
||||
}
|
||||
err = r.Repository.DeleteUserAccountByID(ctx, input.UserID)
|
||||
if err != nil {
|
||||
return &DeleteUserAccountPayload{Ok: false}, err
|
||||
|
@ -47,6 +47,7 @@ input LogoutUser {
|
||||
|
||||
input DeleteUserAccount {
|
||||
userID: UUID!
|
||||
newOwnerID: UUID
|
||||
}
|
||||
|
||||
type DeleteUserAccountPayload {
|
||||
|
Reference in New Issue
Block a user