Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .vs/NZWalks/DesignTimeBuild/.dtbcache.v2
Binary file not shown.
Binary file modified .vs/NZWalks/v17/.suo
Binary file not shown.
208 changes: 164 additions & 44 deletions .vs/NZWalks/v17/DocumentLayout.json

Large diffs are not rendered by default.

48 changes: 26 additions & 22 deletions NZWalks.API/Controllers/RegionsController.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@

using AutoMapper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using NZWalks.API.Data;
using NZWalks.API.CustomActionFilters;
using NZWalks.API.Models.Domain;
using NZWalks.API.Models.DTO;
using NZWalks.API.Repositories;
Expand All @@ -19,15 +18,15 @@ public class RegionsController : ControllerBase

public RegionsController(IRegionRepository regionRepository, IMapper mapper)
{

this.regionRepository = regionRepository;
this.mapper = mapper;
}

// GET ALL REGIONS
// GET: https://localhost:portnumber/api/regions
[HttpGet]

public async Task<IActionResult> GetAll()
{
// Get data from Database - Domain models
Expand Down Expand Up @@ -79,44 +78,49 @@ public async Task<IActionResult> GetById([FromRoute] Guid id)
// POST To Create New Region
// POST: https://localhost:portnumber/api/regions
[HttpPost]
// [ValidateModel]
[ValidateModel]
//[Authorize(Roles = "Writer")]
public async Task<IActionResult> Create([FromBody] AddRegionRequestDto addRegionRequestDto)
{
// Map or Convert DTO to Domain Model
var regionDomainModel = mapper.Map<Region>(addRegionRequestDto);

// Map or Convert DTO to Domain Model
var regionDomainModel = mapper.Map<Region>(addRegionRequestDto);

// Use Domain Model to create Region
regionDomainModel = await regionRepository.CreateAsync(regionDomainModel);
// Use Domain Model to create Region
regionDomainModel = await regionRepository.CreateAsync(regionDomainModel);

// Map Domain model back to DTO
var regionDto = mapper.Map<RegionDto>(regionDomainModel);
// Map Domain model back to DTO
var regionDto = mapper.Map<RegionDto>(regionDomainModel);

return CreatedAtAction(nameof(GetById), new { id = regionDto.Id }, regionDto);


return CreatedAtAction(nameof(GetById), new { id = regionDto.Id }, regionDto);
}


// Update region
// PUT: https://localhost:portnumber/api/regions/{id}
[HttpPut]
[Route("{id:Guid}")]
// [ValidateModel]
[ValidateModel]
//[Authorize(Roles = "Writer")]
public async Task<IActionResult> Update([FromRoute] Guid id, [FromBody] UpdateRegionRequestDto updateRegionRequestDto)
{

// Map DTO to Domain Model
var regionDomainModel = mapper.Map<Region>(updateRegionRequestDto);

// Map DTO to Domain Model
var regionDomainModel = mapper.Map<Region>(updateRegionRequestDto);
// Check if region exists
regionDomainModel = await regionRepository.UpdateAsync(id, regionDomainModel);

// Check if region exists
regionDomainModel = await regionRepository.UpdateAsync(id, regionDomainModel);
if (regionDomainModel == null)
{
return NotFound();
}

if (regionDomainModel == null)
{
return NotFound();
}
return Ok(mapper.Map<RegionDto>(regionDomainModel));


return Ok(mapper.Map<RegionDto>(regionDomainModel));
}


Expand Down
108 changes: 4 additions & 104 deletions NZWalks.API/Controllers/WalksController.cs
Original file line number Diff line number Diff line change
@@ -1,112 +1,12 @@
using AutoMapper;
using Microsoft.AspNetCore.Mvc;
using NZWalks.API.Models.Domain;
using NZWalks.API.Models.DTO;
using NZWalks.API.Repositories;
using System.Net;
using Microsoft.AspNetCore.Mvc;

namespace NZWalks.API.Controllers
{
// /api/walks
[Route("api/[controller]")]
[ApiController]
public class WalksController : ControllerBase
public class WalksController : Controller
{
private readonly IMapper mapper;
private readonly IWalkRepository walkRepository;

public WalksController(IMapper mapper, IWalkRepository walkRepository)
{
this.mapper = mapper;
this.walkRepository = walkRepository;
}


// CREATE Walk
// POST: /api/walks
[HttpPost]

public async Task<IActionResult> Create([FromBody] AddWalkRequestDto addWalkRequestDto)
{
// Map DTO to Domain Model
var walkDomainModel = mapper.Map<Walk>(addWalkRequestDto);

await walkRepository.CreateAsync(walkDomainModel);

// Map Domain model to DTO
return Ok(mapper.Map<WalkDto>(walkDomainModel));
}


// GET Walks
// GET: /api/walks?filterOn=Name&filterQuery=Track&sortBy=Name&isAscending=true&pageNumber=1&pageSize=10
[HttpGet]
public async Task<IActionResult> GetAll([FromQuery] string? filterOn, [FromQuery] string? filterQuery,
[FromQuery] string? sortBy, [FromQuery] bool? isAscending,
[FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 1000)
{
var walksDomainModel = await walkRepository.GetAllAsync(filterOn, filterQuery, sortBy,
isAscending ?? true, pageNumber, pageSize);

// Map Domain Model to DTO
return Ok(mapper.Map<List<WalkDto>>(walksDomainModel));
}

// Get Walk By Id
// GET: /api/Walks/{id}
[HttpGet]
[Route("{id:Guid}")]
public async Task<IActionResult> GetById([FromRoute] Guid id)
public IActionResult Index()
{
var walkDomainModel = await walkRepository.GetByIdAsync(id);

if (walkDomainModel == null)
{
return NotFound();
}

// Map Domain Model to DTO
return Ok(mapper.Map<WalkDto>(walkDomainModel));
}

// Update Walk By Id
// PUT: /api/Walks/{id}
[HttpPut]
[Route("{id:Guid}")]

public async Task<IActionResult> Update([FromRoute] Guid id, UpdateWalkRequestDto updateWalkRequestDto)
{

// Map DTO to Domain Model
var walkDomainModel = mapper.Map<Walk>(updateWalkRequestDto);

walkDomainModel = await walkRepository.UpdateAsync(id, walkDomainModel);

if (walkDomainModel == null)
{
return NotFound();
}

// Map Domain Model to DTO
return Ok(mapper.Map<WalkDto>(walkDomainModel));
}


// Delete a Walk By Id
// DELETE: /api/Walks/{id}
[HttpDelete]
[Route("{id:Guid}")]
public async Task<IActionResult> Delete([FromRoute] Guid id)
{
var deletedWalkDomainModel = await walkRepository.DeleteAsync(id);

if (deletedWalkDomainModel == null)
{
return NotFound();
}

// Map Domain Model to DTO
return Ok(mapper.Map<WalkDto>(deletedWalkDomainModel));
return View();
}
}
}
19 changes: 19 additions & 0 deletions NZWalks.API/CustomActionFilters/ValidateModelAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Diagnostics.CodeAnalysis;

namespace NZWalks.API.CustomActionFilters
{
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if(context.ModelState.IsValid == false)
{
context.Result = new BadRequestResult();
}

}

}
}
116 changes: 116 additions & 0 deletions NZWalks.API/Migrations/WalksController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
using AutoMapper;
using Microsoft.AspNetCore.Mvc;
using NZWalks.API.CustomActionFilters;
using NZWalks.API.Models.Domain;
using NZWalks.API.Models.DTO;
using NZWalks.API.Repositories;

