feat(grfn/bbbg): Add an attendee search form
Change-Id: I6f4d5102c1d3a36cb706a637196a2053739003bb Reviewed-on: https://cl.tvl.fyi/c/depot/+/4502 Reviewed-by: grfn <grfn@gws.fyi> Autosubmit: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									9af35bd683
								
							
						
					
					
						commit
						1b0ec2a6d6
					
				
					 3 changed files with 30 additions and 16 deletions
				
			
		|  | @ -96,6 +96,11 @@ | ||||||
| (defn make-database [config] | (defn make-database [config] | ||||||
|   (map->Database {:config config})) |   (map->Database {:config config})) | ||||||
| 
 | 
 | ||||||
|  | (defn database? [x] | ||||||
|  |   (or | ||||||
|  |    (instance? Database x) | ||||||
|  |    (and (map? x) (contains? x :pool)))) | ||||||
|  | 
 | ||||||
| ;;; | ;;; | ||||||
| ;;; Migrations | ;;; Migrations | ||||||
| ;;; | ;;; | ||||||
|  |  | ||||||
|  | @ -9,17 +9,16 @@ | ||||||
|     [merge-group-by merge-join merge-left-join merge-select merge-where]])) |     [merge-group-by merge-join merge-left-join merge-select merge-where]])) | ||||||
| 
 | 
 | ||||||
| (defn search | (defn search | ||||||
|   ([query] |   ([q] (search {:select [:attendee.*] :from [:attendee]} q)) | ||||||
|    (cond-> |   ([db-or-query q] | ||||||
|        {:select [:attendee.*] |    (if (db/database? db-or-query) | ||||||
|         :from [:attendee]} |      (db/list db-or-query (search q)) | ||||||
|      query |      (cond-> db-or-query | ||||||
|      (assoc |        q [:or | ||||||
|       :where [:or |           [:ilike :meetup_name (str "%" q "%")] | ||||||
|               [:ilike :meetup_name (str "%" query "%")] |           [:ilike :discord_name (str "%" q "%")]]))) | ||||||
|               [:ilike :discord_name (str "%" query "%")]]))) |   ([db query q] | ||||||
|   ([db query] |    (db/list db (search query q)))) | ||||||
|    (db/list db (search query)))) |  | ||||||
| 
 | 
 | ||||||
| (defn for-event | (defn for-event | ||||||
|   ([query event-id] |   ([query event-id] | ||||||
|  | @ -44,10 +43,17 @@ | ||||||
| 
 | 
 | ||||||
| (comment | (comment | ||||||
|   (def db (:db bbbg.core/system)) |   (def db (:db bbbg.core/system)) | ||||||
|  |   (db/database? db) | ||||||
|   (search db "gri") |   (search db "gri") | ||||||
|   (db/insert! db :attendee {::attendee/meetup-name "Griffin Smith" |   (db/insert! db :attendee {::attendee/meetup-name "Griffin Smith" | ||||||
|                             ::attendee/discord-name "grfn" |                             ::attendee/discord-name "grfn" | ||||||
|                             }) |                             }) | ||||||
| 
 | 
 | ||||||
|  |   (search db (with-stats) "gri") | ||||||
|  | 
 | ||||||
|  |   (search (with-stats) "gri") | ||||||
|  | 
 | ||||||
|   (db/list db (with-stats)) |   (db/list db (with-stats)) | ||||||
|  | 
 | ||||||
|  |   (map? db) | ||||||
|   ) |   ) | ||||||
|  |  | ||||||
|  | @ -12,11 +12,12 @@ | ||||||
|    [ring.util.response :refer [content-type redirect response]] |    [ring.util.response :refer [content-type redirect response]] | ||||||
|    [bbbg.views.flash :as flash])) |    [bbbg.views.flash :as flash])) | ||||||
| 
 | 
 | ||||||
| (defn- attendees-page [{:keys [attendees]}] | (defn- attendees-page [{:keys [attendees q]}] | ||||||
|   [:div |   [:div | ||||||
|    [:form.search-form {:method :get :action "/attendees"} |    [:form.search-form {:method :get :action "/attendees"} | ||||||
|     [:input {:type "search" |     [:input {:type "search" | ||||||
|              :name "q"}] |              :name "q" | ||||||
|  |              :value q}] | ||||||
|     [:input {:type "submit" |     [:input {:type "submit" | ||||||
|              :value "Search Attendees"}]] |              :value "Search Attendees"}]] | ||||||
|    [:table.attendees |    [:table.attendees | ||||||
|  | @ -40,9 +41,11 @@ | ||||||
|   (routes |   (routes | ||||||
|    (wrap-auth-required |    (wrap-auth-required | ||||||
|     (routes |     (routes | ||||||
|      (GET "/attendees" [] |      (GET "/attendees" [q] | ||||||
|        (let [attendees (db/list db (db.attendee/with-stats))] |        (let [attendees (db/list db (cond-> (db.attendee/with-stats) | ||||||
|          (page-response (attendees-page {:attendees attendees})))))) |                                      q (db.attendee/search q)))] | ||||||
|  |          (page-response (attendees-page {:attendees attendees | ||||||
|  |                                          :q q})))))) | ||||||
| 
 | 
 | ||||||
|    (GET "/attendees.json" [q event_id attended] |    (GET "/attendees.json" [q event_id attended] | ||||||
|      (let [results |      (let [results | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue