diff --git a/src/adapters/hasura/group.adapter.ts b/src/adapters/hasura/group.adapter.ts index a8e8eef..d267aa5 100644 --- a/src/adapters/hasura/group.adapter.ts +++ b/src/adapters/hasura/group.adapter.ts @@ -11,6 +11,8 @@ import { IServicelocatorgroup } from "../groupservicelocator"; import { UserDto } from "src/user/dto/user.dto"; import { StudentDto } from "src/student/dto/student.dto"; export const HasuraGroupToken = "HasuraGroup"; +import { getUserGroup, getUserRole } from "./adapter.utils"; + @Injectable() export class HasuraGroupService implements IServicelocatorgroup { private group: GroupInterface; @@ -20,25 +22,25 @@ export class HasuraGroupService implements IServicelocatorgroup { constructor(private httpService: HttpService) {} public async getGroup(request: any, groupId: any) { + const decoded: any = jwt_decode(request.headers.authorization); + const altUserRoles = + decoded["https://hasura.io/jwt/claims"]["x-hasura-allowed-roles"]; var groupDetails = { query: `query GetGroup($groupId:uuid!) { Group_by_pk(groupId: $groupId) { - groupId - deactivationReason - created_at - image - mediumOfInstruction - metaData - name - option - schoolId - section - teacherId - gradeLevel - status - type - updated_at - parentGroupId + groupId + schoolUdise + medium + grade + name + type + section + status + createdAt + updatedAt + createdBy + updatedBy + board } }`, variables: { @@ -50,7 +52,9 @@ export class HasuraGroupService implements IServicelocatorgroup { method: "post", url: process.env.ALTHASURA, headers: { - "Authorization": request.headers.authorization, + Authorization: request.headers.authorization, + "x-hasura-role": getUserRole(altUserRoles), + "Content-Type": "application/json", }, data: groupDetails, @@ -76,6 +80,13 @@ export class HasuraGroupService implements IServicelocatorgroup { } public async createGroup(request: any, groupDto: GroupDto) { + const decoded: any = jwt_decode(request.headers.authorization); + const altUserRoles = + decoded["https://hasura.io/jwt/claims"]["x-hasura-allowed-roles"]; + const userId = + decoded["https://hasura.io/jwt/claims"]["x-hasura-user-id"]; + groupDto.createdBy = userId; + groupDto.updatedBy = userId; let query = ""; Object.keys(groupDto).forEach((e) => { if (groupDto[e] && groupDto[e] != "") { @@ -103,7 +114,9 @@ export class HasuraGroupService implements IServicelocatorgroup { method: "post", url: process.env.REGISTRYHASURA, headers: { - "Authorization": request.headers.authorization, + Authorization: request.headers.authorization, + "x-hasura-role": getUserRole(altUserRoles), + "Content-Type": "application/json", }, data: data, @@ -156,7 +169,7 @@ export class HasuraGroupService implements IServicelocatorgroup { method: "post", url: process.env.REGISTRYHASURA, headers: { - "Authorization": request.headers.authorization, + Authorization: request.headers.authorization, "Content-Type": "application/json", }, data: data, @@ -256,7 +269,7 @@ export class HasuraGroupService implements IServicelocatorgroup { public async findMembersOfGroup(groupId: string, role: string, request: any) { let axios = require("axios"); let userData = []; - + var findMember = { query: `query GetGroupMembership($groupId:uuid,$role:UserRole_enum) { GroupMembership(where: {groupId: {_eq: $groupId}, role: {_eq: $role}}) { @@ -302,7 +315,7 @@ export class HasuraGroupService implements IServicelocatorgroup { method: "post", url: process.env.REGISTRYHASURA, headers: { - "Authorization": request.headers.authorization, + Authorization: request.headers.authorization, "Content-Type": "application/json", }, data: findMember, @@ -317,20 +330,20 @@ export class HasuraGroupService implements IServicelocatorgroup { }); } - let result = response.data.data.GroupMembership; + let result = response.data.data.GroupMembership; const userList = result.map((e: any) => { return e.User; }); - - if (!userList.length) { + + if (!userList.length) { return new SuccessResponse({ statusCode: 200, message: "ok", data: { msg: "No data found for given inputs!" }, }); - } - + } + const groupResponse = await this.userMappedResponse(userList); return new SuccessResponse({ @@ -338,7 +351,6 @@ export class HasuraGroupService implements IServicelocatorgroup { message: "ok", data: groupResponse, }); - } public async findGroupsByUserId(userId: string, role: string, request: any) { @@ -377,26 +389,26 @@ export class HasuraGroupService implements IServicelocatorgroup { method: "post", url: process.env.REGISTRYHASURA, headers: { - "Authorization": request.headers.authorization, + Authorization: request.headers.authorization, "Content-Type": "application/json", }, data: findMember, }; const response = await axios(getMemberData); - + if (response?.data?.errors) { return new ErrorResponse({ errorCode: response.data.errors[0].extensions, errorMessage: response.data.errors[0].message, }); } - + let groupData = response.data.data.GroupMembership; const groupList = groupData.map((e: any) => { return e.Group; }); - + const groupResponse = await this.mappedResponse(groupList); return new SuccessResponse({ statusCode: 200, @@ -512,29 +524,22 @@ export class HasuraGroupService implements IServicelocatorgroup { const groupResponse = result.map((item: any) => { const groupMapping = { groupId: item?.groupId ? `${item.groupId}` : "", - schoolId: item?.schoolId ? `${item.schoolId}` : "", + schoolUdise: item?.schoolUdise ? `${item.schoolUdise}` : "", name: item?.name ? `${item.name}` : "", + grade: item?.grade ? `${item.grade}` : "", + medium: item?.medium ? `${item.medium}` : "", type: item?.type ? `${item.type}` : "", section: item?.section ? `${item.section}` : "", status: item?.status ? `${item.status}` : "", - deactivationReason: item?.deactivationReason - ? `${item.deactivationReason}` - : "", - mediumOfInstruction: item?.mediumOfInstruction - ? `${item.mediumOfInstruction}` - : "", - teacherId: item?.teacherId ? `${item.teacherId}` : "", - parentGroupId: item?.parentGroupId ? `${item.parentGroupId}` : "", - image: item?.image ? `${item.image}` : "", - metaData: item?.metaData ? item.metaData : [], - option: item?.option ? item.option : [], - gradeLevel: item?.gradeLevel ? `${item.gradeLevel}` : "", - createdAt: item?.created_at ? `${item.created_at}` : "", - updatedAt: item?.updated_at ? `${item.updated_at}` : "", + createdAt: item?.createdAt ? `${item.createdAt}` : "", + updatedAt: item?.updatedAt ? `${item.updatedAt}` : "", + createdBy: item?.createdBy ? `${item.createdBy}` : "", + updatedBy: item?.updatedBy ? `${item.updatedBy}` : "", + board: item?.board ? `${item.board}` : "", }; return new GroupDto(groupMapping); }); - + return groupResponse; } diff --git a/src/adapters/hasura/groupMembership.adapter.ts b/src/adapters/hasura/groupMembership.adapter.ts index ee65a4e..2ba199a 100644 --- a/src/adapters/hasura/groupMembership.adapter.ts +++ b/src/adapters/hasura/groupMembership.adapter.ts @@ -3,8 +3,13 @@ import { HttpService } from "@nestjs/axios"; import { SuccessResponse } from "src/success-response"; import { ErrorResponse } from "src/error-response"; import jwt_decode from "jwt-decode"; +import { getUserGroup, getUserRole } from "./adapter.utils"; + const resolvePath = require("object-resolve-path"); -import { GroupMembershipDto, GroupMembershipDtoById } from "src/groupMembership/dto/groupMembership.dto"; +import { + GroupMembershipDto, + GroupMembershipDtoById, +} from "src/groupMembership/dto/groupMembership.dto"; import { GroupMembershipSearchDto } from "src/groupMembership/dto/groupMembership-search.dto"; @Injectable() @@ -14,18 +19,21 @@ export class GroupMembershipService { url = `${process.env.BASEAPIURL}`; public async getGroupMembership(groupMembershipId: any, request: any) { + const decoded: any = jwt_decode(request.headers.authorization); + const altUserRoles = + decoded["https://hasura.io/jwt/claims"]["x-hasura-allowed-roles"]; var data = { query: `query GetGroupMembership($groupMembershipId:uuid!) { GroupMembership_by_pk(groupMembershipId: $groupMembershipId) { - groupId - groupMembershipId - schoolId - role - userId - updatedBy - createdBy - updated_at - created_at + groupMembershipId + schoolUdise + userId + groupId + role + createdBy + updatedBy + createdAt + updatedAt } }`, variables: { @@ -37,7 +45,9 @@ export class GroupMembershipService { method: "post", url: process.env.REGISTRYHASURA, headers: { - "Authorization": request.headers.authorization, + Authorization: request.headers.authorization, + "x-hasura-role": getUserRole(altUserRoles), + "Content-Type": "application/json", }, data: data, @@ -68,12 +78,9 @@ export class GroupMembershipService { groupMembership: GroupMembershipDto ) { const decoded: any = jwt_decode(request.headers.authorization); - groupMembership.userId = + const altUserRoles = decoded["https://hasura.io/jwt/claims"]["x-hasura-user-id"]; - groupMembership.createdBy = groupMembership.userId; - groupMembership.updatedBy = groupMembership.userId; - let query = ""; Object.keys(groupMembership).forEach((e) => { if (groupMembership[e] && groupMembership[e] != "") { @@ -101,7 +108,9 @@ export class GroupMembershipService { method: "post", url: process.env.REGISTRYHASURA, headers: { - "Authorization": request.headers.authorization, + Authorization: request.headers.authorization, + "x-hasura-role": getUserGroup(altUserRoles), + "Content-Type": "application/json", }, data: data, @@ -130,11 +139,11 @@ export class GroupMembershipService { groupMembership: GroupMembershipDtoById ) { const decoded: any = jwt_decode(request.headers.authorization); - // groupMembership.userId = - // decoded["https://hasura.io/jwt/claims"]["x-hasura-user-id"]; - - groupMembership.createdBy = groupMembership.userId; - groupMembership.updatedBy = groupMembership.userId; + const altUserRoles = + decoded["https://hasura.io/jwt/claims"]["x-hasura-allowed-roles"]; + const userId = decoded["https://hasura.io/jwt/claims"]["x-hasura-user-id"]; + groupMembership.createdBy = userId; + groupMembership.updatedBy = userId; let query = ""; Object.keys(groupMembership).forEach((e) => { @@ -163,7 +172,9 @@ export class GroupMembershipService { method: "post", url: process.env.REGISTRYHASURA, headers: { - "Authorization": request.headers.authorization, + Authorization: request.headers.authorization, + "x-hasura-role": getUserRole(altUserRoles), + "Content-Type": "application/json", }, data: data, @@ -210,7 +221,7 @@ export class GroupMembershipService { } } }); - + const groupMembershipUpdate = { query: `mutation UpdateGroupMembership($groupMembershipId:uuid) { update_GroupMembership(where: { groupMembershipId: {_eq: $groupMembershipId}}, _set: {${query}}) { @@ -226,7 +237,7 @@ export class GroupMembershipService { method: "post", url: process.env.REGISTRYHASURA, headers: { - "Authorization": request.headers.authorization, + Authorization: request.headers.authorization, "Content-Type": "application/json", }, data: groupMembershipUpdate, @@ -298,7 +309,7 @@ export class GroupMembershipService { method: "post", url: process.env.REGISTRYHASURA, headers: { - "Authorization": request.headers.authorization, + Authorization: request.headers.authorization, "Content-Type": "application/json", }, data: data, @@ -328,12 +339,13 @@ export class GroupMembershipService { groupMembershipId: obj?.groupMembershipId ? `${obj.groupMembershipId}` : "", - groupId: obj?.groupId ? `${obj.groupId}` : "", + schoolUdise: obj?.schoolUdise ? `${obj.schoolUdise}` : "", schoolId: obj?.schoolId ? `${obj.schoolId}` : "", userId: obj?.userId ? `${obj.userId}` : "", + groupId: obj?.groupId ? `${obj.groupId}` : "", role: obj?.role ? `${obj.role}` : "", - created_at: obj?.created_at ? `${obj.created_at}` : "", - updated_at: obj?.updated_at ? `${obj.updated_at}` : "", + createdAt: obj?.created_at ? `${obj.created_at}` : "", + updatedAt: obj?.updated_at ? `${obj.updated_at}` : "", createdBy: obj?.createdBy ? `${obj.createdBy}` : "", updatedBy: obj?.updatedBy ? `${obj.updatedBy}` : "", }; diff --git a/src/group/dto/group.dto.ts b/src/group/dto/group.dto.ts index 48fd245..b1a46b9 100644 --- a/src/group/dto/group.dto.ts +++ b/src/group/dto/group.dto.ts @@ -14,10 +14,25 @@ export class GroupDto { @ApiPropertyOptional({ type: String, - description: "The schoolId of the group", + description: "The schoolUdise of the group", }) @Expose() - schoolId: string; + schoolUdise: string; + + @ApiPropertyOptional({ + type: String, + description: "The medium of the group", + }) + @Expose() + medium: string; + + + @ApiPropertyOptional({ + type: String, + description: "The grade of the group", + }) + @Expose() + grade: string; @ApiPropertyOptional({ type: String, @@ -49,46 +64,59 @@ export class GroupDto { @ApiPropertyOptional({ type: String, - description: "Teacher Id of Group", + description: "The board of the group", }) @Expose() - teacherId: string; + board: string; - @ApiPropertyOptional({ - type: String, - description: "Parent Id of Group", - }) - @Expose() - parentGroupId: string; + // @ApiPropertyOptional({ + // type: String, + // description: "Teacher Id of Group", + // }) + // @Expose() + // teacherId: string; - @ApiPropertyOptional() - @Expose() - deactivationReason: string; + // @ApiPropertyOptional({ + // type: String, + // description: "Parent Id of Group", + // }) + // @Expose() + // parentGroupId: string; - @ApiPropertyOptional({ - type: String, - description: "The mediumOfInstruction of the group", - }) - @Expose() - mediumOfInstruction: string; + // @ApiPropertyOptional() + // @Expose() + // deactivationReason: string; - @ApiPropertyOptional({ type: "string", format: "binary" }) - @Expose() - image: string; + // @ApiPropertyOptional({ + // type: String, + // description: "The mediumOfInstruction of the group", + // }) + // @Expose() + // mediumOfInstruction: string; - @ApiPropertyOptional() - @Expose() - metaData: [string]; + // @ApiPropertyOptional({ type: "string", format: "binary" }) + // @Expose() + // image: string; + + // @ApiPropertyOptional() + // @Expose() + // metaData: [string]; + + // @ApiPropertyOptional() + // @Expose() + // option: [string]; + + // @ApiPropertyOptional({ + // description: "Grade against group", + // }) + // @Expose() + // gradeLevel: string; - @ApiPropertyOptional() @Expose() - option: [string]; + createdBy: string; - @ApiPropertyOptional({ - description: "Grade against group", - }) @Expose() - gradeLevel: string; + updatedBy: string; @Expose() createdAt: string; diff --git a/src/groupMembership/dto/groupMembership.dto.ts b/src/groupMembership/dto/groupMembership.dto.ts index 99e2f95..a282e30 100644 --- a/src/groupMembership/dto/groupMembership.dto.ts +++ b/src/groupMembership/dto/groupMembership.dto.ts @@ -46,17 +46,17 @@ export class GroupMembershipDtoById { @ApiProperty() @Expose() - groupId: string; + schoolUdise: string; @ApiProperty() @Expose() - schoolId: string; + userId: string; @ApiProperty() @Expose() @IsNotEmpty() @IsUUID() - userId: string; + groupId: string; @ApiProperty() @Expose() @@ -69,13 +69,12 @@ export class GroupMembershipDtoById { updatedBy: string; @Expose() - created_at: string; + createdAt: string; @Expose() - updated_at: string; + updatedAt: string; constructor(obj: any) { Object.assign(this, obj); } } -