Formula para la Reputación de usuarios en YoProgramo.net
Esta es el método para la generación de reputación de cada usuario, me pregunto si está bien, quise que tenga en cuenta la inactividad el usuario entre otras muchas cosas.
public static double GetReputation(this IUser user)
{
var voteCommentService = ServiceLocator.Current.GetInstance<IVoteService<Comment>>();
var commentvotes = voteCommentService
.GetVotesByUser(user)
.Where(w => ((Comment)w.VoteFor).ForStory.IsLockedOut != true);
var storyService = ServiceLocator.Current.GetInstance<IStoryService>();
var commentService = ServiceLocator.Current.GetInstance<ICommentService>();
int userCommentsCount = commentService.GetByUser(user).Count;
int userStoriesCount = storyService.GetByUser(user).Count;
int votesNegative = (int)commentvotes.Where(x => x.Rate == -1).Count();
int votePositive = (int)commentvotes.Where(x => x.Rate == 1).Count();
TimeSpan tsSinceFromRegistered = DateTime.Now.Subtract(user.RegisteredAt);
int daysSinceFromRegistered = tsSinceFromRegistered.Days;
if (daysSinceFromRegistered == 0) daysSinceFromRegistered = 1;
TimeSpan tsInactive = DateTime.Now.Subtract(user.LastActivityAt);
int daysInactive = tsInactive.Days;
if (daysInactive == 0) daysInactive = 1;
double netScore = (double) daysSinceFromRegistered / (daysInactive * 2);
double reputation = (double)((votePositive * netScore) - votesNegative) + userCommentsCount + userStoriesCount;
return reputation;
}
Lo que veo es que tras un periodo de inactividad irá bajando la reputación hasta que entres en el sistema y automáticamente subirá y compensará el tiempo que se esté fuera.
Por otro lado, si eso funciona así, yo mismo nunca me daré cuenta de que se penaliza la inactividad porque en cuanto entre automáticamente subirá.
Aun así, no es mala idea para fidelizar a los usuarios, hay que entrar a menudo si se quiere mantener la reputación pero igual daría un tiempo de márgen antes de penalizar. Habrá que ver cómo funciona poco a poco y hacer ajustes.
Tu Respuesta
YoProgramo.NET es una comunidad para unir y ayudar a los programadores hispanos.
Aquí los desarrolladores pueden encontrar repuesta a sus dudas y colaborar con los demás, compartiendo sus conocimientos y experiencia.