From 4fafd3f202d5f5315f9013563725f5dd580c33ed Mon Sep 17 00:00:00 2001
From: Ali Taherzadeh <85833410+AliThz@users.noreply.github.com>
Date: Thu, 10 Apr 2025 10:21:29 +0330
Subject: [PATCH] Add Branching, DTO, Repository and AutoMapper
---
.../Session04/Session04.md | 146 +++++++++++++++++-
1 file changed, 143 insertions(+), 3 deletions(-)
diff --git a/02_ProjectOrientedSessions/Session04/Session04.md b/02_ProjectOrientedSessions/Session04/Session04.md
index 706c4ad..560dced 100644
--- a/02_ProjectOrientedSessions/Session04/Session04.md
+++ b/02_ProjectOrientedSessions/Session04/Session04.md
@@ -2,10 +2,150 @@
(optional): read this to get a better understanding of the topic:
https://chatgpt.com/share/67f18460-1c1c-8010-bc57-9f3b683ec87a
-# DTO (Ali)
+# Branching
+
+- [ ] Create the feature/transportation-search branch based on develop
+
+
+
+# DTO
+In order to develop transportation search flow, three DTOs need to be created in the application layer.
+
+- [ ] Create DTOs related to transportation search flow
+
+
+📂 Suggested Folder: Application/DTOs/City`
+
+
+```cs
+public class CityDto
+{
+ public int Id { get; init; }
+ public required string Title { get; init; }
+}
+```
+
+📂 Suggested Folder: Application/DTOs/Transportation
+
+
+
+```cs
+public class TransportationSearchRequestDto
+{
+ public int? FromCityId { get; init; }
+ public int? ToCityId { get; init; }
+ public DateTime? StartDate { get; init; }
+ public DateTime? EndDate { get; init; }
+}
+```
+
+
+```cs
+public class TransportationSearchResultDto
+{
+ public long Id { get; init; }
+ public required string CompanyTitle { get; init; }
+ public required string FromLocationTitle { get; init; }
+ public required string ToLocationTitle { get; init; }
+ public required string FromCityTitle { get; init; }
+ public required string ToCityTitle { get; init; }
+ public DateTime StartDateTime { get; init; }
+ public DateTime? EndDateTime { get; init; }
+ public decimal Price { get; init; }
+}
+```
+
+
+# Repository
+There are a few things to be add to some repositories for transportation search flow.
+
+
+- [ ] Create DTOs related to transportation search flow
+
+
+
+📂 Suggested Folder: Domain/Framework/Interfaces/Repositories/
+TransportationRepositories
+
+```cs
+public interface ITransportationRepository : IRepository
+{
+ Task> SearchTransportationsAsync(
+ int? fromCityId,
+ int? toCityId,
+ DateTime? startDate,
+ DateTime? endDate);
+}
+```
+
+
+📂 Suggested Folder: Infrastructure/Services/Services/TransportationRepositories
+```cs
+public async Task> SearchTransportationsAsync(
+ int? fromCityId, int? toCityId,
+ DateTime? startDate, DateTime? endDate)
+{
+ var query = DbContext.Transportations
+ .Include(x => x.FromLocation).ThenInclude(x => x.City)
+ .Include(x => x.ToLocation).ThenInclude(x => x.City)
+ .Include(x => x.Company)
+ .AsQueryable();
+
+ query = query.Where
+ (x => fromCityId == null || x.FromLocation.CityId == fromCityId.Value);
+
+ query = query.Where
+ (x => toCityId == null || x.ToLocation.CityId == toCityId.Value);
+
+ query = query.Where
+ (x => startDate == null || x.StartDateTime.Date == startDate.Value.Date);
+
+ query = query.Where
+ (x => endDate == null ||
+ (x.EndDateTime.HasValue && x.EndDateTime.Value == endDate.Value.Date));
+
+ return await query.ToListAsync();
+}
+```
+
+
+# Auto Mapper
+Auto Mapper simplifies mapping between aggregates and DTOs in both directions.
+
+
+- [ ] Config AutoMapper
+
+
+
+📂 Suggested Folder: Application/Mappers/Profiles
+
+```cs
+public class MappingProfile : Profile
+{
+ public MappingProfile()
+ {
+ CreateMap()
+ .ForMember(dest => dest.CompanyTitle,
+ opt => opt.MapFrom(src => src.Company.Title))
+
+ .ForMember(dest => dest.FromLocationTitle,
+ opt => opt.MapFrom(src => src.FromLocation.Title))
+
+ .ForMember(dest => dest.ToLocationTitle,
+ opt => opt.MapFrom(src => src.ToLocation.Title))
+
+ .ForMember(dest => dest.FromCityTitle,
+ opt => opt.MapFrom(src => src.FromLocation.City.Title))
+
+ .ForMember(dest => dest.ToCityTitle,
+ opt => opt.MapFrom(src => src.ToLocation.City.Title));
+
+ CreateMap();
+ }
+ }
+```
+
-# Repository Code (Ali)
-# AutoMapper (Ali)
# Result & Result Status (Amin)
# IService & Service (Amin)