public IActionResult CompetenceEdit(int?id, int?userid) { using var db = AppContextFactory.DB; UserCompetence uc = null; if (id.HasValue) { uc = db.UserCompetences.FirstOrDefault(i => i.Id == id.Value); } var competences = DataHelper.CreateSelectListItem(db, uc != null ? uc.CompetenceId : (int?)null, "subjects", "skills"); var levels = DataHelper.CreateSelectListItem(db, uc != null ? uc.LevelId : (int?)null, "levels"); var model = new UserCompetenceEditViewModel() { UserCompetence = uc ?? new UserCompetence() { UserInfoId = userid.Value }, Competences = competences, Levels = levels }; return(View(model)); }
public async Task <IActionResult> CompetenceEdit(int?id, string name) { UserCompetence model = new UserCompetence(); await TryUpdateModelAsync <UserCompetence>(model, "UserCompetence", i => i.UserInfoId, i => i.LevelId, i => i.CompetenceId); using var db = AppContextFactory.DB; if (db.UserCompetences.Any(i => i.CompetenceId == model.CompetenceId && i.Id != id && i.UserInfoId == model.UserInfoId)) { ModelState.AddModelError("Error", "Такая компетенция уже добавлена!"); } // Валидация. if (!ModelState.IsValid) { return(View( new UserCompetenceEditViewModel() { UserCompetence = model, Competences = DataHelper.CreateSelectListItem(db, model.CompetenceId, "subjects", "skills"), Levels = DataHelper.CreateSelectListItem(db, model.LevelId, "levels") })); } using var t = db.Database.BeginTransaction(); try { // Редактируем навык или сохраняем новый. var uc = db.UserCompetences.FirstOrDefault(i => i.Id == id) ?? new UserCompetence(); uc.LevelId = model.LevelId; uc.UserInfoId = model.UserInfoId; uc.CompetenceId = model.CompetenceId; if (uc.Id == 0) { db.Entry(uc).State = EntityState.Added; } await db.SaveChangesAsync(); await t.CommitAsync(); } catch (Exception ex) { await t.RollbackAsync(); ModelState.AddModelError("Error", "В процессе сохранения произошла ошибка! Ошибка: " + ex.Message); } return(RedirectToAction("CompetenceList", new { id = model.UserInfoId })); }
public void Store(UserCompetence aggregate, CompetenceUpdateCommand command) { List.Add(new Entry { aggregate = aggregate, command = command }); }
public void Init() { persister = new UserCompentenceMockPersister(); entity = new UserCompetence("user1", persister); }
/// <summary> /// Делает импорт пользователеи и их компетенции в UserInfo таблицу. /// </summary> public async Task <IActionResult> ImportUserInfos() { using var db = AppContextFactory.DB; using var t = db.Database.BeginTransaction(); int levelId = db.FacetItems.FirstOrDefault(i => i.Name == "низкий").Id; // надеемся и свято верим что он там есть. А чтобы узнать, спецом в try не сунул =) try { // Стадия 1. Обновление существующих пользователеи (+ их компетенции). // Правила игры: только добавляем новые компетенции. Ничего не обновляем и ничего в целом тут не делаем. var oldUsers = db.DocFiles.Where(i => i.UserInfoId.HasValue).ToList(); foreach (var u in oldUsers) { // Забираем скилы из фаила. var skills = (from w in db.Words where w.DocFileId == u.Id && w.FacetItemId.HasValue join fi in db.FacetItems on w.FacetItemId equals fi.Id select fi.Id).ToList(); // Ищем компетенции, которые есть у пользователя на текущии момент. var alreadyExisting = (from uc in db.UserCompetences where uc.UserInfoId == u.UserInfoId select uc.CompetenceId).ToList(); // То что добавить нужно будет. var toAdd = skills.Except(alreadyExisting); foreach (var c in toAdd) { UserCompetence uc = new UserCompetence() { LevelId = levelId, CompetenceId = c, UserInfoId = u.UserInfoId.Value }; db.Entry(uc).State = EntityState.Added; await db.SaveChangesAsync(); } } // Стадия 2. Добавление новых пользователеи (+ их компетенции). // Правила игры: уровень импорта скилов всегда ставив самыи низкии. var newUsers = db.DocFiles.Where(i => !i.UserInfoId.HasValue).ToList(); foreach (var u in newUsers) { // Забираем скилы из фаила. var skills = (from w in db.Words where w.DocFileId == u.Id && w.FacetItemId.HasValue join fi in db.FacetItems on w.FacetItemId equals fi.Id join f in db.Facets on fi.FacetId equals f.Id select new { skillId = fi.Id }).ToList(); // Сохраняем пользователя со всеми потрохами. UserInfo ui = new UserInfo() { Name = u.FIO, CareerStart = DateTime.Now.Date //да просто рандомная дата. Как говорил один из персонажей в моей жизни бесполезной: "ГАВНОМ ЗАБИВАй (Звучит прям как "Родину Защищай".). Есть, Андрей Николаевич - чту, горжусь, помню и славно следую принципу борьбы с not null полями =)" }; db.Entry(ui).State = EntityState.Added; await db.SaveChangesAsync(); // Сохраняем связь между пользователем и документом. u.UserInfoId = ui.Id; db.Entry(u).State = EntityState.Modified; await db.SaveChangesAsync(); // Сохраняем данные о компетенциях пользователя. if (skills.Any()) { foreach (var s in skills) { UserCompetence uc = new UserCompetence() { LevelId = levelId, CompetenceId = s.skillId, UserInfoId = ui.Id }; db.Entry(uc).State = EntityState.Added; await db.SaveChangesAsync(); } } } await t.CommitAsync(); } catch (Exception ex) { await t.RollbackAsync(); ModelState.AddModelError("Error", "В процессе импорта произошла ошибка! Ошибка: " + ex.Message); } return(RedirectToAction("Index")); }
/// <summary> /// Берет всех пользователей и портит их с точки зрения рандома их скиллов. /// Каждому добавляется по 5-7 навыков разного уровня. /// Каждому добавляется по 3-5 предметные области разного уровня. /// </summary> public async Task <IActionResult> RandomizeSkills() { using var db = AppContextFactory.DB; using var t = db.Database.BeginTransaction(); try { var employees = db.UserInfos.ToList(); var facetItems = (from fi in db.FacetItems join f in db.Facets on fi.FacetId equals f.Id select new { fi.Id, f.Code }).ToList(); int[] skills = facetItems.Where(i => i.Code == "skills").Select(i => i.Id).ToArray(); int[] subjects = facetItems.Where(i => i.Code == "subjects").Select(i => i.Id).ToArray(); int[] lvls = facetItems.Where(i => i.Code == "levels").Select(i => i.Id).ToArray(); Random rnd = new Random(); foreach (var e in employees) { // Удаляем старые навыки. var oldUcs = db.UserCompetences.Where(i => i.UserInfoId == e.Id).ToList(); db.RemoveRange(oldUcs); await db.SaveChangesAsync(); // Добавляем новые навыки. int count = rnd.Next(5, 7); // Использую антипаттерн magic numbers, потому что хочу =) int n = 0; List <int> stopList = new List <int>(); // Добавляем, пока не закончится цикл. while (n < count) { int l = rnd.Next(0, lvls.Length); int levelId = lvls[l]; int s = rnd.Next(0, skills.Length); int skillId = skills[s]; if (stopList.Contains(skillId)) { continue; } var us = new UserCompetence() { LevelId = levelId, CompetenceId = skillId, UserInfoId = e.Id }; stopList.Add(skillId); db.Entry(us).State = Microsoft.EntityFrameworkCore.EntityState.Added; await db.SaveChangesAsync(); n++; } // Добавляем новые предметные области. count = rnd.Next(3, 5); // Использую антипаттерн magic numbers, потому что хочу =) n = 0; stopList.Clear(); while (n < count) { int l = rnd.Next(0, lvls.Length); int levelId = lvls[l]; int s = rnd.Next(0, subjects.Length); int subjectId = subjects[s]; if (stopList.Contains(subjectId)) { continue; } var us = new UserCompetence() { LevelId = levelId, CompetenceId = subjectId, UserInfoId = e.Id }; stopList.Add(subjectId); db.Entry(us).State = Microsoft.EntityFrameworkCore.EntityState.Added; await db.SaveChangesAsync(); n++; } } await t.CommitAsync(); } catch (Exception ex) { await t.RollbackAsync(); ModelState.AddModelError("Error", "Нельзя сотворить здесь!"); } return(RedirectToAction("Index", "User")); }
public void Store(UserCompetence aggregate, CompetenceUpdateCommand command) { CommandStore.AppendToStream(aggregate.GetId(), command, Commands.CompetenceUpdateCommandType); Factory.GetChartManager().UserCompetenceChange(command); }