Skip to content

Commit 8232f7f

Browse files
Merge pull request #143 from buituananhdev/feat/booking/dialogflow
fix: dialogflow service
2 parents 41a83de + e1f2221 commit 8232f7f

4 files changed

Lines changed: 47 additions & 16 deletions

File tree

src/Services/Booking/Booking.API/Controllers/TicketController.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,18 @@ public async Task<IActionResult> GetPassengerDetailsByTicketIdAsync(Guid ticketI
3535
var passengerDetails = await _passengerInfoService.GetPassengerDetailsByTicketIdAsync(ticketId);
3636
return Ok(passengerDetails);
3737
}
38+
39+
[HttpGet("{ticketId}/cancel")]
40+
public async Task<IActionResult> CancelTicketAsync(Guid ticketId)
41+
{
42+
await _ticketService.CancelTicketAsync(ticketId);
43+
return NoContent();
44+
}
45+
46+
[HttpGet("{ticketId}")]
47+
public async Task<IActionResult> GetTicketByIdAsync(Guid ticketId)
48+
{
49+
var ticket = await _ticketService.GetByIdAsync(ticketId);
50+
return Ok(ticket);
51+
}
3852
}

src/Services/Booking/Booking.Application/Dtos/TicketDto.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class TicketDto : BaseDto
88
public string TicketNumber { get; set; }
99
public Guid? PassengerId { get; set; }
1010
public Guid TrainId { get; set; }
11-
public Seat? SeatInformation { get; set; }
11+
public List<Seat>? SeatInformations { get; set; }
1212
public Guid TrainScheduleId { get; set; }
1313
public DateTime BookingDate { get; set; } = DateTime.Now;
1414
public DateTime JourneyDate { get; set; }

src/Services/Booking/Booking.Application/Services/DialogflowService/DialogflowService.cs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -252,21 +252,24 @@ public string GenerateTicketInfoMessage(TicketDto ticket)
252252
}
253253

254254
var passengerNames = GetPassengerNames(ticket);
255-
var trainInfo = ticket.SeatInformation?.TrainCar?.Train?.TrainName ?? "N/A";
256-
var carNumber = ticket.SeatInformation?.TrainCar?.CarNumber?.ToString() ?? "N/A";
257-
var seatTypeText = GetSeatTypeText(ticket.SeatInformation?.TrainCar?.SeatType ?? 0);
258-
var seatNumber = ticket.SeatInformation?.SeatNumber.ToString() ?? "N/A";
259-
var totalSeats = ticket.TicketSeats?.Count ?? 0;
255+
var seatDetails = ticket.SeatInformations?.Select(seat =>
256+
{
257+
var train = seat.TrainCar?.Train?.TrainName ?? "N/A";
258+
var carNumber = seat.TrainCar?.CarNumber?.ToString() ?? "N/A";
259+
var seatType = GetSeatTypeText(seat.TrainCar?.SeatType ?? 0);
260+
var seatNumber = seat.SeatNumber.ToString() ?? "N/A";
261+
262+
return $"🚂 Tàu: {train} - 🚃 Toa: {carNumber} - 💺 Ghế: {seatNumber} ({seatType})";
263+
}) ?? new List<string> { "Không có thông tin ghế." };
264+
260265
var statusText = GetStatusText(ticket.Status);
261266
var bookingDateText = ticket.BookingDate.ToString("dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
262267

263268
var message = $"🎫 **THÔNG TIN VÉ TÀU**<br/>" +
264269
$"━━━━━━━━━━━<br/>" +
265270
$"🆔 Mã vé: {ticket.TicketNumber}<br/>" +
266-
$"🚂 Tàu: {trainInfo}<br/>" +
267-
$"🚃 Toa: {carNumber}<br/>" +
268-
$"💺 Ghế: {seatNumber} ({seatTypeText})<br/>" +
269-
$"📊 Số lượng ghế: {totalSeats}<br/>" +
271+
string.Join("<br/>", seatDetails) + "<br/>" +
272+
$"📊 Số lượng ghế: {ticket.SeatInformations?.Count ?? 0}<br/>" +
270273
$"🗓️ Ngày khởi hành: {ticket.JourneyDate:dd/MM/yyyy}<br/>" +
271274
$"📅 Ngày đặt vé: {bookingDateText}<br/>" +
272275
$"💵 Tổng tiền: {ticket.TotalPrice:N0} VNĐ<br/>" +

src/Services/Booking/Booking.Application/Services/TicketService/TicketService.cs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ private async Task<TicketDto> BookSingleSeatAsync(AddTicketDto createDto)
8787
}
8888

