3.6 KiB
Session 8
Profile + some fixes to database
Fixes
-
Check for missing
.ValueGeneratedOnAdd()in all entity configurations inInfrastructure/Configurations. -
Adjust the database setup according to the second version of ERD
-
Some aggregates are added/modified to generate the new database
-
New ERD: Here
-
Note: Pay attention to the changes in logic and implementation of Person table (Id number is not unique anymore). So remove this code in PersonConfiguration:
builder.HasIndex(p => p.IdNumber) .IsUnique();
-
-
Add actual data in
TicketStatus,Gender,TransactionTypes- You can either add the data in DbContext or the database itself
-
Add data in
Seat,Person,TicketOrder,Transaction,Ticketfor test. It is recommended to write python code for generating data for Seat table, according to the data already stored in Transportation and related Vehicle data. There is also a SeatGenerator in this repository, as well. -
Fix claim extraction (
sub→ standardize JWT claim mapping). (IUserContextimplmentation)
First, create an interface in Application layer:
public interface IUserContext
{
long GetUserId();
}
Then, implement it in WebAPI in Auth folder:
public class UserContext : IUserContext
{
private readonly IHttpContextAccessor _httpContextAccessor;
public UserContext(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public long GetUserId()
{
var userIdStr = _httpContextAccessor.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;
if (long.TryParse(userIdStr, out var userId))
{
return userId;
}
throw new InvalidOperationException("User ID is not available or invalid.");
}
}
Finally, register things in Program.cs
// register user context
builder.Services.AddHttpContextAccessor();
builder.Services.AddScoped<IUserContext, UserContext>();
✅ Profile Page (Account Info Tab)
- Create
ProfileDtoto represent combined data for account, person, bank detail, balance. - Add
GetProfileAsyncinAccountRepositoryand expose viaAccountController. - Implement:
- Edit Email (with validation):
EditEmailDto, service method, and controller endpoint. - Edit Password:
EditPasswordDto, service and controller. - Edit Person Info:
UpsertAccountPersonDto, and endpoint to upsert personal data. - Edit BankAccountDetail:
UpsertBankAccountDetailDtoand relevant logic.
- Edit Email (with validation):
- Add mapping for all Dtos and fix related properties like
CreatorAccountId.
✅ List of Travelers
- Add
GetPeopleendpoint inAccountController. - Implement separation of
UpsertAccountPersonandUpsertPerson. - Adjust Dto:
PersonDto(withid,creatorAccountId,englishFirstName, etc.).
✅ My Travels Tab
- Create
TicketOrderSummaryDto(includes cities, vehicle name, price, etc.). - Add
GetTravelsinAccountService, and exposeGetMyTravelsin controller.
✅ My Transactions Tab
- Create
TransactionDtoand mapping. - Add method to get transactions by
AccountId. - Expose
GetMyTransactionsinAccountController. - Add modal to simulate balance top-up (manual input).
- Format amount text based on transaction type: green (+) for income, red (–) for expense.