Skip to content

Commit

Permalink
reader json resturant
Browse files Browse the repository at this point in the history
  • Loading branch information
rigidus committed Apr 10, 2012
1 parent 40be538 commit 960db76
Show file tree
Hide file tree
Showing 2 changed files with 137 additions and 14 deletions.
4 changes: 2 additions & 2 deletions storage/orm.lisp
Expand Up @@ -320,7 +320,7 @@ alter user <dbuser> with password '<dbpassword>';
(latitude :col-type float :initform 0.0)
(longitude :col-type float :initform 0.0)
(postal-code :col-type string :initform 0.0)
(city-id :col-type float :initform 0.0)
(city-id :col-type integer :initform 0)
(city-code :col-type string :initform "")
(rating :col-type float :initform 0.0)
(rating-count :col-type integer :initform 0)
Expand Down Expand Up @@ -355,7 +355,7 @@ alter user <dbuser> with password '<dbpassword>';
:comment-count 89))

(let ((opt (make-option *makarena* 0 "name")))
(make-value opt "ru" "Makarena")
(make-value opt "ru" "Макарена")
(make-value opt "en" "Makarena"))
(let ((opt (make-option *makarena* 0 "description")))
(make-value opt "ru" "Мы очень любим вкусно есть, вкусно пить и душевно общаться. Этим мы занимались последние несколько лет в 7 странах и более чем в 300 ресторанах. Все эти годы мы не просто наслаждались, мы вынашивали наш проект. Проект, в котором объединено все самое вкусное и интересное, что нам самим удалось попробовать в Испании, Италии, Португалии, Мексике, странах Латинской Америки и Средней Азии. Мы рады, что теперь у нас есть возможность поделиться всем этим с Вами в Санкт-Петербурге (СПб).")
Expand Down
147 changes: 135 additions & 12 deletions storage/routes.lisp
Expand Up @@ -105,18 +105,141 @@
:lang
(aif (hunchentoot:get-parameter "lang") it "ru")))))


