// GET api/zones
        public async Task <HttpResponseMessage> GetZones()
        {
            string token = GetHeader("token");

            if (token == null || (token != null && !TokenManager.ValidateToken(token)))
            {
                return(Request.CreateResponse(HttpStatusCode.Unauthorized));
            }

            // ZoneDTO se koristi samo da se sad ne bi slali ParkingPlaces iz Zone, vec se salje prazna lista
            List <ZoneDTO> zoneDTOs = zonesService.GetZones()
                                      .Select(zone => new ZoneDTO(zone))
                                      .ToList();

            return(Request.CreateResponse(HttpStatusCode.OK, zoneDTOs));
        }
 public IActionResult GetZones()
 {
     return(Ok(_zonesService.GetZones()));
 }
        public async Task <HttpResponseMessage> GetParkingPlaceChanges([FromUri] string zoneids, [FromUri] string versions)
        {
            string token = GetHeader("token");

            if (token == null || (token != null && !TokenManager.ValidateToken(token)))
            {
                return(Request.CreateResponse(HttpStatusCode.Unauthorized));
            }

            if (string.IsNullOrEmpty(zoneids) || string.IsNullOrEmpty(versions))
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }

            long[] zoneIdsArray, versionsArray;

            convertStringToLongArray(zoneids, out zoneIdsArray);
            convertStringToLongArray(versions, out versionsArray);

            List <Zone> zones = zonesService.GetZones(zoneIdsArray);

            List <ParkingPlaceChangesDTO>  changes  = new List <ParkingPlaceChangesDTO>();
            List <ParkingPlacesInitialDTO> initials = new List <ParkingPlacesInitialDTO>();


            int parkingPlaceChangesCount;
            int versionDiff;
            List <ParkingPlaceDTO> myParkingPlaceChanges;
            Zone zone;
            long version;

            for (int i = 0; i < zones.Count; i++)
            {
                version = versionsArray[i];
                zone    = zones[i];
                lock (zone)
                {
                    if (version == -1)
                    {
                        initials.Add(new ParkingPlacesInitialDTO(zone.Id, zone.Version, zone.ParkingPlaces));
                    }
                    else if (zone.Version > version)
                    {
                        versionDiff = (int)(zone.Version - version);

                        if (versionDiff > Zone.PARKING_PLACE_CHANGES_MAX_SIZE)
                        {
                            initials.Add(new ParkingPlacesInitialDTO(zone.Id, zone.Version, zone.ParkingPlaces));
                        }
                        else
                        {
                            parkingPlaceChangesCount = zone.ParkingPlaceChanges.Count;
                            myParkingPlaceChanges    = zone.ParkingPlaceChanges
                                                       .Where(ppc => ppc.Value.Version > version)
                                                       .Select(ppc => new ParkingPlaceDTO(ppc.Value.Id, ppc.Value.Status))
                                                       .ToList();
                            changes.Add(new ParkingPlaceChangesDTO(zone.Id, zone.Version, myParkingPlaceChanges));
                        }
                    }
                }
            }

            return(Request.CreateResponse(HttpStatusCode.OK, new ParkingPlacesUpdatingDTO(changes, initials)));
        }