Skip to content

Commit

Permalink
feat: added product module and it comps
Browse files Browse the repository at this point in the history
  • Loading branch information
Villarley committed Feb 11, 2025
1 parent b00a2d8 commit 6ec3a9a
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 0 deletions.
2 changes: 2 additions & 0 deletions apps/backend/src/core/core.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { ConfigModule, ConfigService } from "@nestjs/config";
import { GraphQLModule } from "@nestjs/graphql";

import { CategoryModule } from "src/modules/categories/category.module";
import { ProductModule } from "src/modules/products/product.module";
import { IS_DEV_ENV } from "src/shared/utils/is-dev.util";
import { getGraphQLConfig } from "./config/graphql.config";
import { PrismaModule } from "./prisma/prisma.module";
Expand All @@ -22,6 +23,7 @@ import { PrismaModule } from "./prisma/prisma.module";
}),
PrismaModule,
CategoryModule,
ProductModule,
],
controllers: [],
providers: [],
Expand Down
13 changes: 13 additions & 0 deletions apps/backend/src/core/graphql/schema.gql
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,20 @@ A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date
"""
scalar DateTime

type ProductDTO {
categoryId: String!
createdAt: DateTime!
description: String
id: ID!
name: String!
price: Float!
slug: String!
updatedAt: DateTime!
}

type Query {
categories: [Category!]!
category(id: String!): Category
product(id: String!): ProductDTO
products: [ProductDTO!]!
}
28 changes: 28 additions & 0 deletions apps/backend/src/modules/products/dto/product.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Field, Float, ID, ObjectType } from "@nestjs/graphql";

@ObjectType()
export class ProductDTO {
@Field(() => ID)
id: string;

@Field()
name: string;

@Field()
slug: string;

@Field({ nullable: true })
description?: string;

@Field(() => Float)
price: number;

@Field()
categoryId: string;

@Field(() => Date)
createdAt: Date;

@Field(() => Date)
updatedAt: Date;
}
8 changes: 8 additions & 0 deletions apps/backend/src/modules/products/product.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Module } from "@nestjs/common";
import { ProductResolver } from "./product.resolver";
import { ProductService } from "./product.service";

@Module({
providers: [ProductResolver, ProductService],
})
export class ProductModule {}
18 changes: 18 additions & 0 deletions apps/backend/src/modules/products/product.resolver.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Args, Query, Resolver } from "@nestjs/graphql";
import { ProductDTO } from "./dto/product.dto";
import { ProductService } from "./product.service";

@Resolver(() => ProductDTO)
export class ProductResolver {
constructor(private readonly productService: ProductService) {}

@Query(() => [ProductDTO])
async products() {
return this.productService.findAll();
}

@Query(() => ProductDTO, { nullable: true })
async product(@Args("id") id: string) {
return this.productService.findOne(id);
}
}
16 changes: 16 additions & 0 deletions apps/backend/src/modules/products/product.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Injectable } from "@nestjs/common";
import { PrismaService } from "src/core/prisma/prisma.service";
import { ProductDTO } from "./dto/product.dto";

@Injectable()
export class ProductService {
constructor(private readonly prisma: PrismaService) {}

async findAll(): Promise<ProductDTO[]> {
return this.prisma.product.findMany();
}

async findOne(id: string): Promise<ProductDTO | null> {
return this.prisma.product.findUnique({ where: { id } });
}
}

0 comments on commit 6ec3a9a

Please sign in to comment.