fix: перенёс уровни в бд и пофиксид их отображение на фронте
Backend CI / build-and-test (push) Successful in 52s
Frontend CI / build-and-check (push) Failing after 5m15s
🚀 Create and publish a Docker image / Detect changes in backend and frontend (push) Successful in 16s
🚀 Create and publish a Docker image / Build & publish backend image (push) Successful in 1m0s
🚀 Create and publish a Docker image / Build & publish frontend image (push) Successful in 32s
🚀 Create and publish a Docker image / Update stack on Portainer (push) Successful in 13s

This commit is contained in:
2026-05-18 02:28:05 +03:00
parent 302e01d705
commit 811b6ef51a
27 changed files with 1526 additions and 51 deletions
@@ -26,7 +26,7 @@ public class UserService : IUserService
.Include(u => u.Roles)
.FirstOrDefaultAsync(u => u.Id == id)
?? throw new NotFoundException("User", id);
return user.ToDto(_gamification.CalculateLevel(user.Xp));
return user.ToDto(await _gamification.CalculateLevelAsync(user.Xp));
}
public async Task<UserDto> UpdateProfileAsync(int id, UpdateUserRequest request)
@@ -42,7 +42,7 @@ public class UserService : IUserService
await _db.SaveChangesAsync();
await _gamification.CheckAndAwardAchievementsAsync(id);
return user.ToDto(_gamification.CalculateLevel(user.Xp));
return user.ToDto(await _gamification.CalculateLevelAsync(user.Xp));
}
public async Task<UserStatsDto> GetStatsAsync(int id)
@@ -55,9 +55,13 @@ public class UserService : IUserService
var reviews = await _db.Reviews.CountAsync(r => r.UserId == id);
var achievements = await _db.UserAchievements.CountAsync(ua => ua.UserId == id);
var level = await _gamification.CalculateLevelAsync(user.Xp);
var levelProgress = await _gamification.GetLevelProgressAsync(user.Xp);
return new UserStatsDto(
totalLectures, attended, reviews,
user.Xp, user.Coins, _gamification.CalculateLevel(user.Xp), achievements
user.Xp, user.Coins, level, achievements,
levelProgress.CurrentLevelXp, levelProgress.NextLevelXp
);
}
@@ -94,7 +98,10 @@ public class UserService : IUserService
.Take(filter.PageSize)
.ToListAsync();
var items = users.Select(u => u.ToDto(_gamification.CalculateLevel(u.Xp))).ToList();
var items = new List<UserDto>(users.Count);
foreach (var user in users)
items.Add(user.ToDto(await _gamification.CalculateLevelAsync(user.Xp)));
return PagedResult<UserDto>.Create(items, total, filter.Page, filter.PageSize);
}