public static Map CreateMap(MapsEntities entities, string mapName) { var newMap = new Maps { Name = mapName, CreationTime = DateTime.Now }; Maps insertedMap = entities.Maps.Add(newMap); entities.SaveChanges(); StudMapCache.Global.UpdateMaps(entities); return Conversions.ToMap(insertedMap); }
public static Floor CreateFloor(MapsEntities entities, int mapId, string name, string imageUrl) { if (!MapService.MapExists(mapId)) throw new ServiceException(ResponseError.MapIdDoesNotExist); var newFloor = new Floors { MapId = mapId, Name = name, ImageUrl = imageUrl, CreationTime = DateTime.Now }; Floors insertedFloor = entities.Floors.Add(newFloor); entities.SaveChanges(); StudMapCache.RemoveMap(mapId); return Conversions.ToFloor(insertedFloor, ServerAdminBasePath); }
public static Graph SaveGraphForFloor(MapsEntities entities, SaveGraphRequest request) { Floors targetFloor = entities.Floors.Find(request.FloorId); if (targetFloor == null) throw new ServiceException(ResponseError.FloorIdDoesNotExist); Graphs graph = entities.Graphs.FirstOrDefault(x => x.MapId == targetFloor.MapId); if (graph == null) { entities.Graphs.Add(new Graphs { MapId = targetFloor.MapId, CreationTime = DateTime.Now }); } // Zu entfernende Knoten und Kanten löschen if (request.DeletedGraph.Nodes != null) { foreach (Nodes node in request.DeletedGraph.Nodes.Select(dNode => entities.Nodes.FirstOrDefault(x => x.Id == dNode.Id)) .Where(node => node != null)) { entities.Nodes.Remove(node); } } if (request.DeletedGraph.Edges != null) { foreach ( Edges edge in request.DeletedGraph.Edges.Select( dEdge => entities.Edges.FirstOrDefault( x => x.NodeStartId == dEdge.StartNodeId && x.NodeEndId == dEdge.EndNodeId)) .Where(edge => edge != null)) { entities.Edges.Remove(edge); } } var nodeIdMap = new Dictionary<int, int>(); // Nodes in den Floor hinzufügen if (request.NewGraph.Nodes != null) { foreach (Node node in request.NewGraph.Nodes) { var newNode = new Nodes { FloorId = request.FloorId, X = node.X, Y = node.Y, CreationTime = DateTime.Now }; entities.Nodes.Add(newNode); entities.SaveChanges(); nodeIdMap.Add(node.Id, newNode.Id); } } // Edges im Graph hinzufügen if (request.NewGraph.Edges != null) { foreach (Edge edge in request.NewGraph.Edges) { int nodeIdMapStartNodeId; if (nodeIdMap.ContainsKey(edge.StartNodeId)) nodeIdMapStartNodeId = nodeIdMap[edge.StartNodeId]; else { Nodes startNodeId = entities.Nodes.FirstOrDefault(x => x.Id == edge.StartNodeId); nodeIdMapStartNodeId = startNodeId == null ? 0 : startNodeId.Id; } int nodeIdMapEndNodeId; if (nodeIdMap.ContainsKey(edge.EndNodeId)) nodeIdMapEndNodeId = nodeIdMap[edge.EndNodeId]; else { Nodes endNodeId = entities.Nodes.FirstOrDefault(x => x.Id == edge.EndNodeId); nodeIdMapEndNodeId = endNodeId == null ? 0 : endNodeId.Id; } if (graph != null) graph.Edges.Add(new Edges { NodeStartId = nodeIdMapStartNodeId, NodeEndId = nodeIdMapEndNodeId, CreationTime = DateTime.Now }); } } entities.SaveChanges(); StudMapCache.RemoveMap(targetFloor.MapId); return GetGraphForFloor(entities, request.FloorId); }
public static void SaveFingerprintForNode(MapsEntities entities, int nodeId, Fingerprint fingerprint) { if (fingerprint == null) throw new ServiceException(ResponseError.FingeprintIsNotDefined); if (fingerprint.AccessPointScans == null || !fingerprint.AccessPointScans.Any()) return; Nodes node = entities.Nodes.Find(nodeId); if (node == null) throw new ServiceException(ResponseError.NodeIdDoesNotExist); // Fingerprint in DB einfügen Fingerprints fingerprints = entities.Fingerprints.Add(new Fingerprints { NodeId = node.Id }); entities.SaveChanges(); foreach (AccessPointScan apScan in fingerprint.AccessPointScans) { // Fehlenden AccessPoint ggf. anlegen AccessPoints ap = entities.AccessPoints.FirstOrDefault(x => x.MAC == apScan.AccessPoint.MAC); if (ap == null) { ap = entities.AccessPoints.Add(new AccessPoints { MAC = apScan.AccessPoint.MAC }); entities.SaveChanges(); } // Einzelmessung speichern entities.AccessPointScans.Add(new AccessPointScans { AccessPointId = ap.Id, RecievedSignalStrength = apScan.ReceivedSignalStrength, FingerprintId = fingerprints.Id }); } entities.SaveChanges(); StudMapCache.RemoveFingerprint(node.Floors.MapId); }
private static PoIs CreateOrUpdatePoI(MapsEntities entities, PoI inputPoI, Data.Entities.NodeInformation nodeInformation) { if (inputPoI.Type.Id == 0) return null; PoiTypes poiType = entities.PoiTypes.FirstOrDefault(x => x.Id == inputPoI.Type.Id); if (poiType == null) throw new ServiceException(ResponseError.PoiTypeIdDoesNotExist); inputPoI.Type.Name = poiType.Name; PoIs poi; // Falls zu dem Knoten noch kein PoI angelegt wurde, einen neuen erstellen if (nodeInformation == null || nodeInformation.PoIs == null) { poi = entities.PoIs.Add(new PoIs { TypeId = inputPoI.Type.Id, Description = inputPoI.Description }); } // Ansonsten vorhandenen PoI aktualisieren else { poi = entities.PoIs.FirstOrDefault(x => x.Id == nodeInformation.PoiId); // TODO: Die PoI-ID kommt aus der DB und kann eig. nicht ungültig sein if (poi == null) throw new ServiceException(ResponseError.PoiDoesNotExist); poi.TypeId = inputPoI.Type.Id; poi.Description = inputPoI.Description; } entities.SaveChanges(); return poi; }
private static void CreateOrUpdateNodeInfo(MapsEntities entities, NodeInformation inputInfo, Data.Entities.NodeInformation nodeInformation, PoIs poi) { int? poiId = poi != null ? (int?)poi.Id : null; // Wenn es keine NodeInfo gibt, eine Neue anlegen if (nodeInformation == null) { entities.NodeInformation.Add(new Data.Entities.NodeInformation { DisplayName = inputInfo.DisplayName, RoomName = inputInfo.RoomName, QRCode = inputInfo.QRCode, NFCTag = inputInfo.NFCTag, PoiId = poiId, NodeId = inputInfo.Node.Id, CreationTime = DateTime.Now }); } // Ansonsten die bestehende NodeInfo aktualisieren else { nodeInformation.DisplayName = inputInfo.DisplayName; nodeInformation.RoomName = inputInfo.RoomName; nodeInformation.NFCTag = inputInfo.NFCTag; nodeInformation.QRCode = inputInfo.QRCode; nodeInformation.PoiId = poiId; } entities.SaveChanges(); }
public static void SaveQRCodeForNode(MapsEntities entities, int nodeId, string qrCode) { Data.Entities.NodeInformation nodeInformation = entities.NodeInformation.FirstOrDefault(x => x.Nodes.Id == nodeId); if (nodeInformation == null) throw new ServiceException(ResponseError.NodeIdDoesNotExist); if (String.IsNullOrWhiteSpace(qrCode)) throw new ServiceException(ResponseError.QRCodeIsNullOrEmpty); nodeInformation.QRCode = qrCode; entities.SaveChanges(); }
public static void SaveNFCForNode(MapsEntities entities, int nodeId, string nfcTag) { Data.Entities.NodeInformation nodeInformation = entities.NodeInformation.FirstOrDefault(x => x.Nodes.Id == nodeId); if (nodeInformation == null) throw new ServiceException(ResponseError.NodeIdDoesNotExist); if (entities.NodeInformation.Any(x => x.NFCTag == nfcTag)) throw new ServiceException(ResponseError.NFCTagAllreadyAssigned); if (String.IsNullOrWhiteSpace(nfcTag)) throw new ServiceException(ResponseError.NFCTagIsNullOrEmpty); nodeInformation.NFCTag = nfcTag; entities.SaveChanges(); }
public static Floor UploadFloorImage(MapsEntities entities, int floorId, string filename) { Floors floor = entities.Floors.FirstOrDefault(x => x.Id == floorId); if (floor == null) throw new ServiceException(ResponseError.FloorIdDoesNotExist); floor.ImageUrl = filename; entities.SaveChanges(); return Conversions.ToFloor(floor, ServerAdminBasePath); }