Refactor user name generation

main
ilitirit 3 years ago
parent 5f3d8dc894
commit fd4f3df9ff

@ -21,39 +21,23 @@ namespace Expedience.Api.Consumers
{
var message = context.Message;
using var scope = _serviceScopeFactory.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<ExpedienceContext>();
if (message == null || message.UserInfo == null || message.PlayerInfo == null ||
message.DutyInfo == null || message.ClientInfo == null || message.CompletionTimeInfo == null)
{
// TODO: Log error
_logger.LogError("Required message fields were not populated on Message with Id {messageId}", context.MessageId);
return;
}
var userHash = message.UserInfo.UserId;
var worldId = message.UserInfo.WorldId;
using var scope = _serviceScopeFactory.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<ExpedienceContext>();
var user = dbContext.Users.FirstOrDefault(x => x.UserHash == userHash && x.WorldId == worldId);
if (user == null)
{
string userName;
do
{
userName = UserNameGenerator.Generate();
}
while (dbContext.Users.Any(x => x.UserName == userName && x.WorldId == worldId));
user = new User
{
UserHash = userHash,
WorldId = worldId,
UserName = userName,
CreatedAt = DateTime.UtcNow,
};
dbContext.Users.Add(user);
dbContext.SaveChanges();
_logger.LogError("No user found for World {worldId} and Hash {userHash}", worldId, userHash);
return;
}
var completionResult = new DutyCompletionResult
@ -101,7 +85,7 @@ namespace Expedience.Api.Consumers
await dbContext.SaveChangesAsync();
_logger.LogInformation("Consumed message {uploadId} from user {userId}", message.UploadId, userHash);
_logger.LogInformation("Consumed message {uploadId} from user {userHash}", message.UploadId, userHash);
}
}
}

@ -44,6 +44,8 @@ namespace Expedience.Infrastructure
.ValueGeneratedOnAdd();
cfg.HasKey(e => new { e.UserId });
cfg.HasIndex(e => new { e.WorldId, e.UserName });
cfg.HasIndex(e => new { e.WorldId, e.UserHash });
});
base.OnModelCreating(modelBuilder);

@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace Expedience.Models

Loading…
Cancel
Save