@@ -21,8 +21,8 @@ defmodule Astarte.Pairing.Queries do
2121 This module is responsible for the interaction with the database.
2222 """
2323
24+ alias CQEx.Client
2425 alias CQEx.Query
25- alias CQEx.Result
2626 alias Astarte.Core.CQLUtils
2727 alias Astarte.Pairing.Config
2828 alias Astarte.Pairing.Astarte.Realm
@@ -83,51 +83,42 @@ defmodule Astarte.Pairing.Queries do
8383 end
8484 end
8585
86- def register_device ( client , device_id , extended_id , credentials_secret , opts \\ [ ] ) do
87- statement = """
88- SELECT first_credentials_request, first_registration
89- FROM devices
90- WHERE device_id=:device_id
91- """
92-
93- device_exists_query =
94- Query . new ( )
95- |> Query . statement ( statement )
96- |> Query . put ( :device_id , device_id )
97- |> Query . consistency ( :quorum )
86+ def register_device ( realm_name , device_id , extended_id , credentials_secret , opts \\ [ ] ) do
87+ case fetch_device ( realm_name , device_id ) do
88+ { :error , :device_not_found } ->
89+ Logger . info ( "register request for new device: #{ inspect ( extended_id ) } " )
9890
99- with { :ok , res } <- Query . call ( client , device_exists_query ) do
100- case Result . head ( res ) do
101- :empty_dataset ->
102- registration_timestamp =
103- DateTime . utc_now ( )
104- |> DateTime . to_unix ( :millisecond )
91+ registration_timestamp = DateTime . utc_now ( )
10592
106- Logger . info ( "register request for new device: #{ inspect ( extended_id ) } " )
107- do_register_device ( client , device_id , credentials_secret , registration_timestamp , opts )
93+ do_register_device (
94+ realm_name ,
95+ device_id ,
96+ credentials_secret ,
97+ registration_timestamp ,
98+ opts
99+ )
108100
109- [ first_credentials_request: nil , first_registration: registration_timestamp ] ->
101+ { :ok , device } ->
102+ if is_nil ( device . first_credentials_request ) do
110103 Logger . info ( "register request for existing unconfirmed device: #{ inspect ( extended_id ) } " )
111104
112105 do_register_unconfirmed_device (
113- client ,
106+ realm_name ,
114107 device_id ,
115108 credentials_secret ,
116- registration_timestamp ,
109+ device . first_registration ,
117110 opts
118111 )
119-
120- [ first_credentials_request: _timestamp , first_registration: _registration_timestamp ] ->
112+ else
121113 Logger . warning (
122114 "register request for existing confirmed device: #{ inspect ( extended_id ) } "
123115 )
124116
125117 { :error , :already_registered }
126- end
127- else
128- error ->
129- Logger . warning ( "DB error: #{ inspect ( error ) } " )
130- { :error , :database_error }
118+ end
119+
120+ { :error , reason } ->
121+ { :error , reason }
131122 end
132123 end
133124
@@ -302,7 +293,13 @@ defmodule Astarte.Pairing.Queries do
302293 end
303294 end
304295
305- defp do_register_device ( client , device_id , credentials_secret , registration_timestamp , opts ) do
296+ defp do_register_device (
297+ realm_name ,
298+ device_id ,
299+ credentials_secret ,
300+ % DateTime { } = registration_timestamp ,
301+ opts
302+ ) do
306303 statement = """
307304 INSERT INTO devices
308305 (device_id, first_registration, credentials_secret, inhibit_credentials_request,
@@ -323,7 +320,7 @@ defmodule Astarte.Pairing.Queries do
323320 Query . new ( )
324321 |> Query . statement ( statement )
325322 |> Query . put ( :device_id , device_id )
326- |> Query . put ( :first_registration , registration_timestamp )
323+ |> Query . put ( :first_registration , registration_timestamp |> DateTime . to_unix ( :millisecond ) )
327324 |> Query . put ( :credentials_secret , credentials_secret )
328325 |> Query . put ( :inhibit_credentials_request , false )
329326 |> Query . put ( :protocol_revision , 0 )
@@ -333,21 +330,32 @@ defmodule Astarte.Pairing.Queries do
333330 |> Query . put ( :introspection_minor , introspection_minor )
334331 |> Query . consistency ( :quorum )
335332
336- case Query . call ( client , query ) do
337- { :ok , _res } ->
338- :ok
333+ keyspace_name =
334+ CQLUtils . realm_name_to_keyspace_name ( realm_name , Config . astarte_instance_id! ( ) )
339335
336+ cqex_options =
337+ Config . cqex_options! ( )
338+ |> Keyword . put ( :keyspace , keyspace_name )
339+
340+ with { :ok , client } <-
341+ Client . new (
342+ Config . cassandra_node! ( ) ,
343+ cqex_options
344+ ) ,
345+ { :ok , _res } <- Query . call ( client , query ) do
346+ :ok
347+ else
340348 error ->
341349 Logger . warning ( "DB error: #{ inspect ( error ) } " )
342350 { :error , :database_error }
343351 end
344352 end
345353
346354 defp do_register_unconfirmed_device (
347- client ,
355+ realm_name ,
348356 device_id ,
349357 credentials_secret ,
350- registration_timestamp ,
358+ % DateTime { } = registration_timestamp ,
351359 opts
352360 ) do
353361 statement = """
@@ -372,18 +380,29 @@ defmodule Astarte.Pairing.Queries do
372380 Query . new ( )
373381 |> Query . statement ( statement )
374382 |> Query . put ( :device_id , device_id )
375- |> Query . put ( :first_registration , registration_timestamp )
383+ |> Query . put ( :first_registration , registration_timestamp |> DateTime . to_unix ( :millisecond ) )
376384 |> Query . put ( :credentials_secret , credentials_secret )
377385 |> Query . put ( :inhibit_credentials_request , false )
378386 |> Query . put ( :protocol_revision , 0 )
379387 |> Query . put ( :introspection , introspection )
380388 |> Query . put ( :introspection_minor , introspection_minor )
381389 |> Query . consistency ( :quorum )
382390
383- case Query . call ( client , query ) do
384- { :ok , _res } ->
385- :ok
391+ keyspace_name =
392+ CQLUtils . realm_name_to_keyspace_name ( realm_name , Config . astarte_instance_id! ( ) )
386393
394+ cqex_options =
395+ Config . cqex_options! ( )
396+ |> Keyword . put ( :keyspace , keyspace_name )
397+
398+ with { :ok , client } <-
399+ Client . new (
400+ Config . cassandra_node! ( ) ,
401+ cqex_options
402+ ) ,
403+ { :ok , _res } <- Query . call ( client , query ) do
404+ :ok
405+ else
387406 error ->
388407 Logger . warning ( "DB error: #{ inspect ( error ) } " )
389408 { :error , :database_error }
0 commit comments