generate code

This commit is contained in:
2025-12-06 16:40:26 +03:30
parent 7440d4db90
commit 8768cd9961
3 changed files with 19 additions and 3 deletions
@@ -95,5 +95,10 @@ export class CouponController {
validateCouponDto.userId, validateCouponDto.userId,
); );
} }
}
@Get('public/coupons/generate-code')
@ApiOperation({ summary: 'generate a coupon code' })
generateCouponCode(@RestId() restId: string) {
return this.couponService.generateCouponCode(restId);
}
}
@@ -1,4 +1,4 @@
import { Entity, ManyToOne, Property, Enum } from '@mikro-orm/core'; import { Entity, ManyToOne, Property, Enum, Unique } from '@mikro-orm/core';
import { BaseEntity } from '../../../common/entities/base.entity'; import { BaseEntity } from '../../../common/entities/base.entity';
import { Restaurant } from '../../restaurants/entities/restaurant.entity'; import { Restaurant } from '../../restaurants/entities/restaurant.entity';
@@ -8,11 +8,12 @@ export enum CouponType {
} }
@Entity({ tableName: 'coupons' }) @Entity({ tableName: 'coupons' })
@Unique({ properties: ['code', 'restaurant'] })
export class Coupon extends BaseEntity { export class Coupon extends BaseEntity {
@ManyToOne(() => Restaurant) @ManyToOne(() => Restaurant)
restaurant!: Restaurant; restaurant!: Restaurant;
@Property({ unique: true }) @Property()
code!: string; code!: string;
@Property() @Property()
@@ -8,6 +8,7 @@ import { EntityManager } from '@mikro-orm/postgresql';
import { RequiredEntityData } from '@mikro-orm/core'; import { RequiredEntityData } from '@mikro-orm/core';
import { Coupon, CouponType } from '../entities/coupon.entity'; import { Coupon, CouponType } from '../entities/coupon.entity';
import { CouponMessage, RestMessage } from 'src/common/enums/message.enum'; import { CouponMessage, RestMessage } from 'src/common/enums/message.enum';
import { randomBytes } from 'node:crypto';
@Injectable() @Injectable()
export class CouponService { export class CouponService {
@@ -250,4 +251,13 @@ export class CouponService {
await this.em.persistAndFlush(coupon); await this.em.persistAndFlush(coupon);
} }
} }
async generateCouponCode(restId: string): Promise<string> {
const code = randomBytes(8).toString('hex');
const existingCoupon = await this.couponRepository.findOne({ code, restaurant: { id: restId } });
if (existingCoupon) {
return this.generateCouponCode(restId);
}
return code;
}
} }