forked from SciSharp/BotSharp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLoggerService.Instruction.cs
More file actions
80 lines (66 loc) · 2.87 KB
/
LoggerService.Instruction.cs
File metadata and controls
80 lines (66 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using BotSharp.Abstraction.Loggers.Models;
using BotSharp.Abstraction.Users.Models;
namespace BotSharp.Core.Loggers.Services;
public partial class LoggerService
{
public async Task<PagedItems<InstructionLogModel>> GetInstructionLogs(InstructLogFilter filter)
{
if (filter == null)
{
filter = InstructLogFilter.Empty();
}
var userService = _services.GetRequiredService<IUserService>();
var (isAdmin, user) = await userService.IsAdminUser(_user.Id);
if (!isAdmin && user?.Id == null) return new();
filter.UserIds = !isAdmin && user?.Id != null ? [user.Id] : null;
var users = new List<User>();
var db = _services.GetRequiredService<IBotSharpRepository>();
var agentService = _services.GetRequiredService<IAgentService>();
var logs = await db.GetInstructionLogs(filter);
var agentIds = logs.Items.Where(x => !string.IsNullOrEmpty(x.AgentId)).Select(x => x.AgentId).ToList();
var userIds = logs.Items.Where(x => !string.IsNullOrEmpty(x.UserId)).Select(x => x.UserId).ToList();
var agents = await agentService.GetAgentOptions(agentIds);
if (isAdmin)
{
users = await userService.GetUsers(userIds);
}
var items = logs.Items.Select(x =>
{
x.AgentName = !string.IsNullOrEmpty(x.AgentId) ? agents.FirstOrDefault(a => a.Id == x.AgentId)?.Name : null;
if (!isAdmin)
{
x.UserName = user != null ? $"{user.FirstName} {user.LastName}" : null;
}
else
{
var found = !string.IsNullOrEmpty(x.UserId) ? users.FirstOrDefault(u => u.Id == x.UserId) : null;
x.UserName = found != null ? $"{found.FirstName} {found.LastName}" : null;
}
return x;
}).ToList();
return new PagedItems<InstructionLogModel>
{
Items = items,
Count = logs.Count
};
}
public async Task<List<string>> GetInstructionLogSearchKeys(InstructLogKeysFilter filter)
{
if (filter == null)
{
filter = InstructLogKeysFilter.Empty();
}
var keys = new List<string>();
if (!filter.PreLoad && string.IsNullOrWhiteSpace(filter.Query))
{
return keys;
}
var userService = _services.GetRequiredService<IUserService>();
var db = _services.GetRequiredService<IBotSharpRepository>();
var (isAdmin, user) = await userService.IsAdminUser(_user.Id);
filter.UserIds = !isAdmin && user?.Id != null ? [user.Id] : null;
keys = db.GetInstructionLogSearchKeys(filter);
keys = filter.PreLoad ? keys : keys.Where(x => x.Contains(filter.Query ?? string.Empty, StringComparison.OrdinalIgnoreCase)).ToList();
return keys.OrderBy(x => x).Take(filter.KeyLimit).ToList();
}
}