Skip to content
This repository has been archived by the owner on Dec 6, 2024. It is now read-only.

Commit

Permalink
Merge pull request #71 from EjembiEmmanuel/dev
Browse files Browse the repository at this point in the history
refac: refactor product module
  • Loading branch information
EjembiEmmanuel authored Nov 27, 2024
2 parents 8b29560 + c029707 commit 8f6737b
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 43 deletions.
4 changes: 2 additions & 2 deletions backend/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import { ProductsModule } from './products/products.module';
import { ProductModule } from './product/product.module';
import { getEnvPath } from './common/utils/getEnvPath';
import { ManufacturerModule } from './manufacturer/manufacturer.module';
import { PrismaModule } from './prisma/prisma.module';
Expand All @@ -13,7 +13,7 @@ import { PrismaModule } from './prisma/prisma.module';
envFilePath: getEnvPath(),
isGlobal: true,
}),
ProductsModule,
ProductModule,
ManufacturerModule,
PrismaModule,
],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
import { Test, TestingModule } from '@nestjs/testing';
import { ProductsController } from './products.controller';
import { ProductsService } from './products.service';
import { ProductDto } from './product.dto';
import { ProductController } from './product.controller';
import { ProductService } from './product.service';
import { ProductDto } from './dto/product.dto';

describe('ProductsController', () => {
let controller: ProductsController;
let service: ProductsService;
let controller: ProductController;
let service: ProductService;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [ProductsController],
controllers: [ProductController],
providers: [
{
provide: ProductsService,
provide: ProductService,
useValue: {
submitProduct: jest.fn(),
},
},
],
}).compile();

controller = module.get<ProductsController>(ProductsController);
service = module.get<ProductsService>(ProductsService);
controller = module.get<ProductController>(ProductController);
service = module.get<ProductService>(ProductService);
});

it('should be defined', () => {
Expand All @@ -39,10 +39,10 @@ describe('ProductsController', () => {
};

jest
.spyOn(service, 'submitProduct')
.spyOn(service, 'uploadProduct')
.mockResolvedValue('QmUiPq1dRygSjwCBAqxvwaJxbGVFyHmPmSrL4YiytJFfkh');

const result = await controller.submitProduct(dto);
const result = await controller.uploadProduct(dto);
expect(result).toEqual({
ipfs_hash: 'QmUiPq1dRygSjwCBAqxvwaJxbGVFyHmPmSrL4YiytJFfkh',
});
Expand All @@ -58,10 +58,10 @@ describe('ProductsController', () => {
};

jest
.spyOn(service, 'submitProduct')
.spyOn(service, 'uploadProduct')
.mockRejectedValue(new Error('Error uploading to IPFS'));

await expect(controller.submitProduct(dto)).rejects.toThrow();
await expect(controller.uploadProduct(dto)).rejects.toThrow();
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,17 @@ import {
Get,
Param,
} from '@nestjs/common';
import { ProductDto } from './product.dto';
import { ProductsService } from './products.service';
import { ProductDto } from './dto/product.dto';
import { ProductService } from './product.service';

@Controller('products')
export class ProductsController {
constructor(private readonly productService: ProductsService) {}
@Controller('product')
export class ProductController {
constructor(private readonly productService: ProductService) {}

@Post('submit')
async submitProduct(@Body() productDto: ProductDto) {
console.log('Received DTO:', productDto);
@Post('upload')
async uploadProduct(@Body() productDto: ProductDto) {
try {
const ipfsHash = await this.productService.submitProduct(productDto);
const ipfsHash = await this.productService.uploadProduct(productDto);
console.log('Service Result:', ipfsHash);
return { ipfs_hash: ipfsHash };
} catch (error) {
Expand Down
9 changes: 9 additions & 0 deletions backend/src/product/product.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { Module } from '@nestjs/common';
import { ProductController } from './product.controller';
import { ProductService } from './product.service';

@Module({
controllers: [ProductController],
providers: [ProductService],
})
export class ProductModule {}
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { Test, TestingModule } from '@nestjs/testing';
import { ProductsService } from './products.service';
import { ProductDto } from './product.dto';
import { ProductService } from './product.service';
import { ProductDto } from './dto/product.dto';

describe('ProductsService', () => {
let service: ProductsService;
let service: ProductService;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [ProductsService],
providers: [ProductService],
}).compile();

service = module.get<ProductsService>(ProductsService);
service = module.get<ProductService>(ProductService);
});

it('should be defined', () => {
Expand All @@ -31,7 +31,7 @@ describe('ProductsService', () => {
IpfsHash: 'QmUiPq1dRygSjwCBAqxvwaJxbGVFyHmPmSrL4YiytJFfkh',
});

const result = await service.submitProduct(dto);
const result = await service.uploadProduct(dto);
expect(result).toEqual('QmUiPq1dRygSjwCBAqxvwaJxbGVFyHmPmSrL4YiytJFfkh');
});

Expand All @@ -48,7 +48,7 @@ describe('ProductsService', () => {
.spyOn(service, 'pinToIPFS')
.mockRejectedValue(new Error('Error uploading to IPFS'));

await expect(service.submitProduct(dto)).rejects.toThrow(
await expect(service.uploadProduct(dto)).rejects.toThrow(
'Error uploading to IPFS'
);
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { ProductDto } from './product.dto';
import { ProductDto } from './dto/product.dto';
import { Product } from 'src/interfaces/Product';
import { generateProductId } from 'src/common/utils/generateProductId';

@Injectable()
export class ProductsService {
export class ProductService {
private readonly PINATA_JWT = process.env.PINATA_JWT || '';
private readonly PINATA_GATEWAY =
process.env.PINATA_GATEWAY || 'https://gateway.pinata.cloud/ipfs/';
Expand Down Expand Up @@ -39,7 +39,7 @@ export class ProductsService {
return await response.json();
}

async submitProduct(createProductDto: ProductDto): Promise<string> {
async uploadProduct(createProductDto: ProductDto): Promise<string> {
const product_id = generateProductId(10);
const productData = { product_id, ...createProductDto };

Expand Down
9 changes: 0 additions & 9 deletions backend/src/products/products.module.ts

This file was deleted.

0 comments on commit 8f6737b

Please sign in to comment.