Ajout de code, j'en suis à la partie application
This commit is contained in:
parent
659d263ea7
commit
5cd762fc3d
10
Liber_Incantamentum.Application/DTOs/Filter/MageDtoFilter.cs
Normal file
10
Liber_Incantamentum.Application/DTOs/Filter/MageDtoFilter.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace Liber_Incantamentum.Application.DTOs.Filter
|
||||
{
|
||||
public class MageDtoFilter
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public string? Name { get; set; }
|
||||
public string? Rank { get; set; }
|
||||
public string? Specialisation { get; set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
namespace Liber_Incantamentum.Application.DTOs.Filter
|
||||
{
|
||||
public class SpellDtoFilter
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public string? Name { get; set; }
|
||||
public string? Description { get; set; }
|
||||
public string? Type { get; set; }
|
||||
public DateTime? CreationDate { get; set; }
|
||||
public MageDtoFilter? Mage { get; set; }
|
||||
}
|
||||
}
|
||||
10
Liber_Incantamentum.Application/DTOs/General/MageDto.cs
Normal file
10
Liber_Incantamentum.Application/DTOs/General/MageDto.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace Liber_Incantamentum.Application.DTOs.General
|
||||
{
|
||||
public class MageDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public required string Name { get; set; }
|
||||
public required string Rank { get; set; }
|
||||
public required string Specialisation { get; set; }
|
||||
}
|
||||
}
|
||||
12
Liber_Incantamentum.Application/DTOs/General/SpellDto.cs
Normal file
12
Liber_Incantamentum.Application/DTOs/General/SpellDto.cs
Normal file
@ -0,0 +1,12 @@
|
||||
namespace Liber_Incantamentum.Application.DTOs.General
|
||||
{
|
||||
public class SpellDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public required string Name { get; set; }
|
||||
public required string Description { get; set; }
|
||||
public required string Type { get; set; }
|
||||
public required DateTime CreationDate { get; set; }
|
||||
public required MageDto Mage { get; set; }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
namespace Liber_Incantamentum.Application.Exceptions
|
||||
{
|
||||
public class ConflictException : Exception
|
||||
{
|
||||
public ConflictException() { }
|
||||
public ConflictException(string message) : base(message) { }
|
||||
public ConflictException(string? message, Exception? innerException) : base(message, innerException) { }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
namespace Liber_Incantamentum.Application.Exceptions
|
||||
{
|
||||
public class NotFoundException : Exception
|
||||
{
|
||||
public NotFoundException() { }
|
||||
public NotFoundException(string message) : base(message) { }
|
||||
public NotFoundException(string? message, Exception? innerException) : base(message, innerException) { }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
namespace Liber_Incantamentum.Application.Exceptions
|
||||
{
|
||||
public class ValidationException : Exception
|
||||
{
|
||||
public ValidationException() { }
|
||||
public ValidationException(string message) : base(message) { }
|
||||
public ValidationException(string? message, Exception? innerException) : base(message, innerException) { }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
using Liber_Incantamentum.Application.DTOs.Filter;
|
||||
using Liber_Incantamentum.Application.DTOs.General;
|
||||
|
||||
namespace Liber_Incantamentum.Application.Interfaces.Generals
|
||||
{
|
||||
public interface IMageService
|
||||
{
|
||||
Task<ICollection<MageDto>?> GetAllMageAsync(MageDtoFilter filter);
|
||||
Task<bool> UpdateMageAsync(MageDtoFilter dto);
|
||||
Task<bool> DeleteMageAsync(Guid id);
|
||||
Task<bool> AddMageAsync(MageDto dto);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
using Liber_Incantamentum.Application.DTOs.Filter;
|
||||
using Liber_Incantamentum.Application.DTOs.General;
|
||||
|
||||
namespace Liber_Incantamentum.Application.Interfaces.Generals
|
||||
{
|
||||
public interface ISpellService
|
||||
{
|
||||
Task<ICollection<SpellDto>?> GetAllSpellAsync(SpellDtoFilter filter);
|
||||
Task<bool> UpdateSpellAsync(SpellDtoFilter dto);
|
||||
Task<bool> DeleteSpellAsync(Guid id);
|
||||
Task<bool> AddSpellAsync(SpellDto dto);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,16 @@
|
||||
using Liber_Incantamentum.Application.DTOs.Filter;
|
||||
using Liber_Incantamentum.Application.DTOs.General;
|
||||
using Liber_Incantamentum.Domain.Entities;
|
||||
using Liber_Incantamentum.Domain.Filter;
|
||||
|
||||
namespace Liber_Incantamentum.Application.Interfaces.Mappings
|
||||
{
|
||||
public interface IMapper
|
||||
{
|
||||
MageFilter MapMageDtoFilterToMageFilterEntity(MageDtoFilter filter);
|
||||
Mage MapMageDtoToMageEntity(MageDto dto);
|
||||
ICollection<MageDto>? MapMageEntityCollectionToMageDtoCollection(ICollection<Mage>? task);
|
||||
SpellFilter MapSpellDtoFilterToSpellFilterEntity(SpellDtoFilter dto);
|
||||
Spell MapSpellDtoToSpellEntity(SpellDto dto);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
using Liber_Incantamentum.Application.DTOs.Filter;
|
||||
using Liber_Incantamentum.Application.DTOs.General;
|
||||
|
||||
namespace Liber_Incantamentum.Application.Interfaces.Validations
|
||||
{
|
||||
public interface IValidator
|
||||
{
|
||||
void ValidateGuid(Guid id);
|
||||
void ValidateMageDto(MageDto dto);
|
||||
void ValidateMageDtoFilter(MageDtoFilter filter);
|
||||
void ValidateSpellDto(SpellDto dto);
|
||||
void ValidateSpellDtoFilter(SpellDtoFilter filter);
|
||||
}
|
||||
}
|
||||
@ -7,9 +7,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="DTOs\" />
|
||||
<Folder Include="Interfaces\" />
|
||||
<Folder Include="Services\" />
|
||||
<ProjectReference Include="..\Liber_Incantamentum.Domain\Liber_Incantamentum.Domain.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@ -0,0 +1,46 @@
|
||||
using Liber_Incantamentum.Application.DTOs.Filter;
|
||||
using Liber_Incantamentum.Application.DTOs.General;
|
||||
using Liber_Incantamentum.Application.Interfaces.Generals;
|
||||
using Liber_Incantamentum.Application.Interfaces.Mappings;
|
||||
using Liber_Incantamentum.Application.Interfaces.Validations;
|
||||
using Liber_Incantamentum.Domain.Repositories;
|
||||
|
||||
namespace Liber_Incantamentum.Application.Services.Generals
|
||||
{
|
||||
public class MageService : IMageService
|
||||
{
|
||||
private IValidator _validator;
|
||||
private IMageRepository _mageRepository;
|
||||
private IMapper _mapper;
|
||||
public MageService(IMapper mapper, IMageRepository mageRepository, IValidator validator)
|
||||
{
|
||||
_mapper = mapper;
|
||||
_mageRepository = mageRepository;
|
||||
_validator = validator;
|
||||
}
|
||||
public async Task<bool> AddMageAsync(MageDto dto)
|
||||
{
|
||||
_validator.ValidateMageDto(dto);
|
||||
return await _mageRepository.AddMageAsync(_mapper.MapMageDtoToMageEntity(dto));
|
||||
}
|
||||
|
||||
public async Task<bool> DeleteMageAsync(Guid id)
|
||||
{
|
||||
_validator.ValidateGuid(id);
|
||||
return await _mageRepository.DeleteMageAsync(id);
|
||||
}
|
||||
|
||||
public async Task<ICollection<MageDto>?> GetAllMageAsync(MageDtoFilter filter)
|
||||
{
|
||||
_validator.ValidateMageDtoFilter(filter);
|
||||
return await _mapper.MapMageEntityCollectionToMageDtoCollection(_mageRepository.GetAllMageAsync(_mapper.MapMageDtoFilterToMageFilterEntity(filter)));
|
||||
}
|
||||
|
||||
public async Task<bool> UpdateMageAsync(MageDtoFilter dto)
|
||||
{
|
||||
_validator.ValidateMageDtoFilter(dto);
|
||||
await _mageRepository.UpdateMageAsync(_mapper.MapMageDtoFilterToMageFilterEntity(dto));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,57 @@
|
||||
using Liber_Incantamentum.Application.DTOs.Filter;
|
||||
using Liber_Incantamentum.Application.DTOs.General;
|
||||
using Liber_Incantamentum.Application.Interfaces.Generals;
|
||||
using Liber_Incantamentum.Application.Interfaces.Mappings;
|
||||
using Liber_Incantamentum.Application.Interfaces.Validations;
|
||||
using Liber_Incantamentum.Domain.Repositories;
|
||||
|
||||
namespace Liber_Incantamentum.Application.Services.Generals
|
||||
{
|
||||
public class SpellService : ISpellService
|
||||
{
|
||||
private IValidator _validator;
|
||||
private ISpellRepository _spellRepository;
|
||||
private IMapper _mapper;
|
||||
public SpellService(IValidator validator, ISpellRepository spellRepository, IMapper mapper)
|
||||
{
|
||||
_mapper = mapper;
|
||||
_validator = validator;
|
||||
_spellRepository = spellRepository;
|
||||
}
|
||||
public async Task<bool> AddSpellAsync(SpellDto dto)
|
||||
{
|
||||
if (_validator.ValidateSpellDto(dto))
|
||||
{
|
||||
await _spellRepository.AddSpellAsync(_mapper.MapSpellDtoToSpellEntity(dto));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public async Task<bool> DeleteSpellAsync(Guid id)
|
||||
{
|
||||
if (_validator.ValidateGuid(id))
|
||||
{
|
||||
await _spellRepository.DeleteSpellAsync(id);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public async Task<ICollection<SpellDto>?> GetAllSpellAsync(SpellDtoFilter filter)
|
||||
{
|
||||
if (_validator.ValidateSpellDtoFilter(filter))
|
||||
{
|
||||
await _spellRepository.GetAllSpellAsync(_mapper.MapSpellDtoFilterToSpellFilterEntity(filter));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public async Task<bool> UpdateSpellAsync(SpellDtoFilter filter)
|
||||
{
|
||||
if (_validator.ValidateSpellDtoFilter(filter))
|
||||
{
|
||||
await _spellRepository.UpdateSpellAsync(_mapper.MapSpellDtoFilterToSpellFilterEntity(filter));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
108
Liber_Incantamentum.Application/Services/Mappings/Mapper.cs
Normal file
108
Liber_Incantamentum.Application/Services/Mappings/Mapper.cs
Normal file
@ -0,0 +1,108 @@
|
||||
using Liber_Incantamentum.Application.DTOs.Filter;
|
||||
using Liber_Incantamentum.Application.DTOs.General;
|
||||
using Liber_Incantamentum.Application.Interfaces.Mappings;
|
||||
using Liber_Incantamentum.Domain.Entities;
|
||||
using Liber_Incantamentum.Domain.Filter;
|
||||
using System.Collections;
|
||||
|
||||
namespace Liber_Incantamentum.Application.Services.Mappings
|
||||
{
|
||||
public class Mapper : IMapper
|
||||
{
|
||||
public MageFilter MapMageDtoFilterToMageFilterEntity(MageDtoFilter filter)
|
||||
{
|
||||
MageFilter entity = new MageFilter()
|
||||
{
|
||||
Id = filter.Id,
|
||||
Name = filter.Name,
|
||||
Rank = filter.Rank,
|
||||
Specialisation = filter.Specialisation
|
||||
};
|
||||
return entity;
|
||||
}
|
||||
|
||||
public Mage MapMageDtoToMageEntity(MageDto dto)
|
||||
{
|
||||
Mage entity = new Mage()
|
||||
{
|
||||
Name = dto.Name,
|
||||
Rank = dto.Rank,
|
||||
Specialisation = dto.Specialisation
|
||||
};
|
||||
return entity;
|
||||
}
|
||||
public MageDto MapMageEntityToMageDto(Mage entity)
|
||||
{
|
||||
MageDto dto = new MageDto()
|
||||
{
|
||||
Name = entity.Name,
|
||||
Rank = entity.Rank,
|
||||
Specialisation = entity.Specialisation
|
||||
};
|
||||
return dto;
|
||||
}
|
||||
|
||||
public ICollection<MageDto>? MapMageEntityCollectionToMageDtoCollection(ICollection<Mage> collection)
|
||||
{
|
||||
ICollection<MageDto> MageDtoCollection = new List<MageDto>();
|
||||
foreach(var entity in collection)
|
||||
{
|
||||
MageDto dto = new MageDto()
|
||||
{
|
||||
Id = entity.Id,
|
||||
Name = entity.Name,
|
||||
Rank = entity.Rank,
|
||||
Specialisation = entity.Specialisation
|
||||
};
|
||||
MageDtoCollection.Add(dto);
|
||||
}
|
||||
return MageDtoCollection;
|
||||
}
|
||||
public ICollection<SpellDto>? MapSpellEntityCollectionToSpellDtoCollection(ICollection<Spell> collection)
|
||||
{
|
||||
ICollection<SpellDto> SpellDtoCollection = new List<SpellDto>();
|
||||
foreach (var entity in collection)
|
||||
{
|
||||
SpellDto dto = new SpellDto()
|
||||
{
|
||||
Id = entity.Id,
|
||||
Name = entity.Name,
|
||||
Description = entity.Description,
|
||||
Type = entity.Type,
|
||||
CreationDate = entity.CreationDate,
|
||||
Mage = MapMageEntityToMageDto(entity.Mage)
|
||||
};
|
||||
SpellDtoCollection.Add(dto);
|
||||
}
|
||||
return SpellDtoCollection;
|
||||
}
|
||||
|
||||
public SpellFilter MapSpellDtoFilterToSpellFilterEntity(SpellDtoFilter dto)
|
||||
{
|
||||
SpellFilter entity = new SpellFilter()
|
||||
{
|
||||
Id = dto.Id,
|
||||
Name = dto.Name,
|
||||
Description = dto.Description,
|
||||
Type = dto.Type,
|
||||
CreationDate = dto.CreationDate,
|
||||
Mage = MapMageDtoFilterToMageFilterEntity(dto.Mage)
|
||||
};
|
||||
return entity;
|
||||
}
|
||||
|
||||
public Spell MapSpellDtoToSpellEntity(SpellDto dto)
|
||||
{
|
||||
Spell entity = new Spell()
|
||||
{
|
||||
Id = dto.Id,
|
||||
Name = dto.Name,
|
||||
Description = dto.Description,
|
||||
Type = dto.Type,
|
||||
CreationDate = dto.CreationDate,
|
||||
Mage = MapMageDtoToMageEntity(dto.Mage)
|
||||
};
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
using Liber_Incantamentum.Application.DTOs.Filter;
|
||||
using Liber_Incantamentum.Application.DTOs.General;
|
||||
using Liber_Incantamentum.Application.Interfaces.Validations;
|
||||
|
||||
namespace Liber_Incantamentum.Application.Services.Validations
|
||||
{
|
||||
public class Validator : IValidator
|
||||
{
|
||||
public void ValidateGuid(Guid id)
|
||||
{
|
||||
if (id == Guid.Empty) throw new ArgumentNullException("The id received is null");
|
||||
}
|
||||
|
||||
public void ValidateMageDto(MageDto dto)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void ValidateMageDtoFilter(MageDtoFilter filter)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void ValidateSpellDto(SpellDto dto)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public void ValidateSpellDtoFilter(SpellDtoFilter filter)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
10
Liber_Incantamentum.Domain/Entities/Mage.cs
Normal file
10
Liber_Incantamentum.Domain/Entities/Mage.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace Liber_Incantamentum.Domain.Entities
|
||||
{
|
||||
public class Mage
|
||||
{
|
||||
public Guid Id { get; private set; }
|
||||
public required string Name { get; set; }
|
||||
public required string Rank { get; set; }
|
||||
public required string Specialisation { get; set; }
|
||||
}
|
||||
}
|
||||
12
Liber_Incantamentum.Domain/Entities/Spell.cs
Normal file
12
Liber_Incantamentum.Domain/Entities/Spell.cs
Normal file
@ -0,0 +1,12 @@
|
||||
namespace Liber_Incantamentum.Domain.Entities
|
||||
{
|
||||
public class Spell
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public required string Name { get; set; }
|
||||
public required string Description { get; set; }
|
||||
public required string Type { get; set; }
|
||||
public required DateTime CreationDate { get; set; }
|
||||
public required Mage Mage { get; set; }
|
||||
}
|
||||
}
|
||||
10
Liber_Incantamentum.Domain/Filter/MageFilter.cs
Normal file
10
Liber_Incantamentum.Domain/Filter/MageFilter.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace Liber_Incantamentum.Domain.Filter
|
||||
{
|
||||
public class MageFilter
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public string? Name { get; set; }
|
||||
public string? Rank { get; set; }
|
||||
public string? Specialisation { get; set; }
|
||||
}
|
||||
}
|
||||
12
Liber_Incantamentum.Domain/Filter/SpellFilter.cs
Normal file
12
Liber_Incantamentum.Domain/Filter/SpellFilter.cs
Normal file
@ -0,0 +1,12 @@
|
||||
namespace Liber_Incantamentum.Domain.Filter
|
||||
{
|
||||
public class SpellFilter
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public string? Name { get; set; }
|
||||
public string? Description { get; set; }
|
||||
public string? Type { get; set; }
|
||||
public DateTime? CreationDate { get; set; }
|
||||
public MageFilter? Mage { get; set; }
|
||||
}
|
||||
}
|
||||
@ -7,11 +7,15 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Entities\" />
|
||||
<Folder Include="Exceptions\" />
|
||||
<Folder Include="DomainEvents\" />
|
||||
<Folder Include="ValueObjects\" />
|
||||
<Folder Include="Repositories\" />
|
||||
<Compile Remove="DomainEvents\**" />
|
||||
<Compile Remove="Exceptions\**" />
|
||||
<Compile Remove="ValueObjects\**" />
|
||||
<EmbeddedResource Remove="DomainEvents\**" />
|
||||
<EmbeddedResource Remove="Exceptions\**" />
|
||||
<EmbeddedResource Remove="ValueObjects\**" />
|
||||
<None Remove="DomainEvents\**" />
|
||||
<None Remove="Exceptions\**" />
|
||||
<None Remove="ValueObjects\**" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
13
Liber_Incantamentum.Domain/Repositories/IMageRepository.cs
Normal file
13
Liber_Incantamentum.Domain/Repositories/IMageRepository.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using Liber_Incantamentum.Domain.Entities;
|
||||
using Liber_Incantamentum.Domain.Filter;
|
||||
|
||||
namespace Liber_Incantamentum.Domain.Repositories
|
||||
{
|
||||
public interface IMageRepository
|
||||
{
|
||||
Task<ICollection<Mage>?> GetAllMageAsync(MageFilter filter);
|
||||
Task<bool> UpdateMageAsync(MageFilter filter);
|
||||
Task<bool> DeleteMageAsync(Guid id);
|
||||
Task<bool> AddMageAsync(Mage entity);
|
||||
}
|
||||
}
|
||||
13
Liber_Incantamentum.Domain/Repositories/ISpellRepository.cs
Normal file
13
Liber_Incantamentum.Domain/Repositories/ISpellRepository.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using Liber_Incantamentum.Domain.Entities;
|
||||
using Liber_Incantamentum.Domain.Filter;
|
||||
|
||||
namespace Liber_Incantamentum.Domain.Repositories
|
||||
{
|
||||
public interface ISpellRepository
|
||||
{
|
||||
Task<ICollection<Spell>?> GetAllSpellAsync(SpellFilter filter);
|
||||
Task<bool> UpdateSpellAsync(SpellFilter filter);
|
||||
Task<bool> DeleteSpellAsync(Guid id);
|
||||
Task<bool> AddSpellAsync(Spell entity);
|
||||
}
|
||||
}
|
||||
@ -7,8 +7,12 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Data\" />
|
||||
<Folder Include="Repositories\" />
|
||||
<Compile Remove="Data\**" />
|
||||
<Compile Remove="Repositories\**" />
|
||||
<EmbeddedResource Remove="Data\**" />
|
||||
<EmbeddedResource Remove="Repositories\**" />
|
||||
<None Remove="Data\**" />
|
||||
<None Remove="Repositories\**" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@ -7,8 +7,12 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="IntegrationTests\" />
|
||||
<Folder Include="UnitTests\" />
|
||||
<Compile Remove="IntegrationTests\**" />
|
||||
<Compile Remove="UnitTests\**" />
|
||||
<EmbeddedResource Remove="IntegrationTests\**" />
|
||||
<EmbeddedResource Remove="UnitTests\**" />
|
||||
<None Remove="IntegrationTests\**" />
|
||||
<None Remove="UnitTests\**" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@ -7,12 +7,18 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.5" />
|
||||
<Compile Remove="Controllers\**" />
|
||||
<Compile Remove="Middlewares\**" />
|
||||
<Content Remove="Controllers\**" />
|
||||
<Content Remove="Middlewares\**" />
|
||||
<EmbeddedResource Remove="Controllers\**" />
|
||||
<EmbeddedResource Remove="Middlewares\**" />
|
||||
<None Remove="Controllers\**" />
|
||||
<None Remove="Middlewares\**" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Controllers\" />
|
||||
<Folder Include="Middlewares\" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.5" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user