@@ -60,9 +60,14 @@ def db_conn():
6060 user_permalink_table = config .get (
6161 'user_permalink_table' , qwc_config_schema + '.user_permalinks' )
6262 user_bookmark_table = config .get ('user_bookmark_table' , qwc_config_schema + '.user_bookmarks' )
63+ store_bookmarks_by_userid = config .get ('store_bookmarks_by_userid' , True )
64+ if store_bookmarks_by_userid :
65+ users_table = f'"{ qwc_config_schema } "."users"'
66+ else :
67+ users_table = None
6368
6469 db = db_engine .db_engine (db_url )
65- return (db , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table )
70+ return (db , users_table , permalinks_table , user_permalink_table , user_bookmark_table )
6671
6772
6873@api .route ('/createpermalink' )
@@ -99,7 +104,7 @@ def post(self):
99104 }
100105
101106 # Insert into databse
102- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
107+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
103108 datastr = json .dumps (data )
104109 hexdigest = hashlib .sha224 ((datastr + str (time .time ())).encode ('utf-8' )).hexdigest ()[0 :9 ]
105110 date = datetime .date .today ().strftime (r"%Y-%m-%d" )
@@ -153,7 +158,7 @@ def get(self):
153158 args = resolvepermalink_parser .parse_args ()
154159 key = args ['key' ]
155160 data = {}
156- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
161+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
157162 sql = sql_text ("""
158163 SELECT data
159164 FROM {table}
@@ -176,7 +181,7 @@ def get(self):
176181 if not username :
177182 return jsonify ({})
178183
179- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
184+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
180185 sql = sql_text ("""
181186 SELECT data
182187 FROM {table}
@@ -218,7 +223,7 @@ def post(self):
218223 }
219224
220225 # Insert into databse
221- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
226+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
222227 datastr = json .dumps (data )
223228 date = datetime .date .today ().strftime (r"%Y-%m-%d" )
224229 sql = sql_text ("""
@@ -248,16 +253,23 @@ def get(self):
248253 config = config_handler .tenant_config (tenant )
249254 sort_order = config .get ('bookmarks_sort_order' , 'date, description' )
250255
251- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
252- sql = sql_text ("""
253- WITH "user" AS (
254- SELECT id FROM "{schema}"."users" WHERE name=:username
255- )
256- SELECT data, key, description, to_char(date, 'YYYY-MM-DD') as date
257- FROM {table}
258- WHERE user_id = (SELECT id FROM "user")
259- ORDER BY {sort_order}
260- """ .format (schema = qwc_config_schema , table = user_bookmark_table , sort_order = sort_order ))
256+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
257+ if users_table :
258+ sql = sql_text ("""
259+ WITH "user" AS (
260+ SELECT id FROM {users_table} WHERE name=:username
261+ )
262+ SELECT data, key, description, to_char(date, 'YYYY-MM-DD') as date
263+ FROM {table}
264+ WHERE user_id = (SELECT id FROM "user")
265+ ORDER BY {sort_order}
266+ """ .format (users_table = users_table , table = user_bookmark_table , sort_order = sort_order ))
267+ else :
268+ sql = sql_text ("""
269+ SELECT data, key, description, to_char(date, 'YYYY-MM-DD') as date
270+ FROM {table}
271+ WHERE username = :user ORDER BY {sort_order}
272+ """ .format (table = user_bookmark_table , sort_order = sort_order ))
261273 try :
262274 data = []
263275 with db_engine .connect () as connection :
@@ -303,19 +315,29 @@ def post(self):
303315 }
304316
305317 # Insert into database
306- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
318+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
307319 datastr = json .dumps (data )
308320 hexdigest = hashlib .sha224 ((datastr + str (time .time ())).encode ('utf-8' )).hexdigest ()[0 :9 ]
309321 date = datetime .date .today ().strftime (r"%Y-%m-%d" )
310322
311323 description = args ['description' ]
312- sql = sql_text ("""
313- WITH "user" AS (
314- SELECT id FROM "{schema}"."users" WHERE name=:username
315- )
316- INSERT INTO {table} (user_id, username, data, key, date, description)
317- VALUES ((SELECT id FROM "user"), :username, :data, :key, :date, :description)
318- """ .format (schema = qwc_config_schema , table = user_bookmark_table ))
324+ if users_table :
325+ sql = sql_text ("""
326+ WITH "user" AS (
327+ SELECT id FROM {users_table} WHERE name=:username
328+ )
329+ INSERT INTO {table} (user_id, username, data, key, date, description)
330+ VALUES ((SELECT id FROM "user"), :username, :data, :key, :date, :description)
331+ """ .format (users_table = users_table , table = user_bookmark_table ))
332+ else :
333+ sql = sql_text ("""
334+ INSERT INTO {table} (username, data, key, date, description)
335+ VALUES (:user, :data, :key, :date, :description)
336+ ON CONFLICT (username,key) WHERE username = :user
337+ DO
338+ UPDATE
339+ SET data = :data, date = :date, description = :description
340+ """ .format (table = user_bookmark_table ))
319341
320342 attempts = 0
321343 while attempts < 100 :
@@ -339,15 +361,22 @@ def get(self, key):
339361 if not username :
340362 return jsonify ({"success" : False })
341363
342- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
343- sql = sql_text ("""
344- WITH "user" AS (
345- SELECT id FROM "{schema}"."users" WHERE name=:username
346- )
347- SELECT data
348- FROM {table}
349- WHERE user_id = (SELECT id FROM "user") AND key = :key
350- """ .format (schema = qwc_config_schema , table = user_bookmark_table ))
364+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
365+ if users_table :
366+ sql = sql_text ("""
367+ WITH "user" AS (
368+ SELECT id FROM {users_table} WHERE name=:username
369+ )
370+ SELECT data
371+ FROM {table}
372+ WHERE user_id = (SELECT id FROM "user") AND key = :key
373+ """ .format (users_table = users_table , table = user_bookmark_table ))
374+ else :
375+ sql = sql_text ("""
376+ SELECT data
377+ FROM {table}
378+ WHERE username = :user and key = :key
379+ """ .format (table = user_bookmark_table ))
351380 try :
352381 with db_engine .connect () as connection :
353382 data = json .loads (connection .execute (sql , {"username" : username , "key" : key }).mappings ().first ()["data" ])
@@ -364,14 +393,20 @@ def delete(self, key):
364393 return jsonify ({"success" : False })
365394
366395 # Delete into databse
367- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
368- sql = sql_text ("""
369- WITH "user" AS (
370- SELECT id FROM "{schema}"."users" WHERE name=:username
371- )
372- DELETE FROM {table}
373- WHERE key = :key and user_id = (SELECT id FROM "user")
374- """ .format (schema = qwc_config_schema , table = user_bookmark_table ))
396+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
397+ if users_table :
398+ sql = sql_text ("""
399+ WITH "user" AS (
400+ SELECT id FROM {users_table} WHERE name=:username
401+ )
402+ DELETE FROM {table}
403+ WHERE key = :key and user_id = (SELECT id FROM "user")
404+ """ .format (users_table = users_table , table = user_bookmark_table ))
405+ else :
406+ sql = sql_text ("""
407+ DELETE FROM {table}
408+ WHERE key = :key and username = :username
409+ """ .format (table = user_bookmark_table ))
375410
376411 with db_engine .begin () as connection :
377412 connection .execute (sql , {"key" : key , "username" : username })
@@ -408,19 +443,26 @@ def put(self, key):
408443 }
409444
410445 # Update into databse
411- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
446+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
412447 datastr = json .dumps (data )
413448 date = datetime .date .today ().strftime (r"%Y-%m-%d" )
414449
415450 description = args ['description' ]
416- sql = sql_text ("""
417- WITH "user" AS (
418- SELECT id FROM "{schema}"."users" WHERE name=:username
419- )
420- UPDATE {table}
421- SET username = :username, data = :data, date = :date, description = :description
422- WHERE user_id = (SELECT id FROM "user") and key = :key
423- """ .format (schema = qwc_config_schema , table = user_bookmark_table ))
451+ if users_table :
452+ sql = sql_text ("""
453+ WITH "user" AS (
454+ SELECT id FROM {users_table} WHERE name=:username
455+ )
456+ UPDATE {table}
457+ SET username = :username, data = :data, date = :date, description = :description
458+ WHERE user_id = (SELECT id FROM "user") and key = :key
459+ """ .format (users_table = users_table , table = user_bookmark_table ))
460+ else :
461+ sql = sql_text ("""
462+ UPDATE {table}
463+ SET data = :data, date = :date, description = :description
464+ WHERE username = :user and key = :key
465+ """ .format (table = user_bookmark_table ))
424466
425467 with db_engine .begin () as connection :
426468 connection .execute (sql , {"username" : username , "data" : datastr , "key" : key , "date" : date , "description" : description })
@@ -437,7 +479,7 @@ def ready():
437479@app .route ("/healthz" , methods = ['GET' ])
438480def healthz ():
439481 try :
440- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
482+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
441483 with db_engine .connect () as connection :
442484 connection .execute (sql_text ("SELECT 1" ))
443485 except Exception as e :
0 commit comments