(defun get-restaurants (&key (city "spb") subway_id age age_type latitude longitude distance limit offset sort sort_type lang)
(let ((city-id (if (typep city 'integer)
city
(let ((dao-obj-lst (select-dao 'city (:= 'code city))))
(if (null dao-obj-lst)
(return-from get-subways "city not found")
(id (car dao-obj-lst)))))))
'stub))

(restas:define-route api-lang ("/api.php")
'stub)
(defun get-restaurants (&key city greater-age below-age subways latitude longitude distance limit offset sort sort_type lang)
(let ((rs (select-dao 'shop)))
(when city
(let ((city-id (if (typep city 'integer)
city
(let ((dao-obj-lst (select-dao 'city (:= 'code city))))
(if (null dao-obj-lst)
(return-from get-restaurants "city not found")
(id (car dao-obj-lst)))))))
(setf rs (remove-if-not #'(lambda (x)
(equal city-id (city-id x)))
rs))))
(when greater-age
(let ((timepoint (- (get-universal-time) (* 60 60 24 30 greater-age))))
(setf rs (remove-if-not #'(lambda (x)
(< timepoint (opening-date x)))
rs))))
(when below-age
(let ((timepoint (- (get-universal-time) (* 60 60 24 30 below-age))))
(setf rs (remove-if-not #'(lambda (x)
(> timepoint (opening-date x)))
rs))))
;; ...
rs))


(defmethod to-json (lang)
(list (cons :id 1)))



(print (let ((lang "ru")
(item *makarena*))
(list (cons :id (id item))
(cons :name (car (mapcar #'val (remove-if-not #'(lambda (x)
(equal (lang-id x) (get-lang-id lang)))
(load-values (car (load-options item :name "name")))))))
(cons :description (car (mapcar #'val (remove-if-not #'(lambda (x)
(equal (lang-id x) (get-lang-id lang)))
(load-values (car (load-options item :name "description")))))))
(cons :opening-date (opening-date item))
(cons :price (price item))
(cons :logo (logo item))
(cons :photo (photo item))
(cons :site (site item))
(list :capacity (cons :indoor (indoor item)) (cons :outdoor (outdoor item)))
`(:phone ,@(aif (load-options item :name "phone")
(mapcar #'(lambda (x)
(cons (name x) (val (car (load-values x)))))
(load-options item :parent-id (id (car it))))))
`(:address ,(cons :latitude (latitude item))
,(cons :longitude (longitude item))
,(cons :distance "calculate value")
,(cons :postal-code (postal-code item))
,(cons :city-id (city-id item))
,(cons :city-code (city-code item))
;(:SUBWAY--ID . 1)
,(cons :subway (list (mapcar #'(lambda (subway)
(car (mapcar #'val (remove-if-not #'(lambda (x)
(equal (lang-id x) (get-lang-id lang)))
(load-values (car (load-options subway :name "name")))))))
(query-dao
'subway
(format nil "SELECT * FROM subway WHERE id IN (SELECT subway_id FROM shop_2_subway WHERE shop_id = ~A)"
(id item))))))
,(cons :street (car (mapcar #'val (remove-if-not #'(lambda (x)
(equal (lang-id x) (get-lang-id lang)))
(load-values (car (load-options item :name "street")))))))
,(cons :building (car (mapcar #'val (remove-if-not #'(lambda (x)
(equal (lang-id x) (get-lang-id lang)))
(load-values (car (load-options item :name "building"))))))))
`(:estimate ,(cons :rating (rating item))
,(cons :rating-count (rating-count item))
,(cons :comment-count (comment-count item)))
;; (:WORKTIME (("12:00:00" "23:00:00"))
;; (("08:00:00" "12:00:00") ("15:00:00" "23:00:00")) NIL
;; (("08:00:00" "12:00:00") ("15:00:00" "22:00:00")) NIL NIL
;; (("11:00:00" "23:00:00"))))
)))





((:ID . 1) (:NAME . "Name")
(:DESCRIPTION . "Description")
(:OPENING--DATE . 1310786880)
(:PRICE . 3)
(:LOGO . "/images/restaurnt/1.jpg")
(:PHOTO . "/images/restaurnt/1.jpg")
(:SITE . "http://macarenabar.ru")
(:CAPACITY (:INDOOR . "162")
(:OUTDOOR . "40"))
(:PHONE (:MAIN . "+78121112233")
(:FAX . "")
(:DELIVERY . "+78123332211")
(:BANQUET . "+78123332211"))
(:ADDRESS (:LATITUDE . 59.8236)
(:LONGITUDE . 30.3373)
(:DISTANCE . 10.4142)
(:POSTAL--CODE . "307660")
(:COUNTRY--ID . 1)
(:CITY--ID . 2)
(:SUBWAY--ID . 1)
(:STREET . "Good street")
(:BUILDING . "128"))
(:ESTIMATE (:RATING . 3.34)
(:RATING--COUNT . 96)
(:COMMENT--COUNT . 89))
(:WORKTIME (("12:00:00" "23:00:00"))
(("08:00:00" "12:00:00") ("15:00:00" "23:00:00")) NIL
(("08:00:00" "12:00:00") ("15:00:00" "22:00:00")) NIL NIL
(("11:00:00" "23:00:00"))))

;; haversinus
;; http://js-php.ru/web-development/distance-from-dot-to-dot/
;; lat1=deg2rad(lat1);
;; lng1=deg2rad(lng1);
;; lat2=deg2rad(lat2);
;; lng2=deg2rad(lng2);
;; return Math.round( 6378137 * Math.acos( Math.cos( lat1 ) * Math.cos( lat2 ) * Math.cos( lng1 - lng2 ) + Math.sin( lat1 ) * Math.sin( lat2 ) ) );
(defun haversinus (latitude longitude)
(let ((num (format nil "SQRT(POW(COS(RADIANS(latitude)) * SIN(ABS(RADIANS(~A)-RADIANS(longitude))),2) + POW(COS(RADIANS(~A)) * SIN(RADIANS(latitude)) - SIN(RADIANS(~A)) * COS(RADIANS(latitude))*COS(ABS(RADIANS(~A)-RADIANS(longitude))),2))'" longitude latitude latitude longitude))
(den (format nil "SIN(RADIANS(latitude))*SIN(RADIANS(~A)) + COS(RADIANS(latitude))*COS(RADIANS(~A))*COS(ABS(RADIANS(~A)-RADIANS(longitude)))"
latitude latitude $longitude))
(res (format nil "ATAN(~A/(~A)) * 6373" num den)))
res))

(defun nearest (latitude_start longitude_start distance)
(let ((haversinus (haversinus latitude_start longitude_start)))
(format nil "SELECT *, ~A as distance FROM table WHERE distance < ~A"
haversinus distance)))


(get-restaurants :city "spb")


(restas:define-route api-lang ("/api.php")
Expand Down

0 comments on commit 960db76

Please sign in to comment.