diff --git a/perf-test/clj/reitit/opensensors_routing_test.clj b/perf-test/clj/reitit/opensensors_routing_test.clj index 63ec8f84..d25b7942 100644 --- a/perf-test/clj/reitit/opensensors_routing_test.clj +++ b/perf-test/clj/reitit/opensensors_routing_test.clj @@ -281,78 +281,78 @@ (def opensensors-compojure-api-routes (routes (context "/v1" [] - (context "/public" [] - (ANY "/topics/:topic" [] {:name :test/route4} handler) - (ANY "/users/:user-id" [] {:name :test/route16} handler) - (ANY "/orgs/:org-id" [] {:name :test/route18} handler)) - (context "/users/:user-id" [] - (ANY "/orgs/:org-id" [] {:name :test/route5} handler) - (ANY "/invitations" [] {:name :test/route7} handler) - (ANY "/topics" [] {:name :test/route9} handler) - (ANY "/bookmarks/followers" [] {:name :test/route10} handler) - (context "/devices" [] - (ANY "/" [] {:name :test/route15} handler) - #_(ANY "/bulk" [] {:name :test/route21} handler) - (ANY "/:client-id" [] {:name :test/route35} handler) - (ANY "/:client-id/reset-password" [] {:name :test/route49} handler)) - (ANY "/device-errors" [] {:name :test/route22} handler) - (ANY "/usage-stats" [] {:name :test/route24} handler) - (ANY "/claim-device/:client-id" [] {:name :test/route26} handler) - (ANY "/owned-orgs" [] {:name :test/route31} handler) - (ANY "/bookmark/:topic" [] {:name :test/route33} handler) - (ANY "/" [] {:name :test/route36} handler) - (ANY "/orgs" [] {:name :test/route52} handler) - (ANY "/api-key" [] {:name :test/route43} handler) - (ANY "/bookmarks" [] {:name :test/route56} handler)) - (ANY "/search/topics/:term" [] {:name :test/route6} handler) - (context "/orgs" [] - (ANY "/" [] {:name :test/route55} handler) - (context "/:org-id" [] - (context "/devices" [] - (ANY "/" [] {:name :test/route37} handler) - (ANY "/:device-id" [] {:name :test/route13} handler) - #_(ANY "/:batch/:type" [] {:name :test/route8} handler)) - (ANY "/usage-stats" [] {:name :test/route12} handler) - (ANY "/invitations" [] {:name :test/route19} handler) - (context "/members" [] - (ANY "/:user-id" [] {:name :test/route34} handler) - (ANY "/" [] {:name :test/route38} handler) - #_(ANY "/invitation-data/:user-id" [] {:name :test/route39} handler)) - (ANY "/errors" [] {:name :test/route17} handler) - (ANY "/" [] {:name :test/route42} handler) - (ANY "/confirm-membership/:token" [] {:name :test/route46} handler) - (ANY "/topics" [] {:name :test/route57} handler))) - (context "/messages" [] - (ANY "/user/:user-id" [] {:name :test/route14} handler) - (ANY "/device/:client-id" [] {:name :test/route30} handler) - (ANY "/topic/:topic" [] {:name :test/route48} handler)) - (context "/topics" [] - (ANY "/:topic" [] {:name :test/route32} handler) - (ANY "/" [] {:name :test/route54} handler)) - (ANY "/whoami" [] {:name :test/route41} handler) - (ANY "/login" [] {:name :test/route51} handler)) + (context "/public" [] + (ANY "/topics/:topic" [] {:name :test/route4} handler) + (ANY "/users/:user-id" [] {:name :test/route16} handler) + (ANY "/orgs/:org-id" [] {:name :test/route18} handler)) + (context "/users/:user-id" [] + (ANY "/orgs/:org-id" [] {:name :test/route5} handler) + (ANY "/invitations" [] {:name :test/route7} handler) + (ANY "/topics" [] {:name :test/route9} handler) + (ANY "/bookmarks/followers" [] {:name :test/route10} handler) + (context "/devices" [] + (ANY "/" [] {:name :test/route15} handler) + #_(ANY "/bulk" [] {:name :test/route21} handler) + (ANY "/:client-id" [] {:name :test/route35} handler) + (ANY "/:client-id/reset-password" [] {:name :test/route49} handler)) + (ANY "/device-errors" [] {:name :test/route22} handler) + (ANY "/usage-stats" [] {:name :test/route24} handler) + (ANY "/claim-device/:client-id" [] {:name :test/route26} handler) + (ANY "/owned-orgs" [] {:name :test/route31} handler) + (ANY "/bookmark/:topic" [] {:name :test/route33} handler) + (ANY "/" [] {:name :test/route36} handler) + (ANY "/orgs" [] {:name :test/route52} handler) + (ANY "/api-key" [] {:name :test/route43} handler) + (ANY "/bookmarks" [] {:name :test/route56} handler)) + (ANY "/search/topics/:term" [] {:name :test/route6} handler) + (context "/orgs" [] + (ANY "/" [] {:name :test/route55} handler) + (context "/:org-id" [] + (context "/devices" [] + (ANY "/" [] {:name :test/route37} handler) + (ANY "/:device-id" [] {:name :test/route13} handler) + #_(ANY "/:batch/:type" [] {:name :test/route8} handler)) + (ANY "/usage-stats" [] {:name :test/route12} handler) + (ANY "/invitations" [] {:name :test/route19} handler) + (context "/members" [] + (ANY "/:user-id" [] {:name :test/route34} handler) + (ANY "/" [] {:name :test/route38} handler) + #_(ANY "/invitation-data/:user-id" [] {:name :test/route39} handler)) + (ANY "/errors" [] {:name :test/route17} handler) + (ANY "/" [] {:name :test/route42} handler) + (ANY "/confirm-membership/:token" [] {:name :test/route46} handler) + (ANY "/topics" [] {:name :test/route57} handler))) + (context "/messages" [] + (ANY "/user/:user-id" [] {:name :test/route14} handler) + (ANY "/device/:client-id" [] {:name :test/route30} handler) + (ANY "/topic/:topic" [] {:name :test/route48} handler)) + (context "/topics" [] + (ANY "/:topic" [] {:name :test/route32} handler) + (ANY "/" [] {:name :test/route54} handler)) + (ANY "/whoami" [] {:name :test/route41} handler) + (ANY "/login" [] {:name :test/route51} handler)) (context "/v2" [] - (ANY "/whoami" [] {:name :test/route1} handler) - (context "/users/:user-id" [] - (ANY "/datasets" [] {:name :test/route2} handler) - (ANY "/devices" [] {:name :test/route25} handler) - (context "/topics" [] - (ANY "/bulk" [] {:name :test/route29} handler) - (ANY "/" [] {:name :test/route54} handler)) - (ANY "/" [] {:name :test/route45} handler)) - (context "/public" [] - (context "/projects/:project-id" [] - (ANY "/datasets" [] {:name :test/route3} handler) - (ANY "/" [] {:name :test/route27} handler)) - (ANY "/messages/dataset/bulk" [] {:name :test/route20} handler) - (ANY "/datasets/:dataset-id" [] {:name :test/route28} handler) - (ANY "/messages/dataset/:dataset-id" [] {:name :test/route53} handler)) - (ANY "/datasets/:dataset-id" [] {:name :test/route11} handler) - (ANY "/login" [] {:name :test/route23} handler) - (ANY "/orgs/:org-id/topics" [] {:name :test/route40} handler) - (ANY "/schemas" [] {:name :test/route44} handler) - (ANY "/topics/:topic" [] {:name :test/route47} handler) - (ANY "/topics" [] {:name :test/route50} handler)))) + (ANY "/whoami" [] {:name :test/route1} handler) + (context "/users/:user-id" [] + (ANY "/datasets" [] {:name :test/route2} handler) + (ANY "/devices" [] {:name :test/route25} handler) + (context "/topics" [] + (ANY "/bulk" [] {:name :test/route29} handler) + (ANY "/" [] {:name :test/route54} handler)) + (ANY "/" [] {:name :test/route45} handler)) + (context "/public" [] + (context "/projects/:project-id" [] + (ANY "/datasets" [] {:name :test/route3} handler) + (ANY "/" [] {:name :test/route27} handler)) + (ANY "/messages/dataset/bulk" [] {:name :test/route20} handler) + (ANY "/datasets/:dataset-id" [] {:name :test/route28} handler) + (ANY "/messages/dataset/:dataset-id" [] {:name :test/route53} handler)) + (ANY "/datasets/:dataset-id" [] {:name :test/route11} handler) + (ANY "/login" [] {:name :test/route23} handler) + (ANY "/orgs/:org-id/topics" [] {:name :test/route40} handler) + (ANY "/schemas" [] {:name :test/route44} handler) + (ANY "/topics/:topic" [] {:name :test/route47} handler) + (ANY "/topics" [] {:name :test/route50} handler)))) (def opensensors-pedestal-routes (map-tree/router @@ -493,12 +493,12 @@ compojure-api-f #(opensensors-compojure-api-routes {:uri % :request-method :get}) pedestal-f #(pedestal/find-route opensensors-pedestal-routes {:path-info % :request-method :get})] - (bench! routes true "reitit" reitit-f) ;; 2538ns 10% - (bench! routes true "pedestal" pedestal-f) ;; 2737ns 11% - (bench! routes true "reitit-ring" reitit-ring-f) ;; 2845ns 11% - (bench! routes true "compojure-api" compojure-api-f) ;; 10215ns 41% - (bench! routes true "bidi" bidi-f) ;; 19298ns 77% - (bench! routes true "ataraxy" ataraxy-f) ;; 24950ns 100% + (bench! routes true "reitit" reitit-f) ;; 2538ns 10% + (bench! routes true "pedestal" pedestal-f) ;; 2737ns 11% + (bench! routes true "reitit-ring" reitit-ring-f) ;; 2845ns 11% + (bench! routes true "compojure-api" compojure-api-f) ;; 10215ns 41% + (bench! routes true "bidi" bidi-f) ;; 19298ns 77% + (bench! routes true "ataraxy" ataraxy-f) ;; 24950ns 100% )) @@ -509,499 +509,9 @@ ;; CQRSish ;; -(def commands - #{:upsert-appeal - :upsert-appeal-verdict - :delete-appeal - :delete-appeal-verdict - :mark-seen - :mark-everything-seen - :upsert-application-handler - :remove-application-handler - :cancel-inforequest - :cancel-application - :cancel-application-authority - :undo-cancellation - :request-for-complement - :cleanup-krysp - :submit-application - :refresh-ktj - :save-application-drawings - :create-application - :add-operation - :update-op-description - :change-primary-operation - :change-permit-sub-type - :change-location - :change-application-state - :return-to-draft - :change-warranty-start-date - :change-warranty-end-date - :add-link-permit - :remove-link-permit-by-app-id - :create-change-permit - :create-continuation-period-permit - :convert-to-application - :add-bulletin-comment - :move-to-proclaimed - :move-to-verdict-given - :move-to-final - :save-proclaimed-bulletin - :save-verdict-given-bulletin - :set-municipality-hears-neighbors - :archive-documents - :mark-pre-verdict-phase-archived - :save-asianhallinta-config - :create-assignment - :update-assignment - :complete-assignment - :bind-attachment - :bind-attachments - :set-attachment-type - :approve-attachment - :reject-attachment - :reject-attachment-note - :create-attachments - :create-ram-attachment - :delete-attachment - :delete-attachment-version - :upload-attachment - :rotate-pdf - :upsert-stamp-template - :delete-stamp-template - :stamp-attachments - :sign-attachments - :set-attachment-meta - :set-attachment-not-needed - :set-attachments-as-verdict-attachment - :set-attachment-as-construction-time - :set-attachment-visibility - :convert-to-pdfa - :invite-with-role - :approve-invite - :decline-invitation - :remove-auth - :change-auth - :unsubscribe-notifications - :subscribe-notifications - :set-calendar-enabled-for-authority - :create-calendar-slots - :update-calendar-slot - :delete-calendar-slot - :add-reservation-type-for-organization - :update-reservation-type - :delete-reservation-type - :reserve-calendar-slot - :accept-reservation - :decline-reservation - :cancel-reservation - :mark-reservation-update-seen - :add-campaign - :delete-campaign - :change-email-init - :change-email - :can-target-comment-to-authority - :can-mark-answered - :add-comment - :company-update - :company-lock - :company-user-update - :company-user-delete - :company-user-delete-all - :company-invite-user - :company-add-user - :company-invite - :company-cancel-invite - :save-company-tags - :update-application-company-notes - :inform-construction-started - :inform-construction-ready - :copy-application - :update-3d-map-server-details - :set-3d-map-enabled - :redirect-to-3d-map - :create-archiving-project - :submit-archiving-project - :create-doc - :remove-doc - :set-doc-status - :update-doc - :update-task - :remove-document-data - :approve-doc - :reject-doc - :reject-doc-note - :set-user-to-document - :set-current-user-to-document - :set-company-to-document - :set-feature - :remove-uploaded-file - :create-foreman-application - :update-foreman-other-applications - :link-foreman-task - :update-guest-authority-organization - :remove-guest-authority-organization - :invite-guest - :toggle-guest-subscription - :delete-guest-application - :info-link-delete - :info-link-reorder - :info-link-upsert - :mark-seen-organization-links - :create-inspection-summary-template - :delete-inspection-summary-template - :modify-inspection-summary-template - :set-inspection-summary-template-for-operation - :create-inspection-summary - :delete-inspection-summary - :toggle-inspection-summary-locking - :add-target-to-inspection-summary - :edit-inspection-summary-target - :remove-target-from-inspection-summary - :set-target-status - :set-inspection-date - :approve-application - :move-attachments-to-backing-system - :parties-as-krysp - :merge-details-from-krysp - :application-to-asianhallinta - :attachments-to-asianhallinta - :order-verdict-attachment-prints - :frontend-log - :reset-frontend-log - :new-verdict-template - :set-verdict-template-name - :save-verdict-template-draft-value - :publish-verdict-template - :toggle-delete-verdict-template - :copy-verdict-template - :save-verdict-template-settings-value - :add-verdict-template-review - :update-verdict-template-review - :add-verdict-template-plan - :update-verdict-template-plan - :set-default-operation-verdict-template - :upsert-phrase - :delete-phrase - :neighbor-add - :neighbor-add-owners - :neighbor-update - :neighbor-remove - :neighbor-send-invite - :neighbor-mark-done - :neighbor-response - :change-urgency - :add-authority-notice - :add-application-tags - :init-sign - :cancel-sign - :convert-to-normal-inforequests - :update-organization - :add-scope - :create-organization - :add-organization-link - :update-organization-link - :remove-organization-link - :update-allowed-autologin-ips - :set-organization-selected-operations - :organization-operations-attachments - :set-organization-app-required-fields-filling-obligatory - :set-automatic-ok-for-attachments - :set-organization-assignments - :set-organization-inspection-summaries - :set-organization-extended-construction-waste-report - :set-organization-validate-verdict-given-date - :set-organization-use-attachment-links-integration - :set-organization-calendars-enabled - :set-organization-boolean-attribute - :set-organization-permanent-archive-start-date - :set-organization-neighbor-order-email - :set-organization-submit-notification-email - :set-organization-inforequest-notification-email - :set-organization-default-reservation-location - :set-krysp-endpoint - :set-kopiolaitos-info - :save-vendor-backend-redirect-config - :update-organization-name - :save-organization-tags - :update-map-server-details - :update-user-layers - :update-suti-server-details - :section-toggle-enabled - :section-toggle-operation - :upsert-handler-role - :toggle-handler-role - :upsert-assignment-trigger - :remove-assignment-trigger - :update-docstore-info - :browser-timing - :create-application-from-previous-permit - :screenmessages-add - :screenmessages-reset - :add-single-sign-on-key - :update-single-sign-on-key - :remove-single-sign-on-key - :create-statement-giver - :delete-statement-giver - :request-for-statement - :ely-statement-request - :delete-statement - :save-statement-as-draft - :give-statement - :request-for-statement-reply - :save-statement-reply-as-draft - :reply-statement - :suti-toggle-enabled - :suti-toggle-operation - :suti-www - :suti-update-id - :suti-update-added - :create-task - :delete-task - :approve-task - :reject-task - :review-done - :mark-review-faulty - :resend-review-to-backing-system - :set-tos-function-for-operation - :remove-tos-function-from-operation - :set-tos-function-for-application - :force-fix-tos-function-for-application - :store-tos-metadata-for-attachment - :store-tos-metadata-for-application - :store-tos-metadata-for-process - :set-myyntipalvelu-for-attachment - :create-user - :create-rest-api-user - :update-user - :applicant-to-authority - :update-default-application-filter - :save-application-filter - :remove-application-filter - :update-user-organization - :remove-user-organization - :update-user-roles - :check-password - :change-passwd - :reset-password - :admin-reset-password - :set-user-enabled - :login - :impersonate-authority - :register-user - :confirm-account-link - :retry-rakentajafi - :remove-user-attachment - :copy-user-attachments-to-application - :remove-user-notification - :notifications-update - :check-for-verdict - :new-verdict-draft - :save-verdict-draft - :publish-verdict - :delete-verdict - :sign-verdict - :create-digging-permit}) +(def commands #{:upsert-appeal :upsert-appeal-verdict :delete-appeal :delete-appeal-verdict :mark-seen :mark-everything-seen :upsert-application-handler :remove-application-handler :cancel-inforequest :cancel-application :cancel-application-authority :undo-cancellation :request-for-complement :cleanup-krysp :submit-application :refresh-ktj :save-application-drawings :create-application :add-operation :update-op-description :change-primary-operation :change-permit-sub-type :change-location :change-application-state :return-to-draft :change-warranty-start-date :change-warranty-end-date :add-link-permit :remove-link-permit-by-app-id :create-change-permit :create-continuation-period-permit :convert-to-application :add-bulletin-comment :move-to-proclaimed :move-to-verdict-given :move-to-final :save-proclaimed-bulletin :save-verdict-given-bulletin :set-municipality-hears-neighbors :archive-documents :mark-pre-verdict-phase-archived :save-asianhallinta-config :create-assignment :update-assignment :complete-assignment :bind-attachment :bind-attachments :set-attachment-type :approve-attachment :reject-attachment :reject-attachment-note :create-attachments :create-ram-attachment :delete-attachment :delete-attachment-version :upload-attachment :rotate-pdf :upsert-stamp-template :delete-stamp-template :stamp-attachments :sign-attachments :set-attachment-meta :set-attachment-not-needed :set-attachments-as-verdict-attachment :set-attachment-as-construction-time :set-attachment-visibility :convert-to-pdfa :invite-with-role :approve-invite :decline-invitation :remove-auth :change-auth :unsubscribe-notifications :subscribe-notifications :set-calendar-enabled-for-authority :create-calendar-slots :update-calendar-slot :delete-calendar-slot :add-reservation-type-for-organization :update-reservation-type :delete-reservation-type :reserve-calendar-slot :accept-reservation :decline-reservation :cancel-reservation :mark-reservation-update-seen :add-campaign :delete-campaign :change-email-init :change-email :can-target-comment-to-authority :can-mark-answered :add-comment :company-update :company-lock :company-user-update :company-user-delete :company-user-delete-all :company-invite-user :company-add-user :company-invite :company-cancel-invite :save-company-tags :update-application-company-notes :inform-construction-started :inform-construction-ready :copy-application :update-3d-map-server-details :set-3d-map-enabled :redirect-to-3d-map :create-archiving-project :submit-archiving-project :create-doc :remove-doc :set-doc-status :update-doc :update-task :remove-document-data :approve-doc :reject-doc :reject-doc-note :set-user-to-document :set-current-user-to-document :set-company-to-document :set-feature :remove-uploaded-file :create-foreman-application :update-foreman-other-applications :link-foreman-task :update-guest-authority-organization :remove-guest-authority-organization :invite-guest :toggle-guest-subscription :delete-guest-application :info-link-delete :info-link-reorder :info-link-upsert :mark-seen-organization-links :create-inspection-summary-template :delete-inspection-summary-template :modify-inspection-summary-template :set-inspection-summary-template-for-operation :create-inspection-summary :delete-inspection-summary :toggle-inspection-summary-locking :add-target-to-inspection-summary :edit-inspection-summary-target :remove-target-from-inspection-summary :set-target-status :set-inspection-date :approve-application :move-attachments-to-backing-system :parties-as-krysp :merge-details-from-krysp :application-to-asianhallinta :attachments-to-asianhallinta :order-verdict-attachment-prints :frontend-log :reset-frontend-log :new-verdict-template :set-verdict-template-name :save-verdict-template-draft-value :publish-verdict-template :toggle-delete-verdict-template :copy-verdict-template :save-verdict-template-settings-value :add-verdict-template-review :update-verdict-template-review :add-verdict-template-plan :update-verdict-template-plan :set-default-operation-verdict-template :upsert-phrase :delete-phrase :neighbor-add :neighbor-add-owners :neighbor-update :neighbor-remove :neighbor-send-invite :neighbor-mark-done :neighbor-response :change-urgency :add-authority-notice :add-application-tags :init-sign :cancel-sign :convert-to-normal-inforequests :update-organization :add-scope :create-organization :add-organization-link :update-organization-link :remove-organization-link :update-allowed-autologin-ips :set-organization-selected-operations :organization-operations-attachments :set-organization-app-required-fields-filling-obligatory :set-automatic-ok-for-attachments :set-organization-assignments :set-organization-inspection-summaries :set-organization-extended-construction-waste-report :set-organization-validate-verdict-given-date :set-organization-use-attachment-links-integration :set-organization-calendars-enabled :set-organization-boolean-attribute :set-organization-permanent-archive-start-date :set-organization-neighbor-order-email :set-organization-submit-notification-email :set-organization-inforequest-notification-email :set-organization-default-reservation-location :set-krysp-endpoint :set-kopiolaitos-info :save-vendor-backend-redirect-config :update-organization-name :save-organization-tags :update-map-server-details :update-user-layers :update-suti-server-details :section-toggle-enabled :section-toggle-operation :upsert-handler-role :toggle-handler-role :upsert-assignment-trigger :remove-assignment-trigger :update-docstore-info :browser-timing :create-application-from-previous-permit :screenmessages-add :screenmessages-reset :add-single-sign-on-key :update-single-sign-on-key :remove-single-sign-on-key :create-statement-giver :delete-statement-giver :request-for-statement :ely-statement-request :delete-statement :save-statement-as-draft :give-statement :request-for-statement-reply :save-statement-reply-as-draft :reply-statement :suti-toggle-enabled :suti-toggle-operation :suti-www :suti-update-id :suti-update-added :create-task :delete-task :approve-task :reject-task :review-done :mark-review-faulty :resend-review-to-backing-system :set-tos-function-for-operation :remove-tos-function-from-operation :set-tos-function-for-application :force-fix-tos-function-for-application :store-tos-metadata-for-attachment :store-tos-metadata-for-application :store-tos-metadata-for-process :set-myyntipalvelu-for-attachment :create-user :create-rest-api-user :update-user :applicant-to-authority :update-default-application-filter :save-application-filter :remove-application-filter :update-user-organization :remove-user-organization :update-user-roles :check-password :change-passwd :reset-password :admin-reset-password :set-user-enabled :login :impersonate-authority :register-user :confirm-account-link :retry-rakentajafi :remove-user-attachment :copy-user-attachments-to-application :remove-user-notification :notifications-update :check-for-verdict :new-verdict-draft :save-verdict-draft :publish-verdict :delete-verdict :sign-verdict :create-digging-permit}) -(def queries - #{:comments - :actions - :allowed-actions - :allowed-actions-for-category - :admin-attachment-report - :appeals - :application - :application-authorities - :application-commenters - :enable-accordions - :party-document-names - :application-submittable - :inforequest-markers - :change-application-state-targets - :link-permit-required - :app-matches-for-link-permits - :all-operations-in - :application-handlers - :application-organization-handler-roles - :application-organization-archive-enabled - :application-bulletins - :application-bulletin-municipalities - :application-bulletin-states - :bulletin - :bulletin-versions - :bulletin-comments - :publish-bulletin-enabled - :municipality-hears-neighbors-visible - :applications-search - :applications-search-default - :applications-for-new-appointment-page - :get-application-operations - :applications - :latest-applications - :event-search - :tasks-tab-visible - :application-info-tab-visible - :application-summary-tab-visible - :application-verdict-tab-visible - :document-states - :archiving-operations-enabled - :permanent-archive-enabled - :application-in-final-archiving-state - :asianhallinta-config - :assignments-for-application - :assignment-targets - :assignments-search - :assignment-count - :assignments - :assignment - :bind-attachments-job - :attachments - :attachment - :attachment-groups - :attachments-filters - :attachments-tag-groups - :attachment-types - :ram-linked-attachments - :attachment-operations - :stamp-templates - :custom-stamps - :stamp-attachments-job - :signing-possible - :set-attachment-group-enabled - :invites - :my-calendars - :calendar - :calendars-for-authority-admin - :calendar-slots - :reservation-types-for-organization - :available-calendar-slots - :application-calendar-config - :calendar-actions-required - :applications-with-appointments - :my-reserved-slots - :campaigns - :campaign - :company - :company-users-for-person-selector - :company-tags - :companies - :user-company-locked - :company-search-user - :remove-company-tag-ok - :company-notes - :enable-company-search - :info-construction-status - :copy-application-invite-candidates - :application-copyable-to-location - :application-copyable - :source-application - :user-is-pure-digitizer - :digitizing-enabled - :document - :validate-doc - :fetch-validation-errors - :schemas - :features - :apply-fixture - :foreman-history - :foreman-applications - :resolve-guest-authority-candidate - :guest-authorities-organization - :application-guests - :guest-authorities-application-organization - :get-link-account-token - :info-links - :organization-links - :organization-inspection-summary-settings - :inspection-summaries-for-application - :get-building-info-from-wfs - :external-api-enabled - :integration-messages - :ely-statement-types - :frontend-log-entries - :newest-version - :verdict-templates - :verdict-template-categories - :verdict-template - :verdict-template-settings - :verdict-template-reviews - :verdict-template-plans - :default-operation-verdict-templates - :organization-phrases - :application-phrases - :owners - :application-property-owners - :municipality-borders - :active-municipalities - :municipality-active - :neighbor-application - :authority-notice - :find-sign-process - :organization-by-user - :all-attachment-types-by-user - :organization-name-by-user - :user-organizations-for-permit-type - :user-organizations-for-archiving-project - :organizations - :allowed-autologin-ips-for-organization - :organization-by-id - :permit-types - :municipalities-with-organization - :municipalities - :all-operations-for-organization - :selected-operations-for-municipality - :addable-operations - :organization-details - :krysp-config - :kopiolaitos-config - :get-organization-names - :vendor-backend-redirect-config - :remove-tag-ok - :get-organization-tags - :get-organization-areas - :get-map-layers-data - :municipality-for-property - :property-borders - :screenmessages - :get-single-sign-on-keys - :get-organizations-statement-givers - :get-possible-statement-statuses - :get-statement-givers - :statement-replies-enabled - :statement-is-replyable - :authorized-for-requesting-statement-reply - :statement-attachment-allowed - :statements-after-approve-allowed - :neighbors-statement-enabled - :suti-admin-details - :suti-operations - :suti-application-data - :suti-application-products - :suti-pre-sent-state - :task-types-for-application - :review-can-be-marked-done - :is-end-review - :available-tos-functions - :tos-metadata-schema - :case-file-data - :tos-operations-enabled - :common-area-application - :user - :users - :users-in-same-organizations - :user-by-email - :users-for-datatables - :saved-application-filters - :redirect-after-login - :user-attachments - :add-user-attachment-allowed - :email-in-use - :enable-foreman-search - :calendars-enabled - :verdict-attachment-type - :selected-digging-operations-for-organization - :ya-extensions - :approve-ya-extension}) +(def queries #{:comments :actions :allowed-actions :allowed-actions-for-category :admin-attachment-report :appeals :application :application-authorities :application-commenters :enable-accordions :party-document-names :application-submittable :inforequest-markers :change-application-state-targets :link-permit-required :app-matches-for-link-permits :all-operations-in :application-handlers :application-organization-handler-roles :application-organization-archive-enabled :application-bulletins :application-bulletin-municipalities :application-bulletin-states :bulletin :bulletin-versions :bulletin-comments :publish-bulletin-enabled :municipality-hears-neighbors-visible :applications-search :applications-search-default :applications-for-new-appointment-page :get-application-operations :applications :latest-applications :event-search :tasks-tab-visible :application-info-tab-visible :application-summary-tab-visible :application-verdict-tab-visible :document-states :archiving-operations-enabled :permanent-archive-enabled :application-in-final-archiving-state :asianhallinta-config :assignments-for-application :assignment-targets :assignments-search :assignment-count :assignments :assignment :bind-attachments-job :attachments :attachment :attachment-groups :attachments-filters :attachments-tag-groups :attachment-types :ram-linked-attachments :attachment-operations :stamp-templates :custom-stamps :stamp-attachments-job :signing-possible :set-attachment-group-enabled :invites :my-calendars :calendar :calendars-for-authority-admin :calendar-slots :reservation-types-for-organization :available-calendar-slots :application-calendar-config :calendar-actions-required :applications-with-appointments :my-reserved-slots :campaigns :campaign :company :company-users-for-person-selector :company-tags :companies :user-company-locked :company-search-user :remove-company-tag-ok :company-notes :enable-company-search :info-construction-status :copy-application-invite-candidates :application-copyable-to-location :application-copyable :source-application :user-is-pure-digitizer :digitizing-enabled :document :validate-doc :fetch-validation-errors :schemas :features :apply-fixture :foreman-history :foreman-applications :resolve-guest-authority-candidate :guest-authorities-organization :application-guests :guest-authorities-application-organization :get-link-account-token :info-links :organization-links :organization-inspection-summary-settings :inspection-summaries-for-application :get-building-info-from-wfs :external-api-enabled :integration-messages :ely-statement-types :frontend-log-entries :newest-version :verdict-templates :verdict-template-categories :verdict-template :verdict-template-settings :verdict-template-reviews :verdict-template-plans :default-operation-verdict-templates :organization-phrases :application-phrases :owners :application-property-owners :municipality-borders :active-municipalities :municipality-active :neighbor-application :authority-notice :find-sign-process :organization-by-user :all-attachment-types-by-user :organization-name-by-user :user-organizations-for-permit-type :user-organizations-for-archiving-project :organizations :allowed-autologin-ips-for-organization :organization-by-id :permit-types :municipalities-with-organization :municipalities :all-operations-for-organization :selected-operations-for-municipality :addable-operations :organization-details :krysp-config :kopiolaitos-config :get-organization-names :vendor-backend-redirect-config :remove-tag-ok :get-organization-tags :get-organization-areas :get-map-layers-data :municipality-for-property :property-borders :screenmessages :get-single-sign-on-keys :get-organizations-statement-givers :get-possible-statement-statuses :get-statement-givers :statement-replies-enabled :statement-is-replyable :authorized-for-requesting-statement-reply :statement-attachment-allowed :statements-after-approve-allowed :neighbors-statement-enabled :suti-admin-details :suti-operations :suti-application-data :suti-application-products :suti-pre-sent-state :task-types-for-application :review-can-be-marked-done :is-end-review :available-tos-functions :tos-metadata-schema :case-file-data :tos-operations-enabled :common-area-application :user :users :users-in-same-organizations :user-by-email :users-for-datatables :saved-application-filters :redirect-after-login :user-attachments :add-user-attachment-allowed :email-in-use :enable-foreman-search :calendars-enabled :verdict-attachment-type :selected-digging-operations-for-organization :ya-extensions :approve-ya-extension}) (def cqrs-routes (mapv (fn [command] [(str "/command/" (name command)) {:post handler :name command}]) commands)) diff --git a/src/reitit/core.cljc b/src/reitit/core.cljc index bf252217..6ee1c63a 100644 --- a/src/reitit/core.cljc +++ b/src/reitit/core.cljc @@ -70,7 +70,9 @@ [p m (if compile (compile route opts))]) (defprotocol Routing + (router-type [this]) (routes [this]) + (options [this]) (route-names [this]) (match-by-path [this path]) (match-by-name [this name] [this name params])) @@ -97,25 +99,6 @@ :coerce (fn [route _] route) :compile (fn [[_ {:keys [handler]}] _] handler)}) -(defrecord LinearRouter [routes names data lookup] - Routing - (routes [_] - routes) - (route-names [_] - names) - (match-by-path [_ path] - (reduce - (fn [acc ^Route route] - (if-let [params ((:matcher route) path)] - (reduced (->Match (:path route) (:meta route) (:handler route) params path)))) - nil data)) - (match-by-name [_ name] - (if-let [match (lookup name)] - (match nil))) - (match-by-name [_ name params] - (if-let [match (lookup name)] - (match params)))) - (defn linear-router "Creates a [[LinearRouter]] from resolved routes and optional expanded options. See [[router]] for available options" @@ -132,26 +115,33 @@ (->PartialMatch p meta handler % params))] [(conj data route) (if name (assoc lookup name f) lookup)])) - [[] {}] compiled)] - (->LinearRouter routes names data lookup)))) - -(defrecord LookupRouter [routes names data lookup] - Routing - (routes [_] - routes) - (route-names [_] - names) - (match-by-path [_ path] - (impl/fast-get data path)) - (match-by-name [_ name] - (if-let [match (impl/fast-get lookup name)] - (match nil))) - (match-by-name [_ name params] - (if-let [match (impl/fast-get lookup name)] - (match params)))) + [[] {}] compiled) + lookup (impl/fast-map lookup)] + (reify + Routing + (router-type [_] + :linear-router) + (routes [_] + routes) + (options [_] + opts) + (route-names [_] + names) + (match-by-path [_ path] + (reduce + (fn [acc ^Route route] + (if-let [params ((:matcher route) path)] + (reduced (->Match (:path route) (:meta route) (:handler route) params path)))) + nil data)) + (match-by-name [_ name] + (if-let [match (impl/fast-get lookup name)] + (match nil))) + (match-by-name [_ name params] + (if-let [match (impl/fast-get lookup name)] + (match params))))))) (defn lookup-router - "Creates a [[LookupRouter]] from resolved routes and optional + "Creates a LookupRouter from resolved routes and optional expanded options. See [[router]] for available options" ([routes] (lookup-router routes {})) @@ -169,8 +159,26 @@ [(assoc data p (->Match p meta handler {} p)) (if name (assoc lookup name #(->Match p meta handler % p)) - lookup)]) [{} {}] compiled)] - (->LookupRouter routes names (impl/fast-map data) (impl/fast-map lookup))))) + lookup)]) [{} {}] compiled) + data (impl/fast-map data) + lookup (impl/fast-map lookup)] + (reify Routing + (router-type [_] + :lookup-router) + (routes [_] + routes) + (options [_] + opts) + (route-names [_] + names) + (match-by-path [_ path] + (impl/fast-get data path)) + (match-by-name [_ name] + (if-let [match (impl/fast-get lookup name)] + (match nil))) + (match-by-name [_ name params] + (if-let [match (impl/fast-get lookup name)] + (match params))))))) (defn router "Create a [[Router]] from raw route data and optionally an options map. diff --git a/test/cljc/reitit/core_test.cljc b/test/cljc/reitit/core_test.cljc index f89ca40d..90d7d721 100644 --- a/test/cljc/reitit/core_test.cljc +++ b/test/cljc/reitit/core_test.cljc @@ -9,9 +9,10 @@ (testing "linear router" (let [router (reitit/router ["/api" ["/ipa" ["/:size" ::beer]]])] - (is (instance? LinearRouter router)) + (is (= :linear-router (reitit/router-type router))) (is (= [["/api/ipa/:size" {:name ::beer}]] (reitit/routes router))) + (is (= true (map? (reitit/options router)))) (is (= (reitit/map->Match {:template "/api/ipa/:size" :meta {:name ::beer} @@ -41,9 +42,10 @@ (testing "lookup router" (let [router (reitit/router ["/api" ["/ipa" ["/large" ::beer]]])] - (is (instance? LookupRouter router)) + (is (= :lookup-router (reitit/router-type router))) (is (= [["/api/ipa/large" {:name ::beer}]] (reitit/routes router))) + (is (= true (map? (reitit/options router)))) (is (= (reitit/map->Match {:template "/api/ipa/large" :meta {:name ::beer}