add Mapping-Profiles

This commit is contained in:
beo3000 2025-12-23 11:13:48 +01:00
parent 76c5d302ac
commit be0fa19371
7 changed files with 240 additions and 2 deletions

View File

@ -328,7 +328,7 @@ NavMenu.razor:
| ✓ | A3 | Foundation | DTOs | 5 DTO-Dateien |
| ✓ | A4 | Foundation | Service Interfaces | 5 Service-Interface-Dateien |
| ✓ | A5 | Foundation | Service Implementations | 5 Service-Dateien |
| | A6 | Foundation | AutoMapper Profiles | 5 Mapping-Dateien |
| | A6 | Foundation | AutoMapper Profiles | 5 Mapping-Dateien |
| ☐ | A7 | Foundation | DI Registration | 2 DI-Dateien ändern |
| ☐ | **B1** | **Clubs** | **ClubState Fluxor** | **4 State-Dateien** |
| ☐ | **B2** | **Clubs** | **Club Pages - ERSTES TESTBARES MVP** | **1 Razor** |
@ -417,7 +417,7 @@ NavMenu.razor:
5. `src/Koogle.Application/Services/PersonExpenseService.cs`
**Dependencies:** Repository, ICurrentClubContext, ICurrentUserService, IMapper
**Business Logic:** ClubId-Injection, Audit-Felder, Validierung
**Business Logic:** ClubId-Injection, Audit-Felder, Validierung (mittels FluentValidation)
---

View File

@ -6,8 +6,15 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Compile Remove="NewFolder\**" />
<EmbeddedResource Remove="NewFolder\**" />
<None Remove="NewFolder\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AutoMapper" Version="15.1.0" />
<PackageReference Include="FluentValidation" Version="12.1.1" />
</ItemGroup>
<ItemGroup>
@ -15,4 +22,8 @@
<ProjectReference Include="..\Koogle.Infrastructure\Koogle.Infrastructure.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="Validators\" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,37 @@
using AutoMapper;
using Koogle.Application.DTOs;
using Koogle.Domain.Entities;
namespace Koogle.Application.Mapping;
/// <summary>
/// AutoMapper profile for Club entity mappings.
/// </summary>
public class ClubMappingProfile : Profile
{
/// <summary>
/// Initializes Club entity to DTO mappings.
/// </summary>
public ClubMappingProfile()
{
// Club -> ClubDto
CreateMap<Club, ClubDto>();
// CreateClubDto -> Club (for creation)
CreateMap<CreateClubDto, Club>()
.ForMember(d => d.Id, o => o.Ignore())
.ForMember(d => d.CreatedAt, o => o.Ignore())
.ForMember(d => d.CreatedById, o => o.Ignore())
.ForMember(d => d.ModifiedAt, o => o.Ignore())
.ForMember(d => d.ModifiedById, o => o.Ignore())
.ForMember(d => d.IsDeleted, o => o.Ignore());
// UpdateClubDto -> Club (for updates)
CreateMap<UpdateClubDto, Club>()
.ForMember(d => d.CreatedAt, o => o.Ignore())
.ForMember(d => d.CreatedById, o => o.Ignore())
.ForMember(d => d.ModifiedAt, o => o.Ignore())
.ForMember(d => d.ModifiedById, o => o.Ignore())
.ForMember(d => d.IsDeleted, o => o.Ignore());
}
}

View File

