vault backup: 2025-06-29 13:49:40
This commit is contained in:
@@ -1,14 +1,131 @@
|
||||
Endpoint for increasing balance
|
||||
Endpoint for reserving ticket(s) + updating transportation remaining count + adding transaction
|
||||
Endpoint for getting seats + seeing if each is reserved or not
|
||||
Creating and sending a pdf downloadable ticket
|
||||
Here's a **structured checklist document**, broken into **sections by feature area**. Each section contains tasks in implementation order (oldest to newest), rephrased as clear action items with contextual notes for implementation.
|
||||
These are created based on this commit messages:
|
||||
https://github.com/MehrdadShirvani/AlibabaClone-Backend/commits/develop/
|
||||
|
||||
---
|
||||
# Miscellaneous / Fixes
|
||||
|
||||
- [ ] Fix GUID generation and async handling in ticket creation. (Use `Guid.NewGuid()` instead of `new Guid()`)
|
||||
- [ ] Make `SerialNumber`, `TicketOrderId`, `BaseAmount` publicly settable in DTOs.
|
||||
- [ ] Fix issues in seat mappings and transportation queries.
|
||||
# Fixes and Missing Parts from Session 08
|
||||
|
||||
## 👤 Person & Account Info
|
||||
|
||||
- [ ] Add `Person`, `BankAccountDetail`, and navigation properties.
|
||||
- [ ] Add `UpsertPersonAsync` and `UpsertBankAccountDetailAsync` in `IAccountService`.
|
||||
- [ ] Add `UpsertPerson`, `UpsertBankDetail` endpoints in `AccountController`.
|
||||
- [ ] Add `GetPeople`, `GetProfileAsync`, and DTOs (`ProfileDto`, `PersonDto`, `BankAccountDetailDto`).
|
||||
- [ ] Handle person editing logic via `UpsertPerson` and adjust classes that used it the old way.
|
||||
## 🔐 Auth & Settings
|
||||
|
||||
- [ ] Complete the error handling of `EditEmailDto`, `EditPasswordDto`.
|
||||
- [ ] Add `GetByEmailAsync` in `AccountRepository`.
|
||||
|
||||
|
||||
|
||||
### ⚠ Important Tip
|
||||
# Branching
|
||||
- [ ] Create the feature/ticket-reservation branch based on develop
|
||||
|
||||
# Ticket Ordering System
|
||||
|
||||
## 🧱 Domain and Infrastructure Setup
|
||||
|
||||
- [ ] Check out new ERD: [Here](https://github.com/TheOrderOfPhoenix/ASP.NET/blob/main/ProjectOrientedSessions/docs/AlibabaERD-Version02.pdf)
|
||||
- [ ] Create `TicketOrder`, `Ticket`, and `Transaction` entities.
|
||||
- [ ] Add configurations for `TicketOrder`, `Ticket`, and `Transaction` (relationships, constraints).
|
||||
- [ ] Adjust `Transportation` entity configuration to support ticketing.
|
||||
- [ ] Add migrations for the above database changes.
|
||||
|
||||
## 🧑💼 Service Layer
|
||||
|
||||
- [ ] Create `ITicketOrderService`, `TicketOrderService` and implement:
|
||||
- [ ] `CreateTicketOrderAsync`
|
||||
- [ ] `GenerateTicketsPdfAsync`
|
||||
- [ ] Register `TicketOrderService` in DI container.
|
||||
|
||||
## 🎯 Controller Layer
|
||||
|
||||
- [ ] Create `TicketOrderController` with the following endpoints:
|
||||
- [ ] `POST /CreateTicketOrder`
|
||||
- [ ] `GET /DownloadPdf`
|
||||
|
||||
## 🔁 DTOs & Mappings
|
||||
|
||||
- [ ] Add `CreateTicketOrderDto`, `CreateTravelerTicketDto`.
|
||||
- [ ] Add `TicketOrderSummaryDto`, `TravelerTicketDto`.
|
||||
- [ ] Add mappings in `MappingProfile`.
|
||||
|
||||
## 🗃️ Repository Layer
|
||||
|
||||
- [ ] Create `ITicketOrderRepository`, `TicketOrderRepository`.
|
||||
- [ ] Implement:
|
||||
- [ ] `FindAndLoadAllDetails`
|
||||
- [ ] `GetAllByBuyerId`
|
||||
|
||||
---
|
||||
|
||||
# Transportation and Seat Selection
|
||||
|
||||
- [ ] Add `TransportationSeatDto`.
|
||||
- [ ] Add method `GetSeatsByVehicleId` in `ISeatRepository` and implement it.
|
||||
- [ ] Add mapping from `Seat` to `TransportationSeatDto`.
|
||||
- [ ] Add `GetTransportationSeatsAsync` in `ITransportationService` and implement.
|
||||
- [ ] Add `GetTransportationSeats` endpoint in `TransportationController`.
|
||||
- [ ] Fix vehicle and seat-related mapping issues (e.g., missing `VehicleTypeId`, logic errors).
|
||||
- [ ] Ensure `RemainingCapacity` is treated as calculated (ignored in EF, removed from schema).
|
||||
|
||||
---
|
||||
|
||||
# Coupon System
|
||||
|
||||
## 🏗️ Domain & Infrastructure
|
||||
- [ ] Add `Coupon` entity with `IsExpired`, `CouponCode` (unique).
|
||||
- [ ] Add `ICouponRepository`, `CouponRepository`.
|
||||
- [ ] Add `DiscountDto`, `CouponValidationRequestDto`.
|
||||
- [ ] Add migrations for new `Coupon` table.
|
||||
|
||||
### 🧑💼 Service & Logic
|
||||
- [ ] Create `ICouponService`, implement validation logic.
|
||||
- [ ] Add coupon validation in `TicketOrderService`.
|
||||
### 🎯 Controller
|
||||
- [ ] Add `ValidateCoupon` endpoint in `CouponController`.
|
||||
|
||||
---
|
||||
|
||||
# Payment & Transactions
|
||||
|
||||
- [ ] Add `CouponId` to `PayForTicketOrderAsync` in `IAccountService` & implementation.
|
||||
- [ ] Add `CouponId` to `TransactionDto` (adjusted to `CouponCode` later).
|
||||
- [ ] Add `TopUpAccount` logic (DTO, Controller, Service).
|
||||
- [ ] Add `Transaction` relationship to `TicketOrder` as one-to-one.
|
||||
- [ ] Add logic for creating transactions with tickets.
|
||||
- [ ] Add endpoint `GetMyTransactions` and DTOs (`TransactionDto`).
|
||||
|
||||
---
|
||||
|
||||
## ✅ Ticket Review & Confirmation
|
||||
|
||||
- [ ] Add `TicketOrderSummaryDto`, map details: from/to city, company, vehicle, time.
|
||||
- [ ] Implement `GetTravelOrderDetails` endpoint to fetch ticket summary.
|
||||
- [ ] Display number of travelers, per-seat price, and total cost.
|
||||
- [ ] Include coupon entry and balance payment option.
|
||||
- [ ] Use ticket + person data (via `GetTicketOrderTravelersDetails`).
|
||||
|
||||
---
|
||||
|
||||
## ✅ PDF Generation
|
||||
|
||||
- [ ] Install `QuestPDF` in infrastructure.
|
||||
- [ ] Create `IPdfGenerator`, implement with QuestPDF.
|
||||
- [ ] Register `IPdfGenerator` service.
|
||||
- [ ] Create `PdfGenerator` logic to render ticket PDFs.
|
||||
- [ ] Add PDF download endpoint (`DownloadPdf`) in `TicketOrderController`.
|
||||
---
|
||||
# Merge
|
||||
- [ ] Create a PR and merge the current branch with develop
|
||||
|
||||
|
||||
---
|
||||
|
||||
If your `agent.ts` uses `useAuthStore().token` **at the top level**, remember:
|
||||
|
||||
- On very first load, Zustand will **rehydrate** from storage _after_ initial render, so token may be `null` until rehydration is done.
|
||||
|
||||
- Fix: either delay access until after `hasHydrated`, or refactor `agent` to inject token per request.
|
||||
|
||||
Reference in New Issue
Block a user