From 0b3ff80cdb091f6dd1ca3089713224a21b2e66fd Mon Sep 17 00:00:00 2001 From: bahram rajabi Date: Wed, 3 Jul 2024 20:40:02 +0330 Subject: [PATCH] add user page module --- .../src/admin/page/page.controller.ts | 2 +- apps/e-commerce/src/e-commerce.module.ts | 2 + apps/e-commerce/src/page/page.controller.ts | 28 ++++++++++++ apps/e-commerce/src/page/page.module.ts | 14 ++++++ apps/e-commerce/src/page/page.service.ts | 43 +++++++++++++++++++ 5 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 apps/e-commerce/src/page/page.controller.ts create mode 100644 apps/e-commerce/src/page/page.module.ts create mode 100644 apps/e-commerce/src/page/page.service.ts diff --git a/apps/e-commerce/src/admin/page/page.controller.ts b/apps/e-commerce/src/admin/page/page.controller.ts index 1d78f202..d5ba78e3 100644 --- a/apps/e-commerce/src/admin/page/page.controller.ts +++ b/apps/e-commerce/src/admin/page/page.controller.ts @@ -32,7 +32,7 @@ import { ListFilter } from '@rahino/query-filter'; @UseGuards(JwtGuard, PermissionGuard) @ApiBearerAuth() @Controller({ - path: '/api/ecommerce/pages', + path: '/api/ecommerce/admin/pages', version: ['1'], }) export class PageController { diff --git a/apps/e-commerce/src/e-commerce.module.ts b/apps/e-commerce/src/e-commerce.module.ts index 586b02a4..a64a79e4 100644 --- a/apps/e-commerce/src/e-commerce.module.ts +++ b/apps/e-commerce/src/e-commerce.module.ts @@ -75,6 +75,7 @@ import { AdminAddressModule } from './admin/address/address.module'; import { ProductSaleModule } from './report/product-sale/product-sale.module'; import { InventoryHistoryModule } from './admin/inventory-history/inventory-history.module'; import { AdminPageModule } from './admin/page/page.module'; +import { PageModule } from './page/page.module'; @Module({ imports: [ @@ -152,6 +153,7 @@ import { AdminPageModule } from './admin/page/page.module'; ProductSaleModule, InventoryHistoryModule, AdminPageModule, + PageModule, ], providers: [ { diff --git a/apps/e-commerce/src/page/page.controller.ts b/apps/e-commerce/src/page/page.controller.ts new file mode 100644 index 00000000..ef2aa18c --- /dev/null +++ b/apps/e-commerce/src/page/page.controller.ts @@ -0,0 +1,28 @@ +import { + Controller, + Get, + HttpCode, + HttpStatus, + Param, + UseInterceptors, +} from '@nestjs/common'; +import { JsonResponseTransformInterceptor } from '@rahino/response/interceptor'; +import { ApiOperation, ApiTags } from '@nestjs/swagger'; +import { PageService } from './page.service'; + +@ApiTags('Pages') +@Controller({ + path: '/api/ecommerce/pages', + version: ['1'], +}) +@UseInterceptors(JsonResponseTransformInterceptor) +export class PageController { + constructor(private service: PageService) {} + + @ApiOperation({ description: 'show page by given id' }) + @Get('/slug/:slug') + @HttpCode(HttpStatus.OK) + async findBySlug(@Param('slug') slug: string) { + return await this.service.findBySlug(slug); + } +} diff --git a/apps/e-commerce/src/page/page.module.ts b/apps/e-commerce/src/page/page.module.ts new file mode 100644 index 00000000..8dbc30a4 --- /dev/null +++ b/apps/e-commerce/src/page/page.module.ts @@ -0,0 +1,14 @@ +import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common'; +import { PageController } from './page.controller'; +import { PageService } from './page.service'; +import { SequelizeModule } from '@nestjs/sequelize'; +import { ECPage } from '@rahino/database/models/ecommerce-eav/ec-page.entity'; + +@Module({ + imports: [SequelizeModule.forFeature([ECPage])], + controllers: [PageController], + providers: [PageService], +}) +export class PageModule implements NestModule { + configure(consumer: MiddlewareConsumer) {} +} diff --git a/apps/e-commerce/src/page/page.service.ts b/apps/e-commerce/src/page/page.service.ts new file mode 100644 index 00000000..9bbec9bd --- /dev/null +++ b/apps/e-commerce/src/page/page.service.ts @@ -0,0 +1,43 @@ +import { Injectable, NotFoundException } from '@nestjs/common'; +import { InjectModel } from '@nestjs/sequelize'; +import { QueryOptionsBuilder } from '@rahino/query-filter/sequelize-query-builder'; +import { Op, Sequelize } from 'sequelize'; +import * as _ from 'lodash'; +import { ECPage } from '@rahino/database/models/ecommerce-eav/ec-page.entity'; + +@Injectable() +export class PageService { + constructor(@InjectModel(ECPage) private repository: typeof ECPage) {} + + async findBySlug(slug: string) { + let queryBuilder = new QueryOptionsBuilder(); + queryBuilder = queryBuilder + .attributes([ + 'id', + 'title', + 'slug', + 'description', + 'metaTitle', + 'metaDescription', + 'metaKeywords', + 'createdAt', + 'updatedAt', + ]) + .filter( + Sequelize.where( + Sequelize.fn('isnull', Sequelize.col('ECPage.isDeleted'), 0), + { + [Op.eq]: 0, + }, + ), + ) + .filter({ slug: slug }); + const page = await this.repository.findOne(queryBuilder.build()); + if (!page) { + throw new NotFoundException('the item with this given id not founded!'); + } + return { + result: page, + }; + } +}