feat: add query infra-configs

This commit is contained in:
Mir Arif Hasan
2023-11-28 17:03:06 +06:00
parent 8df8b056d9
commit c4a9038579
4 changed files with 55 additions and 13 deletions

View File

@@ -27,7 +27,8 @@ import { InfraConfig } from 'src/infra-config/infra-config.model';
import { InfraConfigService } from 'src/infra-config/infra-config.service'; import { InfraConfigService } from 'src/infra-config/infra-config.service';
import { InfraConfigArgs } from 'src/infra-config/input-args'; import { InfraConfigArgs } from 'src/infra-config/input-args';
import { AuthProvider } from 'src/auth/helper'; import { AuthProvider } from 'src/auth/helper';
import { Status } from 'src/infra-config/helper'; import { AuthProviderStatus } from 'src/infra-config/helper';
import { InfraConfigEnumForClient } from 'src/types/InfraConfig';
@UseGuards(GqlThrottlerGuard) @UseGuards(GqlThrottlerGuard)
@Resolver(() => Infra) @Resolver(() => Infra)
@@ -238,6 +239,24 @@ export class InfraResolver {
); );
} }
@Query(() => [InfraConfig], {
description: 'Fetch infra configs',
})
@UseGuards(GqlAuthGuard, GqlAdminGuard)
async infraConfigs(
@Args({
name: 'names',
type: () => [InfraConfigEnumForClient],
description: 'Names of the InfraConfigs',
})
names: InfraConfigEnumForClient[],
) {
console.log(names);
const infraConfigs = await this.infraConfigService.getMany(names);
if (E.isLeft(infraConfigs)) throwErr(infraConfigs.left);
return infraConfigs.right;
}
@Query(() => [String], { @Query(() => [String], {
description: 'Allowed Auth Provider list', description: 'Allowed Auth Provider list',
}) })
@@ -288,10 +307,10 @@ export class InfraResolver {
provider: AuthProvider, provider: AuthProvider,
@Args({ @Args({
name: 'status', name: 'status',
type: () => Status, type: () => AuthProviderStatus,
description: 'Status to enable or disable', description: 'Status to enable or disable',
}) })
status: Status, status: AuthProviderStatus,
) { ) {
const isUpdated = await this.infraConfigService.enableAndDisableSSO( const isUpdated = await this.infraConfigService.enableAndDisableSSO(
provider, provider,

View File

@@ -1,6 +1,6 @@
import { PrismaService } from 'src/prisma/prisma.service'; import { PrismaService } from 'src/prisma/prisma.service';
export enum Status { export enum AuthProviderStatus {
ENABLE = 'ENABLE', ENABLE = 'ENABLE',
DISABLE = 'DISABLE', DISABLE = 'DISABLE',
} }

View File

@@ -1,7 +1,7 @@
import { Field, ObjectType, registerEnumType } from '@nestjs/graphql'; import { Field, ObjectType, registerEnumType } from '@nestjs/graphql';
import { AuthProvider } from 'src/auth/helper'; import { AuthProvider } from 'src/auth/helper';
import { InfraConfigEnumForClient } from 'src/types/InfraConfig'; import { InfraConfigEnumForClient } from 'src/types/InfraConfig';
import { Status } from './helper'; import { AuthProviderStatus } from './helper';
@ObjectType() @ObjectType()
export class InfraConfig { export class InfraConfig {
@@ -24,6 +24,6 @@ registerEnumType(AuthProvider, {
name: 'AuthProvider', name: 'AuthProvider',
}); });
registerEnumType(Status, { registerEnumType(AuthProviderStatus, {
name: 'Status', name: 'AuthProviderStatus',
}); });

View File

@@ -3,7 +3,10 @@ import { InfraConfig } from './infra-config.model';
import { PrismaService } from 'src/prisma/prisma.service'; import { PrismaService } from 'src/prisma/prisma.service';
import { InfraConfig as DBInfraConfig } from '@prisma/client'; import { InfraConfig as DBInfraConfig } from '@prisma/client';
import * as E from 'fp-ts/Either'; import * as E from 'fp-ts/Either';
import { InfraConfigEnum } from 'src/types/InfraConfig'; import {
InfraConfigEnum,
InfraConfigEnumForClient,
} from 'src/types/InfraConfig';
import { import {
DATABASE_TABLE_NOT_EXIST, DATABASE_TABLE_NOT_EXIST,
INFRA_CONFIG_NOT_FOUND, INFRA_CONFIG_NOT_FOUND,
@@ -13,7 +16,7 @@ import {
} from 'src/errors'; } from 'src/errors';
import { throwErr } from 'src/utils'; import { throwErr } from 'src/utils';
import { ConfigService } from '@nestjs/config'; import { ConfigService } from '@nestjs/config';
import { Status, stopApp } from './helper'; import { AuthProviderStatus, stopApp } from './helper';
import { InfraConfigArgs } from './input-args'; import { InfraConfigArgs } from './input-args';
import { AuthProvider } from 'src/auth/helper'; import { AuthProvider } from 'src/auth/helper';
@@ -180,16 +183,19 @@ export class InfraConfigService implements OnModuleInit {
* @param status Status to enable or disable * @param status Status to enable or disable
* @returns Either true or an error * @returns Either true or an error
*/ */
async enableAndDisableSSO(provider: AuthProvider, status: Status) { async enableAndDisableSSO(
provider: AuthProvider,
status: AuthProviderStatus,
) {
const enabledAuthProviders = this.configService const enabledAuthProviders = this.configService
.get('INFRA.VITE_ALLOWED_AUTH_PROVIDERS') .get('INFRA.VITE_ALLOWED_AUTH_PROVIDERS')
.split(','); .split(',');
const isProviderEnabled = enabledAuthProviders.includes(provider); const isProviderEnabled = enabledAuthProviders.includes(provider);
let newEnabledAuthProviders = enabledAuthProviders; let newEnabledAuthProviders = enabledAuthProviders;
if (status === Status.ENABLE && !isProviderEnabled) { if (status === AuthProviderStatus.ENABLE && !isProviderEnabled) {
newEnabledAuthProviders = [...enabledAuthProviders, provider]; newEnabledAuthProviders = [...enabledAuthProviders, provider];
} else if (status === Status.DISABLE && isProviderEnabled) { } else if (status === AuthProviderStatus.DISABLE && isProviderEnabled) {
newEnabledAuthProviders = enabledAuthProviders.filter( newEnabledAuthProviders = enabledAuthProviders.filter(
(p) => p !== provider, (p) => p !== provider,
); );
@@ -209,7 +215,7 @@ export class InfraConfigService implements OnModuleInit {
* @param name Name of the InfraConfig * @param name Name of the InfraConfig
* @returns InfraConfig model * @returns InfraConfig model
*/ */
async get(name: InfraConfigEnum) { async get(name: InfraConfigEnumForClient) {
try { try {
const infraConfig = await this.prisma.infraConfig.findUniqueOrThrow({ const infraConfig = await this.prisma.infraConfig.findUniqueOrThrow({
where: { name }, where: { name },
@@ -221,6 +227,23 @@ export class InfraConfigService implements OnModuleInit {
} }
} }
/**
* Get InfraConfigs by names
* @param names Names of the InfraConfigs
* @returns InfraConfig model
*/
async getMany(names: InfraConfigEnumForClient[]) {
try {
const infraConfigs = await this.prisma.infraConfig.findMany({
where: { name: { in: names } },
});
return E.right(infraConfigs.map((p) => this.cast(p)));
} catch (e) {
return E.left(INFRA_CONFIG_NOT_FOUND);
}
}
/** /**
* Get allowed auth providers for login/signup * Get allowed auth providers for login/signup
* @returns string[] * @returns string[]