Adds storing note's properties to notes

Adds storing note's description, author_id and author_ip to notes table too when creating new note.
This commit is contained in:
Nenad Vujicic 2025-01-17 17:29:00 +01:00
parent d642adc6e4
commit fadbee0af0

View file

@ -81,19 +81,22 @@ module Api
# Extract the arguments # Extract the arguments
lon = OSM.parse_float(params[:lon], OSM::APIBadUserInput, "lon was not a number") lon = OSM.parse_float(params[:lon], OSM::APIBadUserInput, "lon was not a number")
lat = OSM.parse_float(params[:lat], OSM::APIBadUserInput, "lat was not a number") lat = OSM.parse_float(params[:lat], OSM::APIBadUserInput, "lat was not a number")
comment = params[:text] description = params[:text]
# Get note's author info (for logged in users - user_id, for logged out users - IP address)
note_author_info = author_info
# Include in a transaction to ensure that there is always a note_comment for every note # Include in a transaction to ensure that there is always a note_comment for every note
Note.transaction do Note.transaction do
# Create the note # Create the note
@note = Note.create(:lat => lat, :lon => lon) @note = Note.create(:lat => lat, :lon => lon, :description => description, :user_id => note_author_info[:user_id], :user_ip => note_author_info[:user_ip])
raise OSM::APIBadUserInput, "The note is outside this world" unless @note.in_world? raise OSM::APIBadUserInput, "The note is outside this world" unless @note.in_world?
# Save the note # Save the note
@note.save! @note.save!
# Add a comment to the note # Add opening comment (description) to the note
add_comment(@note, comment, "opened") add_comment(@note, description, "opened")
end end
# Return a copy of the new note # Return a copy of the new note
@ -379,17 +382,28 @@ module Api
end end
end end
##
# Get author's information (for logged in users - user_id, for logged out users - IP address)
def author_info
if scope_enabled?(:write_notes)
{ :user_id => current_user.id }
else
{ :user_ip => request.remote_ip }
end
end
## ##
# Add a comment to a note # Add a comment to a note
def add_comment(note, text, event, notify: true) def add_comment(note, text, event, notify: true)
attributes = { :visible => true, :event => event, :body => text } attributes = { :visible => true, :event => event, :body => text }
author = current_user if scope_enabled?(:write_notes) # Get note comment's author info (for logged in users - user_id, for logged out users - IP address)
note_comment_author_info = author_info
if author if note_comment_author_info[:user_ip].nil?
attributes[:author_id] = author.id attributes[:author_id] = note_comment_author_info[:user_id]
else else
attributes[:author_ip] = request.remote_ip attributes[:author_ip] = note_comment_author_info[:user_ip]
end end
comment = note.comments.create!(attributes) comment = note.comments.create!(attributes)