8989
BookingOrderDto bookingOrder;
90-
if(createDto.TicketType == TicketTypeEnum.Normal)
90+
if (createDto.TicketType == TicketTypeEnum.Normal)
9191
{
9292
bookingOrder = await _bookingOrderService.CreateAsync(new AddBookingOrderDto());
9393
}
@@ -333,7 +333,7 @@ public async Task<List<TicketDto>> GetTicketWithPassengerInfoAsync(Guid bookingO
333333
{
334334
var request = new GetSeatInformationRequest { SeatId = ticket.TicketSeats.FirstOrDefault()?.SeatId.ToString() };
335335
var seatInformation = await _adminGrpcServiceClient.GetSeatInformationAsync(request);
336-
ticket.SeatInformation = _mapper.Map<Seat>(seatInformation);
336+
ticket.SeatInformations.Add(_mapper.Map<Seat>(seatInformation));
337337
}
338338
return tickets;
339339
}
@@ -344,6 +344,12 @@ public Task<TicketDto> GetTicketByTicketNumberAsync(string ticketNumber)
344344
return GetTicketAsync(specification);
345345
}
346346

347+
public override Task<TicketDto> GetByIdAsync(Guid ticketId)
348+
{
349+
var specification = new TicketIdSpecification(ticketId);
350+
return GetTicketAsync(specification);
351+
}
352+
347353
private async Task<TicketDto> GetTicketAsync(Specification<Ticket> specification)
348354
{
349355
var includes = new List<Expression<Func<Ticket, object>>>
@@ -355,9 +361,13 @@ private async Task<TicketDto> GetTicketAsync(Specification<Ticket> specification
355361
var ticket = await _bookingUnitOfWork.TicketRepository
356362
.FirstOrDefaultAsync(specification, includes);
357363
var ticketDto = _mapper.Map<TicketDto>(ticket);
358-
var request = new GetSeatInformationRequest { SeatId = ticket.TicketSeats.FirstOrDefault().SeatId.ToString() };
359-
var seatInformation = await _adminGrpcServiceClient.GetSeatInformationAsync(request);
360-
ticketDto.SeatInformation = _mapper.Map<Seat>(seatInformation);
364+
var seatInformation = new List<Seat>();
365+
foreach (var ticketSeat in ticket.TicketSeats)
366+
{
367+
var request = new GetSeatInformationRequest { SeatId = ticketSeat.SeatId.ToString() };
368+
var seat = await _adminGrpcServiceClient.GetSeatInformationAsync(request);
369+
seatInformation.Add(_mapper.Map<Seat>(seatInformation));
370+
}
361371
return ticketDto;
362372
}
363373

@@ -406,6 +416,10 @@ public async Task<double> GetTicketPricesByBookingOrderAsync(Guid bookingOrderId
406416
return tickets.Sum(t => (double)t.TotalPrice);
407417
}
408418

409-
public Task CancelTicketAsync(Guid ticketId) => throw new NotImplementedException();
419+
public async Task CancelTicketAsync(Guid ticketId)
420+
{
421+
var ticket = await _bookingUnitOfWork.TicketRepository.GetByIdAsync(ticketId);
422+
ticket.Status = TicketStatusEnum.Cancelled;
423+
}
410424
}
411425
}

0 commit comments

Comments
 (0)