Skip to content

Commit

Permalink
[Users] Add delete user mutation fixes(#134)
Browse files Browse the repository at this point in the history
  • Loading branch information
jugshaurya committed Jun 10, 2020
1 parent f923413 commit f5726f4
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 6 deletions.
17 changes: 17 additions & 0 deletions api/graphql/mutation/userDisable/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import UserForm from 'Services/User/Form';
import BaseMutationResolver from 'Graphql/base/MutationResolver';

class UserDisable extends BaseMutationResolver {
resolve = () => {
const { viewer } = this.ctx;
const { id } = this.args;
const form = new UserForm({
viewer,
id,
});

return form.delete();
};
}

export default UserDisable.resolver();
3 changes: 3 additions & 0 deletions api/graphql/mutation/userDisable/type.graphql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
extend type Mutation {
userDisable(id: ID!): User!
}
1 change: 1 addition & 0 deletions api/routes/login/callback.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class LoginCallback extends BaseController {

const user = new User();
await user.loadByUsername(profile.username);
if (user.deleted_at) return App.redirectToHome(res);
if (user.exists) {
await user.syncProfile(profile);
} else {
Expand Down
11 changes: 6 additions & 5 deletions api/services/AuthorizationPolicy/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ policy.include('features', (p) => {
});

policy.include('user', (p) => {
p.register('impersonate', ({ viewer }) => isAdmin(viewer));
p.register(['impersonate', 'delete'], ({ viewer }) => isAdmin(viewer));
p.register('read', ({ viewer }) => isUser(viewer));
p.register(
'update',
Expand Down Expand Up @@ -126,10 +126,11 @@ policy.include('calendarEventInvite', (p) => {
({ viewer, entity: { event, status }, action }) =>
isOrganiser(event, viewer) ||
isAdmin(viewer) ||
isUser(viewer)
&& action === ':create'
&& event?.is_requestable
&& (status === 'Requested' || status === 'Accepted' && event?.auto_accept_requests)
(isUser(viewer) &&
action === ':create' &&
event?.is_requestable &&
(status === 'Requested' ||
(status === 'Accepted' && event?.auto_accept_requests))),
);
p.register(
'update',
Expand Down
13 changes: 13 additions & 0 deletions api/services/User/Form.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import Models from 'Models';
import User from './';
import { isEmail, isPhoneNumber } from 'Utils/validators';
import BaseModelForm from 'Services/BaseModelService/Form';
import { saveInstance, requireInstance } from 'Services/BaseModelService';

class UserForm extends BaseModelForm {
name = 'user';
Expand All @@ -23,6 +25,17 @@ class UserForm extends BaseModelForm {
onUpdate() {
return new User(this.instance).update(this.body);
}

@saveInstance
@requireInstance
async beforeDelete() {
return Models.User.findByPk(this.id);
}

@requireInstance
onDelete() {
return new User(this.instance).delete();
}
}

export default UserForm;
14 changes: 13 additions & 1 deletion api/services/User/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import Availability from './Loaders/Availability';

export default class User extends BaseModelService {
static findByUsername(username) {
return Models.User.findOne({ where: { username } });
return Models.User.findOne({ where: { username }, paranoid: false });
}

static findById(id) {
Expand Down Expand Up @@ -143,4 +143,16 @@ export default class User extends BaseModelService {
config.app.secret,
);
}

@saveInstance
@requireInstance
async delete() {
const count = await Models.User.destroy({
where: { id: this.instance.id },
});

if (count) return null;

return this.instance;
}
}
5 changes: 5 additions & 0 deletions app/mutations/userDisable.graphql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
mutation UserDisable($id: ID!) {
disableUser: UserDisable(id: $id) {
id
}
}

0 comments on commit f5726f4

Please sign in to comment.