Skip to content

Commit

Permalink
Merge branch 'main' into 243-feature-add-checkbox-input-in-create-for…
Browse files Browse the repository at this point in the history
…m-template-flow
  • Loading branch information
DonnyLe committed Feb 17, 2025
2 parents 833fd54 + 2c94e61 commit 26f6999
Show file tree
Hide file tree
Showing 44 changed files with 794 additions and 376 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ NextJS, NestJS, Prisma, PostgreSQL
| JWT_REFRESH_VALID_DURATION | 604800 |
| FRONTEND_DOMAIN | <http://localhost:3002> |
| POSTMARK_SERVER_KEY | |
| BLOB_READ_WRITE_TOKEN | |
| NODE_ENV | development |

`apps/web/.env`
Expand All @@ -45,7 +46,6 @@ NextJS, NestJS, Prisma, PostgreSQL
| AZURE_AD_CLIENT_ID | |
| AZURE_AD_CLIENT_SECRET | |
| AZURE_AD_TENANT_ID | |
| BLOB_READ_WRITE_TOKEN | |
| NEXTAUTH_SECRET | |
| NEXTAUTH_URL | http://localhost:3002 |

Expand Down
3 changes: 2 additions & 1 deletion apps/server/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ JWT_VALID_DURATION=600
JWT_REFRESH_VALID_DURATION=604800
FRONTEND_DOMAIN=http://localhost:3002
POSTMARK_SERVER_KEY=
NODE_ENV=development
BLOB_READ_WRITE_TOKEN=
NODE_ENV=development
10 changes: 6 additions & 4 deletions apps/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,16 @@
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"dependencies": {
"@nestjs/common": "10.0.0",
"@nestjs/common": "11.0.9",
"@nestjs/config": "3.1.1",
"@nestjs/core": "10.0.0",
"@nestjs/core": "11.0.9",
"@nestjs/jwt": "10.1.1",
"@nestjs/passport": "11.0.5",
"@nestjs/platform-express": "10.0.0",
"@nestjs/swagger": "7.1.8",
"@nestjs/platform-express": "11.0.9",
"@nestjs/swagger": "11.0.3",
"@prisma/client": "5.2.0",
"@trpc/server": "10.38.0",
"@vercel/blob": "0.27.1",
"bcrypt": "5.1.1",
"class-transformer": "0.5.1",
"class-validator": "0.14.1",
Expand All @@ -58,6 +59,7 @@
"@types/cookie-parser": "1.4.5",
"@types/express": "4.17.17",
"@types/jest": "29.5.2",
"@types/multer": "1.4.12",
"@types/node": "22.9.0",
"@types/passport": "1.0.17",
"@types/passport-jwt": "3.0.10",
Expand Down
6 changes: 5 additions & 1 deletion apps/server/src/app.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
HttpException,
HttpStatus,
Body,
ValidationPipe,
} from '@nestjs/common';
import { AppService } from './app.service';
import {
Expand Down Expand Up @@ -125,7 +126,10 @@ export class AppController {
description: AppErrorMessage.UNPROCESSABLE_ENTITY,
})
@ApiBadRequestResponse({ description: AppErrorMessage.UNPROCESSABLE_ENTITY })
async register(@Body() registerEmployeeDto: RegisterEmployeeDto) {
async register(
@Body(new ValidationPipe({ transform: true }))
registerEmployeeDto: RegisterEmployeeDto,
) {
const { positionName, departmentName, ...employeeDto } =
registerEmployeeDto;

Expand Down
5 changes: 3 additions & 2 deletions apps/server/src/assigned-group/assigned-group.controller.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Body, Controller, Param, Patch } from '@nestjs/common';
import { Body, Controller, Param, Patch, ValidationPipe } from '@nestjs/common';
import { AssignedGroupService } from './assigned-group.service';
import { UpdateAssignedGroupSignerDto } from './dto/update-assigned-group-signer.dto';

Expand All @@ -9,7 +9,8 @@ export class AssignedGroupController {
@Patch(':id/signer')
updateAssignedGroupSigner(
@Param('id') assignedGroupId: string,
@Body() updateAssignedGroupSigner: UpdateAssignedGroupSignerDto,
@Body(new ValidationPipe({ transform: true }))
updateAssignedGroupSigner: UpdateAssignedGroupSignerDto,
) {
return this.assignedGroupService.updateSigner(
assignedGroupId,
Expand Down
2 changes: 1 addition & 1 deletion apps/server/src/auth/auth.decorators.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ export const IS_PUBLIC_KEY = 'isPublic';
export const Public = () => SetMetadata(IS_PUBLIC_KEY, true);

export const AuthUser = createParamDecorator((data, req) => {
return new UserEntity(req.args[0].user);
return new UserEntity(req.getArgs()[0].user);
});
9 changes: 7 additions & 2 deletions apps/server/src/departments/departments.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
Delete,
NotFoundException,
Query,
ValidationPipe,
} from '@nestjs/common';
import { DepartmentsService } from './departments.service';
import { CreateDepartmentDto } from './dto/create-department.dto';
Expand Down Expand Up @@ -42,7 +43,10 @@ export class DepartmentsController {
description: AppErrorMessage.UNPROCESSABLE_ENTITY,
})
@ApiBadRequestResponse({ description: AppErrorMessage.UNPROCESSABLE_ENTITY })
async create(@Body() createDepartmentDto: CreateDepartmentDto) {
async create(
@Body(new ValidationPipe({ transform: true }))
createDepartmentDto: CreateDepartmentDto,
) {
const newDepartment = await this.departmentsService.create(
createDepartmentDto,
);
Expand Down Expand Up @@ -104,7 +108,8 @@ export class DepartmentsController {
@ApiBadRequestResponse({ description: AppErrorMessage.UNPROCESSABLE_ENTITY })
async update(
@Param('id') id: string,
@Body() updateDepartmentDto: UpdateDepartmentDto,
@Body(new ValidationPipe({ transform: true }))
updateDepartmentDto: UpdateDepartmentDto,
) {
try {
const updatedDepartment = await this.departmentsService.update(
Expand Down
9 changes: 7 additions & 2 deletions apps/server/src/employees/employees.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
NotFoundException,
Query,
UseGuards,
ValidationPipe,
} from '@nestjs/common';
import { EmployeesService } from './employees.service';
import { CreateEmployeeDto } from './dto/create-employee.dto';
Expand Down Expand Up @@ -49,7 +50,10 @@ export class EmployeesController {
description: AppErrorMessage.UNPROCESSABLE_ENTITY,
})
@ApiBadRequestResponse({ description: AppErrorMessage.UNPROCESSABLE_ENTITY })
async create(@Body() createEmployeeDto: CreateEmployeeDto) {
async create(
@Body(new ValidationPipe({ transform: true }))
createEmployeeDto: CreateEmployeeDto,
) {
// TODO: Auth
const newEmployee = await this.employeesService.create(createEmployeeDto);
return new EmployeeEntity(newEmployee);
Expand Down Expand Up @@ -109,7 +113,8 @@ export class EmployeesController {
@ApiBadRequestResponse({ description: AppErrorMessage.UNPROCESSABLE_ENTITY })
async update(
@Param('id') id: string,
@Body() updateEmployeeDto: UpdateEmployeeDto,
@Body(new ValidationPipe({ transform: true }))
updateEmployeeDto: UpdateEmployeeDto,
) {
// TODO: Auth
try {
Expand Down
2 changes: 2 additions & 0 deletions apps/server/src/field-group/dto/create-field-group.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
IsInt,
IsNotEmpty,
IsString,
ValidateNested,
} from 'class-validator';
import { CreateTemplateBoxDto } from './create-template-box.dto';

Expand All @@ -21,6 +22,7 @@ export class CreateFieldGroupDto {

@IsArray()
@ArrayMinSize(1)
@ValidateNested({ each: true })
@ApiProperty({
isArray: true,
type: CreateTemplateBoxDto,
Expand Down
17 changes: 4 additions & 13 deletions apps/server/src/field-group/dto/create-template-box.dto.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsString, IsNotEmpty, IsInt } from 'class-validator';
import { SignatureBoxFieldType } from '@prisma/client';
import { IsNotEmpty, IsInt } from 'class-validator';

export class CreateTemplateBoxDto {
@IsString()
@IsNotEmpty()
@ApiProperty()
name: string;

@ApiProperty({
enum: ['signature', 'checkbox'],
enum: SignatureBoxFieldType,
})
type: any;
type: SignatureBoxFieldType;

@IsInt()
@IsNotEmpty()
Expand All @@ -21,9 +17,4 @@ export class CreateTemplateBoxDto {
@IsNotEmpty()
@ApiProperty()
y_coordinate: number;

@IsString()
@IsNotEmpty()
@ApiProperty()
fieldGroupId: string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { LoggerServiceImpl } from '../logger/logger.service';
import { PostmarkService } from '../postmark/postmark.service';
import { EmployeesService } from '../employees/employees.service';
import { DepartmentsService } from '../departments/departments.service';
import { PdfStoreModule } from '../pdf-store/pdf-storage.module';

describe('FormInstancesController', () => {
let controller: FormInstancesController;
Expand All @@ -35,6 +36,7 @@ describe('FormInstancesController', () => {
PostmarkService,
DepartmentsService,
],
imports: [PdfStoreModule],
}).compile();

controller = module.get<FormInstancesController>(FormInstancesController);
Expand Down
9 changes: 7 additions & 2 deletions apps/server/src/form-instances/form-instances.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {
NotFoundException,
Query,
UseGuards,
ValidationPipe,
} from '@nestjs/common';
import { FormInstancesService } from './form-instances.service';
import { CreateFormInstanceDto } from './dto/create-form-instance.dto';
Expand Down Expand Up @@ -47,7 +48,10 @@ export class FormInstancesController {
@ApiUnprocessableEntityResponse({
description: AppErrorMessage.UNPROCESSABLE_ENTITY,
})
async create(@Body() createFormInstanceDto: CreateFormInstanceDto) {
async create(
@Body(new ValidationPipe({ transform: true }))
createFormInstanceDto: CreateFormInstanceDto,
) {
const newFormInstance = await this.formInstancesService.create(
createFormInstanceDto,
);
Expand Down Expand Up @@ -131,7 +135,8 @@ export class FormInstancesController {
@ApiBadRequestResponse({ description: AppErrorMessage.UNPROCESSABLE_ENTITY })
async update(
@Param('id') id: string,
@Body() updateFormInstanceDto: UpdateFormInstanceDto,
@Body(new ValidationPipe({ transform: true }))
updateFormInstanceDto: UpdateFormInstanceDto,
) {
try {
const updatedFormInstance = await this.formInstancesService.update(
Expand Down
9 changes: 9 additions & 0 deletions apps/server/src/form-instances/form-instances.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { PostmarkService } from '../postmark/postmark.service';
import { EmployeesService } from '../employees/employees.service';
import { DepartmentsService } from '../departments/departments.service';
import { EmployeeErrorMessage } from '../employees/employees.errors';
import { PdfStoreService } from '../pdf-store/pdf-store.service';

const formInstance1Id = 'formInstanceId1';
const formInstance2Id = 'formInstanceId2';
Expand Down Expand Up @@ -256,6 +257,10 @@ const mockPostmarkService = {
sendReadyForApprovalEmail: jest.fn(),
};

const mockPdfStoreService = {
uploadPdf: jest.fn().mockReturnValue('mfa.org/form1'),
};

describe('FormInstancesService', () => {
let service: FormInstancesService;
let formTemplateService: FormTemplatesService;
Expand All @@ -280,6 +285,10 @@ describe('FormInstancesService', () => {
provide: PostmarkService,
useValue: mockPostmarkService,
},
{
provide: PdfStoreService,
useValue: mockPdfStoreService,
},
],
}).compile();

Expand Down
19 changes: 13 additions & 6 deletions apps/server/src/form-templates/dto/create-form-template.dto.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,27 @@
import { ApiProperty } from '@nestjs/swagger';
import { ArrayMinSize, IsArray, IsNotEmpty, IsString } from 'class-validator';
import {
ArrayMinSize,
IsArray,
IsNotEmpty,
IsString,
ValidateNested,
} from 'class-validator';
import { CreateFieldGroupDto } from '../../field-group/dto/create-field-group.dto';
import { Type } from 'class-transformer';

export class CreateFormTemplateDto {
@IsString()
@IsNotEmpty()
@ApiProperty()
name: string;
@ApiProperty({ type: 'string', format: 'binary' })
file: Express.Multer.File;

@IsString()
@IsNotEmpty()
@ApiProperty()
formDocLink: string;
name: string;

@IsArray()
@ArrayMinSize(1)
@Type(() => CreateFieldGroupDto)
@ValidateNested({ each: true })
@ApiProperty({
isArray: true,
type: CreateFieldGroupDto,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { FormTemplatesController } from './form-templates.controller';
import { FormTemplatesService } from './form-templates.service';
import { PrismaService } from './../../../server/src/prisma/prisma.service';
import { LoggerServiceImpl } from '../logger/logger.service';
import { PdfStoreModule } from '../pdf-store/pdf-storage.module';

describe('FormTemplatesController', () => {
let controller: FormTemplatesController;
Expand All @@ -11,6 +12,7 @@ describe('FormTemplatesController', () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [FormTemplatesController],
providers: [FormTemplatesService, PrismaService, LoggerServiceImpl],
imports: [PdfStoreModule],
}).compile();

controller = module.get<FormTemplatesController>(FormTemplatesController);
Expand Down
Loading

0 comments on commit 26f6999

Please sign in to comment.