Compare commits

..

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

18 changed files with 29 additions and 169 deletions

View File

@ -48,7 +48,7 @@ export class OtpCheckerGuard implements CanActivate {
});
}
// console.log({ dataIdentity, otpCode, otpData });
console.log({ dataIdentity, otpCode, otpData });
if (otpData && otpData?.verified_at) return true;
}

View File

@ -55,7 +55,7 @@ export class ValidateRelationHelper<Entity> {
const relationColumn =
data[relation.relation]?.[`${relation.singleQuery[0]}`];
if (
// !!relationColumn &&
!!relationColumn &&
this.mappingValidator(
relationColumn,
relation.singleQuery[1],

View File

@ -1,17 +0,0 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class RemoveItemNameUnique1750834308368 implements MigrationInterface {
name = 'RemoveItemNameUnique1750834308368';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "items" DROP CONSTRAINT "UQ_213736582899b3599acaade2cd1"`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "items" ADD CONSTRAINT "UQ_213736582899b3599acaade2cd1" UNIQUE ("name")`,
);
}
}

View File

@ -43,7 +43,7 @@ export class BookingItemManager extends IndexItemManager {
const hasRates = (this.filterParam.season_period_ids?.length ?? 0) > 0;
const items = data.map((item) => {
const currentRate = item.item_rates.find((rate) =>
this.filterParam.season_period_ids?.includes(rate.season_period_id),
this.filterParam.season_period_ids.includes(rate.season_period_id),
);
const { item_rates, ...rest } = item;
const rate = currentRate?.['price'] ?? rest.base_price;
@ -54,14 +54,4 @@ export class BookingItemManager extends IndexItemManager {
});
return { total, data: items };
}
setQueryFilter(
queryBuilder: SelectQueryBuilder<ItemEntity>,
): SelectQueryBuilder<ItemEntity> {
const query = super.setQueryFilter(queryBuilder);
query.andWhere(`${this.tableName}.status = 'active'`);
return query;
}
}

View File

@ -57,7 +57,6 @@ export class CreateBookingManager extends CreateTransactionManager {
time: this.data.booking_date,
id: this.data.id,
},
this.data.payment_total,
`snap/v4/redirection/${this.data.payment_midtrans_token}`,
);
}

View File

