Skip to content
Merged
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
43 changes: 21 additions & 22 deletions examples/HttpApiSimulator/Contracts/User.cs
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
namespace HttpApiSimulator.Contracts
namespace HttpApiSimulator.Contracts;

public class User
{
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}

public class UpdateUserReq
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public class UpdateUserReq
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }

public User ToUser(int id = 0)
public User ToUser(int id = 0)
{
return new User
{
return new User
{
Id = id,
FirstName = this.FirstName,
LastName = this.LastName,
Age = this.Age
};
}
Id = id,
FirstName = this.FirstName,
LastName = this.LastName,
Age = this.Age
};
}
}
Original file line number Diff line number Diff line change
@@ -1,50 +1,49 @@
using System.Collections.Concurrent;
using Microsoft.AspNetCore.Mvc;

namespace HttpApiSimulator.Controllers
namespace HttpApiSimulator.Controllers;

[Route("api/[controller]")]
[ApiController]
public class CookiesAuthenticationController : ControllerBase
{
[Route("api/[controller]")]
[ApiController]
public class CookiesAuthenticationController : ControllerBase
{
private static readonly ConcurrentBag<Guid> GeneratedCookies = new();
private static readonly ConcurrentBag<Guid> GeneratedCookies = new();

public CookiesAuthenticationController() { }
public CookiesAuthenticationController() { }

[HttpPost]
public IActionResult Login([FromBody] LoginDto loginDto)
{
var authCookie = Guid.NewGuid();
[HttpPost]
public IActionResult Login([FromBody] LoginDto loginDto)
{
var authCookie = Guid.NewGuid();

GeneratedCookies.Add(authCookie);
Response.Cookies.Append("auth_hash_cookie", authCookie.ToString());
GeneratedCookies.Add(authCookie);
Response.Cookies.Append("auth_hash_cookie", authCookie.ToString());

return Ok("Cookies were added.");
}
return Ok("Cookies were added.");
}

[HttpGet]
public IActionResult GetData()
{
var authCookie = Request.Cookies["auth_hash_cookie"];
var convertResult = Guid.TryParse(authCookie, out Guid guidAuthCookie);

[HttpGet]
public IActionResult GetData()
if (convertResult)
{
var authCookie = Request.Cookies["auth_hash_cookie"];
var convertResult = Guid.TryParse(authCookie, out Guid guidAuthCookie);

if (convertResult)
{
if (GeneratedCookies.TryPeek(out guidAuthCookie))
return Ok("Authentication successful.");
else
return Unauthorized("Authentication failed. The auth cookie is wrong.");
}
if (GeneratedCookies.TryPeek(out guidAuthCookie))
return Ok("Authentication successful.");
else
{
return Unauthorized("The auth cookie is not valid.");
}
return Unauthorized("Authentication failed. The auth cookie is wrong.");
}
else
{
return Unauthorized("The auth cookie is not valid.");
}
}
}

public class LoginDto
{
public string Login { get; set; }
public string Password { get; set; }
}
public class LoginDto
{
public string Login { get; set; }
public string Password { get; set; }
}
31 changes: 15 additions & 16 deletions examples/HttpApiSimulator/Controllers/DataBasesController.cs
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
using HttpApiSimulator.Infra.DAL;
using Microsoft.AspNetCore.Mvc;

namespace HttpApiSimulator.Controllers
namespace HttpApiSimulator.Controllers;

[Route("api/[controller]")]
[ApiController]
public class DataBasesController : ControllerBase
{
[Route("api/[controller]")]
[ApiController]
public class DataBasesController : ControllerBase
{
private readonly IUserRepository _repository;
private readonly IUserRepository _repository;

public DataBasesController(IUserRepository repository)
{
_repository = repository;
}
public DataBasesController(IUserRepository repository)
{
_repository = repository;
}

[HttpPut]
public void PrepareDB()
{
_repository.DeleTable();
_repository.CreateDB();
}
[HttpPut]
public void PrepareDB()
{
_repository.DeleTable();
_repository.CreateDB();
}
}
55 changes: 27 additions & 28 deletions examples/HttpApiSimulator/Controllers/UsersController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,37 @@
using HttpApiSimulator.Infra.DAL;
using Microsoft.AspNetCore.Mvc;

namespace HttpApiSimulator.Controllers
namespace HttpApiSimulator.Controllers;

[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
private readonly IUserRepository _repository;
private readonly IUserRepository _repository;

public UsersController(IUserRepository repository)
{
_repository = repository;
}
public UsersController(IUserRepository repository)
{
_repository = repository;
}

[HttpGet("{id}")]
public async Task<IResult> Get(int id)
{
var user = await _repository.GetById(id);
return user == null
? Results.NotFound()
: Results.Ok(user);
}
[HttpGet("{id}")]
public async Task<IResult> Get(int id)
{
var user = await _repository.GetById(id);
return user == null
? Results.NotFound()
: Results.Ok(user);
}

[HttpPost]
public async Task<bool> Post([FromBody] User user)
{
return await _repository.Update(user);
}
[HttpPost]
public async Task<bool> Post([FromBody] User user)
{
return await _repository.Update(user);
}

[HttpPut("{id}")]
public async Task<bool> Put(int id, [FromBody] UpdateUserReq request)
{
return await _repository.Update(request.ToUser(id));
}
[HttpPut("{id}")]
public async Task<bool> Put(int id, [FromBody] UpdateUserReq request)
{
return await _repository.Update(request.ToUser(id));
}
}
15 changes: 7 additions & 8 deletions examples/HttpApiSimulator/Infra/DAL/IUserRepository.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
using HttpApiSimulator.Contracts;

namespace HttpApiSimulator.Infra.DAL
namespace HttpApiSimulator.Infra.DAL;

public interface IUserRepository
{
public interface IUserRepository
{
ValueTask<User> GetById(int id);
ValueTask<bool> Update(User user);
void CreateDB();
void DeleTable();
}
ValueTask<User> GetById(int id);
ValueTask<bool> Update(User user);
void CreateDB();
void DeleTable();
}
61 changes: 30 additions & 31 deletions examples/HttpApiSimulator/Infra/DAL/RedisRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,41 @@
using HttpApiSimulator.Contracts;
using StackExchange.Redis;

namespace HttpApiSimulator.Infra.DAL
namespace HttpApiSimulator.Infra.DAL;

public class RedisRepository: IUserRepository
{
public class RedisRepository: IUserRepository
{
private ConnectionMultiplexer _redis;
private IDatabase _database;
private RedisSettings _settings;
private ConnectionMultiplexer _redis;
private IDatabase _database;
private RedisSettings _settings;

public RedisRepository(RedisSettings settings)
{
_settings = settings;
_redis = ConnectionMultiplexer.Connect(_settings.ConnectionString);
}
public RedisRepository(RedisSettings settings)
{
_settings = settings;
_redis = ConnectionMultiplexer.Connect(_settings.ConnectionString);
}

public void CreateDB()
{
_database = _redis.GetDatabase();
}
public void CreateDB()
{
_database = _redis.GetDatabase();
}

public void DeleTable()
{
var server = _redis.GetServer(_settings.ServerName);
server.FlushDatabase();
}
public void DeleTable()
{
var server = _redis.GetServer(_settings.ServerName);
server.FlushDatabase();
}

public async ValueTask<User> GetById(int id)
{
byte[] data = await _database.StringGetAsync(id.ToString());
var user = data != null ? JsonSerializer.Deserialize<User>(data) : null;
return user;
}
public async ValueTask<User> GetById(int id)
{
byte[] data = await _database.StringGetAsync(id.ToString());
var user = data != null ? JsonSerializer.Deserialize<User>(data) : null;
return user;
}

public ValueTask<bool> Update(User user)
{
var data = JsonSerializer.SerializeToUtf8Bytes(user);
return new ValueTask<bool>(_database.StringSetAsync(user.Id.ToString(), data));
}
public ValueTask<bool> Update(User user)
{
var data = JsonSerializer.SerializeToUtf8Bytes(user);
return new ValueTask<bool>(_database.StringSetAsync(user.Id.ToString(), data));
}
}
Loading