/// <summary> /// /// </summary> /// <param name="team"></param> /// <returns></returns> public OperationResult <ModelFolder> Update(string uid, ModelFolder f) { OperationResult <ModelFolder> res; try { var entity = DataContext .Folders .ForActiveOrg() .FirstOrDefault(x => x.Uid == uid); if (null == entity) { return(OperationResult <ModelFolder> .Create(ErrorCode.BadGetFolder)); } entity.Update(f); if (ExpandoHelper.GetProperty <bool>(f, "Overwrite")) { var v = f.Bag.Version; var currentVersion = ( int )DataContext .Entry(entity) .Property(DataContext.COL_VERSION) .CurrentValue; if (currentVersion != v) { return(OperationResult <ModelFolder> .Create(ErrorCode.BadUpdateFolderVersionMismatch)); } } DataContext.Update(entity); DataContext.SaveChanges(); var model = entity .UpdateId(f) .ToModel() .AddTime(DataContext.Entry(entity)) .AddVersion(DataContext.Entry(entity)); res = OperationResult <ModelFolder> .Create(model); } catch (Exception e) { res = OperationResult <ModelFolder> .Create(ErrorCode.BadUpdateFolder, e); } return(res); }
/// <summary> /// /// </summary> /// <param name="d"></param> /// <returns></returns> public OperationResult <ModelDashboard> Create(ModelDashboard d) { OperationResult <ModelDashboard> res; try { var existing = DataContext .Dashboards .ForActiveOrg() .FirstOrDefault(x => x.Title == d.Title && d.FolderId == x.FolderId); if (null != existing) { if (!ExpandoHelper.GetProperty <bool>(d, "Overwrite")) { return(OperationResult <ModelDashboard> .Create(ErrorCode.BadCreateDashboardDuplicate)); } DataContext.Dashboards.Remove(existing); } var entity = d .ToEntity(DataContext) .IncludeActiveOrgId(DataContext); entity.Versions.Add(new DashboardVersion(d)); DataContext.Add(entity); DataContext.SaveChanges(); var model = entity .UpdateId(d) .ToModel() .AddTime(DataContext.Entry(entity)) .AddVersion(DataContext.Entry(entity)); res = OperationResult <ModelDashboard> .Create(model); } catch (Exception e) { res = OperationResult <ModelDashboard> .Create(ErrorCode.BadCreateDashboard, e); } return(res); }
/// <summary> /// /// </summary> public DashboardVersion(ModelDashboard d) { DashboardId = d.Id; var version = ExpandoHelper.GetProperty <int>(d, "Version"); var userId = ExpandoHelper.GetProperty <int>(d, "UserId"); var message = ExpandoHelper.HasProperty(d, "Message") ? d.Bag.Message : string.Empty; Version = version + 1; ParentVersion = version; RestoredFrom = 0; Message = (string.IsNullOrEmpty(d.Uid)) ? "Initial save" : message; Data = d.Data; UserId = userId; }
/// <summary> /// /// </summary> /// <param name="d"></param> /// <returns></returns> public OperationResult <ModelDashboard> Update(ModelDashboard d) { OperationResult <ModelDashboard> res; try { var entity = DataContext .Dashboards .ForActiveOrg() .Include(x => x.Tags) .Include(x => x.Alerts) .FirstOrDefault(x => x.Uid == d.Uid); if (null == entity) { return(OperationResult <ModelDashboard> .Create(ErrorCode.BadGetDashboard)); } var existing = DataContext .Dashboards .ForActiveOrg() .FirstOrDefault(x => x.Title == d.Title && d.FolderId == x.FolderId && x.Uid != d.Uid); if (null != existing) { if (!ExpandoHelper.GetProperty <bool>(d, "Overwrite")) { return(OperationResult <ModelDashboard> .Create(ErrorCode.BadCreateDashboardDuplicate)); } DataContext.Dashboards.Remove(existing); } var currentVersion = ( int )DataContext .Entry(entity) .Property(DataContext.COL_VERSION) .CurrentValue; DataContext .Entry(entity) .State = EntityState.Modified; if (currentVersion > ExpandoHelper.GetProperty <int>(d, "Version")) { return(OperationResult <ModelDashboard> .Create(ErrorCode.BadUpdateDashboardVersionMismatch)); } entity.Update(DataContext, d); DataContext.SaveChanges(); var model = entity .ToModel() .AddTime(DataContext.Entry(entity)) .AddVersion(DataContext.Entry(entity)); res = OperationResult <ModelDashboard> .Create(model); } catch (AlertValidationException e) { res = OperationResult <ModelDashboard> .Create(ErrorCode.BadUpdateDashboardValidation, e); } catch (Exception e) { res = OperationResult <ModelDashboard> .Create(ErrorCode.BadUpdateDashboard, e); } return(res); }