/// <summary> /// /// </summary> /// <param name="team"></param> /// <returns></returns> public OperationResult <ModelAnnotation> Create(ModelAnnotation ann) { OperationResult <ModelAnnotation> res; try { var tags = UpsertTags(ann); var entity = ann .ToEntity() .IncludeTags(tags) .IncludeActiveOrgId(DataContext); DataContext.Add(entity); DataContext.SaveChanges(); var model = entity .UpdateId(ann) .ToModel(); res = OperationResult <ModelAnnotation> .Create(model); } catch (Exception e) { res = OperationResult <ModelAnnotation> .Create(ErrorCode.BadCreateAnnotation, e); } return(res); }
/// <summary> /// /// </summary> /// <param name="ds"></param> /// <returns></returns> public void Update(ModelAnnotation ann, List <AnnotationTag> tags, bool patch) { if (patch) { UserId = ann.UserId ?? UserId; Epoch = ann.Time ?? Epoch; EpochEnd = ann.TimeEnd ?? EpochEnd; Text = ann.Text ?? Text; if (null != tags) { IncludeTags(tags); } } else { UserId = ann.UserId; Epoch = ann.Time ?? 0; EpochEnd = ann.TimeEnd ?? 0; Text = ann.Text; IncludeTags(tags); } if (null != ann.Alert && 0 != ann.Alert.Id) { AlertId = ann.Alert?.Id; UserId = null; } }
/// <summary> /// /// </summary> /// <param name="ds"></param> /// <returns></returns>^ public ModelAnnotation ToModel() { var m = new ModelAnnotation() { Id = Id, OrgId = OrgId, UserId = UserId, DashboardId = DashboardId ?? 0, PanelId = PanelId, Text = Text, Title = Title, Time = Epoch, TimeEnd = EpochEnd, Tags = Tags? .Select(x => x.AnnotationTag.Term) .OrderBy(x => x) .ToList(), }; if (AlertId.HasValue && AlertId != 0) { m.Alert = new ModelAnnotation.AlertInfo() { Id = AlertId.Value, PrevState = PrevAlertState ?? ED.Alerts.AlertState.Unknown, CurrentState = CurrentAlertState ?? ED.Alerts.AlertState.Unknown, Data = AlertData }; } m.Bag.UserName = (null != User) ? User.Login : string.Empty; return(m); }
/// <summary> /// /// </summary> /// <param name="ds"></param> /// <returns></returns> public static Annotation ToEntity(this ModelAnnotation a) { return(new Annotation() { Id = a.Id, OrgId = a.OrgId, UserId = a.UserId, DashboardId = a.DashboardId, PanelId = a.PanelId, Text = a.Text, Title = a.Title, Epoch = a.Time ?? 0, EpochEnd = a.TimeEnd }); }
/// <summary> /// /// </summary> /// <param name="ann"></param> /// <returns></returns> public OperationResult <ModelAnnotation> Update(ModelAnnotation ann, bool patch = false) { OperationResult <ModelAnnotation> res; try { var entity = DataContext .Annotations .ForActiveOrg() .Include(x => x.Tags) .ThenInclude(x => x.AnnotationTag) .FirstOrDefault(x => x.Id == ann.Id); if (null == entity) { return(OperationResult <ModelAnnotation> .Create(ErrorCode.BadGetAnnotation)); } var tags = UpsertTags(ann); entity.Update(ann, tags, patch); DataContext.Update(entity); DataContext.SaveChanges(); var model = entity .UpdateId(ann) .ToModel(); res = OperationResult <ModelAnnotation> .Create(model); } catch (Exception e) { res = OperationResult <ModelAnnotation> .Create(ErrorCode.BadUpdateAnnotation, e); } return(res); }
/// <summary> /// /// </summary> /// <param name="tags"></param> private List <AnnotationTag> UpsertTags(ModelAnnotation ann) { var tags = ann?.Tags; var res = new List <AnnotationTag>(); if (null == tags) { return(null); } try { var existingTags = DataContext .AnnotationTags .Where(x => tags.Contains(x.Term)) .ToList(); var newTags = tags .Where(t => null == existingTags.FirstOrDefault(x => 0 == string.Compare(x.Term, t, StringComparison.OrdinalIgnoreCase))) .Select(x => new AnnotationTag(x)) .ToList(); DataContext .AnnotationTags .AddRange(newTags); res = existingTags .Union(newTags) .ToList();; } catch { } return(res); }