namespace NZWalks.API.Controllers
{
// /api/walks
[Route("api/[controller]")]
[ApiController]
public class WalksController : ControllerBase
{
private readonly IMapper mapper;
private readonly IWalkRepository walkRepository;

public WalksController(IMapper mapper, IWalkRepository walkRepository)
{
this.mapper = mapper;
this.walkRepository = walkRepository;
}


// CREATE Walk
// POST: /api/walks
[HttpPost]
[ValidateModel]
public async Task<IActionResult> Create([FromBody] AddWalkRequestDto addWalkRequestDto)
{

// Map DTO to Domain Model
var walkDomainModel = mapper.Map<Walk>(addWalkRequestDto);

await walkRepository.CreateAsync(walkDomainModel);

// Map Domain model to DTO
return Ok(mapper.Map<WalkDto>(walkDomainModel));


}


[HttpGet]
public async Task<IActionResult> GetAll([FromQuery] string? filterColumnName, [FromQuery] string? filterInputValue,
[FromQuery] string? sortByColumnName, [FromQuery] bool? isAscending,
[FromQuery] int pageNumber =1, [FromQuery] int pageSize =1000)
{
var walksDomainModel = await walkRepository.GetAllAsync(filterColumnName, filterInputValue, sortByColumnName, isAscending ?? true, pageNumber, pageSize);

// Map Domain Model to DTO
return Ok(mapper.Map<List<WalkDto>>(walksDomainModel));

}


// Get Walk By Id
// GET: /api/Walks/{id}
[HttpGet]
[Route("{id:Guid}")]
public async Task<IActionResult> GetById([FromRoute] Guid id)
{
var walkDomainModel = await walkRepository.GetByIdAsync(id);

if (walkDomainModel == null)
{
return NotFound();
}

// Map Domain Model to DTO
return Ok(mapper.Map<WalkDto>(walkDomainModel));
}

// Update Walk By Id
// PUT: /api/Walks/{id}
[HttpPut]
[Route("{id:Guid}")]
[ValidateModel]

public async Task<IActionResult> Update([FromRoute] Guid id, UpdateWalkRequestDto updateWalkRequestDto)
{

// Map DTO to Domain Model
var walkDomainModel = mapper.Map<Walk>(updateWalkRequestDto);

walkDomainModel = await walkRepository.UpdateAsync(id, walkDomainModel);

if (walkDomainModel == null)
{
return NotFound();
}

// Map Domain Model to DTO
return Ok(mapper.Map<WalkDto>(walkDomainModel));

}


// Delete a Walk By Id
// DELETE: /api/Walks/{id}
[HttpDelete]
[Route("{id:Guid}")]
public async Task<IActionResult> Delete([FromRoute] Guid id)
{
var deletedWalkDomainModel = await walkRepository.DeleteAsync(id);

if (deletedWalkDomainModel == null)
{
return NotFound();
}

// Map Domain Model to DTO
return Ok(mapper.Map<WalkDto>(deletedWalkDomainModel));
}
}
}
4 changes: 4 additions & 0 deletions NZWalks.API/NZWalks.API.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,16 @@

<ItemGroup>
<PackageReference Include="AutoMapper" Version="13.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="7.4.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.4.0" />
</ItemGroup>

</Project>
4 changes: 2 additions & 2 deletions NZWalks.API/NZWalks.API.csproj.user
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ActiveDebugProfile>https</ActiveDebugProfile>
<Controller_SelectedScaffolderID>ApiControllerEmptyScaffolder</Controller_SelectedScaffolderID>
<Controller_SelectedScaffolderCategoryPath>root/Common/Api</Controller_SelectedScaffolderCategoryPath>
<Controller_SelectedScaffolderID>MvcControllerEmptyScaffolder</Controller_SelectedScaffolderID>
<Controller_SelectedScaffolderCategoryPath>root/Common/MVC/Controller</Controller_SelectedScaffolderCategoryPath>
</PropertyGroup>
</Project>
Loading