/
egopen
/
Lab1
Обзор
Документация
Войти
/
egopen
/
Lab1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lab4/library/Services/UserService.cs
73 строки
2 KB
Egopen
lab 4
01 ноя 2025, 18:03
01 ноя 2025, 18:03
78d017c
Код
Авторство
О чём код?
namespace library.Services { using global::library.DB.Models; using global::library.DB; using global::library.Errors; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; namespace library.Services { public class UserService { private readonly LibraryDBContext _db; private readonly IMemoryCache _memoryCache; public UserService(LibraryDBContext db, IMemoryCache memoryCache) { _db = db; _memoryCache = memoryCache; } public async Task<User> GetUserById(Guid userId) { var user = await _db.Users .AsNoTracking() .FirstOrDefaultAsync(u => u.Id == userId); if (user == null) { throw new NotFoundException("User not found"); } return user; } public async Task<List<User>> GetAllUsers(int page = 1, int pageSize = 20) { var cacheKey = $"all_users_page_{page}_size_{pageSize}"; if (_memoryCache.TryGetValue(cacheKey, out List<User> cachedUsers)) { return cachedUsers; } var users = await _db.Users .AsNoTracking() .OrderBy(u => u.Name) .Skip((page - 1) * pageSize) .Take(pageSize) .ToListAsync(); _memoryCache.Set(cacheKey, users, TimeSpan.FromMinutes(5)); return users; } public async Task<bool> DeleteUser(Guid userId) { var user = await _db.Users.FirstOrDefaultAsync(u => u.Id == userId); if (user == null) { return false; } _db.Users.Remove(user); await _db.SaveChangesAsync(); return true; } } } }