refine code

This commit is contained in:
Jicheng Lu 2024-11-01 13:17:25 -05:00
parent d0b7e08cfe
commit 39bd401c4f
4 changed files with 27 additions and 5 deletions

View file

@ -144,7 +144,7 @@ public partial class FileRepository
var userFile = Path.Combine(dir, USER_FILE);
user.UpdatedTime = DateTime.UtcNow;
File.WriteAllText(_dbSettings.FileRepository, JsonSerializer.Serialize(user, _options));
File.WriteAllText(userFile, JsonSerializer.Serialize(user, _options));
if (isUpdateUserAgents)
{

View file

@ -76,12 +76,24 @@ public class AgentController : ControllerBase
}
[HttpGet("/agents")]
public async Task<PagedItems<AgentViewModel>> GetAgents([FromQuery] AgentFilter filter)
public async Task<PagedItems<AgentViewModel>> GetAgents([FromQuery] AgentFilter filter, [FromQuery] bool checkAuth = false)
{
var agentSetting = _services.GetRequiredService<AgentSettings>();
var userService = _services.GetRequiredService<IUserService>();
List<AgentViewModel> agents;
var pagedAgents = await _agentService.GetAgents(filter);
if (!checkAuth)
{
agents = pagedAgents?.Items?.Select(x => AgentViewModel.FromAgent(x))?.ToList() ?? [];
return new PagedItems<AgentViewModel>
{
Items = agents,
Count = pagedAgents?.Count ?? 0
};
}
var userAgents = new List<UserAgent>();
var user = await userService.GetUser(_user.Id);
if (!UserConstant.AdminRoles.Contains(user.Role))
@ -89,16 +101,19 @@ public class AgentController : ControllerBase
userAgents = await _agentService.GetUserAgents(user.Id);
}
var agents = pagedAgents?.Items?.Select(x =>
agents = pagedAgents?.Items?.Select(x =>
{
var chatable = true;
var editable = true;
if (!UserConstant.AdminRoles.Contains(user.Role))
{
var actions = userAgents.FirstOrDefault(a => a.AgentId == x.Id)?.Actions ?? [];
chatable = actions.Contains(UserAction.Chat);
editable = actions.Contains(UserAction.Edit);
}
var model = AgentViewModel.FromAgent(x);
model.Editable = editable;
model.Chatable = chatable;
return model;
})?.ToList() ?? [];

View file

@ -6,7 +6,7 @@ namespace BotSharp.OpenAPI.ViewModels.Users;
public class UserAgentActionViewModel
{
[JsonPropertyName("id")]
public string Id { get; set; }
public string? Id { get; set; }
[JsonPropertyName("agent_id")]
public string AgentId { get; set; }

View file

@ -237,7 +237,9 @@ public partial class MongoRepository
var userFilter = Builders<UserDocument>.Filter.Eq(x => x.Id, user.Id);
var userUpdate = Builders<UserDocument>.Update
.Set(x => x.Type, user.Type)
.Set(x => x.Role, user.Role)
.Set(x => x.Permissions, user.Permissions)
.Set(x => x.UpdatedTime, DateTime.UtcNow);
_dc.Users.UpdateOne(userFilter, userUpdate);
@ -254,7 +256,12 @@ public partial class MongoRepository
UpdatedTime = DateTime.UtcNow
})?.ToList() ?? [];
_dc.UserAgents.DeleteMany(Builders<UserAgentDocument>.Filter.Nin(x => x.Id, userAgentDocs.Select(x => x.Id)));
var toDelete = _dc.UserAgents.Find(Builders<UserAgentDocument>.Filter.And(
Builders<UserAgentDocument>.Filter.Eq(x => x.UserId, user.Id),
Builders<UserAgentDocument>.Filter.Nin(x => x.Id, userAgentDocs.Select(x => x.Id))
)).ToList();
_dc.UserAgents.DeleteMany(Builders<UserAgentDocument>.Filter.In(x => x.Id, toDelete.Select(x => x.Id)));
foreach (var doc in userAgentDocs)
{
var userAgentFilter = Builders<UserAgentDocument>.Filter.Eq(x => x.Id, doc.Id);