@ -0,0 +1,56 @@
using AutoMapper;
using Koogle.Application.DTOs;
using Koogle.Domain.Entities;
namespace Koogle.Application.Mapping;
/// <summary>
/// AutoMapper profile for Day entity mappings.
/// </summary>
public class DayMappingProfile : Profile
{
/// <summary>
/// Initializes Day entity to DTO mappings.
/// </summary>
public DayMappingProfile()
{
// Day -> DayDto
CreateMap<Day, DayDto>()
.ForMember(d => d.ClubName, o => o.MapFrom(s => s.Club != null ? s.Club.Name : null))
.ForMember(d => d.ParticipantCount, o => o.MapFrom(s => s.DayPersons.Count))
.ForMember(d => d.Participants, o => o.MapFrom(s => s.DayPersons));
// Day -> DaySummaryDto
CreateMap<Day, DaySummaryDto>()
.ForMember(d => d.ParticipantCount, o => o.MapFrom(s => s.DayPersons.Count));
// DayPerson -> DayParticipantDto
CreateMap<DayPerson, DayParticipantDto>()
.ForMember(d => d.PersonName, o => o.MapFrom(s => s.Person != null ? s.Person.Name : string.Empty))
.ForMember(d => d.PersonStatus, o => o.MapFrom(s => s.Person != null ? s.Person.PersonStatus : default));
// CreateDayDto -> Day (for creation)
CreateMap<CreateDayDto, Day>()
.ForMember(d => d.Id, o => o.Ignore())
.ForMember(d => d.Status, o => o.Ignore())
.ForMember(d => d.ClubId, o => o.Ignore())
.ForMember(d => d.Club, o => o.Ignore())
.ForMember(d => d.DayPersons, o => o.Ignore())
.ForMember(d => d.CreatedAt, o => o.Ignore())
.ForMember(d => d.CreatedById, o => o.Ignore())
.ForMember(d => d.ModifiedAt, o => o.Ignore())
.ForMember(d => d.ModifiedById, o => o.Ignore())
.ForMember(d => d.IsDeleted, o => o.Ignore());
// UpdateDayDto -> Day (for updates)
CreateMap<UpdateDayDto, Day>()
.ForMember(d => d.ClubId, o => o.Ignore())
.ForMember(d => d.Club, o => o.Ignore())
.ForMember(d => d.DayPersons, o => o.Ignore())
.ForMember(d => d.CreatedAt, o => o.Ignore())
.ForMember(d => d.CreatedById, o => o.Ignore())
.ForMember(d => d.ModifiedAt, o => o.Ignore())
.ForMember(d => d.ModifiedById, o => o.Ignore())
.ForMember(d => d.IsDeleted, o => o.Ignore());
}
}

View File

@ -0,0 +1,44 @@
using AutoMapper;
using Koogle.Application.DTOs;
using Koogle.Domain.Entities;
namespace Koogle.Application.Mapping;
/// <summary>
/// AutoMapper profile for Expense entity mappings.
/// </summary>
public class ExpenseMappingProfile : Profile
{
/// <summary>
/// Initializes Expense entity to DTO mappings.
/// </summary>
public ExpenseMappingProfile()
{
// Expense -> ExpenseDto
CreateMap<Expense, ExpenseDto>();
// Expense -> ExpenseSummaryDto
CreateMap<Expense, ExpenseSummaryDto>();
// CreateExpenseDto -> Expense (for creation)
CreateMap<CreateExpenseDto, Expense>()
.ForMember(d => d.Id, o => o.Ignore())
.ForMember(d => d.ClubId, o => o.Ignore())
.ForMember(d => d.Club, o => o.Ignore())
.ForMember(d => d.CreatedAt, o => o.Ignore())
.ForMember(d => d.CreatedById, o => o.Ignore())
.ForMember(d => d.ModifiedAt, o => o.Ignore())
.ForMember(d => d.ModifiedById, o => o.Ignore())
.ForMember(d => d.IsDeleted, o => o.Ignore());
// UpdateExpenseDto -> Expense (for updates)
CreateMap<UpdateExpenseDto, Expense>()
.ForMember(d => d.ClubId, o => o.Ignore())
.ForMember(d => d.Club, o => o.Ignore())
.ForMember(d => d.CreatedAt, o => o.Ignore())
.ForMember(d => d.CreatedById, o => o.Ignore())
.ForMember(d => d.ModifiedAt, o => o.Ignore())
.ForMember(d => d.ModifiedById, o => o.Ignore())
.ForMember(d => d.IsDeleted, o => o.Ignore());
}
}

View File

