feat: order tickets
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details

pull/115/head 20.2.2-alpha.1
shancheas 2024-10-23 11:56:21 +07:00
parent e9d864c922
commit 01b2796c26
5 changed files with 38 additions and 2 deletions

View File

@ -57,6 +57,9 @@ export class QueueTicketModel
@JoinColumn({ name: 'order_id' }) @JoinColumn({ name: 'order_id' })
order: QueueOrder; order: QueueOrder;
@Column('varchar')
order_id: string;
@Column({ type: 'bigint' }) @Column({ type: 'bigint' })
date: number; date: number;
@ -65,7 +68,7 @@ export class QueueTicketModel
onDelete: 'CASCADE', onDelete: 'CASCADE',
onUpdate: 'CASCADE', onUpdate: 'CASCADE',
}) })
items: QueueItem[]; items: QueueItemModel[];
} }
@Entity(TABLE_NAME.QUEUE_ITEM) @Entity(TABLE_NAME.QUEUE_ITEM)
@ -85,7 +88,7 @@ export class QueueItemModel
@ManyToOne(() => ItemModel) @ManyToOne(() => ItemModel)
@JoinColumn({ name: 'item_id' }) @JoinColumn({ name: 'item_id' })
item: ItemEntity; item: ItemModel;
@Column('int') @Column('int')
qty: number; qty: number;

View File

@ -31,4 +31,13 @@ export class TicketDataService extends BaseDataService<QueueTicket> {
}, },
}); });
} }
async queueTickets(order_id: string): Promise<QueueTicketModel[]> {
return this.repo.find({
relations: ['items', 'items.item', 'items.item.item_queue'],
where: {
order_id,
},
});
}
} }

View File

@ -9,5 +9,6 @@ export interface QueueTicket extends BaseCoreEntity {
phone: string; phone: string;
date: number; date: number;
order?: QueueOrder; order?: QueueOrder;
order_id?: string;
items: QueueItem[]; items: QueueItem[];
} }

View File

@ -1,6 +1,7 @@
import { Injectable, UnauthorizedException } from '@nestjs/common'; import { Injectable, UnauthorizedException } from '@nestjs/common';
import { TicketDataService } from '../data/services/ticket.service'; import { TicketDataService } from '../data/services/ticket.service';
import { QueueOrder } from './entities/order.entity'; import { QueueOrder } from './entities/order.entity';
import { title } from 'process';
@Injectable() @Injectable()
export class QueueOrchestrator { export class QueueOrchestrator {
@ -16,4 +17,21 @@ export class QueueOrchestrator {
}); });
} }
} }
async queueTickets(order_id: string): Promise<any> {
const tickets = await this.dataService.queueTickets(order_id);
const items = tickets[0].items;
return items.map((item) => {
return {
id: item.id,
title: item.item.name,
qty: item.qty,
available: true,
average: 12,
nearest: '13:10',
crowded_level: 20,
available_time: '15:00',
};
});
}
} }

View File

@ -27,4 +27,9 @@ export class QueueController {
async loginCustomer(@Param('id') id: string): Promise<QueueOrder> { async loginCustomer(@Param('id') id: string): Promise<QueueOrder> {
return await this.orchestrator.loginCustomer(id); return await this.orchestrator.loginCustomer(id);
} }
@Get('tickets/:id')
async queueTickets(@Param('id') id: string): Promise<void> {
return await this.orchestrator.queueTickets(id);
}
} }