dump users in db to csv, and restore them from same
this is (hopefully) a write once run once utility, but we're moving from sqlite to postgres, and I don't want to lose the users that have already signed up for the site.
This commit is contained in:
parent
4ca6570d5e
commit
8fd0b06b69
|
|
@ -19,6 +19,7 @@
|
||||||
:lass
|
:lass
|
||||||
:parenscript
|
:parenscript
|
||||||
:cl-json
|
:cl-json
|
||||||
|
:cl-csv
|
||||||
:alexandria
|
:alexandria
|
||||||
:local-time
|
:local-time
|
||||||
:taglib
|
:taglib
|
||||||
|
|
|
||||||
|
|
@ -311,3 +311,49 @@
|
||||||
(error (e)
|
(error (e)
|
||||||
(format t "Error initializing user system: ~a~%" e)))))
|
(format t "Error initializing user system: ~a~%" e)))))
|
||||||
:name "user-init"))))
|
:name "user-init"))))
|
||||||
|
|
||||||
|
(defun dump-users (users)
|
||||||
|
(with-open-file (s "userdump.csv" :direction :output :if-exists :supersede)
|
||||||
|
(loop for user in users
|
||||||
|
do
|
||||||
|
(let* ((_id (dm:field user "_id"))
|
||||||
|
(username (dm:field user "username"))
|
||||||
|
(email (dm:field user "email"))
|
||||||
|
(password-hash (dm:field user "password-hash"))
|
||||||
|
(role (dm:field user "role"))
|
||||||
|
(active (dm:field user "active"))
|
||||||
|
(created-date (dm:field user "created-date"))
|
||||||
|
(last-login (dm:field user "last-login")))
|
||||||
|
(format s "~&~{~A~^,~}~%" (list _id username email password-hash role active created-date last-login))
|
||||||
|
(finish-output s)))))
|
||||||
|
|
||||||
|
(defun get-users-from-csv (filename)
|
||||||
|
(with-open-file (s filename :direction :input)
|
||||||
|
(let ((csv-data (cl-csv:read-csv s)))
|
||||||
|
csv-data)))
|
||||||
|
|
||||||
|
(defun ensure-users (filename)
|
||||||
|
(let* ((users (get-users-from-csv filename)))
|
||||||
|
(princ users)
|
||||||
|
(loop
|
||||||
|
for (_id username email password-hash role active created-date last-login) in users
|
||||||
|
do
|
||||||
|
(progn
|
||||||
|
(format t "~&_id: ~A, username: ~A, email: ~A password-hash: ~A role: ~A active: ~A created-date: ~A last-login: ~A" _id username email password-hash role active created-date last-login)
|
||||||
|
(let ((user (dm:hull "USERS")))
|
||||||
|
(setf (dm:field user "username") username)
|
||||||
|
(setf (dm:field user "email") email)
|
||||||
|
(setf (dm:field user "password-hash") password-hash)
|
||||||
|
(setf (dm:field user "role") role)
|
||||||
|
(setf (dm:field user "active") active)
|
||||||
|
(setf (dm:field user "created-date") created-date)
|
||||||
|
(setf (dm:field user "last-login") nil)
|
||||||
|
|
||||||
|
(handler-case
|
||||||
|
(db:with-transaction ()
|
||||||
|
(format t "Inserting user: ~A~%" user)
|
||||||
|
(let ((result (dm:insert user)))
|
||||||
|
(format t "Insert result: ~A~%" result)
|
||||||
|
(format t "User created: ~A (~A)~%" username role)))
|
||||||
|
(error (e)
|
||||||
|
(format t "Error creating user ~A: ~A~%" username e))))))))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue