Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add roles resolver #645

Open
wants to merge 8 commits into
base: user/create-role-and-permissions-sesssion-validator-v2
Choose a base branch
from
1 change: 1 addition & 0 deletions packages/user/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ export { default as invitationRoutes } from "./model/invitations/controller";
export { default as permissionResolver } from "./model/permissions/resolver";
export { default as permissionRoutes } from "./model/permissions/controller";
export { default as RoleService } from "./model/roles/service";
export { default as roleResolver } from "./model/roles/resolver";
export { default as roleRoutes } from "./model/roles/controller";
// [DU 2023-AUG-07] use formatDate from "@dzangolab/fastify-slonik" package
export { formatDate } from "@dzangolab/fastify-slonik";
Expand Down
160 changes: 160 additions & 0 deletions packages/user/src/model/roles/resolver.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
import mercurius from "mercurius";

import Service from "./service";
import CustomApiError from "../../customApiError";

import type { RoleCreateInput, RoleUpdateInput } from "../../types";
import type { FilterInput, SortInput } from "@dzangolab/fastify-slonik";
import type { MercuriusContext } from "mercurius";

const Mutation = {
createRole: async (
parent: unknown,
arguments_: {
data: RoleCreateInput;
},
context: MercuriusContext
) => {
const { app, config, database } = context;

const service = new Service(config, database);

try {
const role = await service.create(arguments_.data);

return role;
} catch (error) {
if (error instanceof CustomApiError) {
const mercuriusError = new mercurius.ErrorWithProps(error.name);

mercuriusError.statusCode = error.statusCode;

return mercuriusError;
}

app.log.error(error);

const mercuriusError = new mercurius.ErrorWithProps(
"Oops, Something went wrong"
);

mercuriusError.statusCode = 500;

return mercuriusError;
}
},

deleteRole: async (
parent: unknown,
arguments_: {
id: number;
},
context: MercuriusContext
) => {
const { app, config, database } = context;

const service = new Service(config, database);

try {
const role = await service.delete(arguments_.id);

return role;
} catch (error) {
if (error instanceof CustomApiError) {
const mercuriusError = new mercurius.ErrorWithProps(error.name);

mercuriusError.statusCode = error.statusCode;

return mercuriusError;
}

app.log.error(error);

const mercuriusError = new mercurius.ErrorWithProps(
"Oops, Something went wrong"
);

mercuriusError.statusCode = 500;

return mercuriusError;
}
},

updateRole: async (
parent: unknown,
arguments_: {
id: number;
data: RoleUpdateInput;
},
context: MercuriusContext
) => {
const { app, config, database } = context;

const service = new Service(config, database);

try {
const role = await service.update(
arguments_.id as number,
arguments_.data as RoleUpdateInput
);

return role;
} catch (error) {
if (error instanceof CustomApiError) {
const mercuriusError = new mercurius.ErrorWithProps(error.name);

mercuriusError.statusCode = error.statusCode;

return mercuriusError;
}

app.log.error(error);

const mercuriusError = new mercurius.ErrorWithProps(
"Oops, Something went wrong"
);

mercuriusError.statusCode = 500;

return mercuriusError;
}
},
};

const Query = {
role: async (
parent: unknown,
arguments_: { id: number },
context: MercuriusContext
) => {
const service = new Service(context.config, context.database);

return await service.findById(arguments_.id);
},

roles: async (
parent: unknown,
arguments_: {
limit: number;
offset: number;
filters?: FilterInput;
sort?: SortInput[];
},
context: MercuriusContext
) => {
const { config, database } = context;

const service = new Service(config, database);

return await service.list(
arguments_.limit,
arguments_.offset,
arguments_.filters
? JSON.parse(JSON.stringify(arguments_.filters))
: undefined,
arguments_.sort ? JSON.parse(JSON.stringify(arguments_.sort)) : undefined
);
},
};

export default { Mutation, Query };
Loading