Skip to content

Commit

Permalink
feat: add update for subscription
Browse files Browse the repository at this point in the history
  • Loading branch information
ZigBalthazar committed Dec 9, 2024
1 parent 6c9cee0 commit 224aa46
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 11 deletions.
20 changes: 15 additions & 5 deletions src/modules/subscriptions/dto/subscription.dto.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,30 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsEnum } from 'class-validator';

import { AbstractDto } from '../../../../src/common/dto/abstract.dto';
import { StringField } from '../../../../src/decorators';
import type { SubscriptionStatus } from '../enums/subscription-status.enum';
import { NumberField, StringField } from '../../../../src/decorators';
import { SubscriptionStatusEnum } from '../enums/subscription-status.enum';

export class SubscriptionDto extends AbstractDto {
@StringField()
subscriber: string;

@StringField()
checkoutSessionId: string;

startDate: Date;
@NumberField()
startDate: number;

endDate: Date;
@NumberField()
endDate: number;

status: SubscriptionStatus;
@ApiProperty()
@IsEnum(() => SubscriptionStatusEnum)
status: SubscriptionStatusEnum;

@NumberField()
totalAmount: number;

@StringField()
unit: string;
}
15 changes: 15 additions & 0 deletions src/modules/subscriptions/dto/update-subscription.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { PartialType, PickType } from '@nestjs/swagger';

import { SubscriptionDto } from './subscription.dto';

export class UpdateSubscriptionDto extends PartialType(
PickType(SubscriptionDto, [
'checkoutSessionId',
'endDate',
'startDate',
'status',
'subscriber',
'totalAmount',
'unit',
] as const),
) {}
6 changes: 3 additions & 3 deletions src/modules/subscriptions/entities/subscription.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Column, Entity } from 'typeorm';

import { AbstractEntity } from '../../../../src/common/abstract.entity';
import { SubscriptionDto } from '../dto/subscription.dto';
import { SubscriptionStatus } from '../enums/subscription-status.enum';
import { SubscriptionStatusEnum } from '../enums/subscription-status.enum';

@Entity('subscriptions')
export class SubscriptionEntity extends AbstractEntity<SubscriptionDto> {
Expand All @@ -20,8 +20,8 @@ export class SubscriptionEntity extends AbstractEntity<SubscriptionDto> {
@Column('timestamp')
endDate: number;

@Column({ enum: SubscriptionStatus, type: 'enum', default: SubscriptionStatus.ACTIVE })
status: SubscriptionStatus;
@Column({ enum: SubscriptionStatusEnum, type: 'enum', default: SubscriptionStatusEnum.ACTIVE })
status: SubscriptionStatusEnum;

@Column('number')
totalAmount: number;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
export enum SubscriptionStatus {
export enum SubscriptionStatusEnum {
ACTIVE = 'ACTIVE',
IN_ACTIVE = 'IN_ACTIVE',
EXPIRED = 'EXPIRED',
Expand Down
8 changes: 7 additions & 1 deletion src/modules/subscriptions/subscriptions.controller.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import * as crypto from 'node:crypto';

import { Body, Controller, Headers, Post, UnauthorizedException } from '@nestjs/common';
import { Body, Controller, Headers, Param, Patch, Post, UnauthorizedException } from '@nestjs/common';
import { ApiTags } from '@nestjs/swagger';

import { ApiConfigService } from '../../../src/shared/services/api-config.service';
import { SubscriptionGenerateCheckoutSessionDto } from './dto/subscription-generate-checkout-session.dto';
import { SubscriptionsService } from './subscriptions.service';
import { UpdateSubscriptionDto } from './dto/update-subscription.dto';

@Controller('subscriptions')
@ApiTags('subscriptions')
Expand Down Expand Up @@ -83,4 +84,9 @@ export class SubscriptionsController {
seedRedis() {
return this.subscriptionService.seedRedis();
}

@Patch(':id')
updateSubscription(@Param('id') id: string, @Body() props: UpdateSubscriptionDto) {
return this.subscriptionService.updateSubscription(id, props);
}
}
17 changes: 16 additions & 1 deletion src/modules/subscriptions/subscriptions.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import Redis from 'ioredis';
import { ApiConfigService } from '../../../src/shared/services/api-config.service';
import { ConfigService } from '../config/config.service';
import { SubscriptionRepository } from './subscriptions.repository';
import { MoreThan } from 'typeorm';
import { MoreThan, ObjectId } from 'typeorm';
import { UpdateSubscriptionDto } from './dto/update-subscription.dto';

@Injectable()
export class SubscriptionsService {
Expand Down Expand Up @@ -118,4 +119,18 @@ export class SubscriptionsService {
this.logger.error('An error occurred during seedRedis execution.', (error as { stack: string }).stack);
}
}

async updateSubscription(id: string, props: UpdateSubscriptionDto) {
const s = await this.subscriptionRepository.findOne({ where: { _id: new ObjectId(id) } });

if (!s) {
throw new NotFoundException('subscription not found');
}

s.assign({
...props,
});

await this.subscriptionRepository.save(s);
}
}

0 comments on commit 224aa46

Please sign in to comment.