Skip to content

Commit

Permalink
Merge pull request #11 from bcgov/add-frontend-api
Browse files Browse the repository at this point in the history
Add frontend api
  • Loading branch information
mgtennant authored Jun 12, 2024
2 parents 97a957f + ea0a366 commit f2a54b6
Show file tree
Hide file tree
Showing 15 changed files with 318 additions and 169 deletions.
9 changes: 8 additions & 1 deletion backend/src/admin/admin.controller.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
import { Controller, Get } from "@nestjs/common";
import { Controller, Get, UseGuards } from "@nestjs/common";
import { AdminService } from "./admin.service";
import { Roles } from "src/auth/decorators/roles.decorators";
import { Role } from "src/enum/role.enum";
import { JwtRoleGuard } from "src/auth/jwtrole.guard";
import { JwtAuthGuard } from "src/auth/jwtauth.guard";

@Controller("admin")
@UseGuards(JwtAuthGuard)
@UseGuards(JwtRoleGuard)
@Roles(Role.ENMODS_ADMIN)
export class AdminController {
constructor(private readonly adminService: AdminService) {}

Expand Down
47 changes: 41 additions & 6 deletions backend/src/admin/admin.service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { HttpService } from "@nestjs/axios";
import { Injectable } from "@nestjs/common";
import { firstValueFrom } from "rxjs";
import { Role } from "src/enum/role.enum";
import { IdirUserInfo, UserInfo } from "src/types/types";

@Injectable()
export class AdminService {
Expand All @@ -13,17 +15,50 @@ export class AdminService {
*/
async findAll(): Promise<any[]> {
const bearerToken = await this.getToken();
const role = "Enmods Admin";
const url = `${process.env.users_api_base_url}/integrations/${process.env.integration_id}/${process.env.css_environment}/roles/${role}/users`;
const adminUrl = `${process.env.users_api_base_url}/integrations/${process.env.integration_id}/${process.env.css_environment}/roles/${Role.ENMODS_ADMIN}/users`;
const userUrl = `${process.env.users_api_base_url}/integrations/${process.env.integration_id}/${process.env.css_environment}/roles/${Role.ENMODS_USER}/users`;
const config = {
headers: { Authorization: "Bearer " + bearerToken },
};
try {
console.log("trying user api");
const response = await firstValueFrom(this.httpService.get(url, config));
console.log(response);
return response.data.data;
const adminResponse = await firstValueFrom(
this.httpService.get(adminUrl, config)
);

const returnData: UserInfo[] = [];
const adminData = adminResponse.data.data;
adminData.map((admin: IdirUserInfo) => {
returnData.push({
username: admin.attributes.idir_username[0],
email: admin.email,
name: admin.firstName + " " + admin.lastName,
company: "Not Implemented",
role: [Role.ENMODS_ADMIN],
});
});
const userResponse = await firstValueFrom(
this.httpService.get(userUrl, config)
);
const userData = userResponse.data.data;
userData.map((user: IdirUserInfo) => {
const existingUser = returnData.find(
(u) => u.username === user.attributes.idir_username[0]
);
if (existingUser) {
existingUser.role.push(Role.ENMODS_USER);
} else {
returnData.push({
username: user.attributes.idir_username[0],
email: user.email,
name: user.firstName + " " + user.lastName,
company: "Not Implemented",
role: [Role.ENMODS_USER],
});
}
});
return returnData;
} catch (err) {
console.log("Error findAll Admin");
console.log(err.response?.data || err.message);
throw err;
}
Expand Down
6 changes: 3 additions & 3 deletions backend/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ import { TerminusModule } from "@nestjs/terminus";
import { HealthController } from "./health.controller";
import { JWTAuthModule } from "./auth/jwtauth.module";
import { AdminModule } from "./admin/admin.module";
import { DryrunModule } from './dryrun/dryrun.module';
import { DryrunModule } from "./dryrun/dryrun.module";

const DB_HOST = process.env.POSTGRES_HOST || "localhost";
const DB_USER = process.env.POSTGRES_USER || "postgres";
const DB_PWD = encodeURIComponent(process.env.POSTGRES_PASSWORD || "default"); // this needs to be encoded, if the password contains special characters it will break connection string.
const DB_PORT = process.env.POSTGRES_PORT || 5432;
const DB_NAME = process.env.POSTGRES_DATABASE || "postgres";
const DB_SCHEMA = process.env.DB_SCHEMA || "users";
const DB_SCHEMA = process.env.POSTGRES_SCHEMA || "users";
const dataSourceURL = `postgresql://${DB_USER}:${DB_PWD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?schema=${DB_SCHEMA}&connection_limit=5`;

function getMiddlewares() {
Expand All @@ -48,7 +48,7 @@ function getMiddlewares() {
prismaOptions: {
log: ["error", "warn"],
errorFormat: "pretty",
datasourceUrl: `postgresql://${DB_USER}:${DB_PWD}@${DB_HOST}:${DB_PORT}/${DB_NAME}?schema=${DB_SCHEMA}&connection_limit=5`,
datasourceUrl: dataSourceURL,
},
middlewares: getMiddlewares(),
},
Expand Down
17 changes: 7 additions & 10 deletions backend/src/app.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { AppModule } from './app.module';
import { customLogger } from './common/logger.config';
import { NestExpressApplication } from '@nestjs/platform-express';
import helmet from 'helmet';
import { VersioningType } from '@nestjs/common';
import { NestFactory } from "@nestjs/core";
import { DocumentBuilder, SwaggerModule } from "@nestjs/swagger";
import { AppModule } from "./app.module";
import { customLogger } from "./common/logger.config";
import { NestExpressApplication } from "@nestjs/platform-express";
import helmet from "helmet";
import { VersioningType } from "@nestjs/common";
import { metricsMiddleware } from "./prom";

/**
*
*/
export async function bootstrap() {
const app: NestExpressApplication =
await NestFactory.create<NestExpressApplication>(AppModule, {
Expand Down
6 changes: 3 additions & 3 deletions backend/src/enum/role.enum.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export enum Role {
ENMODS_USER = 'Enmods user',
ENMODS_ADMIN = 'Enmods admin'
}
ENMODS_USER = "Enmods User",
ENMODS_ADMIN = "Enmods Admin",
}
22 changes: 12 additions & 10 deletions backend/src/main.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import {NestExpressApplication} from "@nestjs/platform-express";
import {bootstrap} from "./app";
import {Logger} from "@nestjs/common";
import { NestExpressApplication } from "@nestjs/platform-express";
import { bootstrap } from "./app";
import { Logger } from "@nestjs/common";

const logger = new Logger('NestApplication');
bootstrap().then(async (app: NestExpressApplication) => {
await app.listen(3000);
logger.log(`Listening on ${await app.getUrl()}`);
}).catch(err=>{
logger.error(err);
});
const logger = new Logger("NestApplication");
bootstrap()
.then(async (app: NestExpressApplication) => {
await app.listen(3000);
logger.log(`Listening on ${await app.getUrl()}`);
})
.catch((err) => {
logger.error(err);
});
25 changes: 25 additions & 0 deletions backend/src/types/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* Type of data returned by CSS user api
*/
export type IdirUserInfo = {
username: string;
email: string;
firstName: string;
lastName: string;
attributes: {
idir_user_guid: string[];
idir_username: string[];
display_name: string[];
};
};

/**
* Type returned to the frontend for displaying users on Admin page
*/
export type UserInfo = {
username: string;
email: string;
name: string;
company: string;
role: string[];
};
74 changes: 0 additions & 74 deletions backend/src/users/users.controller.ts

This file was deleted.

3 changes: 1 addition & 2 deletions frontend/.prettierrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ singleQuote: true

# Use 2 spaces for indentation
tabWidth: 2
printWidth: 120

# Use spaces instead of tabs
useTabs: false
Expand All @@ -19,5 +18,5 @@ semi: false
# Wrap prose-like comments as-is
proseWrap: 'always'

# Format files with Unix-style line endings
# Format files with windows line endings
endOfLine: 'lf'
10 changes: 10 additions & 0 deletions frontend/src/common/admin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type { UserInfo } from '@/types/types'
import config from '../config'
import * as api from './api'

export async function getUsers(): Promise<UserInfo[]> {
const adminDataUrl: string = `${config.API_BASE_URL}/admin`
const getParameters = api.generateApiParameters(adminDataUrl)
const adminData: UserInfo[] = await api.get(getParameters)
return adminData
}
Loading

0 comments on commit f2a54b6

Please sign in to comment.