@ -23,7 +23,6 @@ export class ItemController {
): Promise<PaginationResponse<ItemEntity>> {
params.limit = 1000;
params.show_to_booking = true;
params.all_item = true;
this.indexManager.setFilterParam(params);
this.indexManager.setService(this.serviceData, TABLE_NAME.ITEM);
await this.indexManager.execute();

View File

@ -25,7 +25,7 @@ export class ItemModel
extends BaseStatusModel<ItemEntity>
implements ItemEntity
{
@Column('varchar', { name: 'name' })
@Column('varchar', { name: 'name', unique: true })
name: string;
@Column('text', { name: 'booking_description', nullable: true })

View File

@ -8,7 +8,6 @@ import { ItemEntity } from '../../entities/item.entity';
import { ItemModel } from '../../../data/models/item.model';
import { BaseCreateManager } from 'src/core/modules/domain/usecase/managers/base-create.manager';
import { ItemCreatedEvent } from '../../entities/event/item-created.event';
import { STATUS } from 'src/core/strings/constants/base.constants';
@Injectable()
export class CreateItemManager extends BaseCreateManager<ItemEntity> {
@ -30,37 +29,11 @@ export class CreateItemManager extends BaseCreateManager<ItemEntity> {
}
get validateRelations(): validateRelations[] {
const timeGroupId = this.data.time_group_id ?? this.data.time_group?.id;
const relation =
this.data.bundling_items?.length > 0
? 'bundling_items'
: 'bundling_parents';
return timeGroupId != null
? [
{
relation: relation,
singleQuery: ['time_group_id', '!=', timeGroupId],
message: `Gagal Update! Time group item dan bundling item tidak sama`,
},
]
: [];
return [];
}
get uniqueColumns(): columnUniques[] {
const timeGroupId = this.data.time_group_id ?? this.data.time_group?.id;
return timeGroupId != null
? [
{
column: 'name',
query: `(status = '${STATUS.ACTIVE}' AND (${this.tableName}.time_group_id Is Null OR ${this.tableName}.time_group_id = '${timeGroupId}'))`,
},
]
: [
{
column: 'name',
query: `(status = '${STATUS.ACTIVE}')`,
},
];
return [{ column: 'name' }];
}
get eventTopics(): EventTopics[] {

View File

@ -8,7 +8,6 @@ import {
columnUniques,
validateRelations,
} from 'src/core/strings/constants/interface.constants';
import { STATUS } from 'src/core/strings/constants/base.constants';
@Injectable()
export class UpdateItemManager extends BaseUpdateManager<ItemEntity> {
@ -40,31 +39,11 @@ export class UpdateItemManager extends BaseUpdateManager<ItemEntity> {
}
get validateRelations(): validateRelations[] {
const timeGroupId = this.data.time_group_id ?? this.data.time_group?.id;
const relation =
this.data.bundling_items?.length > 0
? 'bundling_items'
: 'bundling_parents';
return timeGroupId != null
? [
{
relation: relation,
singleQuery: ['time_group_id', '!=', timeGroupId],
message: `Gagal Update! Time group item dan bundling item tidak sama`,
},
]
: [];
return [];
}
get uniqueColumns(): columnUniques[] {
const timeGroupId = this.data.time_group_id ?? this.data.time_group?.id;
return [
{
column: 'name',
query: `(status = '${STATUS.ACTIVE}' AND (${this.tableName}.time_group_id Is Null OR ${this.tableName}.time_group_id = '${timeGroupId}'))`,
},
];
return [];
}
get entityTarget(): any {

View File

@ -6,8 +6,6 @@ import {
Param,
RelationParam,
} from 'src/core/modules/domain/entities/base-filter.entity';
import * as moment from 'moment';
import { ORDER_TYPE } from 'src/core/strings/constants/base.constants';
// TODO:
// Implementasikan filter by start_time, end_timen, dan max_usage_time
@ -15,10 +13,6 @@ import { ORDER_TYPE } from 'src/core/strings/constants/base.constants';
@Injectable()
export class IndexPublicTimeGroupManager extends BaseIndexManager<TimeGroupEntity> {
async prepareData(): Promise<void> {
Object.assign(this.filterParam, {
order_by: `${this.tableName}.start_time`,
order_type: ORDER_TYPE.ASC,
});
return;
}
@ -66,15 +60,6 @@ export class IndexPublicTimeGroupManager extends BaseIndexManager<TimeGroupEntit
queryBuilder: SelectQueryBuilder<TimeGroupEntity>,
): SelectQueryBuilder<TimeGroupEntity> {
queryBuilder.andWhere(`items.id is not null`);
if (!this.filterParam.date) {
const currentTime = moment().utcOffset('+07:00').format('HH:mm:ss');
queryBuilder.andWhere(`${this.tableName}.end_time >= :current_time`, {
current_time: currentTime,
});
}
return queryBuilder;
}
}

View File

@ -30,12 +30,4 @@ export class FilterTimeGroupDto
@ApiProperty({ type: 'string', required: false })
@ValidateIf((body) => body.max_usage_time_to)
max_usage_time_to: string;
@ApiProperty({
type: Date,
required: false,
example: '2024-01-01',
})
@ValidateIf((body) => body.date)
date: Date;
}

View File

@ -51,27 +51,27 @@ export class TicketDataService extends BaseDataService<QueueTicket> {
],
});
// if (!order) {
// const { customer_name, customer_phone } =
// await this.transaction.findOneOrFail({
// where: {
// id,
// },
// });
if (!order) {
const { customer_name, customer_phone } =
await this.transaction.findOneOrFail({
where: {
id,
},
});
// const start = moment().startOf('day').valueOf();
// const end = moment().endOf('day').valueOf();
// const order = this.order.findOneOrFail({
// relations: ['tickets'],
// where: {
// customer: customer_name,
// phone: customer_phone,
// date: Between(start, end),
// },
// });
const start = moment().startOf('day').valueOf();
const end = moment().endOf('day').valueOf();
const order = this.order.findOneOrFail({
relations: ['tickets'],
where: {
customer: customer_name,
phone: customer_phone,
date: Between(start, end),
},
});
// return order;
// }
return order;
}
return order;
}

View File

@ -56,7 +56,7 @@ export class QueueOrchestrator {
return order;
} catch (error) {
throw new UnauthorizedException({
message: 'Invoice tidak ditemukan untuk tanggal hari ini',
message: 'Invoice tidak ditemukan',
error: 'INVOICE_NOT_FOUND',
});
}

View File

@ -86,7 +86,6 @@ export class SeasonPeriodDataController {
// pemisahan update data dengan update items dikarenakan payload (based on tampilan) berbeda
// TODO => simpan OTP update yang disikim dari request ini
@Put(':id/items')
@UseGuards(OtpCheckerGuard)
async updateItems(
@Param('id') dataId: string,
@Body() data: UpdateSeasonPeriodItemDto,

View File

@ -31,10 +31,6 @@ export class DetailRefundManager extends BaseDetailManager<RefundEntity> {
'items.bundling_items',
'items.refunds item_refunds',
'item_refunds.refund item_refunds_refund',
'transaction.items transaction_items',
'transaction_items.item transaction_items_item',
'transaction_items_item.time_group transaction_items_item_time_group',
],
// relation yang hanya ingin dihitung (akan return number)
@ -69,10 +65,6 @@ export class DetailRefundManager extends BaseDetailManager<RefundEntity> {
'item_refunds',
'item_refunds_refund.id',
'item_refunds_refund.status',
'transaction_items',
'transaction_items_item',
'transaction_items_item_time_group',
];
}

View File

@ -31,9 +31,6 @@ export class DetailTransactionManager extends BaseDetailManager<TransactionEntit
'items.refunds item_refunds',
'item_refunds.refund item_refunds_refund',
'refunds',
'items.item items_item',
'items_item.time_group items_item_time_group',
],
// relation yang hanya ingin dihitung (akan return number)
@ -95,8 +92,6 @@ export class DetailTransactionManager extends BaseDetailManager<TransactionEntit
'item_refunds_refund.status',
'refunds',
'items_item',
'items_item_time_group',
];
}

