diff --git a/app/jobs/owntracks/point_creating_job.rb b/app/jobs/owntracks/point_creating_job.rb index d4df3971..ad8baacf 100644 --- a/app/jobs/owntracks/point_creating_job.rb +++ b/app/jobs/owntracks/point_creating_job.rb @@ -7,6 +7,17 @@ class Owntracks::PointCreatingJob < ApplicationJob def perform(point_params, user_id = nil) parsed_params = OwnTracks::Params.new(point_params).call + return if point_exists?(parsed_params, user_id) + Point.create!(parsed_params.merge(user_id:)) end + + def point_exists?(params, user_id) + Point.exists?( + latitude: params[:latitude], + longitude: params[:longitude], + timestamp: params[:timestamp], + user_id: + ) + end end diff --git a/spec/jobs/owntracks/point_creating_job_spec.rb b/spec/jobs/owntracks/point_creating_job_spec.rb index 7c15b5d3..a9cb2ad3 100644 --- a/spec/jobs/owntracks/point_creating_job_spec.rb +++ b/spec/jobs/owntracks/point_creating_job_spec.rb @@ -18,5 +18,13 @@ RSpec.describe Owntracks::PointCreatingJob, type: :job do expect(Point.last.user_id).to eq(user.id) end + + context 'when point already exists' do + before { create(:point, latitude: 1.0, longitude: 1.0, timestamp: Time.now.to_i, user:) } + + it 'does not create a point' do + expect { perform }.not_to(change { Point.count }) + end + end end end diff --git a/swagger/v1/swagger.yaml b/swagger/v1/swagger.yaml index dba948ae..786787ba 100644 --- a/swagger/v1/swagger.yaml +++ b/swagger/v1/swagger.yaml @@ -180,7 +180,7 @@ paths: lat: 52.502397 lon: 13.356718 tid: Swagger - tst: 1716638918 + tst: 1717016815 servers: - url: http://{defaultHost} variables: