feat: Added methods for organization
This commit is contained in:
@@ -2,7 +2,23 @@ import { HttpException, HttpStatus } from '@nestjs/common';
|
|||||||
|
|
||||||
// Base exception
|
// Base exception
|
||||||
export class BaseException extends HttpException {
|
export class BaseException extends HttpException {
|
||||||
protected constructor(code: string, message: string, status: HttpStatus) {
|
protected constructor(
|
||||||
super({ code, message }, status);
|
errorCode: string,
|
||||||
|
errorMessage: string,
|
||||||
|
status: HttpStatus
|
||||||
|
) {
|
||||||
|
super({ code: errorCode, message: errorMessage }, status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Organization Exceptions
|
||||||
|
* */
|
||||||
|
export class OrganizationNotFoundException extends BaseException {
|
||||||
|
|
||||||
|
}
|
||||||
|
// export class NotPartOfOrganizationException extends BaseException {
|
||||||
|
// constructor(code: string, message: string, status: HttpStatus) {
|
||||||
|
// super();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|||||||
17
common/exceptions/error_codes.ts
Normal file
17
common/exceptions/error_codes.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { HttpStatus } from "@nestjs/common";
|
||||||
|
|
||||||
|
interface AppError {
|
||||||
|
errorCode: string,
|
||||||
|
message: string,
|
||||||
|
status: HttpStatus
|
||||||
|
}
|
||||||
|
|
||||||
|
type ErrorsType = Record<string, AppError>
|
||||||
|
|
||||||
|
export const ORGANIZATION_ERRORS: ErrorsType = {
|
||||||
|
NOT_FOUND: {
|
||||||
|
errorCode: 'ORG_001',
|
||||||
|
message: 'Organization not found',
|
||||||
|
status: HttpStatus.NOT_FOUND
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,2 +1,5 @@
|
|||||||
export const PUBLIC_KEY = '__PUBLIC_KEY__';
|
export const PUBLIC_KEY = '__PUBLIC_KEY__';
|
||||||
export const ROLE_KEY = '__ROLE_KEY__';
|
export const ROLE_KEY = '__ROLE_KEY__';
|
||||||
|
export const ORG_ROLE_KEY = '__ORG_ROLE_KEY__'
|
||||||
|
export const ORG_ROLES_ALL_KEY = '__ORG_ROLE_ALL_KEY__';
|
||||||
|
export const CAN_PERFORM_KEY = '__CAN_PERFORM_KEY__';
|
||||||
|
|||||||
@@ -47,4 +47,12 @@ export class RequestContextService {
|
|||||||
get isTransaction(): boolean {
|
get isTransaction(): boolean {
|
||||||
return !!this.get().tx;
|
return !!this.get().tx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get orgId(): string {
|
||||||
|
return this.orgId
|
||||||
|
}
|
||||||
|
|
||||||
|
set orgId(id: string) {
|
||||||
|
this.set('orgId', id)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,5 +6,6 @@ export interface RequestContext {
|
|||||||
correlationId?: string;
|
correlationId?: string;
|
||||||
headers: Record<string, string>;
|
headers: Record<string, string>;
|
||||||
user?: JwtPayload;
|
user?: JwtPayload;
|
||||||
|
orgId?: string;
|
||||||
tx?: Prisma.TransactionClient;
|
tx?: Prisma.TransactionClient;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = {
|
|||||||
"clientVersion": "7.3.0",
|
"clientVersion": "7.3.0",
|
||||||
"engineVersion": "9d6ad21cbbceab97458517b147a6a09ff43aa735",
|
"engineVersion": "9d6ad21cbbceab97458517b147a6a09ff43aa735",
|
||||||
"activeProvider": "postgresql",
|
"activeProvider": "postgresql",
|
||||||
"inlineSchema": "model OrganizationJoinRequest {\n userId String\n orgId String\n status ORGANIZATION_JOIN_REQUEST @default(PENDING)\n requestType ORGANIZATION_JOIN_REQUEST_TYPE\n requestedOn DateTime @default(now())\n role ORG_ROLE @default(member)\n updatedAt DateTime @updatedAt\n rejectReason String?\n requestMessage String?\n\n organization Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([userId, orgId])\n @@map(\"organization_join_request\")\n}\n\nenum ORGANIZATION_JOIN_REQUEST {\n PENDING\n ACCEPTED\n REJECTED\n CANCELLED\n}\n\nenum ORGANIZATION_JOIN_REQUEST_TYPE {\n INVITED\n REQUESTED\n}\n\nmodel OrganizationUserJoinTable {\n userId String\n orgId String\n role ORG_ROLE @default(member)\n joinedDate DateTime @default(now())\n\n organization Organization @relation(fields: [orgId], references: [id], onDelete: Restrict)\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([userId, orgId])\n @@map(\"organization_user_join\")\n}\n\nenum ORG_ROLE {\n owner\n admin\n member\n}\n\nmodel Organization {\n id String @id @default(uuid())\n name String\n description String?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n members OrganizationUserJoinTable[]\n requestingMembers OrganizationJoinRequest[]\n\n @@map(\"organization\")\n}\n\n// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?\n// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nmodel User {\n id String @id @default(uuid())\n firstName String\n middleName String?\n lastName String\n email String @unique\n password String\n role USER_ROLE @default(user)\n isVerified Boolean? @default(false) // TODO: Email using queue\n refreshToken String?\n profilePicture String?\n isDeleted Boolean? @default(false)\n deletedAt DateTime?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n organizations OrganizationUserJoinTable[]\n organizationsRequested OrganizationJoinRequest[]\n\n @@map(\"user\")\n}\n\nenum USER_ROLE {\n superadmin\n user\n}\n",
|
"inlineSchema": "model OrganizationJoinRequest {\n id String @id @default(uuid())\n userId String\n orgId String\n status ORGANIZATION_JOIN_REQUEST @default(PENDING)\n requestType ORGANIZATION_JOIN_REQUEST_TYPE\n requestedOn DateTime @default(now())\n role ORG_ROLE @default(member)\n updatedAt DateTime @updatedAt\n rejectReason String?\n requestMessage String?\n\n organization Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n // @@unique([userId, orgId])\n @@index([userId, orgId])\n @@map(\"organization_join_request\")\n}\n\nenum ORGANIZATION_JOIN_REQUEST {\n PENDING\n ACCEPTED\n REJECTED\n CANCELLED\n}\n\nenum ORGANIZATION_JOIN_REQUEST_TYPE {\n INVITED\n REQUESTED\n}\n\nmodel OrganizationUserJoinTable {\n userId String\n orgId String\n role ORG_ROLE @default(member)\n joinedDate DateTime @default(now())\n\n organization Organization @relation(fields: [orgId], references: [id], onDelete: Restrict)\n user User @relation(fields: [userId], references: [id], onDelete: Cascade)\n\n @@unique([userId, orgId])\n @@map(\"organization_user_join\")\n}\n\nenum ORG_ROLE {\n owner\n admin\n member\n}\n\nmodel Organization {\n id String @id @default(uuid())\n name String\n description String?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n members OrganizationUserJoinTable[]\n requestingMembers OrganizationJoinRequest[]\n\n @@map(\"organization\")\n}\n\n// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?\n// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nmodel User {\n id String @id @default(uuid())\n firstName String\n middleName String?\n lastName String\n email String @unique\n password String\n role USER_ROLE @default(user)\n isVerified Boolean? @default(false) // TODO: Email using queue\n refreshToken String?\n profilePicture String?\n isDeleted Boolean? @default(false)\n deletedAt DateTime?\n\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n organizations OrganizationUserJoinTable[]\n organizationsRequested OrganizationJoinRequest[]\n\n @@map(\"user\")\n}\n\nenum USER_ROLE {\n superadmin\n user\n}\n",
|
||||||
"runtimeDataModel": {
|
"runtimeDataModel": {
|
||||||
"models": {},
|
"models": {},
|
||||||
"enums": {},
|
"enums": {},
|
||||||
@@ -28,7 +28,7 @@ const config: runtime.GetPrismaClientConfig = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
config.runtimeDataModel = JSON.parse("{\"models\":{\"OrganizationJoinRequest\":{\"fields\":[{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"orgId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"ORGANIZATION_JOIN_REQUEST\"},{\"name\":\"requestType\",\"kind\":\"enum\",\"type\":\"ORGANIZATION_JOIN_REQUEST_TYPE\"},{\"name\":\"requestedOn\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"ORG_ROLE\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"rejectReason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"requestMessage\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"organization\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"OrganizationToOrganizationJoinRequest\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrganizationJoinRequestToUser\"}],\"dbName\":\"organization_join_request\"},\"OrganizationUserJoinTable\":{\"fields\":[{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"orgId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"ORG_ROLE\"},{\"name\":\"joinedDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"organization\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"OrganizationToOrganizationUserJoinTable\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrganizationUserJoinTableToUser\"}],\"dbName\":\"organization_user_join\"},\"Organization\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"members\",\"kind\":\"object\",\"type\":\"OrganizationUserJoinTable\",\"relationName\":\"OrganizationToOrganizationUserJoinTable\"},{\"name\":\"requestingMembers\",\"kind\":\"object\",\"type\":\"OrganizationJoinRequest\",\"relationName\":\"OrganizationToOrganizationJoinRequest\"}],\"dbName\":\"organization\"},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"middleName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"USER_ROLE\"},{\"name\":\"isVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"refreshToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profilePicture\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isDeleted\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"deletedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"organizations\",\"kind\":\"object\",\"type\":\"OrganizationUserJoinTable\",\"relationName\":\"OrganizationUserJoinTableToUser\"},{\"name\":\"organizationsRequested\",\"kind\":\"object\",\"type\":\"OrganizationJoinRequest\",\"relationName\":\"OrganizationJoinRequestToUser\"}],\"dbName\":\"user\"}},\"enums\":{},\"types\":{}}")
|
config.runtimeDataModel = JSON.parse("{\"models\":{\"OrganizationJoinRequest\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"orgId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"ORGANIZATION_JOIN_REQUEST\"},{\"name\":\"requestType\",\"kind\":\"enum\",\"type\":\"ORGANIZATION_JOIN_REQUEST_TYPE\"},{\"name\":\"requestedOn\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"ORG_ROLE\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"rejectReason\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"requestMessage\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"organization\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"OrganizationToOrganizationJoinRequest\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrganizationJoinRequestToUser\"}],\"dbName\":\"organization_join_request\"},\"OrganizationUserJoinTable\":{\"fields\":[{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"orgId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"ORG_ROLE\"},{\"name\":\"joinedDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"organization\",\"kind\":\"object\",\"type\":\"Organization\",\"relationName\":\"OrganizationToOrganizationUserJoinTable\"},{\"name\":\"user\",\"kind\":\"object\",\"type\":\"User\",\"relationName\":\"OrganizationUserJoinTableToUser\"}],\"dbName\":\"organization_user_join\"},\"Organization\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"members\",\"kind\":\"object\",\"type\":\"OrganizationUserJoinTable\",\"relationName\":\"OrganizationToOrganizationUserJoinTable\"},{\"name\":\"requestingMembers\",\"kind\":\"object\",\"type\":\"OrganizationJoinRequest\",\"relationName\":\"OrganizationToOrganizationJoinRequest\"}],\"dbName\":\"organization\"},\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"firstName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"middleName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"role\",\"kind\":\"enum\",\"type\":\"USER_ROLE\"},{\"name\":\"isVerified\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"refreshToken\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"profilePicture\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isDeleted\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"deletedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"organizations\",\"kind\":\"object\",\"type\":\"OrganizationUserJoinTable\",\"relationName\":\"OrganizationUserJoinTableToUser\"},{\"name\":\"organizationsRequested\",\"kind\":\"object\",\"type\":\"OrganizationJoinRequest\",\"relationName\":\"OrganizationJoinRequestToUser\"}],\"dbName\":\"user\"}},\"enums\":{},\"types\":{}}")
|
||||||
|
|
||||||
async function decodeBase64AsWasm(wasmBase64: string): Promise<WebAssembly.Module> {
|
async function decodeBase64AsWasm(wasmBase64: string): Promise<WebAssembly.Module> {
|
||||||
const { Buffer } = await import('node:buffer')
|
const { Buffer } = await import('node:buffer')
|
||||||
|
|||||||
@@ -743,6 +743,7 @@ export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof
|
|||||||
|
|
||||||
|
|
||||||
export const OrganizationJoinRequestScalarFieldEnum = {
|
export const OrganizationJoinRequestScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
userId: 'userId',
|
userId: 'userId',
|
||||||
orgId: 'orgId',
|
orgId: 'orgId',
|
||||||
status: 'status',
|
status: 'status',
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof
|
|||||||
|
|
||||||
|
|
||||||
export const OrganizationJoinRequestScalarFieldEnum = {
|
export const OrganizationJoinRequestScalarFieldEnum = {
|
||||||
|
id: 'id',
|
||||||
userId: 'userId',
|
userId: 'userId',
|
||||||
orgId: 'orgId',
|
orgId: 'orgId',
|
||||||
status: 'status',
|
status: 'status',
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export type AggregateOrganizationJoinRequest = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestMinAggregateOutputType = {
|
export type OrganizationJoinRequestMinAggregateOutputType = {
|
||||||
|
id: string | null
|
||||||
userId: string | null
|
userId: string | null
|
||||||
orgId: string | null
|
orgId: string | null
|
||||||
status: $Enums.ORGANIZATION_JOIN_REQUEST | null
|
status: $Enums.ORGANIZATION_JOIN_REQUEST | null
|
||||||
@@ -37,6 +38,7 @@ export type OrganizationJoinRequestMinAggregateOutputType = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestMaxAggregateOutputType = {
|
export type OrganizationJoinRequestMaxAggregateOutputType = {
|
||||||
|
id: string | null
|
||||||
userId: string | null
|
userId: string | null
|
||||||
orgId: string | null
|
orgId: string | null
|
||||||
status: $Enums.ORGANIZATION_JOIN_REQUEST | null
|
status: $Enums.ORGANIZATION_JOIN_REQUEST | null
|
||||||
@@ -49,6 +51,7 @@ export type OrganizationJoinRequestMaxAggregateOutputType = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestCountAggregateOutputType = {
|
export type OrganizationJoinRequestCountAggregateOutputType = {
|
||||||
|
id: number
|
||||||
userId: number
|
userId: number
|
||||||
orgId: number
|
orgId: number
|
||||||
status: number
|
status: number
|
||||||
@@ -63,6 +66,7 @@ export type OrganizationJoinRequestCountAggregateOutputType = {
|
|||||||
|
|
||||||
|
|
||||||
export type OrganizationJoinRequestMinAggregateInputType = {
|
export type OrganizationJoinRequestMinAggregateInputType = {
|
||||||
|
id?: true
|
||||||
userId?: true
|
userId?: true
|
||||||
orgId?: true
|
orgId?: true
|
||||||
status?: true
|
status?: true
|
||||||
@@ -75,6 +79,7 @@ export type OrganizationJoinRequestMinAggregateInputType = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestMaxAggregateInputType = {
|
export type OrganizationJoinRequestMaxAggregateInputType = {
|
||||||
|
id?: true
|
||||||
userId?: true
|
userId?: true
|
||||||
orgId?: true
|
orgId?: true
|
||||||
status?: true
|
status?: true
|
||||||
@@ -87,6 +92,7 @@ export type OrganizationJoinRequestMaxAggregateInputType = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestCountAggregateInputType = {
|
export type OrganizationJoinRequestCountAggregateInputType = {
|
||||||
|
id?: true
|
||||||
userId?: true
|
userId?: true
|
||||||
orgId?: true
|
orgId?: true
|
||||||
status?: true
|
status?: true
|
||||||
@@ -172,6 +178,7 @@ export type OrganizationJoinRequestGroupByArgs<ExtArgs extends runtime.Types.Ext
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestGroupByOutputType = {
|
export type OrganizationJoinRequestGroupByOutputType = {
|
||||||
|
id: string
|
||||||
userId: string
|
userId: string
|
||||||
orgId: string
|
orgId: string
|
||||||
status: $Enums.ORGANIZATION_JOIN_REQUEST
|
status: $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
@@ -205,6 +212,7 @@ export type OrganizationJoinRequestWhereInput = {
|
|||||||
AND?: Prisma.OrganizationJoinRequestWhereInput | Prisma.OrganizationJoinRequestWhereInput[]
|
AND?: Prisma.OrganizationJoinRequestWhereInput | Prisma.OrganizationJoinRequestWhereInput[]
|
||||||
OR?: Prisma.OrganizationJoinRequestWhereInput[]
|
OR?: Prisma.OrganizationJoinRequestWhereInput[]
|
||||||
NOT?: Prisma.OrganizationJoinRequestWhereInput | Prisma.OrganizationJoinRequestWhereInput[]
|
NOT?: Prisma.OrganizationJoinRequestWhereInput | Prisma.OrganizationJoinRequestWhereInput[]
|
||||||
|
id?: Prisma.StringFilter<"OrganizationJoinRequest"> | string
|
||||||
userId?: Prisma.StringFilter<"OrganizationJoinRequest"> | string
|
userId?: Prisma.StringFilter<"OrganizationJoinRequest"> | string
|
||||||
orgId?: Prisma.StringFilter<"OrganizationJoinRequest"> | string
|
orgId?: Prisma.StringFilter<"OrganizationJoinRequest"> | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFilter<"OrganizationJoinRequest"> | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFilter<"OrganizationJoinRequest"> | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
@@ -219,6 +227,7 @@ export type OrganizationJoinRequestWhereInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestOrderByWithRelationInput = {
|
export type OrganizationJoinRequestOrderByWithRelationInput = {
|
||||||
|
id?: Prisma.SortOrder
|
||||||
userId?: Prisma.SortOrder
|
userId?: Prisma.SortOrder
|
||||||
orgId?: Prisma.SortOrder
|
orgId?: Prisma.SortOrder
|
||||||
status?: Prisma.SortOrder
|
status?: Prisma.SortOrder
|
||||||
@@ -233,7 +242,7 @@ export type OrganizationJoinRequestOrderByWithRelationInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestWhereUniqueInput = Prisma.AtLeast<{
|
export type OrganizationJoinRequestWhereUniqueInput = Prisma.AtLeast<{
|
||||||
userId_orgId?: Prisma.OrganizationJoinRequestUserIdOrgIdCompoundUniqueInput
|
id?: string
|
||||||
AND?: Prisma.OrganizationJoinRequestWhereInput | Prisma.OrganizationJoinRequestWhereInput[]
|
AND?: Prisma.OrganizationJoinRequestWhereInput | Prisma.OrganizationJoinRequestWhereInput[]
|
||||||
OR?: Prisma.OrganizationJoinRequestWhereInput[]
|
OR?: Prisma.OrganizationJoinRequestWhereInput[]
|
||||||
NOT?: Prisma.OrganizationJoinRequestWhereInput | Prisma.OrganizationJoinRequestWhereInput[]
|
NOT?: Prisma.OrganizationJoinRequestWhereInput | Prisma.OrganizationJoinRequestWhereInput[]
|
||||||
@@ -248,9 +257,10 @@ export type OrganizationJoinRequestWhereUniqueInput = Prisma.AtLeast<{
|
|||||||
requestMessage?: Prisma.StringNullableFilter<"OrganizationJoinRequest"> | string | null
|
requestMessage?: Prisma.StringNullableFilter<"OrganizationJoinRequest"> | string | null
|
||||||
organization?: Prisma.XOR<Prisma.OrganizationScalarRelationFilter, Prisma.OrganizationWhereInput>
|
organization?: Prisma.XOR<Prisma.OrganizationScalarRelationFilter, Prisma.OrganizationWhereInput>
|
||||||
user?: Prisma.XOR<Prisma.UserScalarRelationFilter, Prisma.UserWhereInput>
|
user?: Prisma.XOR<Prisma.UserScalarRelationFilter, Prisma.UserWhereInput>
|
||||||
}, "userId_orgId">
|
}, "id">
|
||||||
|
|
||||||
export type OrganizationJoinRequestOrderByWithAggregationInput = {
|
export type OrganizationJoinRequestOrderByWithAggregationInput = {
|
||||||
|
id?: Prisma.SortOrder
|
||||||
userId?: Prisma.SortOrder
|
userId?: Prisma.SortOrder
|
||||||
orgId?: Prisma.SortOrder
|
orgId?: Prisma.SortOrder
|
||||||
status?: Prisma.SortOrder
|
status?: Prisma.SortOrder
|
||||||
@@ -269,6 +279,7 @@ export type OrganizationJoinRequestScalarWhereWithAggregatesInput = {
|
|||||||
AND?: Prisma.OrganizationJoinRequestScalarWhereWithAggregatesInput | Prisma.OrganizationJoinRequestScalarWhereWithAggregatesInput[]
|
AND?: Prisma.OrganizationJoinRequestScalarWhereWithAggregatesInput | Prisma.OrganizationJoinRequestScalarWhereWithAggregatesInput[]
|
||||||
OR?: Prisma.OrganizationJoinRequestScalarWhereWithAggregatesInput[]
|
OR?: Prisma.OrganizationJoinRequestScalarWhereWithAggregatesInput[]
|
||||||
NOT?: Prisma.OrganizationJoinRequestScalarWhereWithAggregatesInput | Prisma.OrganizationJoinRequestScalarWhereWithAggregatesInput[]
|
NOT?: Prisma.OrganizationJoinRequestScalarWhereWithAggregatesInput | Prisma.OrganizationJoinRequestScalarWhereWithAggregatesInput[]
|
||||||
|
id?: Prisma.StringWithAggregatesFilter<"OrganizationJoinRequest"> | string
|
||||||
userId?: Prisma.StringWithAggregatesFilter<"OrganizationJoinRequest"> | string
|
userId?: Prisma.StringWithAggregatesFilter<"OrganizationJoinRequest"> | string
|
||||||
orgId?: Prisma.StringWithAggregatesFilter<"OrganizationJoinRequest"> | string
|
orgId?: Prisma.StringWithAggregatesFilter<"OrganizationJoinRequest"> | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTWithAggregatesFilter<"OrganizationJoinRequest"> | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTWithAggregatesFilter<"OrganizationJoinRequest"> | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
@@ -281,6 +292,7 @@ export type OrganizationJoinRequestScalarWhereWithAggregatesInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestCreateInput = {
|
export type OrganizationJoinRequestCreateInput = {
|
||||||
|
id?: string
|
||||||
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
requestedOn?: Date | string
|
requestedOn?: Date | string
|
||||||
@@ -293,6 +305,7 @@ export type OrganizationJoinRequestCreateInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUncheckedCreateInput = {
|
export type OrganizationJoinRequestUncheckedCreateInput = {
|
||||||
|
id?: string
|
||||||
userId: string
|
userId: string
|
||||||
orgId: string
|
orgId: string
|
||||||
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
@@ -305,6 +318,7 @@ export type OrganizationJoinRequestUncheckedCreateInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUpdateInput = {
|
export type OrganizationJoinRequestUpdateInput = {
|
||||||
|
id?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
requestedOn?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
requestedOn?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||||
@@ -317,6 +331,7 @@ export type OrganizationJoinRequestUpdateInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUncheckedUpdateInput = {
|
export type OrganizationJoinRequestUncheckedUpdateInput = {
|
||||||
|
id?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
userId?: Prisma.StringFieldUpdateOperationsInput | string
|
userId?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
orgId?: Prisma.StringFieldUpdateOperationsInput | string
|
orgId?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
@@ -329,6 +344,7 @@ export type OrganizationJoinRequestUncheckedUpdateInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestCreateManyInput = {
|
export type OrganizationJoinRequestCreateManyInput = {
|
||||||
|
id?: string
|
||||||
userId: string
|
userId: string
|
||||||
orgId: string
|
orgId: string
|
||||||
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
@@ -341,6 +357,7 @@ export type OrganizationJoinRequestCreateManyInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUpdateManyMutationInput = {
|
export type OrganizationJoinRequestUpdateManyMutationInput = {
|
||||||
|
id?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
requestedOn?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
requestedOn?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||||
@@ -351,6 +368,7 @@ export type OrganizationJoinRequestUpdateManyMutationInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUncheckedUpdateManyInput = {
|
export type OrganizationJoinRequestUncheckedUpdateManyInput = {
|
||||||
|
id?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
userId?: Prisma.StringFieldUpdateOperationsInput | string
|
userId?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
orgId?: Prisma.StringFieldUpdateOperationsInput | string
|
orgId?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
@@ -362,12 +380,8 @@ export type OrganizationJoinRequestUncheckedUpdateManyInput = {
|
|||||||
requestMessage?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
requestMessage?: Prisma.NullableStringFieldUpdateOperationsInput | string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUserIdOrgIdCompoundUniqueInput = {
|
|
||||||
userId: string
|
|
||||||
orgId: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export type OrganizationJoinRequestCountOrderByAggregateInput = {
|
export type OrganizationJoinRequestCountOrderByAggregateInput = {
|
||||||
|
id?: Prisma.SortOrder
|
||||||
userId?: Prisma.SortOrder
|
userId?: Prisma.SortOrder
|
||||||
orgId?: Prisma.SortOrder
|
orgId?: Prisma.SortOrder
|
||||||
status?: Prisma.SortOrder
|
status?: Prisma.SortOrder
|
||||||
@@ -380,6 +394,7 @@ export type OrganizationJoinRequestCountOrderByAggregateInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestMaxOrderByAggregateInput = {
|
export type OrganizationJoinRequestMaxOrderByAggregateInput = {
|
||||||
|
id?: Prisma.SortOrder
|
||||||
userId?: Prisma.SortOrder
|
userId?: Prisma.SortOrder
|
||||||
orgId?: Prisma.SortOrder
|
orgId?: Prisma.SortOrder
|
||||||
status?: Prisma.SortOrder
|
status?: Prisma.SortOrder
|
||||||
@@ -392,6 +407,7 @@ export type OrganizationJoinRequestMaxOrderByAggregateInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestMinOrderByAggregateInput = {
|
export type OrganizationJoinRequestMinOrderByAggregateInput = {
|
||||||
|
id?: Prisma.SortOrder
|
||||||
userId?: Prisma.SortOrder
|
userId?: Prisma.SortOrder
|
||||||
orgId?: Prisma.SortOrder
|
orgId?: Prisma.SortOrder
|
||||||
status?: Prisma.SortOrder
|
status?: Prisma.SortOrder
|
||||||
@@ -413,6 +429,10 @@ export type OrganizationJoinRequestOrderByRelationAggregateInput = {
|
|||||||
_count?: Prisma.SortOrder
|
_count?: Prisma.SortOrder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type StringFieldUpdateOperationsInput = {
|
||||||
|
set?: string
|
||||||
|
}
|
||||||
|
|
||||||
export type EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput = {
|
export type EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput = {
|
||||||
set?: $Enums.ORGANIZATION_JOIN_REQUEST
|
set?: $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
}
|
}
|
||||||
@@ -433,10 +453,6 @@ export type NullableStringFieldUpdateOperationsInput = {
|
|||||||
set?: string | null
|
set?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
export type StringFieldUpdateOperationsInput = {
|
|
||||||
set?: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export type OrganizationJoinRequestCreateNestedManyWithoutOrganizationInput = {
|
export type OrganizationJoinRequestCreateNestedManyWithoutOrganizationInput = {
|
||||||
create?: Prisma.XOR<Prisma.OrganizationJoinRequestCreateWithoutOrganizationInput, Prisma.OrganizationJoinRequestUncheckedCreateWithoutOrganizationInput> | Prisma.OrganizationJoinRequestCreateWithoutOrganizationInput[] | Prisma.OrganizationJoinRequestUncheckedCreateWithoutOrganizationInput[]
|
create?: Prisma.XOR<Prisma.OrganizationJoinRequestCreateWithoutOrganizationInput, Prisma.OrganizationJoinRequestUncheckedCreateWithoutOrganizationInput> | Prisma.OrganizationJoinRequestCreateWithoutOrganizationInput[] | Prisma.OrganizationJoinRequestUncheckedCreateWithoutOrganizationInput[]
|
||||||
connectOrCreate?: Prisma.OrganizationJoinRequestCreateOrConnectWithoutOrganizationInput | Prisma.OrganizationJoinRequestCreateOrConnectWithoutOrganizationInput[]
|
connectOrCreate?: Prisma.OrganizationJoinRequestCreateOrConnectWithoutOrganizationInput | Prisma.OrganizationJoinRequestCreateOrConnectWithoutOrganizationInput[]
|
||||||
@@ -522,6 +538,7 @@ export type OrganizationJoinRequestUncheckedUpdateManyWithoutUserNestedInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestCreateWithoutOrganizationInput = {
|
export type OrganizationJoinRequestCreateWithoutOrganizationInput = {
|
||||||
|
id?: string
|
||||||
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
requestedOn?: Date | string
|
requestedOn?: Date | string
|
||||||
@@ -533,6 +550,7 @@ export type OrganizationJoinRequestCreateWithoutOrganizationInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUncheckedCreateWithoutOrganizationInput = {
|
export type OrganizationJoinRequestUncheckedCreateWithoutOrganizationInput = {
|
||||||
|
id?: string
|
||||||
userId: string
|
userId: string
|
||||||
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
@@ -573,6 +591,7 @@ export type OrganizationJoinRequestScalarWhereInput = {
|
|||||||
AND?: Prisma.OrganizationJoinRequestScalarWhereInput | Prisma.OrganizationJoinRequestScalarWhereInput[]
|
AND?: Prisma.OrganizationJoinRequestScalarWhereInput | Prisma.OrganizationJoinRequestScalarWhereInput[]
|
||||||
OR?: Prisma.OrganizationJoinRequestScalarWhereInput[]
|
OR?: Prisma.OrganizationJoinRequestScalarWhereInput[]
|
||||||
NOT?: Prisma.OrganizationJoinRequestScalarWhereInput | Prisma.OrganizationJoinRequestScalarWhereInput[]
|
NOT?: Prisma.OrganizationJoinRequestScalarWhereInput | Prisma.OrganizationJoinRequestScalarWhereInput[]
|
||||||
|
id?: Prisma.StringFilter<"OrganizationJoinRequest"> | string
|
||||||
userId?: Prisma.StringFilter<"OrganizationJoinRequest"> | string
|
userId?: Prisma.StringFilter<"OrganizationJoinRequest"> | string
|
||||||
orgId?: Prisma.StringFilter<"OrganizationJoinRequest"> | string
|
orgId?: Prisma.StringFilter<"OrganizationJoinRequest"> | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFilter<"OrganizationJoinRequest"> | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFilter<"OrganizationJoinRequest"> | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
@@ -585,6 +604,7 @@ export type OrganizationJoinRequestScalarWhereInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestCreateWithoutUserInput = {
|
export type OrganizationJoinRequestCreateWithoutUserInput = {
|
||||||
|
id?: string
|
||||||
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
requestedOn?: Date | string
|
requestedOn?: Date | string
|
||||||
@@ -596,6 +616,7 @@ export type OrganizationJoinRequestCreateWithoutUserInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUncheckedCreateWithoutUserInput = {
|
export type OrganizationJoinRequestUncheckedCreateWithoutUserInput = {
|
||||||
|
id?: string
|
||||||
orgId: string
|
orgId: string
|
||||||
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
@@ -633,6 +654,7 @@ export type OrganizationJoinRequestUpdateManyWithWhereWithoutUserInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestCreateManyOrganizationInput = {
|
export type OrganizationJoinRequestCreateManyOrganizationInput = {
|
||||||
|
id?: string
|
||||||
userId: string
|
userId: string
|
||||||
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
@@ -644,6 +666,7 @@ export type OrganizationJoinRequestCreateManyOrganizationInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUpdateWithoutOrganizationInput = {
|
export type OrganizationJoinRequestUpdateWithoutOrganizationInput = {
|
||||||
|
id?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
requestedOn?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
requestedOn?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||||
@@ -655,6 +678,7 @@ export type OrganizationJoinRequestUpdateWithoutOrganizationInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUncheckedUpdateWithoutOrganizationInput = {
|
export type OrganizationJoinRequestUncheckedUpdateWithoutOrganizationInput = {
|
||||||
|
id?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
userId?: Prisma.StringFieldUpdateOperationsInput | string
|
userId?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
@@ -666,6 +690,7 @@ export type OrganizationJoinRequestUncheckedUpdateWithoutOrganizationInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUncheckedUpdateManyWithoutOrganizationInput = {
|
export type OrganizationJoinRequestUncheckedUpdateManyWithoutOrganizationInput = {
|
||||||
|
id?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
userId?: Prisma.StringFieldUpdateOperationsInput | string
|
userId?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
@@ -677,6 +702,7 @@ export type OrganizationJoinRequestUncheckedUpdateManyWithoutOrganizationInput =
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestCreateManyUserInput = {
|
export type OrganizationJoinRequestCreateManyUserInput = {
|
||||||
|
id?: string
|
||||||
orgId: string
|
orgId: string
|
||||||
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType: $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
@@ -688,6 +714,7 @@ export type OrganizationJoinRequestCreateManyUserInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUpdateWithoutUserInput = {
|
export type OrganizationJoinRequestUpdateWithoutUserInput = {
|
||||||
|
id?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
requestedOn?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
requestedOn?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
|
||||||
@@ -699,6 +726,7 @@ export type OrganizationJoinRequestUpdateWithoutUserInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUncheckedUpdateWithoutUserInput = {
|
export type OrganizationJoinRequestUncheckedUpdateWithoutUserInput = {
|
||||||
|
id?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
orgId?: Prisma.StringFieldUpdateOperationsInput | string
|
orgId?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
@@ -710,6 +738,7 @@ export type OrganizationJoinRequestUncheckedUpdateWithoutUserInput = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestUncheckedUpdateManyWithoutUserInput = {
|
export type OrganizationJoinRequestUncheckedUpdateManyWithoutUserInput = {
|
||||||
|
id?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
orgId?: Prisma.StringFieldUpdateOperationsInput | string
|
orgId?: Prisma.StringFieldUpdateOperationsInput | string
|
||||||
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
status?: Prisma.EnumORGANIZATION_JOIN_REQUESTFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
requestType?: Prisma.EnumORGANIZATION_JOIN_REQUEST_TYPEFieldUpdateOperationsInput | $Enums.ORGANIZATION_JOIN_REQUEST_TYPE
|
||||||
@@ -723,6 +752,7 @@ export type OrganizationJoinRequestUncheckedUpdateManyWithoutUserInput = {
|
|||||||
|
|
||||||
|
|
||||||
export type OrganizationJoinRequestSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
|
export type OrganizationJoinRequestSelect<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
|
||||||
|
id?: boolean
|
||||||
userId?: boolean
|
userId?: boolean
|
||||||
orgId?: boolean
|
orgId?: boolean
|
||||||
status?: boolean
|
status?: boolean
|
||||||
@@ -737,6 +767,7 @@ export type OrganizationJoinRequestSelect<ExtArgs extends runtime.Types.Extensio
|
|||||||
}, ExtArgs["result"]["organizationJoinRequest"]>
|
}, ExtArgs["result"]["organizationJoinRequest"]>
|
||||||
|
|
||||||
export type OrganizationJoinRequestSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
|
export type OrganizationJoinRequestSelectCreateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
|
||||||
|
id?: boolean
|
||||||
userId?: boolean
|
userId?: boolean
|
||||||
orgId?: boolean
|
orgId?: boolean
|
||||||
status?: boolean
|
status?: boolean
|
||||||
@@ -751,6 +782,7 @@ export type OrganizationJoinRequestSelectCreateManyAndReturn<ExtArgs extends run
|
|||||||
}, ExtArgs["result"]["organizationJoinRequest"]>
|
}, ExtArgs["result"]["organizationJoinRequest"]>
|
||||||
|
|
||||||
export type OrganizationJoinRequestSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
|
export type OrganizationJoinRequestSelectUpdateManyAndReturn<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetSelect<{
|
||||||
|
id?: boolean
|
||||||
userId?: boolean
|
userId?: boolean
|
||||||
orgId?: boolean
|
orgId?: boolean
|
||||||
status?: boolean
|
status?: boolean
|
||||||
@@ -765,6 +797,7 @@ export type OrganizationJoinRequestSelectUpdateManyAndReturn<ExtArgs extends run
|
|||||||
}, ExtArgs["result"]["organizationJoinRequest"]>
|
}, ExtArgs["result"]["organizationJoinRequest"]>
|
||||||
|
|
||||||
export type OrganizationJoinRequestSelectScalar = {
|
export type OrganizationJoinRequestSelectScalar = {
|
||||||
|
id?: boolean
|
||||||
userId?: boolean
|
userId?: boolean
|
||||||
orgId?: boolean
|
orgId?: boolean
|
||||||
status?: boolean
|
status?: boolean
|
||||||
@@ -776,7 +809,7 @@ export type OrganizationJoinRequestSelectScalar = {
|
|||||||
requestMessage?: boolean
|
requestMessage?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export type OrganizationJoinRequestOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"userId" | "orgId" | "status" | "requestType" | "requestedOn" | "role" | "updatedAt" | "rejectReason" | "requestMessage", ExtArgs["result"]["organizationJoinRequest"]>
|
export type OrganizationJoinRequestOmit<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = runtime.Types.Extensions.GetOmit<"id" | "userId" | "orgId" | "status" | "requestType" | "requestedOn" | "role" | "updatedAt" | "rejectReason" | "requestMessage", ExtArgs["result"]["organizationJoinRequest"]>
|
||||||
export type OrganizationJoinRequestInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
|
export type OrganizationJoinRequestInclude<ExtArgs extends runtime.Types.Extensions.InternalArgs = runtime.Types.Extensions.DefaultArgs> = {
|
||||||
organization?: boolean | Prisma.OrganizationDefaultArgs<ExtArgs>
|
organization?: boolean | Prisma.OrganizationDefaultArgs<ExtArgs>
|
||||||
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
|
user?: boolean | Prisma.UserDefaultArgs<ExtArgs>
|
||||||
@@ -797,6 +830,7 @@ export type $OrganizationJoinRequestPayload<ExtArgs extends runtime.Types.Extens
|
|||||||
user: Prisma.$UserPayload<ExtArgs>
|
user: Prisma.$UserPayload<ExtArgs>
|
||||||
}
|
}
|
||||||
scalars: runtime.Types.Extensions.GetPayloadResult<{
|
scalars: runtime.Types.Extensions.GetPayloadResult<{
|
||||||
|
id: string
|
||||||
userId: string
|
userId: string
|
||||||
orgId: string
|
orgId: string
|
||||||
status: $Enums.ORGANIZATION_JOIN_REQUEST
|
status: $Enums.ORGANIZATION_JOIN_REQUEST
|
||||||
@@ -889,8 +923,8 @@ export interface OrganizationJoinRequestDelegate<ExtArgs extends runtime.Types.E
|
|||||||
* // Get first 10 OrganizationJoinRequests
|
* // Get first 10 OrganizationJoinRequests
|
||||||
* const organizationJoinRequests = await prisma.organizationJoinRequest.findMany({ take: 10 })
|
* const organizationJoinRequests = await prisma.organizationJoinRequest.findMany({ take: 10 })
|
||||||
*
|
*
|
||||||
* // Only select the `userId`
|
* // Only select the `id`
|
||||||
* const organizationJoinRequestWithUserIdOnly = await prisma.organizationJoinRequest.findMany({ select: { userId: true } })
|
* const organizationJoinRequestWithIdOnly = await prisma.organizationJoinRequest.findMany({ select: { id: true } })
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
findMany<T extends OrganizationJoinRequestFindManyArgs>(args?: Prisma.SelectSubset<T, OrganizationJoinRequestFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$OrganizationJoinRequestPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>
|
findMany<T extends OrganizationJoinRequestFindManyArgs>(args?: Prisma.SelectSubset<T, OrganizationJoinRequestFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<runtime.Types.Result.GetResult<Prisma.$OrganizationJoinRequestPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>
|
||||||
@@ -934,9 +968,9 @@ export interface OrganizationJoinRequestDelegate<ExtArgs extends runtime.Types.E
|
|||||||
* ]
|
* ]
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* // Create many OrganizationJoinRequests and only return the `userId`
|
* // Create many OrganizationJoinRequests and only return the `id`
|
||||||
* const organizationJoinRequestWithUserIdOnly = await prisma.organizationJoinRequest.createManyAndReturn({
|
* const organizationJoinRequestWithIdOnly = await prisma.organizationJoinRequest.createManyAndReturn({
|
||||||
* select: { userId: true },
|
* select: { id: true },
|
||||||
* data: [
|
* data: [
|
||||||
* // ... provide data here
|
* // ... provide data here
|
||||||
* ]
|
* ]
|
||||||
@@ -1025,9 +1059,9 @@ export interface OrganizationJoinRequestDelegate<ExtArgs extends runtime.Types.E
|
|||||||
* ]
|
* ]
|
||||||
* })
|
* })
|
||||||
*
|
*
|
||||||
* // Update zero or more OrganizationJoinRequests and only return the `userId`
|
* // Update zero or more OrganizationJoinRequests and only return the `id`
|
||||||
* const organizationJoinRequestWithUserIdOnly = await prisma.organizationJoinRequest.updateManyAndReturn({
|
* const organizationJoinRequestWithIdOnly = await prisma.organizationJoinRequest.updateManyAndReturn({
|
||||||
* select: { userId: true },
|
* select: { id: true },
|
||||||
* where: {
|
* where: {
|
||||||
* // ... provide filter here
|
* // ... provide filter here
|
||||||
* },
|
* },
|
||||||
@@ -1231,6 +1265,7 @@ export interface Prisma__OrganizationJoinRequestClient<T, Null = never, ExtArgs
|
|||||||
* Fields of the OrganizationJoinRequest model
|
* Fields of the OrganizationJoinRequest model
|
||||||
*/
|
*/
|
||||||
export interface OrganizationJoinRequestFieldRefs {
|
export interface OrganizationJoinRequestFieldRefs {
|
||||||
|
readonly id: Prisma.FieldRef<"OrganizationJoinRequest", 'String'>
|
||||||
readonly userId: Prisma.FieldRef<"OrganizationJoinRequest", 'String'>
|
readonly userId: Prisma.FieldRef<"OrganizationJoinRequest", 'String'>
|
||||||
readonly orgId: Prisma.FieldRef<"OrganizationJoinRequest", 'String'>
|
readonly orgId: Prisma.FieldRef<"OrganizationJoinRequest", 'String'>
|
||||||
readonly status: Prisma.FieldRef<"OrganizationJoinRequest", 'ORGANIZATION_JOIN_REQUEST'>
|
readonly status: Prisma.FieldRef<"OrganizationJoinRequest", 'ORGANIZATION_JOIN_REQUEST'>
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- The required column `id` was added to the `organization_join_request` table with a prisma-level default value. This is not possible if the table is not empty. Please add this column as optional, then populate it before making it required.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- DropIndex
|
||||||
|
DROP INDEX "organization_join_request_userId_orgId_key";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "organization_join_request" ADD COLUMN "id" TEXT NOT NULL,
|
||||||
|
ADD CONSTRAINT "organization_join_request_pkey" PRIMARY KEY ("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE INDEX "organization_join_request_userId_orgId_idx" ON "organization_join_request"("userId", "orgId");
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
model OrganizationJoinRequest {
|
model OrganizationJoinRequest {
|
||||||
|
id String @id @default(uuid())
|
||||||
userId String
|
userId String
|
||||||
orgId String
|
orgId String
|
||||||
status ORGANIZATION_JOIN_REQUEST @default(PENDING)
|
status ORGANIZATION_JOIN_REQUEST @default(PENDING)
|
||||||
@@ -12,7 +13,8 @@ model OrganizationJoinRequest {
|
|||||||
organization Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
|
organization Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
|
||||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||||
|
|
||||||
@@unique([userId, orgId])
|
// @@unique([userId, orgId])
|
||||||
|
@@index([userId, orgId])
|
||||||
@@map("organization_join_request")
|
@@map("organization_join_request")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
16
src/auth/decorators/authorization.decorator.ts
Normal file
16
src/auth/decorators/authorization.decorator.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { applyDecorators, SetMetadata, UseGuards } from "@nestjs/common";
|
||||||
|
import { CAN_PERFORM_KEY } from "common/keys";
|
||||||
|
import { ORG_ROLE } from "prisma/generated/prisma/enums";
|
||||||
|
import { AuthorizationGuard } from "../guards";
|
||||||
|
|
||||||
|
/*
|
||||||
|
*Is this user part of the organization (And optionally, has required role)
|
||||||
|
* */
|
||||||
|
|
||||||
|
export function Authorization(role?: ORG_ROLE[]) {
|
||||||
|
return applyDecorators(
|
||||||
|
SetMetadata(CAN_PERFORM_KEY, role),
|
||||||
|
UseGuards(AuthorizationGuard)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
//export const Authorization = (role?: ORG_ROLE[]) => SetMetadata(CAN_PERFORM_KEY, role)
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
export * from './public.decorator';
|
export * from './public.decorator';
|
||||||
export * from './role.decorator';
|
export * from './role.decorator';
|
||||||
|
export * from './authorization.decorator';
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
import { SetMetadata } from '@nestjs/common';
|
import { SetMetadata } from '@nestjs/common';
|
||||||
import { ROLE_KEY } from 'common/keys';
|
import { ORG_ROLE_KEY, ROLE_KEY } from 'common/keys';
|
||||||
|
|
||||||
export const Roles = (role: string) => SetMetadata(ROLE_KEY, role);
|
export const Roles = (role: string) => SetMetadata(ROLE_KEY, role);
|
||||||
|
|
||||||
|
export const OrgRole = (role: string) => SetMetadata(ORG_ROLE_KEY, role);
|
||||||
|
|||||||
57
src/auth/guards/authorization.guard.ts
Normal file
57
src/auth/guards/authorization.guard.ts
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
import {
|
||||||
|
BadRequestException,
|
||||||
|
CanActivate,
|
||||||
|
ExecutionContext,
|
||||||
|
ForbiddenException,
|
||||||
|
Injectable,
|
||||||
|
UnauthorizedException
|
||||||
|
} from "@nestjs/common";
|
||||||
|
import { Reflector } from "@nestjs/core";
|
||||||
|
import { CAN_PERFORM_KEY } from "common/keys";
|
||||||
|
import { RequestContextService } from "core/als/request-context.service";
|
||||||
|
import { ORG_ROLE } from "prisma/generated/prisma/enums";
|
||||||
|
import { PrismaService } from "src/prisma/prisma.service";
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class AuthorizationGuard implements CanActivate {
|
||||||
|
constructor(
|
||||||
|
private readonly reqeustContext: RequestContextService,
|
||||||
|
private readonly reflector: Reflector,
|
||||||
|
private readonly prisma: PrismaService,
|
||||||
|
) { };
|
||||||
|
|
||||||
|
async canActivate(context: ExecutionContext): Promise<boolean> {
|
||||||
|
const requiredRole = this.reflector.getAllAndOverride<ORG_ROLE[] | undefined>(
|
||||||
|
CAN_PERFORM_KEY,
|
||||||
|
[context.getHandler(), context.getClass()]
|
||||||
|
)
|
||||||
|
|
||||||
|
const userId = this.reqeustContext.user.userId;
|
||||||
|
if (!userId)
|
||||||
|
throw new UnauthorizedException()
|
||||||
|
|
||||||
|
const request = context.switchToHttp().getRequest()
|
||||||
|
const orgId = request.params.orgId;
|
||||||
|
|
||||||
|
if (!orgId)
|
||||||
|
throw new BadRequestException()
|
||||||
|
|
||||||
|
const userIsPartOfOrg = await this.prisma.organizationUserJoinTable.findUnique({
|
||||||
|
where: {
|
||||||
|
userId_orgId: {
|
||||||
|
userId,
|
||||||
|
orgId
|
||||||
|
},
|
||||||
|
...(requiredRole ? { role: { in: requiredRole } } : {})
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
userId: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (!userIsPartOfOrg)
|
||||||
|
throw new ForbiddenException()
|
||||||
|
|
||||||
|
this.reqeustContext.orgId = orgId;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export * from "./authorization.guard"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
export * from './invite-to-org.dto';
|
export * from './invite-to-org.dto';
|
||||||
export * from './join-request.dto'
|
export * from './join-request.dto'
|
||||||
export * from "./user-invitation-action.dto"
|
export * from "./user-invitation-action.dto"
|
||||||
|
export * from "./org-request-action.dto"
|
||||||
|
|||||||
@@ -21,3 +21,14 @@ export class InviteUserToOrganizationRequestDTO {
|
|||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
role: ORG_ROLE;
|
role: ORG_ROLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class CancelInviteUserToOrganizationRequestDTO {
|
||||||
|
@ApiProperty({
|
||||||
|
description: 'Who to cancel',
|
||||||
|
example: 'bb1c81da-ce8f-4231-aee8-2b976124a589',
|
||||||
|
type: 'string',
|
||||||
|
})
|
||||||
|
@IsUUID()
|
||||||
|
@IsNotEmpty()
|
||||||
|
userId: string;
|
||||||
|
}
|
||||||
|
|||||||
23
src/organization-membership/dto/org-request-action.dto.ts
Normal file
23
src/organization-membership/dto/org-request-action.dto.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger"
|
||||||
|
import { IsEnum, IsNotEmpty, IsOptional, IsString } from "class-validator"
|
||||||
|
import { USER_ORG_ACCEPT_REJECT_ACTION } from "../constants"
|
||||||
|
|
||||||
|
export class UserOrganizationRequestActionRequestDTO {
|
||||||
|
@ApiProperty({
|
||||||
|
description: 'Action',
|
||||||
|
example: USER_ORG_ACCEPT_REJECT_ACTION.ACCEPT,
|
||||||
|
type: 'string',
|
||||||
|
})
|
||||||
|
@IsEnum(USER_ORG_ACCEPT_REJECT_ACTION)
|
||||||
|
@IsNotEmpty()
|
||||||
|
action: USER_ORG_ACCEPT_REJECT_ACTION
|
||||||
|
|
||||||
|
@ApiPropertyOptional({
|
||||||
|
description: 'Message(reject reason)',
|
||||||
|
example: 'Bad sry or smth',
|
||||||
|
type: 'string',
|
||||||
|
})
|
||||||
|
@IsString()
|
||||||
|
@IsOptional()
|
||||||
|
message?: string
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
|
import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
|
||||||
import { IsEnum, IsNotEmpty, IsOptional, IsString, IsUUID } from "class-validator";
|
import { IsEnum, IsNotEmpty, IsOptional, IsString } from "class-validator";
|
||||||
import { USER_ORG_ACCEPT_REJECT_ACTION } from "../constants";
|
import { USER_ORG_ACCEPT_REJECT_ACTION } from "../constants";
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,9 @@ import { Body, Controller, Delete, Get, Param, ParseEnumPipe, ParseUUIDPipe, Pat
|
|||||||
import { OrganizationMembershipService } from './organization-membership.service';
|
import { OrganizationMembershipService } from './organization-membership.service';
|
||||||
import { RequestContextService } from 'core/als/request-context.service';
|
import { RequestContextService } from 'core/als/request-context.service';
|
||||||
import { ApiBearerAuth, ApiOperation, ApiParam, ApiQuery } from '@nestjs/swagger';
|
import { ApiBearerAuth, ApiOperation, ApiParam, ApiQuery } from '@nestjs/swagger';
|
||||||
import { JoinRequestToOrganizationRequestDTO, UserOrganizationInvitationActionRequestDTO } from './dto';
|
import { CancelInviteUserToOrganizationRequestDTO, InviteUserToOrganizationRequestDTO, JoinRequestToOrganizationRequestDTO, UserOrganizationInvitationActionRequestDTO, UserOrganizationRequestActionRequestDTO } from './dto';
|
||||||
import { ORGANIZATION_JOIN_REQUEST_TYPE } from 'prisma/generated/prisma/enums';
|
import { ORG_ROLE, ORGANIZATION_JOIN_REQUEST_TYPE } from 'prisma/generated/prisma/enums';
|
||||||
|
import { Authorization } from 'src/auth/decorators';
|
||||||
|
|
||||||
/* NOTE: Regarding endpoint path naming
|
/* NOTE: Regarding endpoint path naming
|
||||||
* - Since we follow REST style, endpoint are resource based.
|
* - Since we follow REST style, endpoint are resource based.
|
||||||
@@ -42,10 +43,17 @@ export class OrganizationMembershipController {
|
|||||||
name: 'orgId',
|
name: 'orgId',
|
||||||
type: String,
|
type: String,
|
||||||
})
|
})
|
||||||
@Delete('organization/:orgId/join-request')
|
@Delete('organization/:orgId/join-request/:id')
|
||||||
async cancelRequestToJoinOrg(@Param('orgId', new ParseUUIDPipe()) orgId: string) {
|
async cancelRequestToJoinOrg(
|
||||||
|
@Param('orgId', new ParseUUIDPipe()) orgId: string,
|
||||||
|
@Param('id', new ParseUUIDPipe()) joinReqId: string
|
||||||
|
) {
|
||||||
const user = this.requestContext.user;
|
const user = this.requestContext.user;
|
||||||
return await this.orgMemService.userCancelOrgJoinRequest(user.userId, orgId)
|
return await this.orgMemService.userCancelOrgJoinRequest(
|
||||||
|
user.userId,
|
||||||
|
orgId,
|
||||||
|
joinReqId
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation({ summary: 'Accept or reject an invitation from an organization' })
|
@ApiOperation({ summary: 'Accept or reject an invitation from an organization' })
|
||||||
@@ -53,15 +61,17 @@ export class OrganizationMembershipController {
|
|||||||
name: 'orgId',
|
name: 'orgId',
|
||||||
type: String,
|
type: String,
|
||||||
})
|
})
|
||||||
@Patch('organization/:orgId/invitation')
|
@Patch('organization/:orgId/invitation/:id')
|
||||||
async acceptOrRejectInvitation(
|
async acceptOrRejectInvitation(
|
||||||
@Param('orgId', new ParseUUIDPipe()) orgId: string,
|
@Param('orgId', new ParseUUIDPipe()) orgId: string,
|
||||||
|
@Param('id', new ParseUUIDPipe()) invitationId: string,
|
||||||
@Body() body: UserOrganizationInvitationActionRequestDTO
|
@Body() body: UserOrganizationInvitationActionRequestDTO
|
||||||
) {
|
) {
|
||||||
const user = this.requestContext.user;
|
const user = this.requestContext.user;
|
||||||
return await this.orgMemService.userOrganiaztionRequestAction(
|
return await this.orgMemService.userOrganiaztionRequestAction(
|
||||||
user.userId,
|
user.userId,
|
||||||
orgId,
|
orgId,
|
||||||
|
invitationId,
|
||||||
body
|
body
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -110,36 +120,66 @@ export class OrganizationMembershipController {
|
|||||||
* ORGANIZATION OPERATIONS
|
* ORGANIZATION OPERATIONS
|
||||||
* */
|
* */
|
||||||
|
|
||||||
// @ApiOperation({ summary: 'Invite user to organization' })
|
@ApiOperation({ summary: 'Invite user to organization' })
|
||||||
// @ApiParam({
|
@ApiParam({
|
||||||
// name: 'orgId',
|
name: 'orgId',
|
||||||
// type: String,
|
type: String,
|
||||||
// })
|
})
|
||||||
// @Post('organization/:orgId/invitation')
|
@Authorization([ORG_ROLE.admin, ORG_ROLE.owner])
|
||||||
// async inviteUserToOrg(
|
@Post('organization/:orgId/invitation')
|
||||||
// @Param('orgId', new ParseUUIDPipe()) orgId: string,
|
async inviteUserToOrg(
|
||||||
// @Body() body: InviteUserToOrganizationRequestDTO
|
@Param('orgId', new ParseUUIDPipe()) orgId: string,
|
||||||
// ) {
|
@Body() body: InviteUserToOrganizationRequestDTO
|
||||||
// const user = this.requestContext.user;
|
) {
|
||||||
// return await this.orgMemService.inviteUserToOrg(
|
return await this.orgMemService.inviteUserToOrg(
|
||||||
// user.userId,
|
orgId,
|
||||||
// orgId,
|
body
|
||||||
// body
|
);
|
||||||
// );
|
}
|
||||||
// }
|
|
||||||
// @Get('organization/:id/members')
|
@ApiOperation({ summary: 'Cancel a sent invitation to user' })
|
||||||
// async getOrganizationMemebers(@Param('id') orgId: string) {
|
@ApiParam({
|
||||||
// return await this.orgMemService.getMemebersOfOrganization(orgId);
|
name: 'userId',
|
||||||
// }
|
type: String,
|
||||||
//
|
})
|
||||||
// @Get('organization/:id/invitations')
|
@Authorization([ORG_ROLE.admin, ORG_ROLE.owner])
|
||||||
// async getOrganizationInvitations(@Param('id') orgId: string) {
|
@Delete('organization/:orgId/invitation/:id')
|
||||||
// return await this.orgMemService.getOrganizationRequestList(orgId);
|
async cancelInvitationsToUser(
|
||||||
// }
|
@Param('orgId', new ParseUUIDPipe()) orgId: string,
|
||||||
//
|
@Param('id', new ParseUUIDPipe()) invitationId: string,
|
||||||
// @Patch('organization/:id/accept-request')
|
@Body() body: CancelInviteUserToOrganizationRequestDTO
|
||||||
// acceptJoinRequest() { }
|
) {
|
||||||
//
|
const userId = body.userId;
|
||||||
// @Patch('organization/:id/reject-request')
|
return await this.orgMemService.orgCancelUserInviteRequest(userId, orgId, invitationId)
|
||||||
// rejectJoinRequest() { }
|
}
|
||||||
|
|
||||||
|
@Get('organization/:orgId/members')
|
||||||
|
@Authorization()
|
||||||
|
async getOrganizationMemebers(@Param('orgId') orgId: string) {
|
||||||
|
const user = this.requestContext.user;
|
||||||
|
return await this.orgMemService.getMemebersOfOrganization(user.userId, orgId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Get('organization/:orgId/invitations')
|
||||||
|
@Authorization([ORG_ROLE.admin, ORG_ROLE.owner])
|
||||||
|
async getOrganizationInvitations(@Param('orgId') orgId: string) {
|
||||||
|
const user = this.requestContext.user;
|
||||||
|
return await this.orgMemService.getOrganizationRequestList(user.userId, orgId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Patch('organization/:orgId/request/:id')
|
||||||
|
@Authorization([ORG_ROLE.admin, ORG_ROLE.owner])
|
||||||
|
async acceptOrRejectRequest(
|
||||||
|
@Param('orgId', new ParseUUIDPipe()) orgId: string,
|
||||||
|
@Param('id', new ParseUUIDPipe()) invitationId: string,
|
||||||
|
@Body() body: UserOrganizationRequestActionRequestDTO
|
||||||
|
) {
|
||||||
|
const user = this.requestContext.user;
|
||||||
|
return await this.orgMemService.organizationUserJoinRequestAction(
|
||||||
|
user.userId,
|
||||||
|
orgId,
|
||||||
|
invitationId,
|
||||||
|
body
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
} from '@nestjs/common';
|
} from '@nestjs/common';
|
||||||
import { OrganizationService } from 'src/organization/organization.service';
|
import { OrganizationService } from 'src/organization/organization.service';
|
||||||
import { UserService } from 'src/user/user.service';
|
import { UserService } from 'src/user/user.service';
|
||||||
import { InviteUserToOrganizationRequestDTO, UserOrganizationInvitationActionRequestDTO } from './dto';
|
import { InviteUserToOrganizationRequestDTO, UserOrganizationInvitationActionRequestDTO, UserOrganizationRequestActionRequestDTO } from './dto';
|
||||||
import { PrismaService } from 'src/prisma/prisma.service';
|
import { PrismaService } from 'src/prisma/prisma.service';
|
||||||
import {
|
import {
|
||||||
ORGANIZATION_JOIN_REQUEST,
|
ORGANIZATION_JOIN_REQUEST,
|
||||||
@@ -26,60 +26,6 @@ export class OrganizationMembershipService {
|
|||||||
private readonly prisma: PrismaService,
|
private readonly prisma: PrismaService,
|
||||||
private readonly authorization: AuthorizationService,
|
private readonly authorization: AuthorizationService,
|
||||||
) { }
|
) { }
|
||||||
async inviteUserToOrg(
|
|
||||||
userId: string,
|
|
||||||
orgId: string,
|
|
||||||
dto: InviteUserToOrganizationRequestDTO,
|
|
||||||
) {
|
|
||||||
const { invitedUserEmail, ...rest } = dto;
|
|
||||||
const [orgExists, invitedUser] = await Promise.all([
|
|
||||||
this.orgService.findById(orgId),
|
|
||||||
this.userService.findByEmail(invitedUserEmail),
|
|
||||||
]);
|
|
||||||
|
|
||||||
if (!orgExists) throw new NotFoundException('Organization');
|
|
||||||
if (!invitedUser) throw new NotFoundException('User');
|
|
||||||
|
|
||||||
const userAlreadyPart =
|
|
||||||
await this.prisma.organizationUserJoinTable.findUnique({
|
|
||||||
where: {
|
|
||||||
userId_orgId: {
|
|
||||||
orgId: orgId,
|
|
||||||
userId: invitedUser.id,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (userAlreadyPart)
|
|
||||||
throw new BadRequestException('User already part of this organization');
|
|
||||||
|
|
||||||
const canInviteUser = await this.authorization.canPerformOperation(
|
|
||||||
userId,
|
|
||||||
orgId,
|
|
||||||
USER_ORGANIZATION_OPERATIONS.INVITE_USERS,
|
|
||||||
);
|
|
||||||
if (!canInviteUser) throw new ForbiddenException('Insufficient Permission');
|
|
||||||
|
|
||||||
try {
|
|
||||||
const invitation = await this.prisma.organizationJoinRequest.create({
|
|
||||||
data: {
|
|
||||||
...rest,
|
|
||||||
userId: invitedUser.id,
|
|
||||||
orgId,
|
|
||||||
requestType: ORGANIZATION_JOIN_REQUEST_TYPE.INVITED,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return invitation;
|
|
||||||
} catch (err) {
|
|
||||||
if (err instanceof Prisma.PrismaClientKnownRequestError) {
|
|
||||||
if (err.code === 'P2002')
|
|
||||||
throw new BadRequestException('User invitation already sent.');
|
|
||||||
} else {
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* *
|
/* *
|
||||||
* USER OPERATIONS
|
* USER OPERATIONS
|
||||||
@@ -95,22 +41,17 @@ export class OrganizationMembershipService {
|
|||||||
userAlreadyPartOf
|
userAlreadyPartOf
|
||||||
] = await Promise.all([
|
] = await Promise.all([
|
||||||
this.orgService.findById(orgId),
|
this.orgService.findById(orgId),
|
||||||
this.prisma.organizationJoinRequest.findUnique({
|
this.prisma.organizationJoinRequest.findFirst({
|
||||||
where: {
|
where: {
|
||||||
userId_orgId: {
|
orgId,
|
||||||
userId,
|
userId,
|
||||||
orgId: orgId
|
|
||||||
},
|
|
||||||
status: ORGANIZATION_JOIN_REQUEST.PENDING
|
status: ORGANIZATION_JOIN_REQUEST.PENDING
|
||||||
},
|
},
|
||||||
select: { orgId: true }
|
|
||||||
}),
|
}),
|
||||||
this.prisma.organizationUserJoinTable.findUnique({
|
this.prisma.organizationUserJoinTable.findFirst({
|
||||||
where: {
|
where: {
|
||||||
userId_orgId: {
|
orgId,
|
||||||
orgId: orgId,
|
userId,
|
||||||
userId
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
select: { userId: true }
|
select: { userId: true }
|
||||||
})
|
})
|
||||||
@@ -136,16 +77,16 @@ export class OrganizationMembershipService {
|
|||||||
|
|
||||||
async userCancelOrgJoinRequest(
|
async userCancelOrgJoinRequest(
|
||||||
userId: string,
|
userId: string,
|
||||||
orgId: string
|
orgId: string,
|
||||||
|
id: string,
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
await this.prisma.organizationJoinRequest.update({
|
await this.prisma.organizationJoinRequest.update({
|
||||||
where: {
|
where: {
|
||||||
userId_orgId: {
|
id,
|
||||||
userId,
|
userId,
|
||||||
orgId
|
orgId
|
||||||
},
|
},
|
||||||
},
|
|
||||||
data: {
|
data: {
|
||||||
status: ORGANIZATION_JOIN_REQUEST.CANCELLED,
|
status: ORGANIZATION_JOIN_REQUEST.CANCELLED,
|
||||||
}
|
}
|
||||||
@@ -174,8 +115,9 @@ export class OrganizationMembershipService {
|
|||||||
return await this.prisma.organizationJoinRequest.findMany({
|
return await this.prisma.organizationJoinRequest.findMany({
|
||||||
where: {
|
where: {
|
||||||
userId,
|
userId,
|
||||||
requestType: joinReqType
|
requestType: joinReqType,
|
||||||
}
|
},
|
||||||
|
include: { user: { select: { firstName: true, email: true } } }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,24 +125,19 @@ export class OrganizationMembershipService {
|
|||||||
async userOrganiaztionRequestAction(
|
async userOrganiaztionRequestAction(
|
||||||
userId: string,
|
userId: string,
|
||||||
orgId: string,
|
orgId: string,
|
||||||
|
id: string,
|
||||||
dto: UserOrganizationInvitationActionRequestDTO
|
dto: UserOrganizationInvitationActionRequestDTO
|
||||||
) {
|
) {
|
||||||
const [orgExists, hasUserSendRequest] = await Promise.all([
|
const hasUserSendRequest = await this.prisma.organizationJoinRequest.findUnique({
|
||||||
this.orgService.findById(orgId),
|
|
||||||
this.prisma.organizationJoinRequest.findUnique({
|
|
||||||
where: {
|
where: {
|
||||||
userId_orgId: {
|
id,
|
||||||
userId,
|
userId,
|
||||||
orgId: orgId
|
orgId,
|
||||||
},
|
|
||||||
status: ORGANIZATION_JOIN_REQUEST.PENDING,
|
status: ORGANIZATION_JOIN_REQUEST.PENDING,
|
||||||
requestType: ORGANIZATION_JOIN_REQUEST_TYPE.REQUESTED
|
requestType: ORGANIZATION_JOIN_REQUEST_TYPE.REQUESTED
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
])
|
|
||||||
|
|
||||||
if (!orgExists)
|
|
||||||
throw new NotFoundException("Organization")
|
|
||||||
if (!hasUserSendRequest)
|
if (!hasUserSendRequest)
|
||||||
throw new BadRequestException("No pending join request")
|
throw new BadRequestException("No pending join request")
|
||||||
|
|
||||||
@@ -212,10 +149,9 @@ export class OrganizationMembershipService {
|
|||||||
|
|
||||||
await tx.organizationJoinRequest.update({
|
await tx.organizationJoinRequest.update({
|
||||||
where: {
|
where: {
|
||||||
userId_orgId: {
|
id,
|
||||||
userId,
|
userId,
|
||||||
orgId: orgId,
|
orgId,
|
||||||
}
|
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
status: userAction,
|
status: userAction,
|
||||||
@@ -322,9 +258,9 @@ export class OrganizationMembershipService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getOrganizationsOfUser(userId: string) {
|
async getOrganizationsOfUser(userId: string) {
|
||||||
return await this.prisma.organizationJoinRequest.findMany({
|
return await this.prisma.organizationUserJoinTable.findMany({
|
||||||
where: {
|
where: {
|
||||||
userId
|
userId,
|
||||||
},
|
},
|
||||||
include: {
|
include: {
|
||||||
organization: {
|
organization: {
|
||||||
@@ -351,41 +287,166 @@ export class OrganizationMembershipService {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async inviteUserToOrg(
|
||||||
|
orgId: string,
|
||||||
|
dto: InviteUserToOrganizationRequestDTO,
|
||||||
|
) {
|
||||||
|
const { invitedUserEmail, ...rest } = dto;
|
||||||
|
|
||||||
|
const invitedUser = await this.userService.findByEmail(invitedUserEmail);
|
||||||
|
if (!invitedUser) throw new NotFoundException('User');
|
||||||
|
|
||||||
|
const userAlreadyPart =
|
||||||
|
await this.prisma.organizationUserJoinTable.findUnique({
|
||||||
|
where: {
|
||||||
|
userId_orgId: {
|
||||||
|
orgId: orgId,
|
||||||
|
userId: invitedUser.id,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (userAlreadyPart)
|
||||||
|
throw new BadRequestException('User already part of this organization');
|
||||||
|
|
||||||
|
// TODO: Test in Authorization and remove
|
||||||
|
// const canInviteUser = await this.authorization.canPerformOperation(
|
||||||
|
// userId,
|
||||||
|
// orgId,
|
||||||
|
// USER_ORGANIZATION_OPERATIONS.INVITE_USERS,
|
||||||
|
// );
|
||||||
|
// if (!canInviteUser) throw new ForbiddenException('Insufficient Permission');
|
||||||
|
|
||||||
|
try {
|
||||||
|
const invitation = await this.prisma.organizationJoinRequest.create({
|
||||||
|
data: {
|
||||||
|
...rest,
|
||||||
|
userId: invitedUser.id,
|
||||||
|
orgId,
|
||||||
|
requestType: ORGANIZATION_JOIN_REQUEST_TYPE.INVITED,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return invitation;
|
||||||
|
} catch (err) {
|
||||||
|
if (err instanceof Prisma.PrismaClientKnownRequestError) {
|
||||||
|
if (err.code === 'P2002')
|
||||||
|
throw new BadRequestException('User invitation already sent.');
|
||||||
|
} else {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async orgCancelUserInviteRequest(
|
||||||
|
userId: string,
|
||||||
|
orgId: string,
|
||||||
|
id: string,
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
return await this.prisma.organizationJoinRequest.update({
|
||||||
|
where: {
|
||||||
|
id,
|
||||||
|
userId,
|
||||||
|
orgId,
|
||||||
|
requestType: ORGANIZATION_JOIN_REQUEST_TYPE.INVITED,
|
||||||
|
status: ORGANIZATION_JOIN_REQUEST.PENDING
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
status: ORGANIZATION_JOIN_REQUEST.CANCELLED
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// TODO: Check error type and use it
|
||||||
|
throw new BadRequestException("Invitation not found")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async organizationUserJoinRequestAction(
|
||||||
|
userId: string,
|
||||||
|
orgId: string,
|
||||||
|
id: string,
|
||||||
|
dto: UserOrganizationRequestActionRequestDTO
|
||||||
|
) {
|
||||||
|
// NOTE: Experiment, don't know if its better
|
||||||
|
try {
|
||||||
|
return await this.prisma.$transaction(async (tx) => {
|
||||||
|
const updatedJoinReq = await tx.organizationJoinRequest.update({
|
||||||
|
where: {
|
||||||
|
id,
|
||||||
|
orgId,
|
||||||
|
status: ORGANIZATION_JOIN_REQUEST.PENDING,
|
||||||
|
requestType: ORGANIZATION_JOIN_REQUEST_TYPE.REQUESTED
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
status: dto.action === USER_ORG_ACCEPT_REJECT_ACTION.ACCEPT
|
||||||
|
? ORGANIZATION_JOIN_REQUEST.ACCEPTED
|
||||||
|
: ORGANIZATION_JOIN_REQUEST.REJECTED,
|
||||||
|
|
||||||
|
...((dto.action === USER_ORG_ACCEPT_REJECT_ACTION.REJECT && dto.message) ? {
|
||||||
|
rejectReason: dto.message
|
||||||
|
} : {})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
console.log(updatedJoinReq)
|
||||||
|
|
||||||
|
return await tx.organizationUserJoinTable.create({
|
||||||
|
data: {
|
||||||
|
userId: updatedJoinReq.userId,
|
||||||
|
orgId,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
throw new BadRequestException()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async getOrganizationRequestList(
|
async getOrganizationRequestList(
|
||||||
|
userId: string,
|
||||||
orgId: string,
|
orgId: string,
|
||||||
requestType: ORGANIZATION_JOIN_REQUEST_TYPE = ORGANIZATION_JOIN_REQUEST_TYPE.REQUESTED,
|
requestType: ORGANIZATION_JOIN_REQUEST_TYPE = ORGANIZATION_JOIN_REQUEST_TYPE.REQUESTED,
|
||||||
status: ORGANIZATION_JOIN_REQUEST = ORGANIZATION_JOIN_REQUEST.PENDING,
|
|
||||||
) {
|
) {
|
||||||
// TODO: Check can perform
|
// TODO: Check can perform
|
||||||
return await this.prisma.organizationJoinRequest.findMany({
|
return await this.prisma.organizationJoinRequest.findMany({
|
||||||
where: {
|
where: {
|
||||||
orgId: orgId,
|
orgId,
|
||||||
status: status,
|
requestType: requestType
|
||||||
requestType: requestType,
|
}
|
||||||
},
|
})
|
||||||
include: {
|
|
||||||
user: {
|
|
||||||
select: { email: true },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async getMemebersOfOrganization(orgId: string) {
|
|
||||||
const orgExists = await this.orgService.findById(orgId);
|
|
||||||
if (!orgExists) throw new NotFoundException('Organization');
|
|
||||||
|
|
||||||
return await this.prisma.organizationUserJoinTable.findMany({
|
async getMemebersOfOrganization(userId: string, orgId: string) {
|
||||||
|
const members = await this.prisma.organization.findFirst({
|
||||||
where: {
|
where: {
|
||||||
orgId: orgId,
|
id: orgId,
|
||||||
|
members: {
|
||||||
|
some: {
|
||||||
|
userId: userId
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
include: {
|
||||||
|
members: {
|
||||||
include: {
|
include: {
|
||||||
user: {
|
user: {
|
||||||
select: {
|
select: {
|
||||||
email: true,
|
firstName: true,
|
||||||
},
|
email: true
|
||||||
},
|
}
|
||||||
},
|
}
|
||||||
});
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
if (!members)
|
||||||
|
throw new NotFoundException("Organization")
|
||||||
|
|
||||||
|
return members;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {
|
|||||||
Param,
|
Param,
|
||||||
Post,
|
Post,
|
||||||
Put,
|
Put,
|
||||||
|
UseGuards,
|
||||||
} from '@nestjs/common';
|
} from '@nestjs/common';
|
||||||
import {
|
import {
|
||||||
CreateNewOrganizationRequestDTO,
|
CreateNewOrganizationRequestDTO,
|
||||||
@@ -16,6 +17,7 @@ import { OrganizationService } from './organization.service';
|
|||||||
import { RequestContextService } from 'core/als/request-context.service';
|
import { RequestContextService } from 'core/als/request-context.service';
|
||||||
import { ApiBearerAuth } from '@nestjs/swagger';
|
import { ApiBearerAuth } from '@nestjs/swagger';
|
||||||
import { DataResponse } from 'common/http';
|
import { DataResponse } from 'common/http';
|
||||||
|
import { AuthorizationGuard } from 'src/auth/guards';
|
||||||
|
|
||||||
@Controller('organization')
|
@Controller('organization')
|
||||||
@ApiBearerAuth('access-token')
|
@ApiBearerAuth('access-token')
|
||||||
@@ -50,17 +52,18 @@ export class OrganizationController {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Get(':id')
|
@Get(':orgId')
|
||||||
|
@UseGuards(AuthorizationGuard)
|
||||||
async getAnOrganization(
|
async getAnOrganization(
|
||||||
@Param('id') id: string,
|
@Param('orgId') orgId: string,
|
||||||
): Promise<DataResponse<OrganizationDTO>> {
|
): Promise<DataResponse<OrganizationDTO>> {
|
||||||
const organization = await this.orgService.getOrganizationById(id);
|
const organization = await this.orgService.getOrganizationById(orgId);
|
||||||
return new DataResponse(new OrganizationDTO(organization));
|
return new DataResponse(new OrganizationDTO(organization));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Put(':id')
|
@Put(':orgId')
|
||||||
async updateAnOrganization(
|
async updateAnOrganization(
|
||||||
@Param('id') orgId: string,
|
@Param('orgId') orgId: string,
|
||||||
@Body() body: UpdateOrganizationRequestDTO,
|
@Body() body: UpdateOrganizationRequestDTO,
|
||||||
): Promise<DataResponse<OrganizationDTO>> {
|
): Promise<DataResponse<OrganizationDTO>> {
|
||||||
const user = this.requestContext.user;
|
const user = this.requestContext.user;
|
||||||
@@ -76,9 +79,9 @@ export class OrganizationController {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Delete(':id')
|
@Delete(':orgId')
|
||||||
async deleteAnOrganization(
|
async deleteAnOrganization(
|
||||||
@Param('id') orgId: string,
|
@Param('orgId') orgId: string,
|
||||||
): Promise<DataResponse<OrganizationDTO>> {
|
): Promise<DataResponse<OrganizationDTO>> {
|
||||||
const user = this.requestContext.user;
|
const user = this.requestContext.user;
|
||||||
const deletedOrg = await this.orgService.deleteAnOrganization(
|
const deletedOrg = await this.orgService.deleteAnOrganization(
|
||||||
|
|||||||
Reference in New Issue
Block a user