Repository
Open IDatingRepository and add new signature for GetLike.
Task<Like> GetLike(int userId, int recipientId);
Open DatingRepository and implement GetLike.
public async Task<Like> GetLike(int userId, int recipientId)
{
return await _context.Likes
.FirstOrDefaultAsync(x => x.LikerId == userId && x.LikeeId == recipientId);
}
Controller
Open UsersController and add a new POST method LikeUser
[HttpPost("{id}/like/{recipientId}")]
public async Task<IActionResult> LikeUser(int id, int recipientId) {
var currentUserId = int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value);
if (id != currentUserId)
{
return Unauthorized();
}
var existingLike = await _repo.GetLike(id, recipientId);
if (existingLike != null)
{
return BadRequest("You already like this user");
}
if(await _repo.GetUser(recipientId) == null) {
return NotFound();
}
var like = new Like { LikerId = id, LikeeId = recipientId};
_repo.Add<Like>(like);
if (await _repo.SaveAll())
{
return Ok();
}
return BadRequest();
}
Test in Postman
Create a new POST to this url
{{url}}/api/users/1/like/12
To create a new Like from the user 1 to the user 12.
The first time we send the request we will receive a 200 and if we send the request again we will receive a 400.