]> git.openstreetmap.org Git - rails.git/commitdiff
API User details JSON format
authormmd-osm <mmd.osm@gmail.com>
Sun, 6 Sep 2020 20:11:23 +0000 (22:11 +0200)
committermmd-osm <mmd.osm@gmail.com>
Sun, 6 Sep 2020 20:11:23 +0000 (22:11 +0200)
app/controllers/api/users_controller.rb
app/views/api/users/_user.json.jbuilder [new file with mode: 0644]
app/views/api/users/_user.xml.builder [moved from app/views/api/users/_user.builder with 100% similarity]
app/views/api/users/index.json.jbuilder [new file with mode: 0644]
app/views/api/users/index.xml.builder [moved from app/views/api/users/index.builder with 100% similarity]
app/views/api/users/show.json.jbuilder [new file with mode: 0644]
app/views/api/users/show.xml.builder [moved from app/views/api/users/show.builder with 100% similarity]

index d97e8774ecd7a5641f8cc94e301c9fef0ad3386d..b4a2efc7c3043fd06d9aee6b7deaaa76dab6f59a 100644 (file)
@@ -9,9 +9,15 @@ module Api
     around_action :api_call_handle_error
     before_action :lookup_user_by_id, :only => [:show]
 
+    before_action :set_request_formats, :except => [:gpx_files]
+
     def show
       if @user.visible?
-        render :content_type => "text/xml"
+        # Render the result
+        respond_to do |format|
+          format.xml
+          format.json
+        end
       else
         head :gone
       end
@@ -19,7 +25,11 @@ module Api
 
     def details
       @user = current_user
-      render :action => :show, :content_type => "text/xml"
+      # Render the result
+      respond_to do |format|
+        format.xml { render :show }
+        format.json { render :show }
+      end
     end
 
     def index
@@ -31,7 +41,11 @@ module Api
 
       @users = User.visible.find(ids)
 
-      render :content_type => "text/xml"
+      # Render the result
+      respond_to do |format|
+        format.xml
+        format.json
+      end
     end
 
     def gpx_files
diff --git a/app/views/api/users/_user.json.jbuilder b/app/views/api/users/_user.json.jbuilder
new file mode 100644 (file)
index 0000000..9629e8f
--- /dev/null
@@ -0,0 +1,73 @@
+json.user do
+  json.id user.id
+  json.display_name user.display_name
+  json.account_created user.creation_time.xmlschema
+  json.description user.description if user.description
+
+  if current_user && current_user == user
+    json.contributor_terms do
+      json.agreed user.terms_agreed.present?
+      json.pd user.consider_pd
+    end
+  else
+    json.contributor_terms do
+      json.agreed user.terms_agreed.present?
+    end
+  end
+
+  json.img do
+    json.href user_image_url(user) if user.avatar.attached? || user.image_use_gravatar
+  end
+
+  json.roles do
+    json.array! user.roles.map(&:role)
+  end
+
+  json.changesets do
+    json.count user.changesets.size
+  end
+
+  json.traces do
+    json.count user.traces.size
+  end
+
+  json.blocks do
+    json.received do
+      json.count user.blocks.size
+      json.active user.blocks.active.size
+    end
+
+    if user.moderator?
+      json.issued do
+        json.count user.blocks_created.size
+        json.active user.blocks_created.active.size
+      end
+    end
+  end
+
+  if current_user && current_user == user
+    if user.home_lat && user.home_lon
+      json.home do
+        json.lat user.home_lat
+        json.lon user.home_lon
+        json.zoom user.home_zoom
+      end
+    end
+
+    if user.languages
+      json.languages do
+        json.array! user.languages.split(",")
+      end
+    end
+
+    json.messages do
+      json.received do
+        json.count user.messages.size
+        json.unread user.new_messages.size
+      end
+      json.sent do
+        json.count user.sent_messages.size
+      end
+    end
+  end
+end
diff --git a/app/views/api/users/index.json.jbuilder b/app/views/api/users/index.json.jbuilder
new file mode 100644 (file)
index 0000000..efc905c
--- /dev/null
@@ -0,0 +1,3 @@
+json.users(@users) do |user|
+  json.partial! user
+end
diff --git a/app/views/api/users/show.json.jbuilder b/app/views/api/users/show.json.jbuilder
new file mode 100644 (file)
index 0000000..8ef9275
--- /dev/null
@@ -0,0 +1,3 @@
+json.users([@user]) do |user|
+  json.partial! user
+end