Add nitrate api endpoints to get an user profile

This commit is contained in:
Pablo Alba 2026-04-09 12:07:52 +02:00 committed by Pablo Alba
parent fe2023dde5
commit d65f3b5396

View File

@ -9,8 +9,9 @@
organization management and token validation endpoints." organization management and token validation endpoints."
(:require (:require
[app.common.data :as d] [app.common.data :as d]
[app.common.exceptions :as ex]
[app.common.schema :as sm] [app.common.schema :as sm]
[app.common.types.profile :refer [schema:basic-profile]] [app.common.types.profile :refer [schema:profile, schema:basic-profile]]
[app.common.types.team :refer [schema:team]] [app.common.types.team :refer [schema:team]]
[app.common.uuid :as uuid] [app.common.uuid :as uuid]
[app.config :as cf] [app.config :as cf]
@ -23,6 +24,13 @@
[app.rpc.doc :as doc] [app.rpc.doc :as doc]
[app.util.services :as sv])) [app.util.services :as sv]))
(defn- profile-to-map [profile]
{:id (:id profile)
:name (:fullname profile)
:email (:email profile)
:photo-url (files/resolve-public-uri (get profile :photo-id))})
;; ---- API: authenticate ;; ---- API: authenticate
(def ^:private schema:nitrate-profile (def ^:private schema:nitrate-profile
@ -43,12 +51,9 @@
(let [profile (profile/get-profile cfg profile-id) (let [profile (profile/get-profile cfg profile-id)
nitrate-subscription (:subscription profile) nitrate-subscription (:subscription profile)
can-use-nitrate-trial (nil? nitrate-subscription)] can-use-nitrate-trial (nil? nitrate-subscription)]
{:id (get profile :id) (-> (profile-to-map profile)
:name (get profile :fullname) (assoc :can-use-nitrate-trial can-use-nitrate-trial
:email (get profile :email) :theme (:theme profile)))))
:photo-url (files/resolve-public-uri (get profile :photo-id))
:theme (get profile :theme)
:can-use-trial can-use-nitrate-trial}))
;; ---- API: get-teams ;; ---- API: get-teams
@ -255,3 +260,49 @@ RETURNING id, name;")
;; Notify users ;; Notify users
(doseq [team updated-teams] (doseq [team updated-teams]
(notify-team-change cfg (:id team) (:name team) nil org-name "dashboard.org-deleted")))))))) (notify-team-change cfg (:id team) (:name team) nil org-name "dashboard.org-deleted"))))))))
;; ---- API: get-profile-by-email
(def ^:private sql:get-profile-by-email
"SELECT DISTINCT id, fullname, email, photo_id
FROM profile
WHERE email = ?
AND deleted_at IS NULL;")
(sv/defmethod ::get-profile-by-email
"Get profile by email"
{::doc/added "2.15"
::sm/params [:map [:email ::sm/email]]
::sm/result schema:profile}
[cfg {:keys [email]}]
(let [profile (db/exec-one! cfg [sql:get-profile-by-email email])]
(when-not profile
(ex/raise :type :not-found
:code :profile-not-found
:hint "profile does not exist"
:email email))
(profile-to-map profile)))
;; ---- API: get-profile-by-id
(def ^:private sql:get-profile-by-id
"SELECT DISTINCT id, fullname, email, photo_id
FROM profile
WHERE id = ?
AND deleted_at IS NULL;")
(sv/defmethod ::get-profile-by-id
"Get profile by email"
{::doc/added "2.15"
::sm/params [:map [:id ::sm/uuid]]
::sm/result schema:profile}
[cfg {:keys [id]}]
(let [profile (db/exec-one! cfg [sql:get-profile-by-id id])]
(when-not profile
(ex/raise :type :not-found
:code :profile-not-found
:hint "profile does not exist"
:id id))
(profile-to-map profile)))