@ -0,0 +1,41 @@
using AutoMapper;
using Koogle.Application.DTOs;
using Koogle.Domain.Entities;
namespace Koogle.Application.Mapping;
/// <summary>
/// AutoMapper profile for PersonExpense entity mappings.
/// </summary>
public class PersonExpenseMappingProfile : Profile
{
/// <summary>
/// Initializes PersonExpense entity to DTO mappings.
/// </summary>
public PersonExpenseMappingProfile()
{
// PersonExpense -> PersonExpenseDto
CreateMap<PersonExpense, PersonExpenseDto>()
.ForMember(d => d.PersonName, o => o.MapFrom(s => s.Person != null ? s.Person.Name : string.Empty))
.ForMember(d => d.DayPostDate, o => o.MapFrom(s => s.Day != null ? s.Day.PostDate : default));
// CreatePersonExpenseDto -> PersonExpense (for creation)
CreateMap<CreatePersonExpenseDto, PersonExpense>()
.ForMember(d => d.Id, o => o.Ignore())
.ForMember(d => d.ClubId, o => o.Ignore())
.ForMember(d => d.Name, o => o.Ignore())
.ForMember(d => d.ExpenseType, o => o.Ignore())
.ForMember(d => d.PersonExpenseStatus, o => o.Ignore())
.ForMember(d => d.AssignedById, o => o.Ignore())
.ForMember(d => d.Person, o => o.Ignore())
.ForMember(d => d.Day, o => o.Ignore())
.ForMember(d => d.Expense, o => o.Ignore())
.ForMember(d => d.Game, o => o.Ignore())
.ForMember(d => d.Club, o => o.Ignore())
.ForMember(d => d.CreatedAt, o => o.Ignore())
.ForMember(d => d.CreatedById, o => o.Ignore())
.ForMember(d => d.ModifiedAt, o => o.Ignore())
.ForMember(d => d.ModifiedById, o => o.Ignore())
.ForMember(d => d.IsDeleted, o => o.Ignore());
}
}

View File

@ -0,0 +1,49 @@
using AutoMapper;
using Koogle.Application.DTOs;
using Koogle.Domain.Entities;
namespace Koogle.Application.Mapping;
/// <summary>
/// AutoMapper profile for Person entity mappings.
/// </summary>
public class PersonMappingProfile : Profile
{
/// <summary>
/// Initializes Person entity to DTO mappings.
/// </summary>
public PersonMappingProfile()
{
// Person -> PersonDto
CreateMap<Person, PersonDto>()
.ForMember(d => d.ClubName, o => o.MapFrom(s => s.Club != null ? s.Club.Name : null));
// Person -> PersonSummaryDto
CreateMap<Person, PersonSummaryDto>();
// CreatePersonDto -> Person (for creation)
CreateMap<CreatePersonDto, Person>()
.ForMember(d => d.Id, o => o.Ignore())
.ForMember(d => d.ClubId, o => o.Ignore())
.ForMember(d => d.Club, o => o.Ignore())
.ForMember(d => d.Expenses, o => o.Ignore())
.ForMember(d => d.DayPersons, o => o.Ignore())
.ForMember(d => d.CreatedAt, o => o.Ignore())
.ForMember(d => d.CreatedById, o => o.Ignore())
.ForMember(d => d.ModifiedAt, o => o.Ignore())
.ForMember(d => d.ModifiedById, o => o.Ignore())
.ForMember(d => d.IsDeleted, o => o.Ignore());
// UpdatePersonDto -> Person (for updates)
CreateMap<UpdatePersonDto, Person>()
.ForMember(d => d.ClubId, o => o.Ignore())
.ForMember(d => d.Club, o => o.Ignore())
.ForMember(d => d.Expenses, o => o.Ignore())
.ForMember(d => d.DayPersons, o => o.Ignore())
.ForMember(d => d.CreatedAt, o => o.Ignore())
.ForMember(d => d.CreatedById, o => o.Ignore())
.ForMember(d => d.ModifiedAt, o => o.Ignore())
.ForMember(d => d.ModifiedById, o => o.Ignore())
.ForMember(d => d.IsDeleted, o => o.Ignore());
}
}