View File

@ -43,8 +43,6 @@ export function mappingTransaction(data, refundId?: string) {
if (refundId)
refund = itemData.refunds?.find((item) => item.refund.id == refundId);
const timeGroup = itemData?.item?.time_group;
return {
item: {
id: itemData.item_id,
@ -59,7 +57,6 @@ export function mappingTransaction(data, refundId?: string) {
},
breakdown_bundling: itemData.breakdown_bundling,
bundling_items: itemData.bundling_items,
time_group: timeGroup,
},
id: itemData.id,
refund: refund,

View File

@ -324,23 +324,10 @@ export class WhatsappService {
);
}
async bookingRegister(
data: WhatsappBookingCreate,
total: number,
paymentUrl: string,
) {
async bookingRegister(data: WhatsappBookingCreate, paymentUrl: string) {
const momentDate = moment(data.time);
const fallbackValue = momentDate.locale('id').format('dddd, DD MMMM YYYY');
const formattedTotal = new Intl.NumberFormat('id-ID', {
style: 'currency',
currency: 'IDR',
minimumFractionDigits: 0,
maximumFractionDigits: 0,
})
.format(total)
.replace('IDR', 'Rp');
const payload = {
messaging_product: 'whatsapp',
to: phoneNumberOnly(data.phone), // recipient's phone number
@ -364,16 +351,6 @@ export class WhatsappService {
parameter_name: 'booking_date',
text: fallbackValue,
},
{
type: 'text',
parameter_name: 'booking_code',
text: data.code,
},
{
type: 'text',
parameter_name: 'total',
text: formattedTotal,
},
],
},
{