56 lines
1.5 KiB
C#
56 lines
1.5 KiB
C#
|
using Metrolog_API.Models;
|
|||
|
using MongoDB.Driver;
|
|||
|
|
|||
|
namespace Metrolog_API.Services
|
|||
|
{
|
|||
|
public class RoleService
|
|||
|
{
|
|||
|
private readonly IMongoCollection<RoleModel> _roles;
|
|||
|
|
|||
|
public RoleService(IConfiguration config)
|
|||
|
{
|
|||
|
var client = new MongoClient(System.Environment.GetEnvironmentVariable("MONGODB_CONNECTION_STRING"));
|
|||
|
var database = client.GetDatabase(System.Environment.GetEnvironmentVariable("MONGODB_DATABASE"));
|
|||
|
_roles = database.GetCollection<RoleModel>("roles");
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Read all items in collection ordered by "Name" by page (100 items)
|
|||
|
/// </summary>
|
|||
|
/// <param name="page">Page number</param>
|
|||
|
/// <returns>List of roles on specified page</returns>
|
|||
|
public async Task<List<RoleModel>> GetPageAsync(int page = 1) =>
|
|||
|
await _roles.Find<RoleModel>(role => true).SortByDescending(x => x.Name).Skip((page - 1) * 100).Limit(100).ToListAsync();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Get Role by Name
|
|||
|
/// </summary>
|
|||
|
/// <param name="Name">Role Name</param>
|
|||
|
/// <returns>Role or null</returns>
|
|||
|
public async Task<RoleModel?> GetByNameAsync(string Name) =>
|
|||
|
await _roles.Find<RoleModel>(role => role.Name == Name).FirstAsync();
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Get default role names
|
|||
|
/// </summary>
|
|||
|
/// <returns>Role Names</returns>
|
|||
|
public async Task<List<string>> GetDefaultsAsync()
|
|||
|
{
|
|||
|
List<string> names = new List<string>();
|
|||
|
foreach (RoleModel role in await _roles.Find<RoleModel>(role => role.Default == true).ToListAsync())
|
|||
|
{
|
|||
|
names.Add(role.Name);
|
|||
|
}
|
|||
|
return names;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|