fix: added Token reaccessing

This commit is contained in:
Pavel-Savely Savianok 2025-07-27 21:36:26 +03:00
parent 171757705a
commit dd1364f744
3 changed files with 42 additions and 15 deletions

View File

@ -15,11 +15,13 @@ public class User
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
[MaxLength(255)] public string? AccessToken { get; set; } = null;
[MaxLength(255)] public string? RefreshToken { get; set; } = null;
[MaxLength(255)] public string? AccessToken { get; set; }
[MaxLength(255)] public string? RefreshToken { get; set; }
public bool Eula { get; set; } = false;
[MaxLength(255)] public string? CvUrl { get; set; } = null;
public long? ExpiresIn { get; set; } = null;
public bool Eula { get; set; }
[MaxLength(255)] public string? CvUrl { get; set; }
}
//TODO: Негоже это маппинги в DAL ложить

View File

@ -116,6 +116,7 @@ public class HeadHunterService(
user.AccessToken = responseDto.AccessToken;
user.RefreshToken = responseDto.RefreshToken;
user.ExpiresIn = responseDto.ExpiresIn;
await dbContext.SaveChangesAsync();
@ -133,7 +134,7 @@ public class HeadHunterService(
public async Task<Status> UpdateUserAccessToken(User user)
{
if(user.RefreshToken == null)
if (user.RefreshToken == null)
return Status.UserAuthRejectedError;
using var client = new HttpClient(); //TODO: Написать wrapper для работы с HH API
@ -162,7 +163,8 @@ public class HeadHunterService(
if (responseDto == null)
{
logger.LogWarning($"User {user.UserId} access token accept completed with error " +
logger.LogWarning(
$"User {user.Username ?? user.UserId.ToString()} access token accept completed with error " +
$"{nameof(Status.HeadHunterResponseDeserializationFailedError)}");
return Status.HeadHunterResponseDeserializationFailedError;
}

View File

@ -1,3 +1,4 @@
using System.Net.Http.Headers;
using System.Text.Json;
using JOBot.Backend.DAL.Context;
using JOBot.Backend.DTOs.HeadHunterApi;
@ -9,7 +10,9 @@ namespace JOBot.Backend.Services;
public class ResumeService(
AppDbContext dbContext,
IOptions<HeadHunterConfig> config)
ILogger<ResumeService> logger,
IOptions<HeadHunterConfig> config,
HeadHunterService headHunterService)
{
public async Task<(Status Status, List<Resume>? Resume)> GetAvailableResumes(long userId)
{
@ -19,6 +22,16 @@ public class ResumeService(
return new(Status.UserNotFound, null);
}
if (!user.ExpiresIn.HasValue || new DateTime().AddSeconds(user.ExpiresIn.Value) > DateTime.Now)
{
var status = await headHunterService.UpdateUserAccessToken(user);
if (status != HeadHunterService.Status.Success)
{
logger.LogError($"User {userId} has expired access and update of it was unsuccessful: {status}");
return (Status.TokenExpired, null);
}
}
using var client = new HttpClient(); //TODO: Написать wrapper для работы с HH API
client.BaseAddress = new UriBuilder(config.Value.Links.HeadHunterApiDomain)
{
@ -26,9 +39,17 @@ public class ResumeService(
Scheme = "https"
}.Uri;
client.DefaultRequestHeaders.UserAgent.ParseAdd("Jobot BackEnd Service");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", user.AccessToken);
using var res = await client.GetAsync("/resumes/mine");
if (!res.IsSuccessStatusCode)
{
logger.LogWarning(
$"User {user.Username ?? user.UserId.ToString()} resume list is unavailable by unsuccessful status code: {res.StatusCode}");
return new(Status.RequestError, null);
}
var responseDto = JsonSerializer.Deserialize<ListOfResumeResponseDto>(await res.Content.ReadAsStringAsync());
if (responseDto == null)
return new(Status.Error, null);
@ -40,6 +61,8 @@ public class ResumeService(
{
Success,
UserNotFound,
Error
Error,
RequestError,
TokenExpired
}
}