From 770231744d373a9bcad7985f2a105789c6704c6c Mon Sep 17 00:00:00 2001 From: Hasta Ragil Saputra Date: Sun, 28 Nov 2021 22:11:15 +0700 Subject: [PATCH] feat: ppob callback --- .gitlab-ci.yml | 2 +- k8s/staging/deployment.yaml | 12 ++--- k8s/staging/ingress.yaml | 10 ++-- k8s/staging/secret.example.yaml | 2 +- k8s/staging/service.yaml | 6 +-- package.json | 2 +- src/app.module.ts | 2 + src/main.ts | 5 +- src/transaction/dto/create-transaction.dto.ts | 1 + src/transaction/dto/update-transaction.dto.ts | 4 ++ .../entities/transaction.entity.ts | 1 + src/transaction/ppob_callback.controller.ts | 37 ++++++++++++++ .../transaction.controller.spec.ts | 20 ++++++++ src/transaction/transaction.controller.ts | 48 +++++++++++++++++++ src/transaction/transaction.module.ts | 10 ++++ src/transaction/transaction.service.spec.ts | 18 +++++++ src/transaction/transaction.service.ts | 26 ++++++++++ src/users/users.controller.ts | 5 +- 18 files changed, 192 insertions(+), 19 deletions(-) create mode 100644 src/transaction/dto/create-transaction.dto.ts create mode 100644 src/transaction/dto/update-transaction.dto.ts create mode 100644 src/transaction/entities/transaction.entity.ts create mode 100644 src/transaction/ppob_callback.controller.ts create mode 100644 src/transaction/transaction.controller.spec.ts create mode 100644 src/transaction/transaction.controller.ts create mode 100644 src/transaction/transaction.module.ts create mode 100644 src/transaction/transaction.service.spec.ts create mode 100644 src/transaction/transaction.service.ts diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index edba135..e349567 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,6 @@ variables: REGISTRY_URL: registry-harbor.app.bangun-kreatif.com - REGISTRY_IMAGE: $REGISTRY_URL/empatnusabangsa/nestjs-boilerplate + REGISTRY_IMAGE: $REGISTRY_URL/empatnusabangsa/ppob-backend VERSION_STAGING: $CI_COMMIT_REF_NAME-$CI_PIPELINE_ID-$CI_COMMIT_SHORT_SHA VERSION_PRODUCTION: $CI_COMMIT_REF_NAME-$CI_PIPELINE_ID-$CI_COMMIT_SHORT_SHA-production DOCKER_HOST: tcp://docker:2375 diff --git a/k8s/staging/deployment.yaml b/k8s/staging/deployment.yaml index 2976234..4300c95 100644 --- a/k8s/staging/deployment.yaml +++ b/k8s/staging/deployment.yaml @@ -1,26 +1,26 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: nestjs-boilerplate + name: ppob-backend namespace: empatnusabangsa-staging spec: selector: matchLabels: - app: nestjs-boilerplate + app: ppob-backend replicas: 1 template: metadata: labels: - app: nestjs-boilerplate + app: ppob-backend spec: containers: - - name: nestjs-boilerplate - image: registry-harbor.app.bangun-kreatif.com/empatnusabangsa/nestjs-boilerplate: + - name: ppob-backend + image: registry-harbor.app.bangun-kreatif.com/empatnusabangsa/ppob-backend:2 ports: - containerPort: 5000 envFrom: - secretRef: - name: nestjs-boilerplate-env + name: ppob-backend-env imagePullSecrets: - name: regcred diff --git a/k8s/staging/ingress.yaml b/k8s/staging/ingress.yaml index eda17dc..2f55138 100644 --- a/k8s/staging/ingress.yaml +++ b/k8s/staging/ingress.yaml @@ -1,24 +1,24 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: nestjs-boilerplate + name: ppob-backend namespace: empatnusabangsa-staging annotations: kubernetes.io/ingress.class: "traefik" cert-manager.io/cluster-issuer: letsencrypt-prod spec: rules: - - host: "nestjs-boilerplate.k3s.bangun-kreatif.com" + - host: "ppob-backend.k3s.bangun-kreatif.com" http: paths: - pathType: Prefix path: / backend: service: - name: nestjs-boilerplate + name: ppob-backend port: number: 5000 tls: - hosts: - - "nestjs-boilerplate.k3s.bangun-kreatif.com" - secretName: nestjs-boilerplate-k3s-bangun-kreatif-com-tls + - "ppob-backend.k3s.bangun-kreatif.com" + secretName: ppob-backend-k3s-bangun-kreatif-com-tls diff --git a/k8s/staging/secret.example.yaml b/k8s/staging/secret.example.yaml index 0735fdf..a6736a1 100644 --- a/k8s/staging/secret.example.yaml +++ b/k8s/staging/secret.example.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: Secret metadata: - name: nestjs-boilerplate-env + name: ppob-backend-env namespace: empatnusabangsa-staging type: Opaque stringData: diff --git a/k8s/staging/service.yaml b/k8s/staging/service.yaml index 64fb4ef..5cbb487 100644 --- a/k8s/staging/service.yaml +++ b/k8s/staging/service.yaml @@ -1,13 +1,13 @@ apiVersion: v1 kind: Service metadata: - name: nestjs-boilerplate + name: ppob-backend namespace: empatnusabangsa-staging labels: - run: nestjs-boilerplate + run: ppob-backend spec: ports: - port: 5000 protocol: TCP selector: - app: nestjs-boilerplate + app: ppob-backend diff --git a/package.json b/package.json index 0f3192e..637bced 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "sppbe-gas-meter", + "name": "ppob-backend", "version": "0.0.1", "description": "", "author": "", diff --git a/src/app.module.ts b/src/app.module.ts index a905eff..2e6a16d 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -5,6 +5,7 @@ import * as Joi from 'joi'; import { UsersModule } from './users/users.module'; import { SnakeNamingStrategy } from 'typeorm-naming-strategies'; import { LoggerModule } from 'nestjs-pino'; +import { TransactionModule } from './transaction/transaction.module'; import configuration from './config/configuration'; @Module({ @@ -45,6 +46,7 @@ import configuration from './config/configuration'; inject: [ConfigService], }), UsersModule, + TransactionModule, ], }) export class AppModule {} diff --git a/src/main.ts b/src/main.ts index 2a0e1b6..1bb8975 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,7 +4,7 @@ import { NestFastifyApplication, } from '@nestjs/platform-fastify'; import { AppModule } from './app.module'; -import { ValidationPipe } from '@nestjs/common'; +import {ValidationPipe, VersioningType} from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { Logger } from 'nestjs-pino'; @@ -24,6 +24,9 @@ async function bootstrap() { whitelist: true, }), ); + app.enableVersioning({ + type: VersioningType.URI, + }); const configService = app.get(ConfigService); const port = configService.get('port'); diff --git a/src/transaction/dto/create-transaction.dto.ts b/src/transaction/dto/create-transaction.dto.ts new file mode 100644 index 0000000..6f59387 --- /dev/null +++ b/src/transaction/dto/create-transaction.dto.ts @@ -0,0 +1 @@ +export class CreateTransactionDto {} diff --git a/src/transaction/dto/update-transaction.dto.ts b/src/transaction/dto/update-transaction.dto.ts new file mode 100644 index 0000000..bade684 --- /dev/null +++ b/src/transaction/dto/update-transaction.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/mapped-types'; +import { CreateTransactionDto } from './create-transaction.dto'; + +export class UpdateTransactionDto extends PartialType(CreateTransactionDto) {} diff --git a/src/transaction/entities/transaction.entity.ts b/src/transaction/entities/transaction.entity.ts new file mode 100644 index 0000000..9d16154 --- /dev/null +++ b/src/transaction/entities/transaction.entity.ts @@ -0,0 +1 @@ +export class Transaction {} diff --git a/src/transaction/ppob_callback.controller.ts b/src/transaction/ppob_callback.controller.ts new file mode 100644 index 0000000..a6cd453 --- /dev/null +++ b/src/transaction/ppob_callback.controller.ts @@ -0,0 +1,37 @@ +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, + HttpStatus, + Logger, + Req, +} from '@nestjs/common'; +import { TransactionService } from './transaction.service'; +import { CreateTransactionDto } from './dto/create-transaction.dto'; +import { FastifyRequest } from 'fastify'; + +@Controller({ + path: 'ppob_callback', + version: '1', +}) +export class PpobCallbackController { + private readonly logger = new Logger(PpobCallbackController.name); + + constructor(private readonly transactionService: TransactionService) {} + + @Get() + get(@Req() request: FastifyRequest) { + this.logger.log({ + requestQuery: request.query, + }); + + return { + statusCode: HttpStatus.OK, + message: 'success', + }; + } +} diff --git a/src/transaction/transaction.controller.spec.ts b/src/transaction/transaction.controller.spec.ts new file mode 100644 index 0000000..666b002 --- /dev/null +++ b/src/transaction/transaction.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { TransactionController } from './transaction.controller'; +import { TransactionService } from './transaction.service'; + +describe('TransactionController', () => { + let controller: TransactionController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [TransactionController], + providers: [TransactionService], + }).compile(); + + controller = module.get(TransactionController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/transaction/transaction.controller.ts b/src/transaction/transaction.controller.ts new file mode 100644 index 0000000..bf71aab --- /dev/null +++ b/src/transaction/transaction.controller.ts @@ -0,0 +1,48 @@ +import { + Controller, + Get, + Post, + Body, + Patch, + Param, + Delete, +} from '@nestjs/common'; +import { TransactionService } from './transaction.service'; +import { CreateTransactionDto } from './dto/create-transaction.dto'; +import { UpdateTransactionDto } from './dto/update-transaction.dto'; + +@Controller({ + path: 'transaction', + version: '1', +}) +export class TransactionController { + constructor(private readonly transactionService: TransactionService) {} + + @Post() + create(@Body() createTransactionDto: CreateTransactionDto) { + return this.transactionService.create(createTransactionDto); + } + + @Get() + findAll() { + return this.transactionService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string) { + return this.transactionService.findOne(+id); + } + + @Patch(':id') + update( + @Param('id') id: string, + @Body() updateTransactionDto: UpdateTransactionDto, + ) { + return this.transactionService.update(+id, updateTransactionDto); + } + + @Delete(':id') + remove(@Param('id') id: string) { + return this.transactionService.remove(+id); + } +} diff --git a/src/transaction/transaction.module.ts b/src/transaction/transaction.module.ts new file mode 100644 index 0000000..7a8e1e8 --- /dev/null +++ b/src/transaction/transaction.module.ts @@ -0,0 +1,10 @@ +import { Module } from '@nestjs/common'; +import { TransactionService } from './transaction.service'; +import { TransactionController } from './transaction.controller'; +import { PpobCallbackController } from './ppob_callback.controller'; + +@Module({ + controllers: [TransactionController, PpobCallbackController], + providers: [TransactionService], +}) +export class TransactionModule {} diff --git a/src/transaction/transaction.service.spec.ts b/src/transaction/transaction.service.spec.ts new file mode 100644 index 0000000..8ac5dfc --- /dev/null +++ b/src/transaction/transaction.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { TransactionService } from './transaction.service'; + +describe('TransactionService', () => { + let service: TransactionService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [TransactionService], + }).compile(); + + service = module.get(TransactionService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/transaction/transaction.service.ts b/src/transaction/transaction.service.ts new file mode 100644 index 0000000..0f49e43 --- /dev/null +++ b/src/transaction/transaction.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@nestjs/common'; +import { CreateTransactionDto } from './dto/create-transaction.dto'; +import { UpdateTransactionDto } from './dto/update-transaction.dto'; + +@Injectable() +export class TransactionService { + create(createTransactionDto: CreateTransactionDto) { + return 'This action adds a new transaction'; + } + + findAll() { + return `This action returns all transaction`; + } + + findOne(id: number) { + return `This action returns a #${id} transaction`; + } + + update(id: number, updateTransactionDto: UpdateTransactionDto) { + return `This action updates a #${id} transaction`; + } + + remove(id: number) { + return `This action removes a #${id} transaction`; + } +} diff --git a/src/users/users.controller.ts b/src/users/users.controller.ts index b774f84..7e45858 100644 --- a/src/users/users.controller.ts +++ b/src/users/users.controller.ts @@ -13,7 +13,10 @@ import { UsersService } from './users.service'; import { CreateUserDto } from './dto/create-user.dto'; import { UpdateUserDto } from './dto/update-user.dto'; -@Controller('users') +@Controller({ + path: 'users', + version: '1', +}) export class UsersController { constructor(private readonly usersService: UsersService) {}