Advertisement
Guest User

Untitled

a guest
Jul 16th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.08 KB | None | 0 0
  1. import { Injectable, BadRequestException } from '@nestjs/common';
  2. import { CodeDTO } from '../../user/models/code.dto';
  3. import { RedemptionCode } from '../../entity/RedemptionCode';
  4. import { InjectRepository } from '@nestjs/typeorm';
  5. import { Repository, Code } from 'typeorm';
  6. import { RedemptionRecord } from '../../entity/RedemptionRecord';
  7. import { User } from '../../entity/User';
  8. import { Status } from '../../common/enum/status';
  9. import { CheckCodeDTO } from '../../user/models/check-code.dto';
  10. import { ShowMessageDTO } from '../../user/models/show-message.dto';
  11. import { AddPrizeToCodeDTO } from '../../user/models/add-prize-code.dto';
  12. @Injectable()
  13. export class UserService {
  14.  
  15. public constructor(
  16. @InjectRepository(RedemptionCode) private readonly redemptionCodeRepo: Repository<RedemptionCode>,
  17. @InjectRepository(RedemptionRecord) private readonly redemptionRecordRepo: Repository<RedemptionRecord>,
  18. @InjectRepository(User) private readonly userRepo: Repository<User>,
  19. ) { }
  20.  
  21. public async checkForValidCode(code: CheckCodeDTO): Promise<RedemptionCode | RedemptionRecord[]> {
  22. const redemptionCode = await this.checkIfCodeIsValid(code.redemptionCode);
  23. if (!redemptionCode) {
  24. throw new BadRequestException(`Sorry, your code is invalid!`);
  25. }
  26.  
  27. let redemptionRecordExist = await this.redemptionRecordRepo.find({
  28. relations: ['outlet', 'customer'],
  29. where: {
  30. redemptionCode,
  31. },
  32. });
  33.  
  34. // tslint:disable-next-line: max-line-length
  35. redemptionRecordExist = redemptionRecordExist.filter(x => ((x.status === Status.Redeemed) || (x.status === Status.Declined))); // checks if status is already redeemed
  36. if (redemptionRecordExist.length) {
  37. return redemptionRecordExist;
  38. }
  39.  
  40. return redemptionCode;
  41. }
  42.  
  43. public async markCode(code: CodeDTO, me: User): Promise<ShowMessageDTO> {
  44. const redemptionCode = await this.checkIfCodeIsValid(code.redemptionCode);
  45.  
  46. if (!redemptionCode) {
  47. throw new BadRequestException('Invalid code!');
  48. }
  49.  
  50. const redemptionRecords = await redemptionCode.redemptionRecords;
  51. const checkIfCodeIsRedeemed = redemptionRecords.filter(x => x.status === Status.Redeemed);
  52.  
  53. if (checkIfCodeIsRedeemed.length) {
  54. code.status = Status.Declined;
  55. }
  56.  
  57. const record = await this.setRedemptionRecord(me, code);
  58. const arrFromRecords = await redemptionCode.redemptionRecords;
  59. const userRedemptionRecords = await me.redemptionRecords;
  60.  
  61. arrFromRecords.push(record);
  62. userRedemptionRecords.push(record);
  63. record.redemptionCode = Promise.resolve(redemptionCode);
  64. me.redemptionRecords = Promise.resolve(userRedemptionRecords);
  65. redemptionCode.redemptionRecords = Promise.resolve(arrFromRecords);
  66.  
  67. await this.userRepo.save(me);
  68. await this.redemptionRecordRepo.save(redemptionRecords);
  69. await this.redemptionCodeRepo.save(redemptionCode);
  70.  
  71. return { message: 'Success' };
  72. }
  73.  
  74. public async addPrizeToRedemptionCode(code: AddPrizeToCodeDTO): Promise<ShowMessageDTO> {
  75. const findCode = await this.redemptionCodeRepo.findOne({
  76. where: {
  77. redemptionCode: code.redemptionCode,
  78. },
  79. });
  80.  
  81. findCode.itemPrize = code.itemPrize;
  82.  
  83. await this.redemptionCodeRepo.save(findCode);
  84. return { message: 'success' };
  85. }
  86.  
  87. public async setRedemptionRecord(me: User, code: CodeDTO): Promise<RedemptionRecord> {
  88. const setRecord = new RedemptionRecord();
  89. setRecord.outlet = Promise.resolve(me.outlet);
  90. setRecord.status = code.status;
  91. setRecord.customer = Promise.resolve((await me.outlet).customer);
  92. setRecord.user = Promise.resolve(me);
  93. return setRecord;
  94. }
  95.  
  96. public async checkIfCodeIsValid(code: string): Promise<RedemptionCode> {
  97. return await this.redemptionCodeRepo.findOne({
  98. where: {
  99. redemptionCode: code,
  100. },
  101. });
  102. }
  103.  
  104. public async reportRedemptionCode(code: CheckCodeDTO, me: User): Promise<ShowMessageDTO> {
  105. const findCode = await this.redemptionCodeRepo.findOne({
  106. where: {
  107. redemptionCode: code.redemptionCode,
  108. },
  109. });
  110.  
  111. findCode.reportedCode = true;
  112. findCode.reportedBy = me.username;
  113.  
  114. await this.redemptionCodeRepo.save(findCode);
  115. return { message: 'success' };
  116. }
  117.  
  118. public async getUserActivity(me) {
  119. const myRecords = await this.redemptionRecordRepo.find({
  120. where: {
  121. user: me,
  122. },
  123. relations: ['redemptionCode', 'outlet'],
  124. });
  125. const getRecordsForMyOutlet = myRecords.filter(x => (x as any).__outlet__.id === me.outlet.id).map(x => {
  126. (x as any).__outlet__ = me.outlet;
  127. return x;
  128. });
  129.  
  130. return getRecordsForMyOutlet;
  131. }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement