Compare commits

..

No commits in common. "development" and "1.4.4-alpha.1" have entirely different histories.

14 changed files with 38 additions and 686 deletions

View File

@ -49,7 +49,6 @@
"exceljs": "^4.4.0",
"fs-extra": "^11.2.0",
"googleapis": "^140.0.0",
"gtts": "^0.2.1",
"handlebars": "^4.7.8",
"mathjs": "^13.0.2",
"midtrans-client": "^1.3.1",

View File

@ -73,14 +73,13 @@ export class LoginAdminQueueManager extends BaseCustomManager<UserEntity> {
message: `Akun anda sudah login di item "${hasLoginAsQueue?.item_name}"`,
error: 'Unauthorized',
});
} else if (itemLogin && itemLogin.user_id !== this.userLogin.id) {
throw new UnauthorizedException({
statusCode: HttpStatus.UNAUTHORIZED,
message: `"${userLoginItem.name}" masih login sebagai admin antrian `,
error: 'Unauthorized',
});
}
// else if (itemLogin && itemLogin.user_id !== this.userLogin.id) {
// throw new UnauthorizedException({
// statusCode: HttpStatus.UNAUTHORIZED,
// message: `"${userLoginItem.name}" masih login sebagai admin antrian `,
// error: 'Unauthorized',
// });
// }
// * Disini untuk isi token
const tokenData = {

View File

@ -19,7 +19,6 @@ export class CouchService {
}
async onModuleInit() {
// return;
const nano = this.nanoInstance;
for (const database of DatabaseListen) {
const db = nano.db.use(database);
@ -96,41 +95,4 @@ export class CouchService {
return null;
}
}
getUnixTimestampLast7Days() {
const date = new Date();
date.setDate(date.getDate() - 4);
date.setHours(0, 0, 0, 0);
return date.getTime();
}
public async clearTransactions() {
const nano = this.nanoInstance;
const transaction = nano.use('transaction');
const expiredDate = this.getUnixTimestampLast7Days();
const selectorPayment = {
created_at: {
$lt: expiredDate,
},
};
const transactions = await transaction.find({
selector: selectorPayment,
fields: ['_id', '_rev'],
limit: 100000,
});
const { docs } = transactions;
console.log(docs.length);
const deletedDocs = {
docs: docs.map((doc) => ({
_id: doc._id,
_rev: doc._rev,
_deleted: true,
})),
};
await transaction.bulk(deletedDocs);
}
}

View File

@ -5,17 +5,13 @@ import { Public } from 'src/core/guards';
import * as Nano from 'nano';
import { CreateUserPrivilegeDto } from 'src/modules/user-related/user-privilege/infrastructure/dto/create-user-privilege.dto';
import { ConfigService } from '@nestjs/config';
import { CouchService } from '../data/services/couch.service';
@ApiTags(`couch`)
@Controller('v1/couch')
@Public()
@Injectable()
export class CouchDataController {
constructor(
private configService: ConfigService,
private couchService: CouchService,
) {}
constructor(private configService: ConfigService) {}
get nanoInstance() {
const couchConfiguration = this.configService.get<string>('COUCHDB_CONFIG');
@ -68,11 +64,4 @@ export class CouchDataController {
// return people.get();
} catch (error) {}
}
@Public(true)
@Get('clear-transactions')
async clearTransactions(): Promise<string> {
await this.couchService.clearTransactions();
return 'OK';
}
}

View File

@ -1,10 +1,4 @@
import {
Controller,
Get,
Param,
Query,
UnauthorizedException,
} from '@nestjs/common';
import { Controller, Get, Param, Query } from '@nestjs/common';
import { FilterItemQueueDto } from './dto/filter-item-queue.dto';
import { Pagination } from 'src/core/response';
import { PaginationResponse } from 'src/core/response/domain/ok-response.interface';
@ -13,7 +7,6 @@ import { ItemQueueReadOrchestrator } from '../domain/usecases/item-queue-read.or
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { MODULE_NAME } from 'src/core/strings/constants/module.constants';
import { Public } from 'src/core/guards';
import { validate as isValidUUID } from 'uuid';
@ApiTags(`${MODULE_NAME.ITEM_QUEUE.split('-').join(' ')} - read`)
@Controller(`v1/${MODULE_NAME.ITEM_QUEUE}`)
@ -51,7 +44,6 @@ export class ItemQueueReadController {
@Get('display/:id')
@Public(true)
async detailPublic(@Param('id') id: string): Promise<ItemQueueEntity> {
if (!isValidUUID(id)) throw new UnauthorizedException('id is required');
return await this.orchestrator.detail(id);
}
}

View File

@ -87,10 +87,7 @@ export class QueueAdminOrchestrator {
// },
// ]);
if (
queueTicket.item.ticket.phone != null &&
queueTicket.last_notification < currentTime - call_preparation
) {
if (queueTicket.last_notification < currentTime - call_preparation) {
await notification.queueProcess(payload);
this.service.updateLastNotification(queueId, currentTime);
}

View File

@ -31,7 +31,7 @@ export class QueueTimeFormula {
const times = itemQueue.items.map((item) => item.play_estimation ?? 0);
const average = times.length > 0 ? math.mean(times) * 60 * 1000 : 0; // change average minute to milliseconds
this.average = Math.floor(average);
this.average = average;
const calledQueue = await this.queueDataService.lastQueue(item_queue_id);

View File

@ -1,5 +1,5 @@
import { Injectable } from '@nestjs/common';
import * as moment from 'moment';
import moment from 'moment';
import { TABLE_NAME } from 'src/core/strings/constants/table.constants';
import { TransactionUserType } from 'src/modules/transaction/transaction/constants';
import { TransactionItemModel } from 'src/modules/transaction/transaction/data/models/transaction-item.model';
@ -61,10 +61,10 @@ export class GenerateQueueManager {
}
const results: QueueModel[] = [];
const vipCustomer =
if (
transaction.customer_category?.has_vip_pass ||
transaction.customer_type === TransactionUserType.VIP;
if (vipCustomer || transaction.creator_counter_no != null) {
transaction.customer_type === TransactionUserType.VIP
) {
for (const ticket of insertTickets) {
const ticket_id = ticket.id;
const items = {};
@ -86,8 +86,7 @@ export class GenerateQueueManager {
});
for (const payload of Object.values(items)) {
const isVip = vipCustomer || transaction.creator_counter_no == null;
const result = await this.create(payload as any, isVip);
const result = await this.create(payload as any);
results.push(result);
}
}
@ -135,7 +134,7 @@ export class GenerateQueueManager {
return Object.values<QueueItem>(result);
}
async create(data: RegisterQueueDto, isVip = false): Promise<QueueModel> {
async create(data: RegisterQueueDto): Promise<QueueModel> {
const queue = await this.queueService.getTicketItems(
data.ticket_id,
data.item_id,
@ -143,7 +142,7 @@ export class GenerateQueueManager {
const queueRequest: any = {
qty: data.qty,
item_id: queue.id,
vip: isVip,
vip: true,
};
const registerQueueManager = new RegisterQueueManager(
this.bucketService,
@ -153,9 +152,6 @@ export class GenerateQueueManager {
registerQueueManager.setService(this.queueService, TABLE_NAME.QUEUE);
await registerQueueManager.execute();
const result = await registerQueueManager.getResult();
result.time = null;
return result;
return registerQueueManager.getResult();
}
}

View File

@ -38,7 +38,7 @@ export class RegisterQueueManager extends BaseCreateManager<QueueModel> {
const first = queues[0];
const last = queues[queues.length - 1] ?? moment().valueOf();
const average = this.queueTimeFormula.average;
return [Math.floor(first), Math.floor(last + average)];
return [first, last + average];
}
async beforeProcess(): Promise<void> {

View File

@ -1,4 +1,4 @@
import { Body, Controller, Get, Param, Post, Query, Res } from '@nestjs/common';
import { Body, Controller, Get, Param, Post } from '@nestjs/common';
import { MODULE_NAME } from 'src/core/strings/constants/module.constants';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
@ -15,9 +15,6 @@ import { mappingRevertTransaction } from 'src/modules/transaction/transaction/do
import { TransactionType } from 'src/modules/transaction/transaction/constants';
import { QueueModel } from '../../data/models/queue.model';
import * as Gtts from 'gtts';
import { Response } from 'express';
@ApiTags(`Queue`)
@Controller(`v1/${MODULE_NAME.QUEUE}`)
@Public(true)
@ -108,15 +105,6 @@ export class QueueController {
return await this.orchestrator.queueOrderItems(id);
}
@Get('speech')
async speech(
@Query('text') text: string,
@Res() response: Response,
): Promise<void> {
const gtts = new Gtts(text, 'id');
gtts.stream().pipe(response);
}
@Get(':id/items/:item_id')
async queueItemTickets(
@Param('id') id: string,

View File

@ -21,8 +21,7 @@ export class QueueTransactionHandler
/**
* If data still in process (not settled) then don't create the queue order
*/
if (process_data?.status != 'settled' || process_data?.pos_number != null)
return;
if (process_data?.status != 'settled') return;
const transaction = await this.dataService.getOneByOptions({
where: {

View File

@ -116,7 +116,7 @@ export function mappingRevertTransaction(data, type) {
}
Object.assign(data, {
id: data.booking_id ?? data._id ?? data.id,
id: data.booking_id ?? data._id,
creator_counter_no: Number(data.pos_number),
creator_counter_name: data.pos_name,
settlement_date: new Date(data.created_at),

View File

@ -12,7 +12,6 @@ import {
} from './whatsapp.constant';
import axios from 'axios';
import { Logger } from '@nestjs/common';
import { apm } from 'src/core/apm';
export class WhatsappService {
async sendMessage(data) {
@ -26,14 +25,8 @@ export class WhatsappService {
data: data,
};
try {
const response = await axios(config);
return response.data;
} catch (error) {
Logger.error(error);
apm?.captureError(error);
return null;
}
}
async queueRegister(data: WhatsappQueue) {
@ -98,11 +91,8 @@ export class WhatsappService {
},
};
const response = await this.sendMessage(payload);
if (response)
Logger.log(
`Notification register for ${data.code} send to ${data.phone}`,
);
await this.sendMessage(payload);
Logger.log(`Notification register for ${data.code} send to ${data.phone}`);
}
async queueProcess(data: WhatsappQueue) {
@ -162,8 +152,7 @@ export class WhatsappService {
},
};
const response = await this.sendMessage(payload);
if (response)
await this.sendMessage(payload);
Logger.log(`Notification process for ${data.code} send to ${data.phone}`);
}
}

578
yarn.lock

File diff suppressed because it is too large Load Diff